@marsaude/devtools-shell 0.1.5 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"marsaude-devtools-shell.mjs","sources":["../../../projects/devtools-shell/src/lib/devtools-shell.tokens.ts","../../../projects/devtools-shell/src/lib/devtools-position.service.ts","../../../projects/devtools-shell/src/lib/devtools-toast.service.ts","../../../projects/devtools-shell/src/lib/devtools-shell.component.ts","../../../projects/devtools-shell/src/lib/core/devtools-config.ts","../../../projects/devtools-shell/src/lib/core/devtools-storage.service.ts","../../../projects/devtools-shell/src/lib/core/devtools-utils.ts","../../../projects/devtools-shell/src/lib/core/data/typeform-cases.data.ts","../../../projects/devtools-shell/src/lib/core/typeform.ts","../../../projects/devtools-shell/src/lib/core/data/exams-18.data.ts","../../../projects/devtools-shell/src/lib/core/devtools-api.service.ts","../../../projects/devtools-shell/src/lib/core/devtools-auth.service.ts","../../../projects/devtools-shell/src/lib/core/devtools-http.interceptor.ts","../../../projects/devtools-shell/src/lib/core/devtools-session.service.ts","../../../projects/devtools-shell/src/lib/panels/ui.ts","../../../projects/devtools-shell/src/lib/panels/admin-login-panel.component.ts","../../../projects/devtools-shell/src/lib/panels/login-panel.component.ts","../../../projects/devtools-shell/src/lib/panels/switch-panel.component.ts","../../../projects/devtools-shell/src/lib/panels/generator-panel.component.ts","../../../projects/devtools-shell/src/lib/panels/phone-panel.component.ts","../../../projects/devtools-shell/src/lib/panels/exams-panel.component.ts","../../../projects/devtools-shell/src/lib/panels/data-panel.component.ts","../../../projects/devtools-shell/src/lib/panels/copy-panel.component.ts","../../../projects/devtools-shell/src/lib/provide-devtools.ts","../../../projects/devtools-shell/src/public-api.ts","../../../projects/devtools-shell/src/marsaude-devtools-shell.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { DevtoolsAction, DevtoolsShellConfig } from './devtools-shell.types';\n\n/**\n * Multi-provider token. Each `{ provide: DEVTOOLS_ACTION, useValue, multi: true }`\n * adds one pluggable panel to the shell. This is the extension point: the shell\n * collects every registered action and renders it — it has no built-in actions.\n */\nexport const DEVTOOLS_ACTION = new InjectionToken<DevtoolsAction>(\n 'DEVTOOLS_ACTION',\n);\n\n/** Single-value config token. Falls back to an empty config. */\nexport const DEVTOOLS_SHELL_CONFIG = new InjectionToken<DevtoolsShellConfig>(\n 'DEVTOOLS_SHELL_CONFIG',\n { providedIn: 'root', factory: () => ({}) },\n);\n","import { inject, Injectable, signal } from '@angular/core';\nimport { DEVTOOLS_SHELL_CONFIG } from './devtools-shell.tokens';\n\nexport interface Point {\n x: number;\n y: number;\n}\n\n/** FAB edge length in px — matches `.dts-fab` and the prototype (S = 58). */\nexport const FAB_SIZE = 58;\n\n/**\n * Owns the FAB position + side and persists them. The math is ported verbatim\n * from the `DevTools FAB` prototype (default corner, clamp bounds, edge snap).\n * Only position/side are stored — no domain/session data.\n */\n@Injectable({ providedIn: 'root' })\nexport class DevtoolsPositionService {\n private readonly config = inject(DEVTOOLS_SHELL_CONFIG);\n private readonly key = this.config.storageKey ?? 'marsaude.devtools-shell.pos';\n\n /** FAB top-left in viewport coords. Null until first measured/loaded. */\n readonly position = signal<Point>(this.load());\n readonly side = signal<'left' | 'right'>(this.loadSide());\n\n /** Live update during drag (not persisted). */\n move(p: Point): void {\n this.position.set(p);\n }\n\n /** Commit + persist the final position and side. */\n commit(p: Point, side: 'left' | 'right'): void {\n this.position.set(p);\n this.side.set(side);\n this.persist();\n }\n\n /** Re-clamp against the current viewport. Call on resize. */\n reclamp(): void {\n this.position.set(this.clamp(this.position()));\n }\n\n /** Prototype clamp: x ∈ [6, W-S-6], y ∈ [70, H-S-6]. */\n clamp(p: Point): Point {\n if (typeof window === 'undefined') return p;\n const S = FAB_SIZE;\n const W = window.innerWidth;\n const H = window.innerHeight;\n return {\n x: Math.max(6, Math.min(W - S - 6, p.x)),\n y: Math.max(70, Math.min(H - S - 6, p.y)),\n };\n }\n\n private persist(): void {\n try {\n localStorage?.setItem(\n this.key,\n JSON.stringify({ ...this.position(), side: this.side() }),\n );\n } catch {\n /* storage unavailable — non-fatal */\n }\n }\n\n /** Prototype default corner: { x: W-74, y: H-150 }. */\n private load(): Point {\n const fallback = this.defaultPos();\n if (typeof localStorage === 'undefined') return fallback;\n try {\n const raw = localStorage.getItem(this.key);\n if (!raw) return fallback;\n const p = JSON.parse(raw) as Partial<Point>;\n if (typeof p?.x === 'number' && typeof p?.y === 'number') {\n return this.clamp({ x: p.x, y: p.y });\n }\n } catch {\n /* corrupt — fall through */\n }\n return fallback;\n }\n\n private loadSide(): 'left' | 'right' {\n if (typeof localStorage === 'undefined') return 'right';\n try {\n const raw = localStorage.getItem(this.key);\n const side = raw ? (JSON.parse(raw) as { side?: string }).side : null;\n return side === 'left' ? 'left' : 'right';\n } catch {\n return 'right';\n }\n }\n\n private defaultPos(): Point {\n if (typeof window === 'undefined') return { x: 10, y: 120 };\n return { x: window.innerWidth - 74, y: window.innerHeight - 150 };\n }\n}\n","import { Injectable, signal } from '@angular/core';\n\n/**\n * Tiny toast surface owned by the shell. Panels (or any consumer) can inject it\n * to flash a short message inside the shell's own layer — no Material/snackbar\n * dependency required.\n */\n@Injectable({ providedIn: 'root' })\nexport class DevtoolsToastService {\n /** Current message, or null when nothing is showing. */\n readonly message = signal<string | null>(null);\n\n private timer: ReturnType<typeof setTimeout> | null = null;\n\n show(message: string, durationMs = 2400): void {\n this.message.set(message);\n if (this.timer) clearTimeout(this.timer);\n this.timer = setTimeout(() => this.message.set(null), durationMs);\n }\n\n clear(): void {\n if (this.timer) clearTimeout(this.timer);\n this.message.set(null);\n }\n}\n","import { NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n HostListener,\n inject,\n OnDestroy,\n signal,\n TemplateRef,\n Type,\n} from '@angular/core';\nimport { DevtoolsPositionService, FAB_SIZE } from './devtools-position.service';\nimport {\n DEVTOOLS_ACTION,\n DEVTOOLS_SHELL_CONFIG,\n} from './devtools-shell.tokens';\nimport { DevtoolsToastService } from './devtools-toast.service';\nimport { DevtoolsAction } from './devtools-shell.types';\n\nconst PROJECTED = '__projected__';\nconst COLLAPSE_DELAY_MS = 1800;\n\ninterface DragState {\n ox: number;\n oy: number;\n sx: number;\n sy: number;\n moved: boolean;\n}\n\ninterface DialItem {\n action: DevtoolsAction;\n style: Record<string, string | number>;\n}\n\n/**\n * The invólucro: a draggable FAB that opens an agnostic container.\n *\n * Drag, clamp/snap, the radial speed-dial geometry, the collapse-to-edge grip,\n * the drawer/sheet panel and the toast are ported verbatim from the `DevTools\n * FAB` prototype (Pointer Events, the exact math and the same CSS/keyframes) —\n * kept entirely domain-free. Content arrives via {@link DEVTOOLS_ACTION}\n * (primary) or `<ng-content>` (secondary). Auto-mounted by `provideDevtools()`.\n */\n@Component({\n selector: 'devtools-shell',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgComponentOutlet, NgTemplateOutlet],\n template: `\n <!-- FAB (same button doubles as the collapsed edge grip, like the prototype) -->\n <button\n type=\"button\"\n [style]=\"fabStyle()\"\n (pointerdown)=\"onFabDown($event)\"\n (click)=\"onFabClick()\"\n [attr.aria-expanded]=\"open() || !!panelId()\"\n aria-label=\"DevTools\"\n >\n @if (isCollapsed()) {\n <span\n style=\"width:4px;height:26px;border-radius:3px;background:rgba(255,255,255,.55)\"\n ></span>\n } @else {\n <span class=\"dts-sym\" style=\"font-size:26px\">{{\n open() || panelId()\n ? 'close'\n : (config.fabIcon ?? 'developer_mode')\n }}</span>\n }\n </button>\n\n <!-- speed-dial scrim -->\n @if (open()) {\n <div\n style=\"position:fixed;inset:0;z-index:38;background:rgba(10,11,15,.32);backdrop-filter:blur(1px);animation:dts-fade .18s ease\"\n (click)=\"closeDial()\"\n ></div>\n }\n\n <!-- speed-dial items (always rendered when >1 action; animate via transform/opacity) -->\n @if (hasDial()) {\n @for (item of dialItems(); track item.action.id) {\n <button type=\"button\" [style]=\"item.style\" (click)=\"openPanel(item.action.id)\">\n @if (item.action.icon) {\n <span class=\"dts-sym\" style=\"font-size:23px;line-height:1\">{{ item.action.icon }}</span>\n }\n <span\n style=\"font-size:8.5px;font-weight:600;line-height:1.05;text-align:center;letter-spacing:.01em;white-space:nowrap\"\n >{{ item.action.label }}</span\n >\n </button>\n }\n }\n\n <!-- panel scrim + panel -->\n @if (panelId()) {\n <div\n style=\"position:fixed;inset:0;z-index:48;background:rgba(10,11,15,.5);animation:dts-fade .2s ease\"\n (click)=\"closePanel()\"\n ></div>\n <div [style]=\"panelStyle()\">\n <div\n style=\"display:flex;align-items:center;gap:12px;padding:18px 20px;border-bottom:1px solid #23252f;flex:none\"\n >\n <span class=\"dts-sym\" style=\"font-size:22px;color:#ffc454\">{{\n activeAction()?.icon ?? 'tune'\n }}</span>\n <div style=\"font-size:16px;font-weight:600;color:#f0f1f4\">\n {{ activeAction()?.label ?? config.title ?? 'DevTools' }}\n </div>\n <button\n type=\"button\"\n (click)=\"closePanel()\"\n aria-label=\"Fechar\"\n style=\"margin-left:auto;width:32px;height:32px;border-radius:8px;border:1px solid #2a2c38;background:#1b1d25;color:#9aa0ad;display:flex;align-items:center;justify-content:center;cursor:pointer\"\n >\n <span class=\"dts-sym\" style=\"font-size:19px\">close</span>\n </button>\n </div>\n <div style=\"overflow-y:auto;padding:20px;flex:1;color:#d7d9e0\">\n @if (activeAction(); as action) {\n @if (asTemplate(action.content); as tpl) {\n <ng-container [ngTemplateOutlet]=\"tpl\"></ng-container>\n } @else if (asComponent(action.content); as cmp) {\n <ng-container [ngComponentOutlet]=\"cmp\"></ng-container>\n } @else {\n <ng-content></ng-content>\n }\n } @else {\n <ng-content></ng-content>\n }\n </div>\n </div>\n }\n\n <!-- toast -->\n @if (toast.message(); as msg) {\n <div\n style=\"position:fixed;bottom:26px;left:50%;z-index:70;transform:translateX(-50%);background:#14151b;border:1px solid #2a2c38;color:#eceef3;font-size:13px;font-weight:500;padding:11px 18px;border-radius:12px;box-shadow:0 12px 30px rgba(0,0,0,.4);display:flex;align-items:center;gap:9px;animation:dts-pop .22s ease;white-space:nowrap\"\n >\n {{ msg }}\n </div>\n }\n `,\n styles: [\n `\n :host {\n --dts-accent: #ffc454;\n }\n /* Material Symbols with Material Icons fallback for the glyph spans. */\n .dts-sym {\n font-family: 'Material Symbols Outlined', 'Material Icons';\n line-height: 1;\n user-select: none;\n }\n /* Keyframes ported verbatim from the prototype (global by nature). */\n @keyframes dts-fade {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n }\n @keyframes drawerIn {\n from {\n transform: translateX(100%);\n }\n to {\n transform: translateX(0);\n }\n }\n @keyframes sheetUp {\n from {\n transform: translateY(100%);\n }\n to {\n transform: translateY(0);\n }\n }\n @keyframes dts-pop {\n from {\n transform: translate(-50%, 8px) scale(0.96);\n opacity: 0;\n }\n to {\n transform: translate(-50%, 0) scale(1);\n opacity: 1;\n }\n }\n `,\n ],\n})\nexport class DevtoolsShellComponent implements OnDestroy {\n protected readonly pos = inject(DevtoolsPositionService);\n protected readonly config = inject(DEVTOOLS_SHELL_CONFIG);\n protected readonly toast = inject(DevtoolsToastService);\n\n private readonly registered =\n (inject(DEVTOOLS_ACTION, { optional: true }) as unknown as\n | DevtoolsAction[]\n | null) ?? [];\n\n protected readonly actions = signal<DevtoolsAction[]>(\n [...this.registered].sort((a, b) => (a.order ?? 0) - (b.order ?? 0)),\n );\n\n protected readonly open = signal(false); // speed-dial open\n protected readonly panelId = signal<string | null>(null);\n protected readonly collapsed = signal(false);\n protected readonly dragging = signal(false);\n\n private readonly winW = signal(\n typeof window === 'undefined' ? 1024 : window.innerWidth,\n );\n private readonly winH = signal(\n typeof window === 'undefined' ? 768 : window.innerHeight,\n );\n\n protected readonly hasDial = computed(() => this.actions().length > 1);\n\n protected readonly activeAction = computed(\n () => this.actions().find((a) => a.id === this.panelId()) ?? null,\n );\n\n protected readonly isCollapsed = computed(\n () => this.collapsed() && !this.open() && !this.panelId() && !this.dragging(),\n );\n\n /** FAB style — collapsed grip vs expanded button (prototype values). */\n protected readonly fabStyle = computed<Record<string, string>>(() => {\n const S = FAB_SIZE;\n const W = this.winW();\n const f = this.pos.position();\n const side = this.pos.side();\n const isOpen = this.open() || !!this.panelId();\n if (this.isCollapsed()) {\n const cx = side === 'left' ? 0 : W - 15;\n return {\n position: 'fixed',\n left: cx + 'px',\n top: f.y + 10 + 'px',\n width: '15px',\n height: '60px',\n zIndex: '40',\n border: 'none',\n background: '#14151b',\n color: '#fff',\n borderRadius: side === 'left' ? '0 12px 12px 0' : '12px 0 0 12px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '0',\n boxShadow: '0 4px 16px rgba(0,0,0,.35)',\n transition: 'width .2s ease, border-radius .2s ease',\n touchAction: 'none',\n cursor: 'pointer',\n };\n }\n return {\n position: 'fixed',\n left: f.x + 'px',\n top: f.y + 'px',\n width: S + 'px',\n height: S + 'px',\n zIndex: '40',\n border: 'none',\n borderRadius: '18px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '0',\n background: isOpen ? '#23242c' : '#14151b',\n color: '#ffc454',\n boxShadow: '0 8px 24px rgba(0,0,0,.4)',\n transform: isOpen ? 'rotate(45deg)' : 'rotate(0deg)',\n transition: this.dragging()\n ? 'none'\n : 'transform .25s ease, background .2s ease, left .25s cubic-bezier(.2,.8,.2,1)',\n touchAction: 'none',\n cursor: this.dragging() ? 'grabbing' : 'grab',\n };\n });\n\n /** Radial speed-dial geometry — ported verbatim (R=268, 5°→87°). */\n protected readonly dialItems = computed<DialItem[]>(() => {\n const S = FAB_SIZE;\n const W = this.winW();\n const H = this.winH();\n const f = this.pos.position();\n const isOpen = this.open();\n const cx = f.x + S / 2;\n const cy = f.y + S / 2;\n const hx = cx < W / 2 ? 1 : -1;\n const vy = cy < H * 0.42 ? 1 : -1;\n const acts = this.actions();\n const N = acts.length;\n const R = 268;\n const a0 = (5 * Math.PI) / 180;\n const a1 = (87 * Math.PI) / 180;\n return acts.map((action, i) => {\n const t = N === 1 ? 0.5 : i / (N - 1);\n const ang = a0 + (a1 - a0) * t;\n const dx = hx * Math.cos(ang) * R;\n const dy = vy * Math.sin(ang) * R;\n return {\n action,\n style: {\n position: 'fixed',\n zIndex: '41',\n width: '58px',\n height: '50px',\n left: cx - 29 + 'px',\n top: cy - 25 + 'px',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '3px',\n borderRadius: '15px',\n border: '1px solid #2a2c38',\n background: '#1b1d25',\n color: '#eceef3',\n boxShadow: '0 8px 20px rgba(0,0,0,.32)',\n padding: '4px',\n cursor: 'pointer',\n transform: isOpen\n ? `translate(${dx}px,${dy}px) scale(1)`\n : 'translate(0,0) scale(.3)',\n opacity: isOpen ? 1 : 0,\n pointerEvents: isOpen ? 'auto' : 'none',\n transition: `transform .3s cubic-bezier(.2,1.1,.3,1) ${i * 28}ms, opacity .22s ease ${i * 28}ms`,\n },\n };\n });\n });\n\n /** Drawer (desktop) / bottom-sheet (mobile) — prototype values. */\n protected readonly panelStyle = computed<Record<string, string>>(() => {\n const isDesktop = this.winW() >= 720;\n return isDesktop\n ? {\n position: 'fixed',\n top: '0',\n right: '0',\n bottom: '0',\n width: '440px',\n zIndex: '49',\n background: '#101117',\n borderLeft: '1px solid #23252f',\n display: 'flex',\n flexDirection: 'column',\n animation: 'drawerIn .26s cubic-bezier(.2,.8,.2,1)',\n }\n : {\n position: 'fixed',\n left: '0',\n right: '0',\n bottom: '0',\n maxHeight: '86vh',\n zIndex: '49',\n background: '#101117',\n borderTop: '1px solid #23252f',\n borderRadius: '20px 20px 0 0',\n display: 'flex',\n flexDirection: 'column',\n animation: 'sheetUp .28s cubic-bezier(.2,.8,.2,1)',\n };\n });\n\n private drag: DragState | null = null;\n private dragEndAt = 0;\n private collapseTimer: ReturnType<typeof setTimeout> | null = null;\n private readonly moveHandler = (e: PointerEvent) => this.onMove(e);\n private readonly upHandler = (e: PointerEvent) => this.onUp(e);\n\n constructor() {\n this.scheduleCollapse();\n }\n\n ngOnDestroy(): void {\n this.detachDragListeners();\n this.clearCollapse();\n }\n\n @HostListener('window:resize')\n protected onResize(): void {\n this.winW.set(window.innerWidth);\n this.winH.set(window.innerHeight);\n this.pos.reclamp();\n }\n\n // ---- drag (ported from the prototype) ---------------------------------\n protected onFabDown(e: PointerEvent): void {\n const el = e.currentTarget as HTMLElement;\n const r = el.getBoundingClientRect();\n this.drag = {\n ox: e.clientX - r.left,\n oy: e.clientY - r.top,\n sx: e.clientX,\n sy: e.clientY,\n moved: false,\n };\n this.clearCollapse();\n this.dragging.set(true);\n this.collapsed.set(false);\n try {\n el.setPointerCapture(e.pointerId);\n } catch {\n /* ignore */\n }\n window.addEventListener('pointermove', this.moveHandler);\n window.addEventListener('pointerup', this.upHandler);\n }\n\n private onMove(e: PointerEvent): void {\n if (!this.drag) return;\n const x = e.clientX - this.drag.ox;\n const y = e.clientY - this.drag.oy;\n if (Math.abs(e.clientX - this.drag.sx) + Math.abs(e.clientY - this.drag.sy) > 5) {\n this.drag.moved = true;\n }\n this.pos.move(this.pos.clamp({ x, y }));\n }\n\n private onUp(_e: PointerEvent): void {\n this.detachDragListeners();\n const S = FAB_SIZE;\n const W = this.winW();\n const f = this.pos.position();\n const moved = !!this.drag?.moved;\n this.dragging.set(false);\n if (moved) {\n this.dragEndAt = Date.now();\n const side: 'left' | 'right' = f.x + S / 2 < W / 2 ? 'left' : 'right';\n const x = side === 'left' ? 10 : W - S - 10;\n this.pos.commit({ x, y: f.y }, side);\n this.scheduleCollapse();\n }\n this.drag = null;\n }\n\n private detachDragListeners(): void {\n window.removeEventListener('pointermove', this.moveHandler);\n window.removeEventListener('pointerup', this.upHandler);\n }\n\n // ---- open / panel -----------------------------------------------------\n protected onFabClick(): void {\n if (Date.now() - this.dragEndAt < 300) return; // was a drag\n const acts = this.actions();\n if (acts.length > 1) {\n this.toggleDial();\n } else {\n this.togglePanel(acts[0]?.id ?? PROJECTED);\n }\n }\n\n private toggleDial(): void {\n const next = !this.open();\n this.clearCollapse();\n this.open.set(next);\n this.collapsed.set(false);\n this.panelId.set(null);\n if (!next) this.scheduleCollapse();\n }\n\n protected openPanel(id: string): void {\n this.panelId.set(id);\n this.open.set(false);\n this.clearCollapse();\n }\n\n protected togglePanel(id: string): void {\n if (this.panelId() === id) this.closePanel();\n else this.openPanel(id);\n }\n\n protected closePanel(): void {\n this.panelId.set(null);\n this.scheduleCollapse();\n }\n\n protected closeDial(): void {\n this.open.set(false);\n this.scheduleCollapse();\n }\n\n protected asTemplate(c: unknown): TemplateRef<unknown> | null {\n return c instanceof TemplateRef ? c : null;\n }\n\n protected asComponent(c: unknown): Type<unknown> | null {\n return typeof c === 'function' ? (c as Type<unknown>) : null;\n }\n\n // ---- collapse (ported from the prototype) -----------------------------\n private scheduleCollapse(): void {\n this.clearCollapse();\n this.collapseTimer = setTimeout(() => {\n if (!this.open() && !this.panelId() && !this.dragging()) {\n this.collapsed.set(true);\n }\n }, COLLAPSE_DELAY_MS);\n }\n\n private clearCollapse(): void {\n if (this.collapseTimer) clearTimeout(this.collapseTimer);\n this.collapseTimer = null;\n if (this.collapsed()) this.collapsed.set(false);\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport type ValidationMedia = 'WHATSAPP' | 'SMS';\n\n/** Everything environment-specific is passed in by the host — the package\n * reads NOTHING from the host app's environment/services. */\nexport interface DevtoolsConfig {\n /** API base, e.g. https://api.stag.marsaude.net/v1 */\n apiBaseUrl: string;\n /** OTP channel. Default WHATSAPP. */\n media?: ValidationMedia;\n /** X-Mar-Locale header value. Default pt_BR. */\n locale?: string;\n /** Google OAuth client id for the admin login. */\n googleClientId?: string;\n /**\n * Google OAuth redirect_uri. Required for the Google admin login and must\n * match EXACTLY a URI whitelisted in the Google OAuth client (no silent\n * fallback — login is skipped with an error if missing).\n */\n googleRedirectUri?: string;\n /** reCAPTCHA v2 Invisible site key (optional). The package loads the script\n * and renders an invisible widget itself; without it the OTP request is sent\n * with an empty token. */\n recaptchaSiteKey?: string;\n /** Fixed RH organization id used by the generator. Default 200. */\n fixedOrgId?: number;\n /** Fallback admin phone for the SMS-release toggle. */\n adminPhone?: string;\n}\n\nexport const DEVTOOLS_CONFIG = new InjectionToken<DevtoolsConfig>('DEVTOOLS_CONFIG');\n","import { Injectable } from '@angular/core';\n\n/**\n * Plain localStorage wrapper owned by the package. DevTools-internal keys are\n * prefixed `DEVTOOLS_`; the *active app session* keys (`JWT_TOKEN`,\n * `JWT_REFRESH_TOKEN`, `EGRET_USER`) are written deliberately so the host patient\n * app consumes them — that is the only intentional touch-point with the host.\n */\n@Injectable()\nexport class DevtoolsStorage {\n get<T = any>(key: string): T | null {\n try {\n const raw = localStorage.getItem(key);\n return raw ? (JSON.parse(raw) as T) : null;\n } catch {\n return null;\n }\n }\n\n set(key: string, value: unknown): void {\n try {\n localStorage.setItem(key, JSON.stringify(value));\n } catch {\n /* storage unavailable — non-fatal */\n }\n }\n\n remove(key: string): void {\n try {\n localStorage.removeItem(key);\n } catch {\n /* ignore */\n }\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { HttpParams } from '@angular/common/http';\nimport { DevtoolsStorage } from './devtools-storage.service';\nimport { DevtoolsToastService } from '../devtools-toast.service';\n\n/** Triage form cases offered by the automatic scenario. */\nexport const OPTIONS_RESPONSES_CASE = [\n { name: 'Homem, 18 anos', value: 'case1', age: 18, biologicalSex: 'MALE' },\n];\n\nconst USERS_KEY = 'DEVTOOLS_USERS';\n\n/** Data generation + last-user storage (ported from the app's UserUtilsService). */\n@Injectable()\nexport class DevtoolsUserUtils {\n private readonly storage = inject(DevtoolsStorage);\n\n private readonly firstNames = ['Ana', 'Lucas', 'Miguel', 'Gabriela', 'Julia', 'Sophia', 'Bruno', 'Gustavo', 'Fernanda', 'Patrícia', 'Joel', 'Heitor'];\n private readonly lastNames = ['Silva', 'Santos', 'Oliveira', 'Souza', 'Rodrigues', 'Ferreira', 'Almeida', 'Pereira', 'Lima', 'Costa'];\n\n generateCPF(): string {\n let cpf = Array.from({ length: 9 }, () => Math.floor(Math.random() * 10)).join('');\n cpf += this.checkDigit(cpf);\n cpf += this.checkDigit(cpf);\n return cpf;\n }\n\n private checkDigit(cpf: string): string {\n const numbers = cpf.split('').map((n) => parseInt(n, 10));\n const length = numbers.length + 1;\n const sum = numbers.reduce((acc, n, i) => acc + n * (length - i), 0);\n const remainder = (sum * 10) % 11;\n return remainder === 10 ? '0' : remainder.toString();\n }\n\n generateRandomName(): string {\n const f = this.firstNames[Math.floor(Math.random() * this.firstNames.length)];\n const l = this.lastNames[Math.floor(Math.random() * this.lastNames.length)];\n return `${f} ${l}`;\n }\n\n generateRandomGender(): string {\n return Math.random() > 0.5 ? 'MALE' : 'FEMALE';\n }\n\n generateRandomBirthDate(): string {\n const currentYear = new Date().getFullYear();\n const minBirthYear = currentYear - 70;\n const maxBirthYear = currentYear - 18;\n const year = Math.floor(Math.random() * (maxBirthYear - minBirthYear + 1)) + minBirthYear;\n const month = String(Math.floor(Math.random() * 12) + 1).padStart(2, '0');\n const day = String(Math.floor(Math.random() * 28) + 1).padStart(2, '0');\n return `${year}-${month}-${day}`;\n }\n\n calculateAge(birthDateString: string | undefined): number | '' {\n if (!birthDateString) return '';\n const birth = new Date(birthDateString);\n const today = new Date();\n let age = today.getFullYear() - birth.getFullYear();\n const md = today.getMonth() - birth.getMonth();\n if (md < 0 || (md === 0 && today.getDate() < birth.getDate())) age--;\n return age;\n }\n\n calculateBirthDate(age: number): string {\n const now = new Date();\n const d = new Date(now.getFullYear() - age, now.getMonth(), now.getDate());\n const month = String(d.getMonth() + 1).padStart(2, '0');\n const day = String(d.getDate()).padStart(2, '0');\n return `${d.getFullYear()}-${month}-${day}`;\n }\n\n setToStorage(user: any): void {\n this.storage.set(USERS_KEY, [user]);\n }\n\n getUserFromStorage(): any[] {\n const list = this.storage.get<any[]>(USERS_KEY) ?? [];\n if (!Array.isArray(list) || !list.length) return [];\n return [list[list.length - 1]];\n }\n}\n\n/** Misc helpers (ported from the app's UtilsService) — toast/masks/params. */\n@Injectable()\nexport class DevtoolsUtils {\n private readonly toast = inject(DevtoolsToastService);\n\n objectParams(queryParams: Record<string, any>): HttpParams {\n let params = new HttpParams();\n Object.keys(queryParams).forEach((k) => {\n if (queryParams[k] !== undefined && queryParams[k] !== null && queryParams[k] !== '') {\n params = params.append(k, queryParams[k]);\n }\n });\n return params;\n }\n\n setErrorToast(err: any = {}): void {\n const message = err?.error?.message;\n this.toast.show(message || 'Erro desconhecido');\n }\n\n copyClipboard(value: any, label = 'Texto'): void {\n try {\n navigator.clipboard?.writeText(String(value));\n } catch {\n /* ignore */\n }\n this.toast.show(`${label} copiado`);\n }\n\n removePhoneMask(phone: any): string {\n return (phone ?? '').toString().replace(/\\D/g, '');\n }\n\n maskCpfCnpj(v: any): string {\n return (v ?? '').toString().replace(/(\\d{3})(\\d{3})(\\d{3})(\\d{2})/, '$1.$2.$3-$4');\n }\n}\n","/* Extracted verbatim from the app for self-contained packaging. */\n/* eslint-disable */\nexport const FEMALE_42 = {};\nexport const FEMALE_18 = {};\nexport const FEMALE_30 = {};\nexport const MALE_18 = {\n 'formSubmission': {\n 'landedAt': '2025-06-04T13:24:49.132Z',\n 'person': { 'id': 35008 },\n 'formAnswers': [{\n 'formQuestion': { 'slug': 'Race' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'BROWN' }, 'value': 'Parda' }]\n }, { 'value': 120, 'formQuestion': { 'slug': 'Weight' } }, {\n 'value': 180,\n 'formQuestion': { 'slug': 'Height' }\n }, {\n 'formQuestion': { 'slug': 'BellyShapeV2' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Three' }, 'value': '3' }]\n }, {\n 'formQuestion': { 'slug': 'FrequencyOfRedMeat' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Yes' }, 'value': 'Sim' }]\n }, {\n 'formQuestion': { 'slug': 'FrequencyOfCheeseAndButter' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Yes' }, 'value': 'Sim' }]\n }, {\n 'formQuestion': { 'slug': 'ExtraSalt' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Yes' }, 'value': 'Sim' }]\n }, {\n 'formQuestion': { 'slug': 'EverDayFruits' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Yes' }, 'value': 'Sim' }]\n }, {\n 'formQuestion': { 'slug': 'FrequencyOfPhysicalActivityV2' },\n 'formAnswerChoices': [{\n 'formQuestionChoice': { 'slug': 'DontPracticeRegularPhysicalActivity' },\n 'value': 'Não pratico atividade física regular'\n }]\n }, {\n 'formQuestion': { 'slug': 'TriageSmoking' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'No' }, 'value': 'Não' }]\n }, {\n 'formQuestion': { 'slug': 'TriageAlcohol' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Never' }, 'value': 'Nunca' }]\n }, {\n 'formQuestion': { 'slug': 'TriageMedicationAbuse' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Never' }, 'value': 'Nenhuma vez' }]\n }, {\n 'formQuestion': { 'slug': 'TriageIllicitDrugs' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Never' }, 'value': 'Nenhuma vez' }]\n }, {\n 'formQuestion': { 'slug': 'FeelingNervousOrAnxietyOrTense' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Never' }, 'value': 'Nenhuma vez' }]\n }, {\n 'formQuestion': { 'slug': 'IncapableToControlConcerns' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Never' }, 'value': 'Nenhuma vez' }]\n }, {\n 'formQuestion': { 'slug': 'LastTwoWeeksDepressed' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Never' }, 'value': 'Nenhuma vez' }]\n }, {\n 'formQuestion': { 'slug': 'LastTwoWeeksLostOfInterestDepressed' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Never' }, 'value': 'Nenhuma vez' }]\n }, {\n 'formQuestion': { 'slug': 'UnprotectedSexInfectiousDiseases' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Yes' }, 'value': 'Sim' }]\n }, {\n 'formQuestion': { 'slug': 'InjectionDrugsInfectiousDiseases' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Yes' }, 'value': 'Sim' }]\n }, {\n 'formQuestion': { 'slug': 'SyphilisTreatment' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Yes' }, 'value': 'Sim' }]\n }, {\n 'formQuestion': { 'slug': 'TuberculosisInfectiousDiseases' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Yes' }, 'value': 'Sim' }]\n }, {\n 'formQuestion': { 'slug': 'PreviousDiabetes' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Yes' }, 'value': 'Sim' }]\n }, {\n 'formQuestion': { 'slug': 'MedicalMonitoringDiabetes' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Yes' }, 'value': 'Sim' }]\n }, {\n 'formQuestion': { 'slug': 'PreviousHypertension' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Yes' }, 'value': 'Sim' }]\n }, {\n 'formQuestion': { 'slug': 'MedicalMonitoringHAS' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Yes' }, 'value': 'Sim' }]\n }, {\n 'formQuestion': { 'slug': 'PreviousCholesterol' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Yes' }, 'value': 'Sim' }]\n }, {\n 'formQuestion': { 'slug': 'MedicalMonitoringDyslipidemia' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Yes' }, 'value': 'Sim' }]\n }]\n }\n};\nexport const MALE_50 = {};\nexport const MALE_70 = {};\n","import { inject, Injectable } from '@angular/core';\nimport { DevtoolsUserUtils } from './devtools-utils';\nimport {\n FEMALE_18,\n FEMALE_30,\n FEMALE_42,\n MALE_18,\n MALE_50,\n MALE_70,\n} from './data/typeform-cases.data';\n\n/** Builds the form-submission body for the automatic-signup triage flow. */\n@Injectable()\nexport class DevtoolsTypeform {\n private readonly userUtils = inject(DevtoolsUserUtils);\n private readonly cases: Record<string, any> = {\n MALE_18,\n MALE_50,\n MALE_70,\n FEMALE_18,\n FEMALE_30,\n FEMALE_42,\n };\n\n getCase(dataToReplace: any): any {\n const { biologicalSex, birthdate, personId } = dataToReplace;\n const key = `${biologicalSex}_${this.userUtils.calculateAge(birthdate)}`;\n const formJson = this.cases[key];\n if (!formJson || !formJson.formSubmission) {\n return {\n formSubmission: {\n person: { id: personId },\n landedAt: new Date().toISOString(),\n formAnswers: [],\n },\n };\n }\n return {\n formSubmission: {\n ...formJson.formSubmission,\n person: { id: personId },\n landedAt: new Date().toISOString(),\n },\n };\n }\n}\n","/* Extracted verbatim from the app for self-contained packaging. */\nexport const EXAMS_18 = [\n {\n 'person': {\n 'id': 5518\n },\n 'documentUrl': 'https://stag-mar-static.s3.us-east-2.amazonaws.com/performed-exam/83379b83-ce53-4738-9bb1-fd48fea247ae.pdf?X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJn%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMiJIMEYCIQCXmt5XvaK1l5abS6W5Wb20oJ51DrMszJPXJUOG5n%2BDxQIhAKOacn2Oj9PJqZQ02yuao2%2BparPJXCigLaaG0bEx7wtvKo4ECJL%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEQABoMODU4NTIwMjAxODY0IgyIKcHluQuoiNMjPu4q4gMfnluXq8jJxspyzNCwZ948wmhjj0ebDm8TmzFmUic68sdlE4WsZAcUPQmTcZDImBX0KaukGRcI3jdFX62XaMMJ4Byuxj0EloP%2BGZyah2eDrPZr2%2FhDIKZuyrUtebZUCpZe%2FLI%2FWCBnblI12u14TtJGbcVTbtiw58onl2kvOCgwb9FUskI3dJGmha8CqDMCdOAb3sMQozvU1PgXRIj1o5bDj0U5jFT7VVtuAGv3LqsEfd9dxAj%2FcCwgwCJQ%2BbrjH3ABdxwdiVacDOfqTDWuvemFvjIDjIKXG%2Fq%2BcDXEifcMBNdWk%2BVffcLb0RZLfvF2JW6h4n1vUrfqBiL6FW7s%2FWYF6qrv7h1ZfGt1JtPXiP%2B98vU9MEZhUqB6RmMDTtuvI3o11V7C9GuSdvP15imWhkbmylz0oA98MzjO6RsN5D7CvT1STICeXR1WTGKAvH8p2E5HNL%2BGo11oidE6wMFC0NLDbMD5tbVyPeTGA%2BYzX8XE21gmWoOfntRryK5kyZNbu6K7Y1L0owZ6nYGMBFV9G6jxIsZ3SaPbzh1M3sndmwFYit%2FxaeYNA1rIDyAUkZjdEFPbNMhTK3kKgdb5e8ZWbsXBBuzPdoBpIShIUIVvM%2FnbGkvxBo%2FCOl%2FwrU40by0MWhObpTDX%2Fui1BjqkAXoYq3ayR5DIQFaLyIqrRtqhKUugq5Mf7ecpa08dP729n7YMxd69OLKwLV%2BUAPdUsvsRGJq01BLFJqFyvX4big29FCgavwNb5BtaCPEbtGaGUkOhI44nPc0nIUTMEUc5K26kNbELQfk6sXElU7AfoQtP%2Bj6JmFO9FfJ%2FFTne1VZRcYdjhtPHeOmglGChz7sb3DSODSIVXBXK4fhY%2FD3LKfK6JNwP&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20240812T192159Z&X-Amz-SignedHeaders=host&X-Amz-Credential=ASIA4PY6KVKEEJCK2C4E%2F20240812%2Fus-east-2%2Fs3%2Faws4_request&X-Amz-Expires=3600&X-Amz-Signature=0cecd10df31c9c0ab2f890f30643441d595ce016865a02b7bd94065b605c4852',\n 'performedAt': '2024-08-12',\n 'exam': {\n 'id': 4\n },\n 'examParse': {},\n 'examResults': [\n {\n 'value': '20',\n 'expectedExamResult': {\n 'id': 5\n }\n }\n ],\n 'laboratory': null,\n 'id': null,\n 'source': 'MANUAL'\n },\n {\n 'person': {\n 'id': 5518\n },\n 'documentUrl': 'https://stag-mar-static.s3.us-east-2.amazonaws.com/performed-exam/83379b83-ce53-4738-9bb1-fd48fea247ae.pdf?X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJn%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMiJIMEYCIQCXmt5XvaK1l5abS6W5Wb20oJ51DrMszJPXJUOG5n%2BDxQIhAKOacn2Oj9PJqZQ02yuao2%2BparPJXCigLaaG0bEx7wtvKo4ECJL%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEQABoMODU4NTIwMjAxODY0IgyIKcHluQuoiNMjPu4q4gMfnluXq8jJxspyzNCwZ948wmhjj0ebDm8TmzFmUic68sdlE4WsZAcUPQmTcZDImBX0KaukGRcI3jdFX62XaMMJ4Byuxj0EloP%2BGZyah2eDrPZr2%2FhDIKZuyrUtebZUCpZe%2FLI%2FWCBnblI12u14TtJGbcVTbtiw58onl2kvOCgwb9FUskI3dJGmha8CqDMCdOAb3sMQozvU1PgXRIj1o5bDj0U5jFT7VVtuAGv3LqsEfd9dxAj%2FcCwgwCJQ%2BbrjH3ABdxwdiVacDOfqTDWuvemFvjIDjIKXG%2Fq%2BcDXEifcMBNdWk%2BVffcLb0RZLfvF2JW6h4n1vUrfqBiL6FW7s%2FWYF6qrv7h1ZfGt1JtPXiP%2B98vU9MEZhUqB6RmMDTtuvI3o11V7C9GuSdvP15imWhkbmylz0oA98MzjO6RsN5D7CvT1STICeXR1WTGKAvH8p2E5HNL%2BGo11oidE6wMFC0NLDbMD5tbVyPeTGA%2BYzX8XE21gmWoOfntRryK5kyZNbu6K7Y1L0owZ6nYGMBFV9G6jxIsZ3SaPbzh1M3sndmwFYit%2FxaeYNA1rIDyAUkZjdEFPbNMhTK3kKgdb5e8ZWbsXBBuzPdoBpIShIUIVvM%2FnbGkvxBo%2FCOl%2FwrU40by0MWhObpTDX%2Fui1BjqkAXoYq3ayR5DIQFaLyIqrRtqhKUugq5Mf7ecpa08dP729n7YMxd69OLKwLV%2BUAPdUsvsRGJq01BLFJqFyvX4big29FCgavwNb5BtaCPEbtGaGUkOhI44nPc0nIUTMEUc5K26kNbELQfk6sXElU7AfoQtP%2Bj6JmFO9FfJ%2FFTne1VZRcYdjhtPHeOmglGChz7sb3DSODSIVXBXK4fhY%2FD3LKfK6JNwP&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20240812T192159Z&X-Amz-SignedHeaders=host&X-Amz-Credential=ASIA4PY6KVKEEJCK2C4E%2F20240812%2Fus-east-2%2Fs3%2Faws4_request&X-Amz-Expires=3600&X-Amz-Signature=0cecd10df31c9c0ab2f890f30643441d595ce016865a02b7bd94065b605c4852',\n 'performedAt': '2024-08-12',\n 'exam': {\n 'id': 2\n },\n 'examParse': {},\n 'examResults': [\n {\n 'value': '12',\n 'expectedExamResult': {\n 'id': 2\n }\n },\n {\n 'value': '8',\n 'expectedExamResult': {\n 'id': 3\n }\n }\n ],\n 'laboratory': null,\n 'id': null,\n 'source': 'MANUAL'\n },\n {\n 'person': {\n 'id': 5518\n },\n 'documentUrl': 'https://stag-mar-static.s3.us-east-2.amazonaws.com/performed-exam/83379b83-ce53-4738-9bb1-fd48fea247ae.pdf?X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJn%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMiJIMEYCIQCXmt5XvaK1l5abS6W5Wb20oJ51DrMszJPXJUOG5n%2BDxQIhAKOacn2Oj9PJqZQ02yuao2%2BparPJXCigLaaG0bEx7wtvKo4ECJL%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEQABoMODU4NTIwMjAxODY0IgyIKcHluQuoiNMjPu4q4gMfnluXq8jJxspyzNCwZ948wmhjj0ebDm8TmzFmUic68sdlE4WsZAcUPQmTcZDImBX0KaukGRcI3jdFX62XaMMJ4Byuxj0EloP%2BGZyah2eDrPZr2%2FhDIKZuyrUtebZUCpZe%2FLI%2FWCBnblI12u14TtJGbcVTbtiw58onl2kvOCgwb9FUskI3dJGmha8CqDMCdOAb3sMQozvU1PgXRIj1o5bDj0U5jFT7VVtuAGv3LqsEfd9dxAj%2FcCwgwCJQ%2BbrjH3ABdxwdiVacDOfqTDWuvemFvjIDjIKXG%2Fq%2BcDXEifcMBNdWk%2BVffcLb0RZLfvF2JW6h4n1vUrfqBiL6FW7s%2FWYF6qrv7h1ZfGt1JtPXiP%2B98vU9MEZhUqB6RmMDTtuvI3o11V7C9GuSdvP15imWhkbmylz0oA98MzjO6RsN5D7CvT1STICeXR1WTGKAvH8p2E5HNL%2BGo11oidE6wMFC0NLDbMD5tbVyPeTGA%2BYzX8XE21gmWoOfntRryK5kyZNbu6K7Y1L0owZ6nYGMBFV9G6jxIsZ3SaPbzh1M3sndmwFYit%2FxaeYNA1rIDyAUkZjdEFPbNMhTK3kKgdb5e8ZWbsXBBuzPdoBpIShIUIVvM%2FnbGkvxBo%2FCOl%2FwrU40by0MWhObpTDX%2Fui1BjqkAXoYq3ayR5DIQFaLyIqrRtqhKUugq5Mf7ecpa08dP729n7YMxd69OLKwLV%2BUAPdUsvsRGJq01BLFJqFyvX4big29FCgavwNb5BtaCPEbtGaGUkOhI44nPc0nIUTMEUc5K26kNbELQfk6sXElU7AfoQtP%2Bj6JmFO9FfJ%2FFTne1VZRcYdjhtPHeOmglGChz7sb3DSODSIVXBXK4fhY%2FD3LKfK6JNwP&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20240812T192159Z&X-Amz-SignedHeaders=host&X-Amz-Credential=ASIA4PY6KVKEEJCK2C4E%2F20240812%2Fus-east-2%2Fs3%2Faws4_request&X-Amz-Expires=3600&X-Amz-Signature=0cecd10df31c9c0ab2f890f30643441d595ce016865a02b7bd94065b605c4852',\n 'performedAt': '2024-08-12',\n 'exam': {\n 'id': 5\n },\n 'examParse': {},\n 'examResults': [\n {\n 'value': '24',\n 'expectedExamResult': {\n 'id': 6\n }\n },\n {\n 'value': '24',\n 'expectedExamResult': {\n 'id': 7\n }\n },\n {\n 'value': '24',\n 'expectedExamResult': {\n 'id': 8\n }\n }\n ],\n 'laboratory': null,\n 'id': null,\n 'source': 'MANUAL'\n },\n {\n 'person': {\n 'id': 5518\n },\n 'documentUrl': 'https://stag-mar-static.s3.us-east-2.amazonaws.com/performed-exam/83379b83-ce53-4738-9bb1-fd48fea247ae.pdf?X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJn%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMiJIMEYCIQCXmt5XvaK1l5abS6W5Wb20oJ51DrMszJPXJUOG5n%2BDxQIhAKOacn2Oj9PJqZQ02yuao2%2BparPJXCigLaaG0bEx7wtvKo4ECJL%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEQABoMODU4NTIwMjAxODY0IgyIKcHluQuoiNMjPu4q4gMfnluXq8jJxspyzNCwZ948wmhjj0ebDm8TmzFmUic68sdlE4WsZAcUPQmTcZDImBX0KaukGRcI3jdFX62XaMMJ4Byuxj0EloP%2BGZyah2eDrPZr2%2FhDIKZuyrUtebZUCpZe%2FLI%2FWCBnblI12u14TtJGbcVTbtiw58onl2kvOCgwb9FUskI3dJGmha8CqDMCdOAb3sMQozvU1PgXRIj1o5bDj0U5jFT7VVtuAGv3LqsEfd9dxAj%2FcCwgwCJQ%2BbrjH3ABdxwdiVacDOfqTDWuvemFvjIDjIKXG%2Fq%2BcDXEifcMBNdWk%2BVffcLb0RZLfvF2JW6h4n1vUrfqBiL6FW7s%2FWYF6qrv7h1ZfGt1JtPXiP%2B98vU9MEZhUqB6RmMDTtuvI3o11V7C9GuSdvP15imWhkbmylz0oA98MzjO6RsN5D7CvT1STICeXR1WTGKAvH8p2E5HNL%2BGo11oidE6wMFC0NLDbMD5tbVyPeTGA%2BYzX8XE21gmWoOfntRryK5kyZNbu6K7Y1L0owZ6nYGMBFV9G6jxIsZ3SaPbzh1M3sndmwFYit%2FxaeYNA1rIDyAUkZjdEFPbNMhTK3kKgdb5e8ZWbsXBBuzPdoBpIShIUIVvM%2FnbGkvxBo%2FCOl%2FwrU40by0MWhObpTDX%2Fui1BjqkAXoYq3ayR5DIQFaLyIqrRtqhKUugq5Mf7ecpa08dP729n7YMxd69OLKwLV%2BUAPdUsvsRGJq01BLFJqFyvX4big29FCgavwNb5BtaCPEbtGaGUkOhI44nPc0nIUTMEUc5K26kNbELQfk6sXElU7AfoQtP%2Bj6JmFO9FfJ%2FFTne1VZRcYdjhtPHeOmglGChz7sb3DSODSIVXBXK4fhY%2FD3LKfK6JNwP&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20240812T192159Z&X-Amz-SignedHeaders=host&X-Amz-Credential=ASIA4PY6KVKEEJCK2C4E%2F20240812%2Fus-east-2%2Fs3%2Faws4_request&X-Amz-Expires=3600&X-Amz-Signature=0cecd10df31c9c0ab2f890f30643441d595ce016865a02b7bd94065b605c4852',\n 'performedAt': '2024-08-12',\n 'exam': {\n 'id': 6\n },\n 'examParse': {},\n 'examResults': [\n {\n 'value': '12',\n 'expectedExamResult': {\n 'id': 9\n }\n }\n ],\n 'laboratory': null,\n 'id': null,\n 'source': 'MANUAL'\n },\n {\n 'person': {\n 'id': 5518\n },\n 'documentUrl': 'https://stag-mar-static.s3.us-east-2.amazonaws.com/performed-exam/83379b83-ce53-4738-9bb1-fd48fea247ae.pdf?X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJn%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMiJIMEYCIQCXmt5XvaK1l5abS6W5Wb20oJ51DrMszJPXJUOG5n%2BDxQIhAKOacn2Oj9PJqZQ02yuao2%2BparPJXCigLaaG0bEx7wtvKo4ECJL%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEQABoMODU4NTIwMjAxODY0IgyIKcHluQuoiNMjPu4q4gMfnluXq8jJxspyzNCwZ948wmhjj0ebDm8TmzFmUic68sdlE4WsZAcUPQmTcZDImBX0KaukGRcI3jdFX62XaMMJ4Byuxj0EloP%2BGZyah2eDrPZr2%2FhDIKZuyrUtebZUCpZe%2FLI%2FWCBnblI12u14TtJGbcVTbtiw58onl2kvOCgwb9FUskI3dJGmha8CqDMCdOAb3sMQozvU1PgXRIj1o5bDj0U5jFT7VVtuAGv3LqsEfd9dxAj%2FcCwgwCJQ%2BbrjH3ABdxwdiVacDOfqTDWuvemFvjIDjIKXG%2Fq%2BcDXEifcMBNdWk%2BVffcLb0RZLfvF2JW6h4n1vUrfqBiL6FW7s%2FWYF6qrv7h1ZfGt1JtPXiP%2B98vU9MEZhUqB6RmMDTtuvI3o11V7C9GuSdvP15imWhkbmylz0oA98MzjO6RsN5D7CvT1STICeXR1WTGKAvH8p2E5HNL%2BGo11oidE6wMFC0NLDbMD5tbVyPeTGA%2BYzX8XE21gmWoOfntRryK5kyZNbu6K7Y1L0owZ6nYGMBFV9G6jxIsZ3SaPbzh1M3sndmwFYit%2FxaeYNA1rIDyAUkZjdEFPbNMhTK3kKgdb5e8ZWbsXBBuzPdoBpIShIUIVvM%2FnbGkvxBo%2FCOl%2FwrU40by0MWhObpTDX%2Fui1BjqkAXoYq3ayR5DIQFaLyIqrRtqhKUugq5Mf7ecpa08dP729n7YMxd69OLKwLV%2BUAPdUsvsRGJq01BLFJqFyvX4big29FCgavwNb5BtaCPEbtGaGUkOhI44nPc0nIUTMEUc5K26kNbELQfk6sXElU7AfoQtP%2Bj6JmFO9FfJ%2FFTne1VZRcYdjhtPHeOmglGChz7sb3DSODSIVXBXK4fhY%2FD3LKfK6JNwP&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20240812T192159Z&X-Amz-SignedHeaders=host&X-Amz-Credential=ASIA4PY6KVKEEJCK2C4E%2F20240812%2Fus-east-2%2Fs3%2Faws4_request&X-Amz-Expires=3600&X-Amz-Signature=0cecd10df31c9c0ab2f890f30643441d595ce016865a02b7bd94065b605c4852',\n 'performedAt': '2024-08-12',\n 'exam': {\n 'id': 7895\n },\n 'examParse': {},\n 'examResults': [\n {\n 'value': 'Positivo',\n 'expectedExamResult': {\n 'id': 39\n }\n }\n ],\n 'laboratory': null,\n 'id': null,\n 'source': 'MANUAL'\n },\n {\n 'person': {\n 'id': 5518\n },\n 'documentUrl': 'https://stag-mar-static.s3.us-east-2.amazonaws.com/performed-exam/83379b83-ce53-4738-9bb1-fd48fea247ae.pdf?X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJn%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMiJIMEYCIQCXmt5XvaK1l5abS6W5Wb20oJ51DrMszJPXJUOG5n%2BDxQIhAKOacn2Oj9PJqZQ02yuao2%2BparPJXCigLaaG0bEx7wtvKo4ECJL%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEQABoMODU4NTIwMjAxODY0IgyIKcHluQuoiNMjPu4q4gMfnluXq8jJxspyzNCwZ948wmhjj0ebDm8TmzFmUic68sdlE4WsZAcUPQmTcZDImBX0KaukGRcI3jdFX62XaMMJ4Byuxj0EloP%2BGZyah2eDrPZr2%2FhDIKZuyrUtebZUCpZe%2FLI%2FWCBnblI12u14TtJGbcVTbtiw58onl2kvOCgwb9FUskI3dJGmha8CqDMCdOAb3sMQozvU1PgXRIj1o5bDj0U5jFT7VVtuAGv3LqsEfd9dxAj%2FcCwgwCJQ%2BbrjH3ABdxwdiVacDOfqTDWuvemFvjIDjIKXG%2Fq%2BcDXEifcMBNdWk%2BVffcLb0RZLfvF2JW6h4n1vUrfqBiL6FW7s%2FWYF6qrv7h1ZfGt1JtPXiP%2B98vU9MEZhUqB6RmMDTtuvI3o11V7C9GuSdvP15imWhkbmylz0oA98MzjO6RsN5D7CvT1STICeXR1WTGKAvH8p2E5HNL%2BGo11oidE6wMFC0NLDbMD5tbVyPeTGA%2BYzX8XE21gmWoOfntRryK5kyZNbu6K7Y1L0owZ6nYGMBFV9G6jxIsZ3SaPbzh1M3sndmwFYit%2FxaeYNA1rIDyAUkZjdEFPbNMhTK3kKgdb5e8ZWbsXBBuzPdoBpIShIUIVvM%2FnbGkvxBo%2FCOl%2FwrU40by0MWhObpTDX%2Fui1BjqkAXoYq3ayR5DIQFaLyIqrRtqhKUugq5Mf7ecpa08dP729n7YMxd69OLKwLV%2BUAPdUsvsRGJq01BLFJqFyvX4big29FCgavwNb5BtaCPEbtGaGUkOhI44nPc0nIUTMEUc5K26kNbELQfk6sXElU7AfoQtP%2Bj6JmFO9FfJ%2FFTne1VZRcYdjhtPHeOmglGChz7sb3DSODSIVXBXK4fhY%2FD3LKfK6JNwP&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20240812T192159Z&X-Amz-SignedHeaders=host&X-Amz-Credential=ASIA4PY6KVKEEJCK2C4E%2F20240812%2Fus-east-2%2Fs3%2Faws4_request&X-Amz-Expires=3600&X-Amz-Signature=0cecd10df31c9c0ab2f890f30643441d595ce016865a02b7bd94065b605c4852',\n 'performedAt': '2024-08-12',\n 'exam': {\n 'id': 19\n },\n 'examParse': {},\n 'examResults': [\n {\n 'value': 'Reagente',\n 'expectedExamResult': {\n 'id': 23\n }\n }\n ],\n 'laboratory': null,\n 'id': null,\n 'source': 'MANUAL'\n },\n {\n 'person': {\n 'id': 5518\n },\n 'documentUrl': 'https://stag-mar-static.s3.us-east-2.amazonaws.com/performed-exam/83379b83-ce53-4738-9bb1-fd48fea247ae.pdf?X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJn%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMiJIMEYCIQCXmt5XvaK1l5abS6W5Wb20oJ51DrMszJPXJUOG5n%2BDxQIhAKOacn2Oj9PJqZQ02yuao2%2BparPJXCigLaaG0bEx7wtvKo4ECJL%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEQABoMODU4NTIwMjAxODY0IgyIKcHluQuoiNMjPu4q4gMfnluXq8jJxspyzNCwZ948wmhjj0ebDm8TmzFmUic68sdlE4WsZAcUPQmTcZDImBX0KaukGRcI3jdFX62XaMMJ4Byuxj0EloP%2BGZyah2eDrPZr2%2FhDIKZuyrUtebZUCpZe%2FLI%2FWCBnblI12u14TtJGbcVTbtiw58onl2kvOCgwb9FUskI3dJGmha8CqDMCdOAb3sMQozvU1PgXRIj1o5bDj0U5jFT7VVtuAGv3LqsEfd9dxAj%2FcCwgwCJQ%2BbrjH3ABdxwdiVacDOfqTDWuvemFvjIDjIKXG%2Fq%2BcDXEifcMBNdWk%2BVffcLb0RZLfvF2JW6h4n1vUrfqBiL6FW7s%2FWYF6qrv7h1ZfGt1JtPXiP%2B98vU9MEZhUqB6RmMDTtuvI3o11V7C9GuSdvP15imWhkbmylz0oA98MzjO6RsN5D7CvT1STICeXR1WTGKAvH8p2E5HNL%2BGo11oidE6wMFC0NLDbMD5tbVyPeTGA%2BYzX8XE21gmWoOfntRryK5kyZNbu6K7Y1L0owZ6nYGMBFV9G6jxIsZ3SaPbzh1M3sndmwFYit%2FxaeYNA1rIDyAUkZjdEFPbNMhTK3kKgdb5e8ZWbsXBBuzPdoBpIShIUIVvM%2FnbGkvxBo%2FCOl%2FwrU40by0MWhObpTDX%2Fui1BjqkAXoYq3ayR5DIQFaLyIqrRtqhKUugq5Mf7ecpa08dP729n7YMxd69OLKwLV%2BUAPdUsvsRGJq01BLFJqFyvX4big29FCgavwNb5BtaCPEbtGaGUkOhI44nPc0nIUTMEUc5K26kNbELQfk6sXElU7AfoQtP%2Bj6JmFO9FfJ%2FFTne1VZRcYdjhtPHeOmglGChz7sb3DSODSIVXBXK4fhY%2FD3LKfK6JNwP&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20240812T192159Z&X-Amz-SignedHeaders=host&X-Amz-Credential=ASIA4PY6KVKEEJCK2C4E%2F20240812%2Fus-east-2%2Fs3%2Faws4_request&X-Amz-Expires=3600&X-Amz-Signature=0cecd10df31c9c0ab2f890f30643441d595ce016865a02b7bd94065b605c4852',\n 'performedAt': '2024-08-12',\n 'exam': {\n 'id': 20\n },\n 'examParse': {},\n 'examResults': [\n {\n 'value': 'Reagente',\n 'expectedExamResult': {\n 'id': 24\n }\n }\n ],\n 'laboratory': null,\n 'id': null,\n 'source': 'MANUAL'\n },\n {\n 'person': {\n 'id': 5518\n },\n 'documentUrl': 'https://stag-mar-static.s3.us-east-2.amazonaws.com/performed-exam/83379b83-ce53-4738-9bb1-fd48fea247ae.pdf?X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJn%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMiJIMEYCIQCXmt5XvaK1l5abS6W5Wb20oJ51DrMszJPXJUOG5n%2BDxQIhAKOacn2Oj9PJqZQ02yuao2%2BparPJXCigLaaG0bEx7wtvKo4ECJL%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEQABoMODU4NTIwMjAxODY0IgyIKcHluQuoiNMjPu4q4gMfnluXq8jJxspyzNCwZ948wmhjj0ebDm8TmzFmUic68sdlE4WsZAcUPQmTcZDImBX0KaukGRcI3jdFX62XaMMJ4Byuxj0EloP%2BGZyah2eDrPZr2%2FhDIKZuyrUtebZUCpZe%2FLI%2FWCBnblI12u14TtJGbcVTbtiw58onl2kvOCgwb9FUskI3dJGmha8CqDMCdOAb3sMQozvU1PgXRIj1o5bDj0U5jFT7VVtuAGv3LqsEfd9dxAj%2FcCwgwCJQ%2BbrjH3ABdxwdiVacDOfqTDWuvemFvjIDjIKXG%2Fq%2BcDXEifcMBNdWk%2BVffcLb0RZLfvF2JW6h4n1vUrfqBiL6FW7s%2FWYF6qrv7h1ZfGt1JtPXiP%2B98vU9MEZhUqB6RmMDTtuvI3o11V7C9GuSdvP15imWhkbmylz0oA98MzjO6RsN5D7CvT1STICeXR1WTGKAvH8p2E5HNL%2BGo11oidE6wMFC0NLDbMD5tbVyPeTGA%2BYzX8XE21gmWoOfntRryK5kyZNbu6K7Y1L0owZ6nYGMBFV9G6jxIsZ3SaPbzh1M3sndmwFYit%2FxaeYNA1rIDyAUkZjdEFPbNMhTK3kKgdb5e8ZWbsXBBuzPdoBpIShIUIVvM%2FnbGkvxBo%2FCOl%2FwrU40by0MWhObpTDX%2Fui1BjqkAXoYq3ayR5DIQFaLyIqrRtqhKUugq5Mf7ecpa08dP729n7YMxd69OLKwLV%2BUAPdUsvsRGJq01BLFJqFyvX4big29FCgavwNb5BtaCPEbtGaGUkOhI44nPc0nIUTMEUc5K26kNbELQfk6sXElU7AfoQtP%2Bj6JmFO9FfJ%2FFTne1VZRcYdjhtPHeOmglGChz7sb3DSODSIVXBXK4fhY%2FD3LKfK6JNwP&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20240812T192159Z&X-Amz-SignedHeaders=host&X-Amz-Credential=ASIA4PY6KVKEEJCK2C4E%2F20240812%2Fus-east-2%2Fs3%2Faws4_request&X-Amz-Expires=3600&X-Amz-Signature=0cecd10df31c9c0ab2f890f30643441d595ce016865a02b7bd94065b605c4852',\n 'performedAt': '2024-08-12',\n 'exam': {\n 'id': 21\n },\n 'examParse': {},\n 'examResults': [\n {\n 'value': '1:8',\n 'expectedExamResult': {\n 'id': 25\n }\n }\n ],\n 'laboratory': null,\n 'id': null,\n 'source': 'MANUAL'\n }\n];\n","import { inject, Injectable } from '@angular/core';\nimport { HttpClient, HttpContext, HttpHeaders } from '@angular/common/http';\nimport { forkJoin, from, Observable, of } from 'rxjs';\nimport { map, switchMap, tap } from 'rxjs/operators';\nimport { DEVTOOLS_CONFIG, ValidationMedia } from './devtools-config';\nimport { DevtoolsUtils } from './devtools-utils';\nimport { DevtoolsTypeform } from './typeform';\nimport { DC_AUTH_TOKEN } from './devtools-http.interceptor';\nimport { EXAMS_18 } from './data/exams-18.data';\n\nexport interface UserData {\n customerOrganizationId?: string;\n orgDocument?: string;\n orgDocumentType?: string;\n document: string | undefined;\n fullName: string | undefined;\n biologicalSex: string | undefined;\n birthdate: string | undefined;\n typeGenerator: 'signup' | 'autoSignup' | 'removePhone' | undefined;\n}\n\nexport interface PersonRegistration {\n hasDocument: boolean;\n hasVerifiedPhone: boolean;\n phoneEnding?: string;\n phoneAreaCode?: string;\n}\n\nexport type BiologicalSex = 'MALE' | 'FEMALE';\nexport type Gender = 'MALE' | 'FEMALE' | 'NON_BINARY' | 'OTHER';\n\nexport interface SignupProperties {\n name: string;\n birthdate: string;\n biologicalSex: BiologicalSex;\n gender: Gender;\n}\n\nexport interface OtpLoginResult {\n accessToken: string;\n refreshToken: string;\n profile: any;\n}\n\nexport interface TokenResponse {\n accessToken: string;\n refreshToken: string;\n}\n\n/**\n * All API access for the DevTools, on the package's OWN HttpClient (isolated\n * interceptor). Mirrors the host UserService surface plus the OTP/Google auth\n * endpoints, so panels port across with no behavioural change.\n */\n@Injectable()\nexport class DevtoolsApiService {\n private readonly http = inject(HttpClient);\n private readonly config = inject(DEVTOOLS_CONFIG);\n private readonly utils = inject(DevtoolsUtils);\n private readonly typeform = inject(DevtoolsTypeform);\n\n private get api(): string {\n return this.config.apiBaseUrl;\n }\n get media(): ValidationMedia {\n return this.config.media ?? 'WHATSAPP';\n }\n\n // ---- auth endpoints ---------------------------------------------------\n checkRegistration(cpf: string): Observable<PersonRegistration> {\n return this.http.get<PersonRegistration>(`${this.api}/person-registrations`, {\n params: this.utils.objectParams({ document: onlyDigits(cpf) }),\n });\n }\n\n requestCode(input: { document: string; phone: string; personProperties?: SignupProperties }): Observable<unknown> {\n return this.recaptcha().pipe(\n switchMap((token) => {\n const headers = new HttpHeaders({ 'X-Google-Recaptcha-Token': token });\n const recipientValidationCode: Record<string, unknown> = {\n document: onlyDigits(input.document),\n phone: input.phone,\n media: this.media,\n };\n if (input.personProperties) recipientValidationCode['personProperties'] = input.personProperties;\n return this.http.post(`${this.api}/recipient-validation-codes`, { recipientValidationCode }, { headers });\n }),\n );\n }\n\n exchangeOtp(document: string, code: string): Observable<TokenResponse> {\n return this.http.post<TokenResponse>(`${this.api}/token`, {\n grantType: 'RECIPIENT_VALIDATION_CODE',\n code: onlyDigits(code),\n document: onlyDigits(document),\n });\n }\n\n /** Exchange the OTP code and load the profile in one shot. */\n otpLogin(document: string, code: string): Observable<OtpLoginResult> {\n return this.exchangeOtp(document, code).pipe(\n switchMap((tokens) =>\n this.self(tokens.accessToken).pipe(\n map((profile) => ({ accessToken: tokens.accessToken, refreshToken: tokens.refreshToken, profile })),\n ),\n ),\n );\n }\n\n exchangeGoogle(googleAccessToken: string): Observable<TokenResponse> {\n return this.http.post<TokenResponse>(`${this.api}/token`, {\n grantType: 'GOOGLE_ACCESS_TOKEN',\n googleAccessToken,\n });\n }\n\n refreshToken(refreshToken: string): Observable<TokenResponse> {\n return this.http.post<TokenResponse>(`${this.api}/token`, {\n grantType: 'REFRESH_TOKEN',\n refreshToken,\n });\n }\n\n /** GET /persons/self. Pass a token to use it instead of the admin token. */\n self(accessToken?: string): Observable<any> {\n const context = accessToken ? new HttpContext().set(DC_AUTH_TOKEN, accessToken) : undefined;\n return this.http\n .get<{ person: any }>(`${this.api}/persons/self`, context ? { context } : {})\n .pipe(map((r) => r?.person ?? null));\n }\n\n // ---- users ------------------------------------------------------------\n findUser(queryParams: any): Observable<any> {\n return this.http.get(`${this.api}/persons`, { params: this.utils.objectParams(queryParams) });\n }\n\n findRemoveUserPhone(phone: any): Observable<any> {\n return this.findUser({ phones: `+55${phone}` }).pipe(\n map((res: any) => res?.persons?.[0]),\n switchMap((user: any) => {\n if (user?.id) {\n return this.http.patch(`${this.api}/persons/${user.id}`, { person: { phone: null } });\n }\n return of('');\n }),\n );\n }\n\n signupForm(body: UserData, phone?: string): Observable<any> {\n const request = this.http.post(`${this.api}/person-imports`, this.personImportBody(body));\n if (phone) return this.findRemoveUserPhone(phone).pipe(switchMap(() => request));\n return request;\n }\n\n autoSignup(body: UserData, phone?: string): Observable<any> {\n return this.signupForm(body, phone).pipe(\n switchMap(() => this.findUser({ q: body.document }).pipe(map((r: any) => r?.persons?.[0]))),\n switchMap((person: any) => {\n const { biologicalSex, birthdate, fullName } = body;\n const formBody = this.typeform.getCase({ personId: person?.id, biologicalSex, birthdate, name: fullName });\n return this.http.post(`${this.api}/form-submissions`, formBody);\n }),\n );\n }\n\n private personImportBody(body: UserData) {\n const { document, fullName: name, birthdate, biologicalSex, orgDocument, orgDocumentType, customerOrganizationId } = body;\n return {\n personImport: {\n customerOrganization: { id: customerOrganizationId },\n persons: [\n {\n document,\n personProperties: { name, biologicalSex, birthdate },\n subscription: {\n ownership: 'HOLDER',\n organization: { document: orgDocument, documentType: orgDocumentType },\n },\n },\n ],\n },\n };\n }\n\n generatePerformedExams(user: UserData, age: number, documentUrl: string): Observable<any[]> {\n return this.findUser({ documents: user.document }).pipe(\n switchMap((res: any) => {\n const person = res?.persons?.[0];\n const today = new Date();\n const performedAt = `${today.getFullYear()}-${String(today.getMonth() + 1).padStart(2, '0')}-${String(today.getDate()).padStart(2, '0')}`;\n if (age === 18) {\n const performedExams = (EXAMS_18 as any[]).map((exam) => ({\n ...exam,\n person: { id: person?.id },\n performedAt,\n examSource: { name: 'ADMIN' },\n documentUrl,\n }));\n return this.http\n .post<any>(`${this.api}/performed-exams/create-many`, { performedExams })\n .pipe(map((r: any) => r?.performedExams ?? []));\n }\n return of([] as any[]);\n }),\n );\n }\n\n // ---- organizations + permissions -------------------------------------\n getWithQuery(params: any): Observable<any[]> {\n return this.http\n .get<any>(`${this.api}/organizations`, { params: this.utils.objectParams(params) })\n .pipe(map((r: any) => r?.organizations ?? []));\n }\n\n getOrganizationsByIds(ids: number[]): Observable<any[]> {\n if (!ids.length) return of([]);\n return this.getWithQuery({ minActiveSubscriptions: 1, ids: ids.join(','), offset: 0, limit: 15 });\n }\n\n getAuthStatements(personId: number): Observable<any[]> {\n return this.http\n .get<any>(`${this.api}/auth-statements`, { params: this.utils.objectParams({ principalPersonIds: personId, roleNames: 'MANAGER,DOCTOR' }) })\n .pipe(map((r: any) => r?.authStatements ?? []));\n }\n\n getAuthStatementsByPerson(personId: number): Observable<any[]> {\n return this.http\n .get<any>(`${this.api}/auth-statements`, { params: this.utils.objectParams({ principalPersonIds: personId }) })\n .pipe(map((r: any) => r?.authStatements ?? []));\n }\n\n createAuthStatement(personId: number, roleName: 'MANAGER' | 'DOCTOR', organizationId: number): Observable<any> {\n return this.http.post(`${this.api}/auth-statements`, {\n authStatement: {\n role: { name: roleName },\n principal: { person: { id: personId } },\n resource: { organization: { id: organizationId } },\n },\n });\n }\n\n deleteAuthStatement(authStatementId: number): Observable<void> {\n return this.http.delete<void>(`${this.api}/auth-statements/${authStatementId}`);\n }\n\n deleteAuthStatementsByIds(ids: number[]): Observable<void[]> {\n const valid = ids.filter((id): id is number => !!id);\n if (!valid.length) return of([]);\n return forkJoin(valid.map((id) => this.deleteAuthStatement(id)));\n }\n\n // ---- reCAPTCHA (v2 Invisible) -----------------------------------------\n /** Cached invisible-widget id: rendered once, re-executed per request. */\n private recaptchaWidgetId: number | null = null;\n /** Resolver for the in-flight execute() — the widget callback fires this. */\n private recaptchaResolver: ((token: string) => void) | null = null;\n\n private recaptcha(): Observable<string> {\n const key = this.config.recaptchaSiteKey;\n if (!key) {\n console.warn('[devtools] recaptchaSiteKey not configured — request will be sent without a reCAPTCHA token');\n return of('');\n }\n return from(\n ensureRecaptchaScript()\n .then(\n (grecaptcha) =>\n new Promise<string>((resolve) => {\n // v2 Invisible delivers the token via callback, not a promise.\n // Point the shared resolver at THIS request before executing.\n this.recaptchaResolver = (token: string) => {\n this.recaptchaResolver = null;\n try {\n grecaptcha.reset(this.recaptchaWidgetId!);\n } catch {\n /* ignore */\n }\n resolve(token || '');\n };\n if (this.recaptchaWidgetId == null) {\n const host = document.createElement('div');\n host.style.display = 'none';\n document.body.appendChild(host);\n this.recaptchaWidgetId = grecaptcha.render(host, {\n sitekey: key,\n size: 'invisible',\n callback: (token: string) => this.recaptchaResolver?.(token),\n 'error-callback': () => this.recaptchaResolver?.(''),\n 'expired-callback': () => this.recaptchaResolver?.(''),\n });\n }\n grecaptcha.execute(this.recaptchaWidgetId);\n }),\n )\n .catch((e: unknown) => {\n console.error('[devtools] failed to load reCAPTCHA', e);\n return '';\n }),\n );\n }\n}\n\nconst RECAPTCHA_SCRIPT_ID = 'dc-recaptcha-v2-invisible';\n\n/**\n * Lazy-load the reCAPTCHA v2 (explicit render) script (once) and resolve with\n * the `grecaptcha` API. The host only passes `recaptchaSiteKey`; the package\n * injects the script itself so nothing depends on the host having it loaded.\n */\nconst RECAPTCHA_ONLOAD_CB = '__dcRecaptchaOnload';\n\nfunction ensureRecaptchaScript(): Promise<any> {\n const w = window as any;\n if (w.grecaptcha?.render) return Promise.resolve(w.grecaptcha);\n\n return new Promise((resolve, reject) => {\n // The script tag's own `load` event fires before grecaptcha.render is ready.\n // The library's own `onload=` callback (passed in the URL) only fires once\n // the API is fully initialized — that's the reliable readiness signal.\n w[RECAPTCHA_ONLOAD_CB] = () => resolve(w.grecaptcha);\n\n const existing = document.getElementById(RECAPTCHA_SCRIPT_ID) as HTMLScriptElement | null;\n if (existing) {\n if (w.grecaptcha?.render) return resolve(w.grecaptcha);\n existing.addEventListener('error', () => reject(new Error('reCAPTCHA script failed to load')), { once: true });\n return; // the pending onload callback above will resolve us\n }\n const script = document.createElement('script');\n script.id = RECAPTCHA_SCRIPT_ID;\n // `onload=` => library calls us when ready; `render=explicit` => we create\n // the (invisible) widget ourselves.\n script.src = `https://www.google.com/recaptcha/api.js?onload=${RECAPTCHA_ONLOAD_CB}&render=explicit`;\n script.async = true;\n script.defer = true;\n script.onerror = () => reject(new Error('reCAPTCHA script failed to load'));\n document.head.appendChild(script);\n });\n}\n\nfunction onlyDigits(v: string | undefined): string {\n return (v ?? '').replace(/\\D/g, '');\n}\n","import { computed, inject, Injectable, signal } from '@angular/core';\nimport { Observable, tap } from 'rxjs';\nimport { DEVTOOLS_CONFIG } from './devtools-config';\nimport { DevtoolsStorage } from './devtools-storage.service';\nimport { DevtoolsApiService, TokenResponse } from './devtools-api.service';\n\nconst ADMIN_TOKEN = 'DEVTOOLS_ADMIN_TOKEN';\nconst ADMIN_REFRESH = 'DEVTOOLS_ADMIN_REFRESH';\nconst ADMIN_USER = 'DEVTOOLS_ADMIN_USER';\nconst OAUTH_FLAG = 'DEVTOOLS_OAUTH_PENDING';\n\n/**\n * The DevTools' OWN identity (admin). Completely separate from the host app's\n * session: its tokens live under `DEVTOOLS_ADMIN_*` and are what the package's\n * interceptor attaches. The package is \"logged in\" iff an admin token exists.\n */\n@Injectable()\nexport class DevtoolsAuthService {\n private readonly storage = inject(DevtoolsStorage);\n private readonly config = inject(DEVTOOLS_CONFIG);\n private readonly api = inject(DevtoolsApiService);\n\n private readonly _token = signal<string | null>(this.storage.get(ADMIN_TOKEN));\n readonly logged = computed(() => !!this._token());\n\n adminToken(): string | null {\n return this._token();\n }\n adminRefreshToken(): string | null {\n return this.storage.get<string>(ADMIN_REFRESH);\n }\n adminProfile(): any {\n return this.storage.get(ADMIN_USER);\n }\n isLogged(): boolean {\n return !!this._token();\n }\n\n /** Begin Google OAuth for the admin (full-page redirect). */\n loginGoogleRedirect(): void {\n const clientId = this.config.googleClientId;\n const redirect = this.config.googleRedirectUri;\n if (!clientId) {\n console.error('[devtools] googleClientId not configured');\n return;\n }\n if (!redirect) {\n console.error(\n '[devtools] googleRedirectUri not configured — set it to a URI whitelisted in the Google OAuth client',\n );\n return;\n }\n try {\n sessionStorage.setItem(OAUTH_FLAG, '1');\n } catch {\n /* ignore */\n }\n window.location.href =\n `https://accounts.google.com/o/oauth2/v2/auth?client_id=${clientId}` +\n `&redirect_uri=${encodeURIComponent(redirect)}` +\n `&response_type=token&scope=openid+email&include_granted_scopes=true`;\n }\n\n /**\n * Consume a Google OAuth return that WE initiated (guarded by a flag so we\n * never steal the host app's own OAuth redirect). Exchanges the access token\n * for admin JWTs and loads the admin profile.\n */\n handleGoogleReturn(): void {\n let pending = false;\n try {\n pending = sessionStorage.getItem(OAUTH_FLAG) === '1';\n } catch {\n /* ignore */\n }\n if (!pending) return;\n\n // Implicit flow returns everything in the URL fragment. We read the query\n // too so a misconfigured response_type still surfaces an error instead of\n // failing silently.\n const params = new URLSearchParams(\n window.location.hash.replace(/^#/, '') || window.location.search.replace(/^\\?/, ''),\n );\n const googleToken = params.get('access_token');\n const error = params.get('error');\n\n // Neither token nor error here => this isn't our OAuth landing yet; keep the\n // flag so the real return (the whitelisted redirect_uri) can consume it.\n if (!googleToken && !error) return;\n\n try {\n sessionStorage.removeItem(OAUTH_FLAG);\n } catch {\n /* ignore */\n }\n\n if (error) {\n console.error(\n '[devtools] google oauth returned an error:',\n error,\n params.get('error_description') ?? '',\n );\n this.cleanOAuthUrl();\n return;\n }\n\n this.exchangeGoogle(googleToken!).subscribe({\n next: () => this.cleanOAuthUrl(),\n error: (e) => console.error('[devtools] admin google login failed', e),\n });\n }\n\n /** Strip the OAuth fragment/query so a reload doesn't re-trigger the return. */\n private cleanOAuthUrl(): void {\n try {\n history.replaceState(null, '', window.location.pathname + window.location.search);\n } catch {\n /* ignore */\n }\n }\n\n exchangeGoogle(googleToken: string): Observable<any> {\n return this.api.exchangeGoogle(googleToken).pipe(\n tap((tokens) => this.setTokens(tokens)),\n tap(() => this.api.self(this._token() ?? undefined).subscribe((p) => this.storage.set(ADMIN_USER, p))),\n );\n }\n\n /** Used by the interceptor on 401. */\n refresh(): Observable<TokenResponse> {\n return this.api\n .refreshToken(this.adminRefreshToken() ?? '')\n .pipe(tap((tokens) => this.setTokens(tokens)));\n }\n\n setTokens(tokens: TokenResponse): void {\n this.storage.set(ADMIN_TOKEN, tokens.accessToken);\n this.storage.set(ADMIN_REFRESH, tokens.refreshToken);\n this._token.set(tokens.accessToken);\n }\n\n logout(): void {\n this.storage.remove(ADMIN_TOKEN);\n this.storage.remove(ADMIN_REFRESH);\n this.storage.remove(ADMIN_USER);\n this._token.set(null);\n }\n}\n","import { HttpContextToken, HttpInterceptorFn } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { catchError, switchMap, throwError } from 'rxjs';\nimport { DEVTOOLS_CONFIG } from './devtools-config';\nimport { DevtoolsAuthService } from './devtools-auth.service';\n\n/**\n * Per-request override token: when set, this access token is used instead of\n * the admin token (e.g. the just-issued test-user token for `persons/self`).\n */\nexport const DC_AUTH_TOKEN = new HttpContextToken<string | null>(() => null);\n\n/**\n * The package's OWN HTTP interceptor — registered only on the package's\n * isolated HttpClient, never on the host's. By default it attaches the DevTools\n * admin token + `X-Mar-Locale`, and refreshes the admin token on 401. `/token`\n * is sent bare (no auth, no locale); S3 is passed through untouched.\n */\nexport const devtoolsHttpInterceptor: HttpInterceptorFn = (req, next) => {\n const config = inject(DEVTOOLS_CONFIG);\n const auth = inject(DevtoolsAuthService);\n\n if (req.url.includes('.s3.')) return next(req);\n\n const isTokenEndpoint = req.url.includes('/token');\n const locale = config.locale ?? 'pt_BR';\n const override = req.context.get(DC_AUTH_TOKEN);\n const token = override ?? (isTokenEndpoint ? null : auth.adminToken());\n\n const setHeaders: Record<string, string> = isTokenEndpoint\n ? {}\n : { 'X-Mar-Locale': locale };\n if (token && !isTokenEndpoint) setHeaders['Authorization'] = `Bearer ${token}`;\n\n const authed = req.clone({ setHeaders });\n\n return next(authed).pipe(\n catchError((err: any) => {\n const canRefresh =\n err?.status === 401 &&\n !isTokenEndpoint &&\n !override &&\n !!auth.adminRefreshToken();\n if (canRefresh) {\n return auth.refresh().pipe(\n switchMap(() =>\n next(\n req.clone({\n setHeaders: {\n 'X-Mar-Locale': locale,\n Authorization: `Bearer ${auth.adminToken()}`,\n },\n }),\n ),\n ),\n catchError((e) => {\n auth.logout();\n return throwError(() => e);\n }),\n );\n }\n return throwError(() => err);\n }),\n );\n};\n","import { computed, inject, Injectable, signal } from '@angular/core';\nimport { DevtoolsStorage } from './devtools-storage.service';\nimport { DevtoolsAuthService } from './devtools-auth.service';\n\nexport interface DevtoolsSession {\n id: string; // 'admin' or CPF\n kind: 'admin' | 'test';\n name: string;\n document?: string;\n accessToken: string;\n refreshToken: string;\n profile?: any;\n}\n\nconst SESSIONS_KEY = 'DEVTOOLS_SESSIONS';\nconst ACTIVE_KEY = 'DEVTOOLS_ACTIVE';\n\n// The active app session — read by the HOST patient app. This is the ONE\n// intentional touch-point with the host, so these keys MUST match the host's\n// JwtAuthService exactly and must never change.\nconst JWT_TOKEN = 'JWT_TOKEN';\nconst JWT_REFRESH_TOKEN = 'JWT_REFRESH_TOKEN';\nconst APP_USER = 'EGRET_USER';\n\n/**\n * Manages the *active app session* that the host patient app consumes, letting\n * the QA switch it between the fixed admin (the DevTools identity) and any saved\n * generated user — without re-OTP. The DevTools' own API calls do NOT use this;\n * they always use the admin token via the package interceptor.\n */\n@Injectable()\nexport class DevtoolsSessionService {\n private readonly storage = inject(DevtoolsStorage);\n private readonly auth = inject(DevtoolsAuthService);\n\n private readonly _sessions = signal<DevtoolsSession[]>(this.storage.get(SESSIONS_KEY) ?? []);\n readonly sessions = this._sessions.asReadonly();\n readonly activeId = signal<string | null>(this.storage.get(ACTIVE_KEY));\n\n /** Admin session derived from the DevTools identity (auth). */\n readonly admin = computed<DevtoolsSession | null>(() => {\n const token = this.auth.adminToken();\n if (!token) return null;\n return {\n id: 'admin',\n kind: 'admin',\n name: this.auth.adminProfile()?.name || this.auth.adminProfile()?.email || 'Admin (DevTools)',\n accessToken: token,\n refreshToken: this.auth.adminRefreshToken() ?? '',\n profile: this.auth.adminProfile(),\n };\n });\n\n saveTestSession(session: Omit<DevtoolsSession, 'id' | 'kind'> & { document: string }): DevtoolsSession {\n const full: DevtoolsSession = { ...session, id: session.document, kind: 'test' };\n const next = [full, ...this._sessions().filter((s) => s.id !== full.id)].slice(0, 20);\n this._sessions.set(next);\n this.storage.set(SESSIONS_KEY, next);\n return full;\n }\n\n /**\n * Write a stored session into the host's active-session keys and send the user\n * to '/' (full navigation) so the host app re-reads it from a clean route — it\n * only reads these keys at bootstrap. Covers both a fresh login and switching\n * between users.\n */\n switchTo(id: string): DevtoolsSession | null {\n const session = id === 'admin' ? this.admin() : this._sessions().find((s) => s.id === id) ?? null;\n if (!session) return null;\n this.storage.set(JWT_TOKEN, session.accessToken);\n this.storage.set(JWT_REFRESH_TOKEN, session.refreshToken);\n this.storage.set(APP_USER, session.profile ?? null);\n this.activeId.set(id);\n this.storage.set(ACTIVE_KEY, id);\n try {\n window.location.href = '/';\n } catch {\n /* non-browser env — ignore */\n }\n return session;\n }\n\n removeSession(id: string): void {\n const next = this._sessions().filter((s) => s.id !== id);\n this._sessions.set(next);\n this.storage.set(SESSIONS_KEY, next);\n if (this.activeId() === id && this.admin()) this.switchTo('admin');\n }\n\n active(): DevtoolsSession | null {\n const id = this.activeId();\n if (!id) return null;\n return id === 'admin' ? this.admin() : this._sessions().find((s) => s.id === id) ?? null;\n }\n}\n","/**\n * Shared inline-style objects for the DevTools domain panels. Bound via\n * `[style]=\"UI.x\"` so there are no view-encapsulation surprises when the panels\n * are rendered inside the shell via NgComponentOutlet. Colours follow the\n * shell's dark theme (the `--dts-*` custom properties).\n */\nexport const UI = {\n intro: {\n fontSize: '13px',\n color: '#9a9eab',\n lineHeight: '1.5',\n margin: '0 0 16px',\n },\n field: {\n border: '1px solid #2a2c38',\n borderRadius: '11px',\n background: '#16181f',\n padding: '8px 13px',\n marginBottom: '12px',\n },\n label: {\n fontSize: '10.5px',\n fontFamily: \"'JetBrains Mono',monospace\",\n letterSpacing: '.06em',\n color: '#7a7e8b',\n marginBottom: '2px',\n textTransform: 'uppercase',\n },\n input: {\n width: '100%',\n border: 'none',\n background: 'transparent',\n color: '#eceef3',\n fontSize: '14.5px',\n outline: 'none',\n padding: '2px 0',\n },\n primary: {\n width: '100%',\n marginTop: '8px',\n padding: '14px',\n borderRadius: '12px',\n border: 'none',\n background: '#ffc454',\n color: '#1a1b22',\n fontSize: '14.5px',\n fontWeight: '700',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '9px',\n },\n ghost: {\n width: '100%',\n marginTop: '10px',\n padding: '12px',\n borderRadius: '12px',\n border: '1px solid #2a2c38',\n background: 'transparent',\n color: '#8b8f9c',\n fontSize: '13px',\n cursor: 'pointer',\n },\n card: {\n background: '#16181f',\n border: '1px solid #24262f',\n borderRadius: '12px',\n padding: '13px 15px',\n marginBottom: '9px',\n },\n row: {\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n width: '100%',\n textAlign: 'left',\n background: '#16181f',\n border: '1px solid #24262f',\n borderRadius: '12px',\n padding: '13px 15px',\n marginBottom: '10px',\n color: '#eceef3',\n cursor: 'pointer',\n },\n mono: {\n fontFamily: \"'JetBrains Mono',monospace\",\n fontSize: '11.5px',\n color: '#8b8f9c',\n },\n pre: {\n fontFamily: \"'JetBrains Mono',monospace\",\n fontSize: '12px',\n lineHeight: '1.7',\n color: '#c4c7d0',\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-all',\n margin: '0',\n background: '#16181f',\n border: '1px solid #24262f',\n borderRadius: '10px',\n padding: '12px',\n },\n} as const;\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { DevtoolsToastService } from '../devtools-toast.service';\nimport { DevtoolsAuthService } from '../core/devtools-auth.service';\nimport { DevtoolsSessionService } from '../core/devtools-session.service';\nimport { UI } from './ui';\n\n/**\n * DevTools admin login (Google OAuth, handled inside the package). The admin is\n * the package's own fixed identity — its tokens are stored separately and used\n * by the package interceptor for all DevTools calls.\n */\n@Component({\n selector: 'devtools-admin-login-panel',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (auth.logged()) {\n <div [style]=\"UI.card\">\n <div style=\"display:flex;align-items:center;gap:8px;color:#1fbe7e;font-size:13px;font-weight:600\">\n <span class=\"dts-sym\" style=\"font-family:'Material Symbols Outlined';font-size:18px\">shield_person</span>\n DevTools logado (admin)\n </div>\n <div [style]=\"UI.mono\" style=\"margin-top:8px;word-break:break-all\">{{ short(auth.adminToken()) }}</div>\n </div>\n @if (session.activeId() === 'admin') {\n <p [style]=\"UI.intro\" style=\"color:#1fbe7e\">Sessão do app ativa: admin.</p>\n } @else {\n <button type=\"button\" [style]=\"UI.primary\" (click)=\"activateAdmin()\">\n <span class=\"dts-sym\" style=\"font-family:'Material Symbols Outlined';font-size:19px\">switch_account</span>\n Ativar sessão admin no app\n </button>\n }\n <button type=\"button\" [style]=\"UI.ghost\" (click)=\"auth.loginGoogleRedirect()\">Refazer login Google</button>\n <button type=\"button\" [style]=\"UI.ghost\" (click)=\"logout()\">Sair (logout DevTools)</button>\n } @else {\n <p [style]=\"UI.intro\">\n O DevTools tem login próprio (admin). Entre com o Google para liberar as\n ferramentas — o acesso fica guardado separado do app.\n </p>\n <button type=\"button\" [style]=\"UI.primary\" (click)=\"auth.loginGoogleRedirect()\">\n <span style=\"width:20px;height:20px;border-radius:50%;background:#23242b;color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:12px;font-family:'JetBrains Mono',monospace\">G</span>\n Entrar com Google (admin)\n </button>\n }\n `,\n})\nexport class AdminLoginPanelComponent {\n protected readonly UI = UI;\n protected readonly auth = inject(DevtoolsAuthService);\n protected readonly session = inject(DevtoolsSessionService);\n private readonly toast = inject(DevtoolsToastService);\n\n protected short(token: string | null): string {\n return token && token.length > 42 ? token.slice(0, 42) + '…' : token ?? '';\n }\n\n protected activateAdmin(): void {\n this.session.switchTo('admin');\n this.toast.show('Sessão admin ativada no app');\n }\n\n protected logout(): void {\n this.auth.logout();\n this.toast.show('DevTools deslogado');\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n inject,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DevtoolsToastService } from '../devtools-toast.service';\nimport {\n BiologicalSex,\n DevtoolsApiService,\n Gender,\n PersonRegistration,\n SignupProperties,\n} from '../core/devtools-api.service';\nimport { DevtoolsSessionService } from '../core/devtools-session.service';\nimport { DevtoolsUserUtils, DevtoolsUtils } from '../core/devtools-utils';\nimport { UI } from './ui';\n\ntype Step = 'cpf' | 'signup' | 'phone' | 'code' | 'done';\n\n/** App login for a generated user via CPF + OTP. Saves + switches the session. */\n@Component({\n selector: 'devtools-login-panel',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [FormsModule],\n template: `\n @if (step === 'cpf') {\n <p [style]=\"UI.intro\">Login no app do paciente com um CPF gerado. O código de 6 dígitos chega via {{ media }}.</p>\n <div [style]=\"UI.field\"><div [style]=\"UI.label\">CPF gerado</div>\n <input [style]=\"UI.input\" [(ngModel)]=\"cpf\" placeholder=\"000.000.000-00\" inputmode=\"numeric\" /></div>\n <button type=\"button\" [style]=\"UI.primary\" [disabled]=\"busy\" (click)=\"checkCpf()\">{{ busy ? 'Verificando…' : 'Continuar' }}</button>\n }\n\n @if (step === 'signup') {\n <p [style]=\"UI.intro\">CPF novo — preencha os dados para criar a conta no app.</p>\n <div [style]=\"UI.field\"><div [style]=\"UI.label\">Nome completo</div><input [style]=\"UI.input\" [(ngModel)]=\"name\" placeholder=\"João Silva\" /></div>\n <div [style]=\"UI.field\"><div [style]=\"UI.label\">Data de nascimento</div><input [style]=\"UI.input\" type=\"date\" [(ngModel)]=\"birthdate\" /></div>\n <div [style]=\"UI.field\"><div [style]=\"UI.label\">Sexo biológico</div>\n <select [style]=\"UI.input\" [(ngModel)]=\"biologicalSex\"><option value=\"MALE\">MALE</option><option value=\"FEMALE\">FEMALE</option></select></div>\n <div [style]=\"UI.field\"><div [style]=\"UI.label\">Gênero</div>\n <select [style]=\"UI.input\" [(ngModel)]=\"gender\"><option value=\"MALE\">MALE</option><option value=\"FEMALE\">FEMALE</option><option value=\"NON_BINARY\">NON_BINARY</option><option value=\"OTHER\">OTHER</option></select></div>\n <div [style]=\"UI.field\"><div [style]=\"UI.label\">Celular</div><input [style]=\"UI.input\" [(ngModel)]=\"phone\" placeholder=\"(11) 98765-4321\" inputmode=\"tel\" /></div>\n <button type=\"button\" [style]=\"UI.primary\" [disabled]=\"busy\" (click)=\"sendCode(true)\">{{ busy ? 'Enviando…' : 'Enviar código' }}</button>\n }\n\n @if (step === 'phone') {\n <p [style]=\"UI.intro\">\n CPF encontrado. Código para o celular\n @if (registration?.phoneAreaCode || registration?.phoneEnding) {\n <strong style=\"color:#eceef3\">({{ registration?.phoneAreaCode }}) •••••-{{ registration?.phoneEnding }}</strong>.\n }\n Confirme o número completo.\n </p>\n <div [style]=\"UI.field\"><div [style]=\"UI.label\">Celular</div><input [style]=\"UI.input\" [(ngModel)]=\"phone\" placeholder=\"(11) 98765-4321\" inputmode=\"tel\" /></div>\n <button type=\"button\" [style]=\"UI.primary\" [disabled]=\"busy\" (click)=\"sendCode(false)\">{{ busy ? 'Enviando…' : 'Enviar código' }}</button>\n }\n\n @if (step === 'code') {\n <p [style]=\"UI.intro\">Digite o código de 6 dígitos enviado via {{ media }}.</p>\n <div [style]=\"UI.field\"><div [style]=\"UI.label\">Código</div>\n <input [style]=\"UI.input\" [(ngModel)]=\"code\" placeholder=\"000000\" inputmode=\"numeric\" maxlength=\"6\"\n style=\"font-family:'JetBrains Mono',monospace;letter-spacing:.4em;font-size:20px\" /></div>\n <button type=\"button\" [style]=\"UI.primary\" [disabled]=\"busy\" (click)=\"confirm()\">{{ busy ? 'Entrando…' : 'Entrar' }}</button>\n <button type=\"button\" [style]=\"UI.ghost\" [disabled]=\"busy\" (click)=\"resend()\">Reenviar código</button>\n }\n\n @if (step === 'done') {\n <div [style]=\"UI.card\">\n <div style=\"display:flex;align-items:center;gap:8px;color:#1fbe7e;font-size:13px;font-weight:600\">\n <span class=\"dts-sym\" style=\"font-family:'Material Symbols Outlined';font-size:18px\">check_circle</span>\n Logado como {{ doneName }}\n </div>\n <div [style]=\"UI.mono\" style=\"margin-top:6px\">Sessão do app ativada e salva.</div>\n </div>\n <button type=\"button\" [style]=\"UI.ghost\" (click)=\"reset()\">Entrar com outro CPF</button>\n }\n\n @if (message) { <div style=\"margin-top:14px;font-size:13px;color:#d6604f\">{{ message }}</div> }\n `,\n})\nexport class LoginPanelComponent {\n protected readonly UI = UI;\n private readonly api = inject(DevtoolsApiService);\n private readonly session = inject(DevtoolsSessionService);\n private readonly userUtils = inject(DevtoolsUserUtils);\n private readonly utils = inject(DevtoolsUtils);\n private readonly toast = inject(DevtoolsToastService);\n private readonly cdr = inject(ChangeDetectorRef);\n\n protected step: Step = 'cpf';\n protected busy = false;\n protected message = '';\n\n protected cpf = '';\n protected name = '';\n protected birthdate = '';\n protected biologicalSex: BiologicalSex = 'MALE';\n protected gender: Gender = 'MALE';\n protected phone = '';\n protected code = '';\n protected registration: PersonRegistration | null = null;\n protected doneName = '';\n\n constructor() {\n const [last] = this.userUtils.getUserFromStorage();\n if (last?.document) this.cpf = this.utils.maskCpfCnpj(last.document);\n }\n\n protected get media(): string {\n return this.api.media;\n }\n\n protected checkCpf(): void {\n const document = this.cpf.replace(/\\D/g, '');\n if (document.length !== 11) return this.fail('CPF inválido — informe 11 dígitos.');\n this.start('Verificando CPF…');\n this.api.checkRegistration(document).subscribe({\n next: (reg) => {\n this.registration = reg;\n this.busy = false;\n this.message = '';\n this.step = reg.hasDocument ? 'phone' : 'signup';\n this.cdr.markForCheck();\n },\n error: (err) => this.failFromHttp(err, 'Falha ao verificar o CPF.'),\n });\n }\n\n protected sendCode(isSignup: boolean): void {\n const phoneE164 = this.toE164(this.phone);\n if (!/^\\+55\\d{10,11}$/.test(phoneE164)) return this.fail('Celular inválido — use DDD + número.');\n let personProperties: SignupProperties | undefined;\n if (isSignup) {\n if (!this.name.trim()) return this.fail('Informe o nome.');\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(this.birthdate)) return this.fail('Data de nascimento inválida (YYYY-MM-DD).');\n personProperties = { name: this.name.trim(), birthdate: this.birthdate, biologicalSex: this.biologicalSex, gender: this.gender };\n }\n this.start('Enviando código…');\n this.api.requestCode({ document: this.cpf, phone: phoneE164, personProperties }).subscribe({\n next: () => {\n this.busy = false;\n this.message = '';\n this.step = 'code';\n this.toast.show('Código enviado via ' + this.media);\n this.cdr.markForCheck();\n },\n error: (err) => this.failFromHttp(err, 'Falha ao enviar o código.'),\n });\n }\n\n protected resend(): void {\n this.sendCode(!!this.registration && !this.registration.hasDocument);\n }\n\n protected confirm(): void {\n if (!/^\\d{6}$/.test(this.code)) return this.fail('Código inválido — 6 dígitos.');\n const document = this.cpf.replace(/\\D/g, '');\n this.start('Entrando…');\n this.api.otpLogin(document, this.code).subscribe({\n next: (res) => {\n const profile: any = res.profile;\n const name = profile?.personProperties?.name || profile?.name || this.name.trim() || this.fmtCpf(document);\n const saved = this.session.saveTestSession({\n name,\n document,\n accessToken: res.accessToken,\n refreshToken: res.refreshToken,\n profile,\n });\n this.session.switchTo(saved.id);\n this.doneName = name;\n this.busy = false;\n this.message = '';\n this.step = 'done';\n this.toast.show('Login efetuado · sessão do app ativada');\n this.cdr.markForCheck();\n },\n error: (err) => this.failFromHttp(err, 'Código incorreto ou expirado.'),\n });\n }\n\n protected reset(): void {\n this.step = 'cpf';\n this.code = '';\n this.message = '';\n this.cdr.markForCheck();\n }\n\n private toE164(phone: string): string {\n const digits = (phone || '').replace(/\\D/g, '');\n if (!digits) return '';\n return digits.startsWith('55') ? `+${digits}` : `+55${digits}`;\n }\n private fmtCpf(d: string): string {\n return (d || '').replace(/(\\d{3})(\\d{3})(\\d{3})(\\d{2})/, '$1.$2.$3-$4');\n }\n private start(msg: string): void {\n this.busy = true;\n this.message = msg;\n this.cdr.markForCheck();\n }\n private fail(msg: string): void {\n this.busy = false;\n this.message = msg;\n this.cdr.markForCheck();\n }\n private failFromHttp(err: any, fallback: string): void {\n this.busy = false;\n this.message = err?.error?.message || fallback;\n this.utils.setErrorToast(err);\n this.cdr.markForCheck();\n }\n}\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { DevtoolsToastService } from '../devtools-toast.service';\nimport { DevtoolsSession, DevtoolsSessionService } from '../core/devtools-session.service';\nimport { UI } from './ui';\n\n/** Switch the active app session between admin and saved generated users. */\n@Component({\n selector: 'devtools-switch-panel',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <p [style]=\"UI.intro\">\n Troque a sessão ativa do app. O admin fica sempre guardado; os usuários\n gerados são salvos para evitar refazer o OTP.\n </p>\n @for (s of rows(); track s.id) {\n <button type=\"button\" [style]=\"UI.row\" (click)=\"switch(s)\">\n <span class=\"dts-sym\" style=\"font-family:'Material Symbols Outlined';font-size:20px\"\n [style.color]=\"s.kind === 'admin' ? '#ffc454' : '#5b8cff'\">\n {{ s.kind === 'admin' ? 'shield_person' : 'person' }}\n </span>\n <div style=\"flex:1;min-width:0\">\n <div style=\"font-size:14px;font-weight:600;color:#eceef3\">{{ s.name }}</div>\n <div [style]=\"UI.mono\">{{ s.document ? fmtCpf(s.document) : 'DevTools' }}</div>\n </div>\n @if (active() === s.id) {\n <span style=\"font-family:'JetBrains Mono',monospace;font-size:10px;font-weight:700;color:#1fbe7e;background:#10241b;border:1px solid #1e4634;border-radius:6px;padding:4px 8px\">ATIVO</span>\n } @else if (s.kind === 'test') {\n <span class=\"dts-sym\" style=\"font-family:'Material Symbols Outlined';font-size:18px;color:#6a6e7b\" (click)=\"remove($event, s)\">delete</span>\n }\n </button>\n } @empty {\n <p [style]=\"UI.intro\">Nenhuma sessão salva. Faça login admin e gere usuários.</p>\n }\n `,\n})\nexport class SwitchPanelComponent {\n protected readonly UI = UI;\n protected readonly session = inject(DevtoolsSessionService);\n private readonly toast = inject(DevtoolsToastService);\n\n protected rows(): DevtoolsSession[] {\n const admin = this.session.admin();\n return [...(admin ? [admin] : []), ...this.session.sessions()];\n }\n\n protected active(): string | null {\n return this.session.activeId();\n }\n\n protected switch(s: DevtoolsSession): void {\n this.session.switchTo(s.id);\n this.toast.show('Sessão ativa: ' + s.name);\n }\n\n protected remove(event: Event, s: DevtoolsSession): void {\n event.stopPropagation();\n this.session.removeSession(s.id);\n this.toast.show('Sessão removida');\n }\n\n protected fmtCpf(d: string): string {\n return (d || '').replace(/(\\d{3})(\\d{3})(\\d{3})(\\d{2})/, '$1.$2.$3-$4');\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n inject,\n OnInit,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DevtoolsToastService } from '../devtools-toast.service';\nimport { DevtoolsApiService, UserData } from '../core/devtools-api.service';\nimport { DevtoolsUserUtils, DevtoolsUtils, OPTIONS_RESPONSES_CASE } from '../core/devtools-utils';\nimport { DevtoolsAuthService } from '../core/devtools-auth.service';\nimport { DevtoolsSessionService } from '../core/devtools-session.service';\nimport { DEVTOOLS_CONFIG } from '../core/devtools-config';\nimport { UI } from './ui';\n\ninterface ScenarioCard {\n key: 'manual' | 'auto';\n title: string;\n description: string;\n}\n\n/** Real user generator (manual + automatic) + post-run OTP login. */\n@Component({\n selector: 'devtools-generator-panel',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [FormsModule],\n template: `\n <div [style]=\"UI.label\">Cenários</div>\n @for (card of scenarios; track card.key) {\n <button type=\"button\" [style]=\"UI.card\"\n [style.borderColor]=\"scenario === card.key ? '#4b4ea8' : '#24262f'\"\n [style.background]=\"scenario === card.key ? '#1a1b2e' : '#16181f'\"\n style=\"width:100%;text-align:left;cursor:pointer\" (click)=\"selectScenario(card.key)\">\n <div style=\"font-size:14px;font-weight:600\" [style.color]=\"scenario === card.key ? '#bcbdff' : '#cdd0d9'\">{{ card.title }}</div>\n <div style=\"font-size:12px;color:#8b8f9c;margin-top:3px;line-height:1.4\">{{ card.description }}</div>\n </button>\n }\n\n <label style=\"display:flex;align-items:center;gap:12px;margin:16px 0;cursor:pointer\">\n <button type=\"button\" (click)=\"toggleSms()\"\n [style.background]=\"removePhone ? '#ffc454' : '#33353f'\"\n style=\"width:44px;height:26px;border-radius:999px;border:none;padding:3px;display:flex;flex:none\"\n [style.justifyContent]=\"removePhone ? 'flex-end' : 'flex-start'\">\n <span style=\"width:20px;height:20px;border-radius:50%;background:#fff;display:block\"></span>\n </button>\n <span style=\"font-size:13.5px;color:#cdd0d9\">Liberar meu celular para testes SMS</span>\n </label>\n @if (removePhone) {\n <div [style]=\"UI.field\"><div [style]=\"UI.label\">Celular (será liberado no cadastro)</div>\n <input [style]=\"UI.input\" [(ngModel)]=\"phone\" placeholder=\"11985024625\" inputmode=\"tel\" /></div>\n }\n\n @if (scenario === 'auto') {\n <div [style]=\"UI.field\"><div [style]=\"UI.label\">Tipo de formulário</div>\n <select [style]=\"UI.input\" [(ngModel)]=\"responseCase\">\n @for (c of responsesFormCase; track c.value) { <option [ngValue]=\"c\">{{ c.name }}</option> }\n </select></div>\n }\n\n <div [style]=\"UI.field\"><div [style]=\"UI.label\">Empresa do tipo RH (fixa)</div>\n <div style=\"color:#eceef3;font-size:14px;padding:2px 0\">{{ selectedOrgName }}</div></div>\n\n @if (scenario === 'manual') {\n <div [style]=\"UI.field\"><div [style]=\"UI.label\">Nome</div><input [style]=\"UI.input\" [(ngModel)]=\"fullName\" placeholder=\"Auto se vazio\" /></div>\n <div [style]=\"UI.field\"><div [style]=\"UI.label\">CPF</div><input [style]=\"UI.input\" [(ngModel)]=\"document\" placeholder=\"Auto se vazio\" /></div>\n <div [style]=\"UI.field\"><div [style]=\"UI.label\">Sexo Biológico *</div>\n <select [style]=\"UI.input\" [(ngModel)]=\"gender\"><option value=\"MALE\">Masculino</option><option value=\"FEMALE\">Feminino</option></select></div>\n <div [style]=\"UI.field\"><div [style]=\"UI.label\">Nascimento (YYYY-MM-DD)</div><input [style]=\"UI.input\" [(ngModel)]=\"bday\" placeholder=\"1990-05-15\" /></div>\n }\n\n <div style=\"margin:12px 0;padding:12px 14px;background:#16181f;border:1px solid #24262f;border-radius:11px\">\n <div [style]=\"UI.label\">Execução</div>\n <div style=\"font-size:13px;color:#d7d9e0;margin-top:2px\">{{ executionMessage }}</div>\n </div>\n\n <button type=\"button\" [style]=\"UI.primary\" [disabled]=\"status === 'running'\" (click)=\"run()\">\n {{ status === 'running' ? 'Executando…' : 'Executar cenário' }}\n </button>\n\n @if (generatedCpf) {\n <div style=\"margin-top:22px;border-top:1px solid #23252f;padding-top:18px\">\n <div style=\"font-size:13px;font-weight:600;color:#f0f1f4;margin-bottom:10px\">Usuário criado</div>\n @if (scenario === 'manual') { <pre [style]=\"UI.pre\" style=\"white-space:pre-wrap\">{{ dadosText }}</pre> }\n @else { <div [style]=\"UI.mono\">Usuário automático criado (dados ocultos).</div> }\n\n @if (loginStep === 'idle') {\n <button type=\"button\" [style]=\"UI.primary\" (click)=\"startLogin()\">\n <span class=\"dts-sym\" style=\"font-family:'Material Symbols Outlined';font-size:19px\">login</span>\n Login com este usuário\n </button>\n } @else if (loginStep === 'code') {\n <p [style]=\"UI.intro\" style=\"margin-top:14px\">Código enviado via {{ media }} para o celular do usuário.</p>\n <div [style]=\"UI.field\"><div [style]=\"UI.label\">Código (6 dígitos)</div>\n <input [style]=\"UI.input\" [(ngModel)]=\"loginCode\" placeholder=\"000000\" inputmode=\"numeric\" maxlength=\"6\"\n style=\"font-family:'JetBrains Mono',monospace;letter-spacing:.4em;font-size:20px\" /></div>\n <button type=\"button\" [style]=\"UI.primary\" [disabled]=\"loginBusy\" (click)=\"confirmLogin()\">{{ loginBusy ? 'Entrando…' : 'Entrar' }}</button>\n } @else {\n <div [style]=\"UI.card\" style=\"margin-top:14px;color:#1fbe7e\">Logado e sessão do app ativada.</div>\n }\n </div>\n }\n\n @if (message) { <div style=\"margin-top:14px;font-size:13px;color:#d6604f\">{{ message }}</div> }\n `,\n})\nexport class GeneratorPanelComponent implements OnInit {\n protected readonly UI = UI;\n private readonly api = inject(DevtoolsApiService);\n private readonly userUtils = inject(DevtoolsUserUtils);\n private readonly utils = inject(DevtoolsUtils);\n private readonly auth = inject(DevtoolsAuthService);\n private readonly session = inject(DevtoolsSessionService);\n private readonly config = inject(DEVTOOLS_CONFIG);\n private readonly toast = inject(DevtoolsToastService);\n private readonly cdr = inject(ChangeDetectorRef);\n\n protected readonly scenarios: ScenarioCard[] = [\n { key: 'manual', title: 'Cadastro manual', description: 'Preenche e envia formulário com dados visíveis.' },\n { key: 'auto', title: 'Cadastro automático', description: 'Cria usuário e envia formulário automático de triagem.' },\n ];\n protected readonly responsesFormCase = OPTIONS_RESPONSES_CASE;\n\n private readonly fixedOrgId = this.config.fixedOrgId ?? 200;\n protected scenario: 'manual' | 'auto' = 'manual';\n protected removePhone = false;\n protected phone = '';\n protected responseCase = OPTIONS_RESPONSES_CASE[0];\n\n protected selectedOrgName = 'Mar Salt Of';\n private customerOrganizationId = String(this.config.fixedOrgId ?? 200);\n private orgDocument: string | undefined;\n private orgDocumentType: string | undefined;\n\n protected fullName: string | undefined;\n protected document: string | undefined;\n protected gender = 'MALE';\n protected bday: string | undefined;\n\n protected status: 'idle' | 'running' | 'success' | 'error' = 'idle';\n protected executionMessage = 'Aguardando execução';\n protected dadosText = '';\n protected message = '';\n\n protected generatedCpf = '';\n private generatedPhone = '';\n protected loginStep: 'idle' | 'code' | 'done' = 'idle';\n protected loginCode = '';\n protected loginBusy = false;\n\n protected get media(): string {\n return this.api.media;\n }\n\n ngOnInit(): void {\n this.api.getWithQuery({ ids: String(this.fixedOrgId) }).subscribe({\n next: (list) => {\n const [org] = list ?? [];\n if (org) this.applyOrg(org);\n this.cdr.markForCheck();\n },\n error: () => {},\n });\n }\n\n protected toggleSms(): void {\n this.removePhone = !this.removePhone;\n if (this.removePhone && !this.phone.replace(/\\D/g, '')) this.phone = this.adminPhone();\n }\n\n private adminPhone(): string {\n const profile: any = this.session.admin()?.profile;\n const raw = profile?.phone || profile?.phones?.[0] || this.config.adminPhone || '';\n return String(raw).replace(/\\D/g, '').replace(/^55/, '');\n }\n\n private applyOrg(org: any): void {\n const { id, parent, document, documentType, name } = org ?? {};\n if (id || parent) {\n this.customerOrganizationId = (parent?.id ?? id)?.toString() ?? this.customerOrganizationId;\n this.orgDocument = document;\n this.orgDocumentType = documentType;\n }\n if (name) this.selectedOrgName = name;\n }\n\n protected selectScenario(key: 'manual' | 'auto'): void {\n this.scenario = key;\n this.status = 'idle';\n this.executionMessage = `Cenário selecionado: ${key === 'manual' ? 'Cadastro manual' : 'Cadastro automático'}`;\n if (key === 'manual' && !this.fullName) {\n this.fullName = this.userUtils.generateRandomName();\n this.document = this.userUtils.generateCPF();\n this.gender = this.userUtils.generateRandomGender();\n this.bday = this.userUtils.generateRandomBirthDate();\n }\n }\n\n protected run(): void {\n if (!this.auth.isLogged()) {\n this.toast.show('Faça login admin para gerar usuários');\n return;\n }\n const isManual = this.scenario === 'manual';\n const fullName = (this.fullName && this.fullName.trim()) || this.userUtils.generateRandomName();\n const document = (this.document && this.document.replace(/\\D/g, '')) || this.userUtils.generateCPF();\n if (!isManual) {\n this.fullName = fullName;\n this.document = document;\n }\n const payload: UserData = {\n fullName,\n document,\n biologicalSex: isManual ? this.gender : this.responseCase.biologicalSex,\n birthdate: isManual ? (this.bday || this.userUtils.generateRandomBirthDate()) : this.userUtils.calculateBirthDate(this.responseCase.age),\n typeGenerator: isManual ? 'signup' : 'autoSignup',\n orgDocument: this.orgDocument,\n orgDocumentType: this.orgDocumentType,\n customerOrganizationId: this.customerOrganizationId,\n };\n const phoneToRelease = this.removePhone ? this.phone.replace(/\\D/g, '') : undefined;\n const call = isManual ? this.api.signupForm(payload, phoneToRelease) : this.api.autoSignup(payload, phoneToRelease);\n\n this.status = 'running';\n this.executionMessage = 'Executando cenário…';\n this.message = '';\n this.loginStep = 'idle';\n this.cdr.markForCheck();\n\n call.subscribe({\n next: () => {\n this.userUtils.setToStorage(payload);\n this.status = 'success';\n this.executionMessage = 'Cenário executado com sucesso.';\n this.generatedCpf = document;\n this.generatedPhone = phoneToRelease ?? this.phone.replace(/\\D/g, '');\n this.dadosText = this.buildDados(payload);\n this.toast.show('Usuário gerado · ' + fullName);\n this.cdr.markForCheck();\n },\n error: (err) => {\n this.status = 'error';\n this.executionMessage = 'Falha na execução do cenário.';\n this.utils.setErrorToast(err);\n this.cdr.markForCheck();\n },\n });\n }\n\n protected startLogin(): void {\n const phoneE164 = this.toE164(this.generatedPhone || this.phone);\n if (!/^\\+55\\d{10,11}$/.test(phoneE164)) {\n this.message = 'Defina o celular do usuário (toggle SMS) para receber o código.';\n this.cdr.markForCheck();\n return;\n }\n this.loginBusy = true;\n this.message = '';\n this.cdr.markForCheck();\n this.api.requestCode({ document: this.generatedCpf, phone: phoneE164 }).subscribe({\n next: () => {\n this.loginBusy = false;\n this.loginStep = 'code';\n this.toast.show('Código enviado via ' + this.media);\n this.cdr.markForCheck();\n },\n error: (err) => {\n this.loginBusy = false;\n this.message = err?.error?.message || 'Falha ao enviar o código.';\n this.cdr.markForCheck();\n },\n });\n }\n\n protected confirmLogin(): void {\n if (!/^\\d{6}$/.test(this.loginCode)) {\n this.message = 'Código inválido — 6 dígitos.';\n this.cdr.markForCheck();\n return;\n }\n this.loginBusy = true;\n this.cdr.markForCheck();\n this.api.otpLogin(this.generatedCpf, this.loginCode).subscribe({\n next: (res) => {\n const profile: any = res.profile;\n const name = profile?.personProperties?.name || profile?.name || this.fullName || this.generatedCpf;\n const saved = this.session.saveTestSession({\n name,\n document: this.generatedCpf,\n accessToken: res.accessToken,\n refreshToken: res.refreshToken,\n profile,\n });\n this.session.switchTo(saved.id);\n this.loginBusy = false;\n this.loginStep = 'done';\n this.toast.show('Login efetuado · sessão do app ativada');\n this.cdr.markForCheck();\n },\n error: (err) => {\n this.loginBusy = false;\n this.message = err?.error?.message || 'Código incorreto ou expirado.';\n this.cdr.markForCheck();\n },\n });\n }\n\n private toE164(phone: string): string {\n const digits = (phone || '').replace(/\\D/g, '');\n if (!digits) return '';\n return digits.startsWith('55') ? `+${digits}` : `+55${digits}`;\n }\n\n private buildDados(u: UserData): string {\n const age = this.userUtils.calculateAge(u.birthdate);\n return `Documento: ${u.document}\\nNome: ${u.fullName}\\nSexo biológico: ${u.biologicalSex}\\nNascimento (idade): ${u.birthdate} (${age})\\nTipo: ${u.typeGenerator}`;\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n inject,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { EMPTY, of } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\nimport { DevtoolsToastService } from '../devtools-toast.service';\nimport { DevtoolsApiService } from '../core/devtools-api.service';\nimport { DevtoolsUtils } from '../core/devtools-utils';\nimport { DevtoolsAuthService } from '../core/devtools-auth.service';\nimport { UI } from './ui';\n\n/** Release a phone number (with the 2013 conflict recovery). */\n@Component({\n selector: 'devtools-phone-panel',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [FormsModule],\n template: `\n <p [style]=\"UI.intro\">Desvincula um número de celular para reutilizá-lo em testes de SMS / OTP.</p>\n <div [style]=\"UI.field\"><div [style]=\"UI.label\">Celular (DDD + número)</div>\n <input [style]=\"UI.input\" [(ngModel)]=\"phone\" placeholder=\"11990000000\" inputmode=\"tel\" /></div>\n <button type=\"button\" [style]=\"UI.primary\" [disabled]=\"running\" (click)=\"release()\">{{ running ? 'Liberando…' : 'Liberar celular' }}</button>\n @if (message) { <div style=\"margin-top:14px;font-size:13px;color:#9a9eab\">{{ message }}</div> }\n `,\n})\nexport class PhonePanelComponent {\n protected readonly UI = UI;\n private readonly api = inject(DevtoolsApiService);\n private readonly utils = inject(DevtoolsUtils);\n private readonly auth = inject(DevtoolsAuthService);\n private readonly toast = inject(DevtoolsToastService);\n private readonly cdr = inject(ChangeDetectorRef);\n\n protected phone = '';\n protected running = false;\n protected message = '';\n\n protected release(): void {\n if (!this.auth.isLogged()) {\n this.toast.show('Faça login admin para liberar celulares');\n return;\n }\n const phone = this.utils.removePhoneMask(this.phone);\n if (!phone) {\n this.toast.show('Informe um número');\n return;\n }\n this.running = true;\n this.message = 'Liberando celular…';\n this.cdr.markForCheck();\n this.api.findRemoveUserPhone(phone).subscribe({\n next: () => this.done('Celular liberado para testes.'),\n error: (err) => {\n if (err?.error?.code === 2013 || err?.error?.code === '2013') {\n this.resolveConflictAndRetry(phone);\n return;\n }\n this.fail(err);\n },\n });\n }\n\n private resolveConflictAndRetry(phone: string): void {\n this.message = 'Removendo permissões vinculadas e tentando novamente…';\n this.cdr.markForCheck();\n this.api\n .findUser({ phones: `+55${phone}` })\n .pipe(\n map((response: any) => response?.persons?.[0]),\n switchMap((person: any) => {\n if (!person?.id) {\n this.fail({ error: { message: 'Usuário do número não identificado.' } });\n return EMPTY;\n }\n return this.api.getAuthStatementsByPerson(person.id).pipe(\n switchMap((statements) => {\n if (statements.some((s: any) => s?.role?.name === 'ADMIN')) {\n this.running = false;\n this.message = 'Usuário admin detectado — peça a remoção manual.';\n this.toast.show('Não é possível liberar número de admin');\n this.cdr.markForCheck();\n return EMPTY;\n }\n const ids = statements.map((s: any) => s?.id).filter((id: any): id is number => !!id);\n return this.api.deleteAuthStatementsByIds(ids).pipe(switchMap(() => this.api.findRemoveUserPhone(phone)));\n }),\n );\n }),\n )\n .subscribe({\n next: () => this.done('Celular liberado após remover permissões vinculadas.'),\n error: (err) => this.fail(err),\n });\n }\n\n private done(msg: string): void {\n this.running = false;\n this.message = msg;\n this.toast.show('Celular liberado');\n this.cdr.markForCheck();\n }\n private fail(err: any): void {\n this.running = false;\n this.message = 'Falha ao liberar celular.';\n this.utils.setErrorToast(err);\n this.cdr.markForCheck();\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n inject,\n} from '@angular/core';\nimport { DevtoolsToastService } from '../devtools-toast.service';\nimport { DevtoolsApiService, UserData } from '../core/devtools-api.service';\nimport { DevtoolsUserUtils, DevtoolsUtils } from '../core/devtools-utils';\nimport { DevtoolsAuthService } from '../core/devtools-auth.service';\nimport { UI } from './ui';\n\n/** Generate performed exams for the last generated user (18yo flow). */\n@Component({\n selector: 'devtools-exams-panel',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (lastUser(); as u) {\n <p [style]=\"UI.intro\">\n Enviar exames para o último usuário gerado\n <strong style=\"color:#eceef3\">{{ u.fullName }}</strong>\n ({{ age(u.birthdate) }} anos).\n </p>\n <button type=\"button\" [style]=\"UI.primary\" [disabled]=\"running\" (click)=\"send(u)\">\n <span class=\"dts-sym\" style=\"font-family:'Material Symbols Outlined';font-size:19px\">biotech</span>\n {{ running ? 'Enviando…' : 'Enviar exames' }}\n </button>\n @if (message) { <div style=\"margin-top:14px;font-size:13px;color:#9a9eab\">{{ message }}</div> }\n } @else {\n <p [style]=\"UI.intro\">Nenhum usuário gerado ainda. Gere um pelo painel \"Gerador\".</p>\n }\n `,\n})\nexport class ExamsPanelComponent {\n protected readonly UI = UI;\n private readonly api = inject(DevtoolsApiService);\n private readonly userUtils = inject(DevtoolsUserUtils);\n private readonly utils = inject(DevtoolsUtils);\n private readonly auth = inject(DevtoolsAuthService);\n private readonly toast = inject(DevtoolsToastService);\n private readonly cdr = inject(ChangeDetectorRef);\n\n protected running = false;\n protected message = '';\n\n protected lastUser(): UserData | undefined {\n return this.userUtils.getUserFromStorage()[0];\n }\n\n protected age(birthdate: string | undefined): number {\n return (this.userUtils.calculateAge(birthdate) as number) || 0;\n }\n\n protected send(user: UserData): void {\n if (!this.auth.isLogged()) {\n this.toast.show('Faça login admin para enviar exames');\n return;\n }\n const age = this.age(user.birthdate);\n this.running = true;\n this.message = 'Gerando exames…';\n this.cdr.markForCheck();\n this.api.generatePerformedExams(user, age, '').subscribe({\n next: (exams) => {\n this.running = false;\n this.message = exams?.length ? `Exames gerados: ${exams.length}` : 'Nenhum exame aplicável para o cenário.';\n this.toast.show(exams?.length ? 'Exames enviados' : 'Sem exames para o perfil');\n this.cdr.markForCheck();\n },\n error: (err) => {\n this.running = false;\n this.message = 'Falha ao gerar exames.';\n this.utils.setErrorToast(err);\n this.cdr.markForCheck();\n },\n });\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n inject,\n OnInit,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { Subject, of } from 'rxjs';\nimport { debounceTime, switchMap } from 'rxjs/operators';\nimport { DevtoolsToastService } from '../devtools-toast.service';\nimport { DevtoolsApiService } from '../core/devtools-api.service';\nimport { DevtoolsUserUtils, DevtoolsUtils } from '../core/devtools-utils';\nimport { DevtoolsAuthService } from '../core/devtools-auth.service';\nimport { UI } from './ui';\n\ninterface PermissionItem {\n authStatementId: number;\n roleLabel: string;\n organizationName: string;\n}\n\n/** View the last generated user's data + manage auth-statements (no Material). */\n@Component({\n selector: 'devtools-data-panel',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [FormsModule],\n template: `\n @if (!hasUser) {\n <p [style]=\"UI.intro\">Nenhum usuário gerado ainda. Gere um pelo painel \"Gerador\".</p>\n } @else {\n @if (loading) { <p [style]=\"UI.intro\">Carregando dados do usuário…</p> }\n @if (error) { <p [style]=\"UI.intro\" style=\"color:#d6604f\">{{ error }}</p> }\n\n @if (person) {\n <div style=\"font-size:13px;font-weight:600;color:#f0f1f4;margin-bottom:10px\">Permissões</div>\n @for (item of permissions; track item.authStatementId) {\n <div [style]=\"UI.card\" style=\"display:flex;align-items:center;gap:10px;margin-bottom:8px\">\n <div style=\"flex:1;min-width:0\">\n <div style=\"font-size:13px;color:#eceef3\">{{ item.roleLabel }}</div>\n <div [style]=\"UI.mono\">{{ item.organizationName }}</div>\n </div>\n <button type=\"button\" [style]=\"UI.ghost\" style=\"width:auto;margin:0;color:#d6604f\" (click)=\"remove(item)\">Remover</button>\n </div>\n } @empty {\n <p [style]=\"UI.intro\">Nenhuma permissão cadastrada.</p>\n }\n\n <!-- add permission (inline) -->\n <div [style]=\"UI.card\" style=\"margin-top:8px\">\n <div [style]=\"UI.label\">Nova permissão</div>\n <select [style]=\"UI.input\" [(ngModel)]=\"newRole\" style=\"margin:6px 0\">\n <option value=\"MANAGER\">MANAGER (Gestor)</option>\n <option value=\"DOCTOR\">DOCTOR (Médico)</option>\n </select>\n <input [style]=\"UI.input\" [(ngModel)]=\"orgQuery\" (ngModelChange)=\"orgSearch$.next($event)\"\n [placeholder]=\"newOrgName || 'Buscar organização…'\" style=\"margin:6px 0\" />\n @for (org of orgResults; track org.id) {\n <button type=\"button\" (click)=\"pickOrg(org)\"\n style=\"display:block;width:100%;text-align:left;padding:8px 10px;background:#101117;border:1px solid #24262f;border-radius:8px;color:#eceef3;font-size:12.5px;cursor:pointer;margin-bottom:4px\">\n {{ org.name }}\n </button>\n }\n <button type=\"button\" [style]=\"UI.primary\" [disabled]=\"!newOrgId\" (click)=\"add()\">Adicionar permissão</button>\n </div>\n\n <div style=\"font-size:13px;font-weight:600;color:#f0f1f4;margin:22px 0 10px\">Dados brutos</div>\n <pre [style]=\"UI.pre\">{{ rawText }}</pre>\n }\n }\n `,\n})\nexport class DataPanelComponent implements OnInit {\n protected readonly UI = UI;\n private readonly api = inject(DevtoolsApiService);\n private readonly userUtils = inject(DevtoolsUserUtils);\n private readonly utils = inject(DevtoolsUtils);\n private readonly auth = inject(DevtoolsAuthService);\n private readonly toast = inject(DevtoolsToastService);\n private readonly cdr = inject(ChangeDetectorRef);\n\n protected hasUser = false;\n protected loading = false;\n protected error = '';\n protected person: any = null;\n protected rawText = '{}';\n protected permissions: PermissionItem[] = [];\n\n protected newRole: 'MANAGER' | 'DOCTOR' = 'MANAGER';\n protected orgQuery = '';\n protected orgResults: any[] = [];\n protected newOrgName = '';\n protected newOrgId: number | null = null;\n protected readonly orgSearch$ = new Subject<string>();\n\n ngOnInit(): void {\n const [lastUser] = this.userUtils.getUserFromStorage();\n this.hasUser = !!lastUser?.document;\n if (this.hasUser && this.auth.isLogged()) this.refresh(lastUser.document);\n\n this.orgSearch$\n .pipe(\n debounceTime(300),\n switchMap((q) => ((q ?? '').trim() ? this.api.getWithQuery({ q: (q ?? '').trim() }) : of([]))),\n )\n .subscribe({\n next: (list) => {\n this.orgResults = (list ?? []).slice(0, 6);\n this.cdr.markForCheck();\n },\n error: () => {\n this.orgResults = [];\n this.cdr.markForCheck();\n },\n });\n }\n\n private refresh(documentNumber: string): void {\n this.loading = true;\n this.error = '';\n this.cdr.markForCheck();\n this.api.findUser({ documents: documentNumber }).subscribe({\n next: (response: any) => {\n const [person] = response?.persons ?? [];\n this.loading = false;\n if (!person) {\n this.error = 'Usuário não encontrado.';\n this.person = null;\n this.cdr.markForCheck();\n return;\n }\n this.person = person;\n this.rawText = JSON.stringify(person, null, 2);\n this.loadPermissions(person.id);\n this.cdr.markForCheck();\n },\n error: (err) => {\n this.loading = false;\n this.error = 'Falha ao consultar dados do usuário.';\n this.utils.setErrorToast(err);\n this.cdr.markForCheck();\n },\n });\n }\n\n private loadPermissions(personId: number): void {\n this.api\n .getAuthStatements(personId)\n .pipe(\n switchMap((statements: any[]) => {\n if (!statements.length) return of({ statements, organizations: [] as any[] });\n const ids = Array.from(new Set(statements.map((s) => s?.resource?.organization?.id).filter((id): id is number => !!id)));\n return this.api.getOrganizationsByIds(ids).pipe(switchMap((organizations) => of({ statements, organizations })));\n }),\n )\n .subscribe({\n next: ({ statements, organizations }) => {\n const byId = new Map<number, any>();\n organizations.forEach((o: any) => o?.id && byId.set(o.id, o));\n this.permissions = statements.map((s: any) => {\n const orgId = s?.resource?.organization?.id;\n const role = s?.role?.name ?? '';\n return {\n authStatementId: s?.id ?? 0,\n roleLabel: role === 'MANAGER' ? 'Gestor' : role === 'DOCTOR' ? 'Médico' : role || '—',\n organizationName: (orgId && byId.get(orgId)?.name) || `Org #${orgId ?? '-'}`,\n };\n });\n this.cdr.markForCheck();\n },\n error: (err) => {\n this.permissions = [];\n this.utils.setErrorToast(err);\n this.cdr.markForCheck();\n },\n });\n }\n\n protected pickOrg(org: any): void {\n this.newOrgId = org?.id ?? null;\n this.newOrgName = org?.name ?? '';\n this.orgQuery = '';\n this.orgResults = [];\n }\n\n protected add(): void {\n if (!this.person?.id || !this.newOrgId) return;\n if (this.person?.phoneStatus !== 'VERIFIED') {\n this.toast.show('Phone não verificado — verifique no App do usuário');\n return;\n }\n this.api.createAuthStatement(this.person.id, this.newRole, this.newOrgId).subscribe({\n next: () => {\n this.toast.show('Permissão cadastrada');\n this.newOrgId = null;\n this.newOrgName = '';\n this.loadPermissions(this.person.id);\n },\n error: (err) => this.utils.setErrorToast(err),\n });\n }\n\n protected remove(item: PermissionItem): void {\n if (!item.authStatementId) return;\n if (!window.confirm(`Remover a permissão ${item.roleLabel} de ${item.organizationName}?`)) return;\n this.api.deleteAuthStatement(item.authStatementId).subscribe({\n next: () => {\n this.toast.show('Permissão removida');\n if (this.person?.id) this.loadPermissions(this.person.id);\n },\n error: (err) => this.utils.setErrorToast(err),\n });\n }\n}\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { DevtoolsToastService } from '../devtools-toast.service';\nimport { DevtoolsSessionService } from '../core/devtools-session.service';\nimport { DevtoolsUserUtils, DevtoolsUtils } from '../core/devtools-utils';\nimport { UI } from './ui';\n\n/** Copy data from the active app session (admin or generated user). */\n@Component({\n selector: 'devtools-copy-panel',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <p [style]=\"UI.intro\">Copie rapidamente dados da sessão ativa do app.</p>\n @for (item of rows(); track item.key) {\n <button type=\"button\" [style]=\"UI.row\" (click)=\"copy(item.value, item.label)\">\n <span class=\"dts-sym\" style=\"font-family:'Material Symbols Outlined';font-size:20px;color:#ffc454\">{{ item.icon }}</span>\n <div style=\"flex:1;min-width:0\">\n <div style=\"font-size:13px;font-weight:600;color:#eceef3\">{{ item.label }}</div>\n <div [style]=\"UI.mono\" style=\"white-space:nowrap;overflow:hidden;text-overflow:ellipsis\">{{ item.preview || '—' }}</div>\n </div>\n <span class=\"dts-sym\" style=\"font-family:'Material Symbols Outlined';font-size:18px;color:#6a6e7b\">content_copy</span>\n </button>\n }\n `,\n})\nexport class CopyPanelComponent {\n protected readonly UI = UI;\n private readonly session = inject(DevtoolsSessionService);\n private readonly userUtils = inject(DevtoolsUserUtils);\n private readonly utils = inject(DevtoolsUtils);\n private readonly toast = inject(DevtoolsToastService);\n\n protected rows() {\n const active = this.session.active();\n const [lastUser] = this.userUtils.getUserFromStorage();\n const cpf: string | undefined = lastUser?.document;\n const short = (v?: string) => (v ? v.slice(0, 30) + '…' : '');\n return [\n { key: 'cpf', label: 'CPF / documento', icon: 'badge', value: cpf, preview: cpf },\n { key: 'token', label: 'accessToken', icon: 'vpn_key', value: active?.accessToken, preview: short(active?.accessToken) },\n { key: 'refresh', label: 'refreshToken', icon: 'autorenew', value: active?.refreshToken, preview: short(active?.refreshToken) },\n {\n key: 'payload',\n label: 'Payload completo',\n icon: 'data_object',\n value: JSON.stringify({ accessToken: active?.accessToken, refreshToken: active?.refreshToken, document: cpf }, null, 2),\n preview: 'JSON da sessão',\n },\n ];\n }\n\n protected copy(value: string | undefined, label: string): void {\n if (!value) {\n this.toast.show(label + ' indisponível');\n return;\n }\n this.utils.copyClipboard(value, label);\n }\n}\n","import {\n APP_BOOTSTRAP_LISTENER,\n ApplicationRef,\n createComponent,\n createEnvironmentInjector,\n EnvironmentInjector,\n EnvironmentProviders,\n inject,\n makeEnvironmentProviders,\n runInInjectionContext,\n} from '@angular/core';\nimport { provideHttpClient, withInterceptors } from '@angular/common/http';\nimport { DEVTOOLS_ACTION, DEVTOOLS_SHELL_CONFIG } from './devtools-shell.tokens';\nimport { DevtoolsShellComponent } from './devtools-shell.component';\nimport { DevtoolsAction } from './devtools-shell.types';\nimport { DevtoolsPositionService } from './devtools-position.service';\nimport { DevtoolsToastService } from './devtools-toast.service';\nimport { DevtoolsConfig, DEVTOOLS_CONFIG } from './core/devtools-config';\nimport { devtoolsHttpInterceptor } from './core/devtools-http.interceptor';\nimport { DevtoolsStorage } from './core/devtools-storage.service';\nimport { DevtoolsUserUtils, DevtoolsUtils } from './core/devtools-utils';\nimport { DevtoolsTypeform } from './core/typeform';\nimport { DevtoolsApiService } from './core/devtools-api.service';\nimport { DevtoolsAuthService } from './core/devtools-auth.service';\nimport { DevtoolsSessionService } from './core/devtools-session.service';\nimport { AdminLoginPanelComponent } from './panels/admin-login-panel.component';\nimport { LoginPanelComponent } from './panels/login-panel.component';\nimport { SwitchPanelComponent } from './panels/switch-panel.component';\nimport { GeneratorPanelComponent } from './panels/generator-panel.component';\nimport { PhonePanelComponent } from './panels/phone-panel.component';\nimport { ExamsPanelComponent } from './panels/exams-panel.component';\nimport { DataPanelComponent } from './panels/data-panel.component';\nimport { CopyPanelComponent } from './panels/copy-panel.component';\n\nexport interface ProvideDevtoolsOptions extends DevtoolsConfig {\n /** Layer-1 production gate. Pass `!environment.production`. @default true */\n enabled?: boolean;\n /** Extra custom panels, appended to the built-in DevTools panels. */\n actions?: DevtoolsAction[];\n /** Container header title. */\n title?: string;\n /** FAB glyph. @default developer_mode */\n fabIcon?: string;\n}\n\nconst BUILTIN_ACTIONS: DevtoolsAction[] = [\n { id: 'admin', label: 'Admin', icon: 'shield_person', content: AdminLoginPanelComponent, order: 0 },\n { id: 'app-login', label: 'Login App', icon: 'login', content: LoginPanelComponent, order: 1 },\n { id: 'switch', label: 'Trocar', icon: 'switch_account', content: SwitchPanelComponent, order: 2 },\n { id: 'generator', label: 'Gerador', icon: 'groups', content: GeneratorPanelComponent, order: 3 },\n { id: 'phone', label: 'Celular', icon: 'sms', content: PhonePanelComponent, order: 4 },\n { id: 'exams', label: 'Exames', icon: 'biotech', content: ExamsPanelComponent, order: 5 },\n { id: 'data', label: 'Dados', icon: 'badge', content: DataPanelComponent, order: 6 },\n { id: 'copy', label: 'Copiar', icon: 'content_copy', content: CopyPanelComponent, order: 7 },\n];\n\n/**\n * Mount the self-contained DevTools. Add to `bootstrapApplication` providers or\n * `@NgModule({ providers })`. Everything runs in an ISOLATED environment\n * injector with the package's OWN HttpClient + interceptor — it never touches\n * the host app's services, interceptors or session beyond the deliberate\n * active-session keys used by the Switch panel.\n */\nexport function provideDevtools(options: ProvideDevtoolsOptions): EnvironmentProviders {\n const { enabled = true, actions = [], apiBaseUrl, title, fabIcon, ...rest } = options ?? ({} as ProvideDevtoolsOptions);\n\n // Layer 1 gate (Layer 2 = fileReplacements; see README).\n if (!enabled || !apiBaseUrl) return makeEnvironmentProviders([]);\n\n const config: DevtoolsConfig = { apiBaseUrl, ...rest };\n const allActions = [...BUILTIN_ACTIONS, ...actions];\n\n return makeEnvironmentProviders([\n {\n provide: APP_BOOTSTRAP_LISTENER,\n multi: true,\n useFactory: () => {\n const parent = inject(EnvironmentInjector);\n return () => mountIsolated(parent, config, allActions, { title, fabIcon });\n },\n },\n ]);\n}\n\n/** Load the Material Symbols Outlined font the package's icons rely on, so it\n * never depends on the host having it. Injected once. */\nfunction ensureIconFont(): void {\n const id = 'dc-material-symbols-font';\n if (document.getElementById(id)) return;\n const link = document.createElement('link');\n link.id = id;\n link.rel = 'stylesheet';\n link.href =\n 'https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap';\n document.head.appendChild(link);\n}\n\nfunction mountIsolated(\n parent: EnvironmentInjector,\n config: DevtoolsConfig,\n actions: DevtoolsAction[],\n shell: { title?: string; fabIcon?: string },\n): void {\n if (typeof document === 'undefined') return;\n ensureIconFont();\n\n const injector = createEnvironmentInjector(\n [\n // OWN HttpClient + interceptor — fully isolated from the host.\n provideHttpClient(withInterceptors([devtoolsHttpInterceptor])),\n { provide: DEVTOOLS_CONFIG, useValue: { media: 'WHATSAPP', locale: 'pt_BR', fixedOrgId: 200, ...config } },\n {\n provide: DEVTOOLS_SHELL_CONFIG,\n useValue: {\n title: shell.title ?? 'DevTools',\n fabIcon: shell.fabIcon ?? 'developer_mode',\n storageKey: 'marsaude.devtools.fab',\n },\n },\n ...actions.map((action) => ({ provide: DEVTOOLS_ACTION, useValue: action, multi: true })),\n DevtoolsStorage,\n DevtoolsUtils,\n DevtoolsUserUtils,\n DevtoolsTypeform,\n DevtoolsApiService,\n DevtoolsAuthService,\n DevtoolsSessionService,\n DevtoolsPositionService,\n DevtoolsToastService,\n ],\n parent,\n );\n\n // Consume our own Google OAuth return (guarded) to finish admin login.\n runInInjectionContext(injector, () => inject(DevtoolsAuthService).handleGoogleReturn());\n\n const appRef = parent.get(ApplicationRef);\n const host = document.createElement('div');\n host.setAttribute('data-devtools-shell-host', '');\n document.body.appendChild(host);\n\n const ref = createComponent(DevtoolsShellComponent, { environmentInjector: injector, hostElement: host });\n appRef.attachView(ref.hostView);\n\n appRef.onDestroy(() => {\n ref.destroy();\n host.remove();\n injector.destroy();\n });\n}\n","/*\n * Public API of @marsaude/devtools-shell — a self-contained, draggable DevTools\n * package. The host only calls provideDevtools(config); everything else\n * (HttpClient, interceptor, auth, panels) lives inside the package.\n */\nexport { provideDevtools } from './lib/provide-devtools';\nexport type { ProvideDevtoolsOptions } from './lib/provide-devtools';\n\nexport type { DevtoolsConfig, ValidationMedia } from './lib/core/devtools-config';\n\n// Shell + extension points (for advanced/custom panels).\nexport { DevtoolsShellComponent } from './lib/devtools-shell.component';\nexport { DEVTOOLS_ACTION, DEVTOOLS_SHELL_CONFIG } from './lib/devtools-shell.tokens';\nexport type { DevtoolsAction, DevtoolsShellConfig, DevtoolsCorner } from './lib/devtools-shell.types';\nexport { DevtoolsToastService } from './lib/devtools-toast.service';\n\n// Session control (admin vs generated users) — exposed for custom panels.\nexport { DevtoolsSessionService } from './lib/core/devtools-session.service';\nexport type { DevtoolsSession } from './lib/core/devtools-session.service';\nexport { DevtoolsAuthService } from './lib/core/devtools-auth.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["switchMap"],"mappings":"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"}
1
+ {"version":3,"file":"marsaude-devtools-shell.mjs","sources":["../../../projects/devtools-shell/src/lib/devtools-shell.tokens.ts","../../../projects/devtools-shell/src/lib/devtools-position.service.ts","../../../projects/devtools-shell/src/lib/devtools-toast.service.ts","../../../projects/devtools-shell/src/lib/devtools-shell.component.ts","../../../projects/devtools-shell/src/lib/core/devtools-config.ts","../../../projects/devtools-shell/src/lib/core/devtools-storage.service.ts","../../../projects/devtools-shell/src/lib/core/devtools-utils.ts","../../../projects/devtools-shell/src/lib/core/data/typeform-cases.data.ts","../../../projects/devtools-shell/src/lib/core/typeform.ts","../../../projects/devtools-shell/src/lib/core/data/exams-18.data.ts","../../../projects/devtools-shell/src/lib/core/devtools-api.service.ts","../../../projects/devtools-shell/src/lib/core/devtools-auth.service.ts","../../../projects/devtools-shell/src/lib/core/devtools-http.interceptor.ts","../../../projects/devtools-shell/src/lib/core/devtools-session.service.ts","../../../projects/devtools-shell/src/lib/core/devtools-telemetry.service.ts","../../../projects/devtools-shell/src/lib/core/devtools-errors.service.ts","../../../projects/devtools-shell/src/lib/panels/ui.ts","../../../projects/devtools-shell/src/lib/panels/admin-login-panel.component.ts","../../../projects/devtools-shell/src/lib/panels/login-panel.component.ts","../../../projects/devtools-shell/src/lib/panels/switch-panel.component.ts","../../../projects/devtools-shell/src/lib/panels/generator-panel.component.ts","../../../projects/devtools-shell/src/lib/panels/phone-panel.component.ts","../../../projects/devtools-shell/src/lib/panels/exams-panel.component.ts","../../../projects/devtools-shell/src/lib/panels/data-panel.component.ts","../../../projects/devtools-shell/src/lib/panels/copy-panel.component.ts","../../../projects/devtools-shell/src/lib/panels/telemetry-panel.component.ts","../../../projects/devtools-shell/src/lib/panels/errors-panel.component.ts","../../../projects/devtools-shell/src/lib/provide-devtools.ts","../../../projects/devtools-shell/src/public-api.ts","../../../projects/devtools-shell/src/marsaude-devtools-shell.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { DevtoolsAction, DevtoolsShellConfig } from './devtools-shell.types';\n\n/**\n * Multi-provider token. Each `{ provide: DEVTOOLS_ACTION, useValue, multi: true }`\n * adds one pluggable panel to the shell. This is the extension point: the shell\n * collects every registered action and renders it — it has no built-in actions.\n */\nexport const DEVTOOLS_ACTION = new InjectionToken<DevtoolsAction>(\n 'DEVTOOLS_ACTION',\n);\n\n/** Single-value config token. Falls back to an empty config. */\nexport const DEVTOOLS_SHELL_CONFIG = new InjectionToken<DevtoolsShellConfig>(\n 'DEVTOOLS_SHELL_CONFIG',\n { providedIn: 'root', factory: () => ({}) },\n);\n","import { inject, Injectable, signal } from '@angular/core';\nimport { DEVTOOLS_SHELL_CONFIG } from './devtools-shell.tokens';\n\nexport interface Point {\n x: number;\n y: number;\n}\n\n/** FAB edge length in px — matches `.dts-fab` and the prototype (S = 58). */\nexport const FAB_SIZE = 58;\n\n/**\n * Owns the FAB position + side and persists them. The math is ported verbatim\n * from the `DevTools FAB` prototype (default corner, clamp bounds, edge snap).\n * Only position/side are stored — no domain/session data.\n */\n@Injectable({ providedIn: 'root' })\nexport class DevtoolsPositionService {\n private readonly config = inject(DEVTOOLS_SHELL_CONFIG);\n private readonly key = this.config.storageKey ?? 'marsaude.devtools-shell.pos';\n\n /** FAB top-left in viewport coords. Null until first measured/loaded. */\n readonly position = signal<Point>(this.load());\n readonly side = signal<'left' | 'right'>(this.loadSide());\n\n /** Live update during drag (not persisted). */\n move(p: Point): void {\n this.position.set(p);\n }\n\n /** Commit + persist the final position and side. */\n commit(p: Point, side: 'left' | 'right'): void {\n this.position.set(p);\n this.side.set(side);\n this.persist();\n }\n\n /** Re-clamp against the current viewport. Call on resize. */\n reclamp(): void {\n this.position.set(this.clamp(this.position()));\n }\n\n /** Prototype clamp: x ∈ [6, W-S-6], y ∈ [70, H-S-6]. */\n clamp(p: Point): Point {\n if (typeof window === 'undefined') return p;\n const S = FAB_SIZE;\n const W = window.innerWidth;\n const H = window.innerHeight;\n return {\n x: Math.max(6, Math.min(W - S - 6, p.x)),\n y: Math.max(70, Math.min(H - S - 6, p.y)),\n };\n }\n\n private persist(): void {\n try {\n localStorage?.setItem(\n this.key,\n JSON.stringify({ ...this.position(), side: this.side() }),\n );\n } catch {\n /* storage unavailable — non-fatal */\n }\n }\n\n /** Prototype default corner: { x: W-74, y: H-150 }. */\n private load(): Point {\n const fallback = this.defaultPos();\n if (typeof localStorage === 'undefined') return fallback;\n try {\n const raw = localStorage.getItem(this.key);\n if (!raw) return fallback;\n const p = JSON.parse(raw) as Partial<Point>;\n if (typeof p?.x === 'number' && typeof p?.y === 'number') {\n return this.clamp({ x: p.x, y: p.y });\n }\n } catch {\n /* corrupt — fall through */\n }\n return fallback;\n }\n\n private loadSide(): 'left' | 'right' {\n if (typeof localStorage === 'undefined') return 'right';\n try {\n const raw = localStorage.getItem(this.key);\n const side = raw ? (JSON.parse(raw) as { side?: string }).side : null;\n return side === 'left' ? 'left' : 'right';\n } catch {\n return 'right';\n }\n }\n\n private defaultPos(): Point {\n if (typeof window === 'undefined') return { x: 10, y: 120 };\n return { x: window.innerWidth - 74, y: window.innerHeight - 150 };\n }\n}\n","import { Injectable, signal } from '@angular/core';\n\n/**\n * Tiny toast surface owned by the shell. Panels (or any consumer) can inject it\n * to flash a short message inside the shell's own layer — no Material/snackbar\n * dependency required.\n */\n@Injectable({ providedIn: 'root' })\nexport class DevtoolsToastService {\n /** Current message, or null when nothing is showing. */\n readonly message = signal<string | null>(null);\n\n private timer: ReturnType<typeof setTimeout> | null = null;\n\n show(message: string, durationMs = 2400): void {\n this.message.set(message);\n if (this.timer) clearTimeout(this.timer);\n this.timer = setTimeout(() => this.message.set(null), durationMs);\n }\n\n clear(): void {\n if (this.timer) clearTimeout(this.timer);\n this.message.set(null);\n }\n}\n","import { NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n HostListener,\n inject,\n OnDestroy,\n signal,\n TemplateRef,\n Type,\n} from '@angular/core';\nimport { DevtoolsPositionService, FAB_SIZE } from './devtools-position.service';\nimport {\n DEVTOOLS_ACTION,\n DEVTOOLS_SHELL_CONFIG,\n} from './devtools-shell.tokens';\nimport { DevtoolsToastService } from './devtools-toast.service';\nimport { DevtoolsAction } from './devtools-shell.types';\n\nconst PROJECTED = '__projected__';\nconst COLLAPSE_DELAY_MS = 1800;\n\ninterface DragState {\n ox: number;\n oy: number;\n sx: number;\n sy: number;\n moved: boolean;\n}\n\ninterface DialItem {\n action: DevtoolsAction;\n style: Record<string, string | number>;\n}\n\n/**\n * The invólucro: a draggable FAB that opens an agnostic container.\n *\n * Drag, clamp/snap, the radial speed-dial geometry, the collapse-to-edge grip,\n * the drawer/sheet panel and the toast are ported verbatim from the `DevTools\n * FAB` prototype (Pointer Events, the exact math and the same CSS/keyframes) —\n * kept entirely domain-free. Content arrives via {@link DEVTOOLS_ACTION}\n * (primary) or `<ng-content>` (secondary). Auto-mounted by `provideDevtools()`.\n */\n@Component({\n selector: 'devtools-shell',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgComponentOutlet, NgTemplateOutlet],\n template: `\n <!-- FAB (same button doubles as the collapsed edge grip, like the prototype) -->\n <button\n type=\"button\"\n [style]=\"fabStyle()\"\n (pointerdown)=\"onFabDown($event)\"\n (click)=\"onFabClick()\"\n [attr.aria-expanded]=\"open() || !!panelId()\"\n aria-label=\"DevTools\"\n >\n @if (isCollapsed()) {\n <span\n style=\"width:4px;height:26px;border-radius:3px;background:rgba(255,255,255,.55)\"\n ></span>\n } @else {\n <span class=\"dts-sym\" style=\"font-size:26px\">{{\n open() || panelId()\n ? 'close'\n : (config.fabIcon ?? 'developer_mode')\n }}</span>\n }\n </button>\n\n <!-- speed-dial scrim -->\n @if (open()) {\n <div\n style=\"position:fixed;inset:0;z-index:38;background:rgba(10,11,15,.32);backdrop-filter:blur(1px);animation:dts-fade .18s ease\"\n (click)=\"closeDial()\"\n ></div>\n }\n\n <!-- speed-dial items (always rendered when >1 action; animate via transform/opacity) -->\n @if (hasDial()) {\n @for (item of dialItems(); track item.action.id) {\n <button type=\"button\" [style]=\"item.style\" (click)=\"openPanel(item.action.id)\">\n @if (item.action.icon) {\n <span class=\"dts-sym\" style=\"font-size:23px;line-height:1\">{{ item.action.icon }}</span>\n }\n <span\n style=\"font-size:8.5px;font-weight:600;line-height:1.05;text-align:center;letter-spacing:.01em;white-space:nowrap\"\n >{{ item.action.label }}</span\n >\n </button>\n }\n }\n\n <!-- panel scrim + panel -->\n @if (panelId()) {\n <div\n style=\"position:fixed;inset:0;z-index:48;background:rgba(10,11,15,.5);animation:dts-fade .2s ease\"\n (click)=\"closePanel()\"\n ></div>\n <div [style]=\"panelStyle()\">\n <div\n style=\"display:flex;align-items:center;gap:12px;padding:18px 20px;border-bottom:1px solid #23252f;flex:none\"\n >\n <span class=\"dts-sym\" style=\"font-size:22px;color:#ffc454\">{{\n activeAction()?.icon ?? 'tune'\n }}</span>\n <div style=\"font-size:16px;font-weight:600;color:#f0f1f4\">\n {{ activeAction()?.label ?? config.title ?? 'DevTools' }}\n </div>\n <button\n type=\"button\"\n (click)=\"closePanel()\"\n aria-label=\"Fechar\"\n style=\"margin-left:auto;width:32px;height:32px;border-radius:8px;border:1px solid #2a2c38;background:#1b1d25;color:#9aa0ad;display:flex;align-items:center;justify-content:center;cursor:pointer\"\n >\n <span class=\"dts-sym\" style=\"font-size:19px\">close</span>\n </button>\n </div>\n <div style=\"overflow-y:auto;padding:20px;flex:1;color:#d7d9e0\">\n @if (activeAction(); as action) {\n @if (asTemplate(action.content); as tpl) {\n <ng-container [ngTemplateOutlet]=\"tpl\"></ng-container>\n } @else if (asComponent(action.content); as cmp) {\n <ng-container [ngComponentOutlet]=\"cmp\"></ng-container>\n } @else {\n <ng-content></ng-content>\n }\n } @else {\n <ng-content></ng-content>\n }\n </div>\n </div>\n }\n\n <!-- toast -->\n @if (toast.message(); as msg) {\n <div\n style=\"position:fixed;bottom:26px;left:50%;z-index:70;transform:translateX(-50%);background:#14151b;border:1px solid #2a2c38;color:#eceef3;font-size:13px;font-weight:500;padding:11px 18px;border-radius:12px;box-shadow:0 12px 30px rgba(0,0,0,.4);display:flex;align-items:center;gap:9px;animation:dts-pop .22s ease;white-space:nowrap\"\n >\n {{ msg }}\n </div>\n }\n `,\n styles: [\n `\n :host {\n --dts-accent: #ffc454;\n }\n /* Material Symbols with Material Icons fallback for the glyph spans. */\n .dts-sym {\n font-family: 'Material Symbols Outlined', 'Material Icons';\n line-height: 1;\n user-select: none;\n }\n /* Keyframes ported verbatim from the prototype (global by nature). */\n @keyframes dts-fade {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n }\n @keyframes drawerIn {\n from {\n transform: translateX(100%);\n }\n to {\n transform: translateX(0);\n }\n }\n @keyframes sheetUp {\n from {\n transform: translateY(100%);\n }\n to {\n transform: translateY(0);\n }\n }\n @keyframes dts-pop {\n from {\n transform: translate(-50%, 8px) scale(0.96);\n opacity: 0;\n }\n to {\n transform: translate(-50%, 0) scale(1);\n opacity: 1;\n }\n }\n `,\n ],\n})\nexport class DevtoolsShellComponent implements OnDestroy {\n protected readonly pos = inject(DevtoolsPositionService);\n protected readonly config = inject(DEVTOOLS_SHELL_CONFIG);\n protected readonly toast = inject(DevtoolsToastService);\n\n private readonly registered =\n (inject(DEVTOOLS_ACTION, { optional: true }) as unknown as\n | DevtoolsAction[]\n | null) ?? [];\n\n protected readonly actions = signal<DevtoolsAction[]>(\n [...this.registered].sort((a, b) => (a.order ?? 0) - (b.order ?? 0)),\n );\n\n protected readonly open = signal(false); // speed-dial open\n protected readonly panelId = signal<string | null>(null);\n protected readonly collapsed = signal(false);\n protected readonly dragging = signal(false);\n\n private readonly winW = signal(\n typeof window === 'undefined' ? 1024 : window.innerWidth,\n );\n private readonly winH = signal(\n typeof window === 'undefined' ? 768 : window.innerHeight,\n );\n\n protected readonly hasDial = computed(() => this.actions().length > 1);\n\n protected readonly activeAction = computed(\n () => this.actions().find((a) => a.id === this.panelId()) ?? null,\n );\n\n protected readonly isCollapsed = computed(\n () => this.collapsed() && !this.open() && !this.panelId() && !this.dragging(),\n );\n\n /** FAB style — collapsed grip vs expanded button (prototype values). */\n protected readonly fabStyle = computed<Record<string, string>>(() => {\n const S = FAB_SIZE;\n const W = this.winW();\n const f = this.pos.position();\n const side = this.pos.side();\n const isOpen = this.open() || !!this.panelId();\n if (this.isCollapsed()) {\n const cx = side === 'left' ? 0 : W - 15;\n return {\n position: 'fixed',\n left: cx + 'px',\n top: f.y + 10 + 'px',\n width: '15px',\n height: '60px',\n zIndex: '40',\n border: 'none',\n background: '#14151b',\n color: '#fff',\n borderRadius: side === 'left' ? '0 12px 12px 0' : '12px 0 0 12px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '0',\n boxShadow: '0 4px 16px rgba(0,0,0,.35)',\n transition: 'width .2s ease, border-radius .2s ease',\n touchAction: 'none',\n cursor: 'pointer',\n };\n }\n return {\n position: 'fixed',\n left: f.x + 'px',\n top: f.y + 'px',\n width: S + 'px',\n height: S + 'px',\n zIndex: '40',\n border: 'none',\n borderRadius: '18px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '0',\n background: isOpen ? '#23242c' : '#14151b',\n color: '#ffc454',\n boxShadow: '0 8px 24px rgba(0,0,0,.4)',\n transform: isOpen ? 'rotate(45deg)' : 'rotate(0deg)',\n transition: this.dragging()\n ? 'none'\n : 'transform .25s ease, background .2s ease, left .25s cubic-bezier(.2,.8,.2,1)',\n touchAction: 'none',\n cursor: this.dragging() ? 'grabbing' : 'grab',\n };\n });\n\n /** Radial speed-dial geometry — items fan along a 5°→87° arc; the radius\n * scales with the item count (clamped to the viewport) so they never pile up. */\n protected readonly dialItems = computed<DialItem[]>(() => {\n const S = FAB_SIZE;\n const W = this.winW();\n const H = this.winH();\n const f = this.pos.position();\n const isOpen = this.open();\n const cx = f.x + S / 2;\n const cy = f.y + S / 2;\n const hx = cx < W / 2 ? 1 : -1;\n const vy = cy < H * 0.42 ? 1 : -1;\n const acts = this.actions();\n const N = acts.length;\n const a0 = (5 * Math.PI) / 180;\n const a1 = (87 * Math.PI) / 180;\n const span = a1 - a0;\n // Tile box + the center-to-center spacing we want between adjacent items.\n // Smaller SPACING pulls the whole fan in closer to the FAB (since every\n // item sits at the same radius R), while staying just above the tile size\n // so they don't overlap.\n const TILE_W = 50;\n const TILE_H = 44;\n const SPACING = 52;\n // Radius that yields that spacing across N items, clamped so the farthest\n // tile still fits the viewport in the fan direction. Scaling R with N is\n // what keeps the items from piling on top of each other as more are added.\n const desiredR = N > 1 ? (SPACING * (N - 1)) / span : 200;\n const availH = (hx > 0 ? W - cx : cx) - TILE_W / 2 - 12;\n const availV = (vy > 0 ? H - cy : cy) - TILE_H / 2 - 12;\n const R = Math.max(160, Math.min(desiredR, availH, availV));\n return acts.map((action, i) => {\n const t = N === 1 ? 0.5 : i / (N - 1);\n const ang = a0 + span * t;\n const dx = hx * Math.cos(ang) * R;\n const dy = vy * Math.sin(ang) * R;\n return {\n action,\n style: {\n position: 'fixed',\n zIndex: '41',\n width: TILE_W + 'px',\n height: TILE_H + 'px',\n left: cx - TILE_W / 2 + 'px',\n top: cy - TILE_H / 2 + 'px',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '3px',\n borderRadius: '15px',\n border: '1px solid #2a2c38',\n background: '#1b1d25',\n color: '#eceef3',\n boxShadow: '0 8px 20px rgba(0,0,0,.32)',\n padding: '4px',\n cursor: 'pointer',\n transform: isOpen\n ? `translate(${dx}px,${dy}px) scale(1)`\n : 'translate(0,0) scale(.3)',\n opacity: isOpen ? 1 : 0,\n pointerEvents: isOpen ? 'auto' : 'none',\n transition: `transform .3s cubic-bezier(.2,1.1,.3,1) ${i * 28}ms, opacity .22s ease ${i * 28}ms`,\n },\n };\n });\n });\n\n /** Drawer (desktop) / bottom-sheet (mobile) — prototype values. */\n protected readonly panelStyle = computed<Record<string, string>>(() => {\n const isDesktop = this.winW() >= 720;\n return isDesktop\n ? {\n position: 'fixed',\n top: '0',\n right: '0',\n bottom: '0',\n width: '440px',\n zIndex: '49',\n background: '#101117',\n borderLeft: '1px solid #23252f',\n display: 'flex',\n flexDirection: 'column',\n animation: 'drawerIn .26s cubic-bezier(.2,.8,.2,1)',\n }\n : {\n position: 'fixed',\n left: '0',\n right: '0',\n bottom: '0',\n maxHeight: '86vh',\n zIndex: '49',\n background: '#101117',\n borderTop: '1px solid #23252f',\n borderRadius: '20px 20px 0 0',\n display: 'flex',\n flexDirection: 'column',\n animation: 'sheetUp .28s cubic-bezier(.2,.8,.2,1)',\n };\n });\n\n private drag: DragState | null = null;\n private dragEndAt = 0;\n private collapseTimer: ReturnType<typeof setTimeout> | null = null;\n private readonly moveHandler = (e: PointerEvent) => this.onMove(e);\n private readonly upHandler = (e: PointerEvent) => this.onUp(e);\n\n constructor() {\n this.scheduleCollapse();\n }\n\n ngOnDestroy(): void {\n this.detachDragListeners();\n this.clearCollapse();\n }\n\n @HostListener('window:resize')\n protected onResize(): void {\n this.winW.set(window.innerWidth);\n this.winH.set(window.innerHeight);\n this.pos.reclamp();\n }\n\n // ---- drag (ported from the prototype) ---------------------------------\n protected onFabDown(e: PointerEvent): void {\n const el = e.currentTarget as HTMLElement;\n const r = el.getBoundingClientRect();\n this.drag = {\n ox: e.clientX - r.left,\n oy: e.clientY - r.top,\n sx: e.clientX,\n sy: e.clientY,\n moved: false,\n };\n this.clearCollapse();\n this.dragging.set(true);\n this.collapsed.set(false);\n try {\n el.setPointerCapture(e.pointerId);\n } catch {\n /* ignore */\n }\n window.addEventListener('pointermove', this.moveHandler);\n window.addEventListener('pointerup', this.upHandler);\n }\n\n private onMove(e: PointerEvent): void {\n if (!this.drag) return;\n const x = e.clientX - this.drag.ox;\n const y = e.clientY - this.drag.oy;\n if (Math.abs(e.clientX - this.drag.sx) + Math.abs(e.clientY - this.drag.sy) > 5) {\n this.drag.moved = true;\n }\n this.pos.move(this.pos.clamp({ x, y }));\n }\n\n private onUp(_e: PointerEvent): void {\n this.detachDragListeners();\n const S = FAB_SIZE;\n const W = this.winW();\n const f = this.pos.position();\n const moved = !!this.drag?.moved;\n this.dragging.set(false);\n if (moved) {\n this.dragEndAt = Date.now();\n const side: 'left' | 'right' = f.x + S / 2 < W / 2 ? 'left' : 'right';\n const x = side === 'left' ? 10 : W - S - 10;\n this.pos.commit({ x, y: f.y }, side);\n this.scheduleCollapse();\n }\n this.drag = null;\n }\n\n private detachDragListeners(): void {\n window.removeEventListener('pointermove', this.moveHandler);\n window.removeEventListener('pointerup', this.upHandler);\n }\n\n // ---- open / panel -----------------------------------------------------\n protected onFabClick(): void {\n if (Date.now() - this.dragEndAt < 300) return; // was a drag\n const acts = this.actions();\n if (acts.length > 1) {\n this.toggleDial();\n } else {\n this.togglePanel(acts[0]?.id ?? PROJECTED);\n }\n }\n\n private toggleDial(): void {\n const next = !this.open();\n this.clearCollapse();\n this.open.set(next);\n this.collapsed.set(false);\n this.panelId.set(null);\n if (!next) this.scheduleCollapse();\n }\n\n protected openPanel(id: string): void {\n this.panelId.set(id);\n this.open.set(false);\n this.clearCollapse();\n }\n\n protected togglePanel(id: string): void {\n if (this.panelId() === id) this.closePanel();\n else this.openPanel(id);\n }\n\n protected closePanel(): void {\n this.panelId.set(null);\n this.scheduleCollapse();\n }\n\n protected closeDial(): void {\n this.open.set(false);\n this.scheduleCollapse();\n }\n\n protected asTemplate(c: unknown): TemplateRef<unknown> | null {\n return c instanceof TemplateRef ? c : null;\n }\n\n protected asComponent(c: unknown): Type<unknown> | null {\n return typeof c === 'function' ? (c as Type<unknown>) : null;\n }\n\n // ---- collapse (ported from the prototype) -----------------------------\n private scheduleCollapse(): void {\n this.clearCollapse();\n this.collapseTimer = setTimeout(() => {\n if (!this.open() && !this.panelId() && !this.dragging()) {\n this.collapsed.set(true);\n }\n }, COLLAPSE_DELAY_MS);\n }\n\n private clearCollapse(): void {\n if (this.collapseTimer) clearTimeout(this.collapseTimer);\n this.collapseTimer = null;\n if (this.collapsed()) this.collapsed.set(false);\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport type ValidationMedia = 'WHATSAPP' | 'SMS';\n\n/** Everything environment-specific is passed in by the host — the package\n * reads NOTHING from the host app's environment/services. */\nexport interface DevtoolsConfig {\n /** API base, e.g. https://api.stag.marsaude.net/v1 */\n apiBaseUrl: string;\n /** OTP channel. Default WHATSAPP. */\n media?: ValidationMedia;\n /** X-Mar-Locale header value. Default pt_BR. */\n locale?: string;\n /** Google OAuth client id for the admin login. */\n googleClientId?: string;\n /**\n * Google OAuth redirect_uri. Required for the Google admin login and must\n * match EXACTLY a URI whitelisted in the Google OAuth client (no silent\n * fallback — login is skipped with an error if missing).\n */\n googleRedirectUri?: string;\n /** reCAPTCHA v2 Invisible site key (optional). The package loads the script\n * and renders an invisible widget itself; without it the OTP request is sent\n * with an empty token. */\n recaptchaSiteKey?: string;\n /** Fixed RH organization id used by the generator. Default 200. */\n fixedOrgId?: number;\n /** Fallback admin phone for the SMS-release toggle. */\n adminPhone?: string;\n}\n\nexport const DEVTOOLS_CONFIG = new InjectionToken<DevtoolsConfig>('DEVTOOLS_CONFIG');\n","import { Injectable } from '@angular/core';\n\n/**\n * Plain localStorage wrapper owned by the package. DevTools-internal keys are\n * prefixed `DEVTOOLS_`; the *active app session* keys (`JWT_TOKEN`,\n * `JWT_REFRESH_TOKEN`, `EGRET_USER`) are written deliberately so the host patient\n * app consumes them — that is the only intentional touch-point with the host.\n */\n@Injectable()\nexport class DevtoolsStorage {\n get<T = any>(key: string): T | null {\n try {\n const raw = localStorage.getItem(key);\n return raw ? (JSON.parse(raw) as T) : null;\n } catch {\n return null;\n }\n }\n\n set(key: string, value: unknown): void {\n try {\n localStorage.setItem(key, JSON.stringify(value));\n } catch {\n /* storage unavailable — non-fatal */\n }\n }\n\n remove(key: string): void {\n try {\n localStorage.removeItem(key);\n } catch {\n /* ignore */\n }\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { HttpParams } from '@angular/common/http';\nimport { DevtoolsStorage } from './devtools-storage.service';\nimport { DevtoolsToastService } from '../devtools-toast.service';\n\n/** Triage form cases offered by the automatic scenario. */\nexport const OPTIONS_RESPONSES_CASE = [\n { name: 'Homem, 18 anos', value: 'case1', age: 18, biologicalSex: 'MALE' },\n];\n\nconst USERS_KEY = 'DEVTOOLS_USERS';\n\n/** Data generation + last-user storage (ported from the app's UserUtilsService). */\n@Injectable()\nexport class DevtoolsUserUtils {\n private readonly storage = inject(DevtoolsStorage);\n\n private readonly firstNames = ['Ana', 'Lucas', 'Miguel', 'Gabriela', 'Julia', 'Sophia', 'Bruno', 'Gustavo', 'Fernanda', 'Patrícia', 'Joel', 'Heitor'];\n private readonly lastNames = ['Silva', 'Santos', 'Oliveira', 'Souza', 'Rodrigues', 'Ferreira', 'Almeida', 'Pereira', 'Lima', 'Costa'];\n\n generateCPF(): string {\n let cpf = Array.from({ length: 9 }, () => Math.floor(Math.random() * 10)).join('');\n cpf += this.checkDigit(cpf);\n cpf += this.checkDigit(cpf);\n return cpf;\n }\n\n private checkDigit(cpf: string): string {\n const numbers = cpf.split('').map((n) => parseInt(n, 10));\n const length = numbers.length + 1;\n const sum = numbers.reduce((acc, n, i) => acc + n * (length - i), 0);\n const remainder = (sum * 10) % 11;\n return remainder === 10 ? '0' : remainder.toString();\n }\n\n generateRandomName(): string {\n const f = this.firstNames[Math.floor(Math.random() * this.firstNames.length)];\n const l = this.lastNames[Math.floor(Math.random() * this.lastNames.length)];\n return `${f} ${l}`;\n }\n\n generateRandomGender(): string {\n return Math.random() > 0.5 ? 'MALE' : 'FEMALE';\n }\n\n generateRandomBirthDate(): string {\n const currentYear = new Date().getFullYear();\n const minBirthYear = currentYear - 70;\n const maxBirthYear = currentYear - 18;\n const year = Math.floor(Math.random() * (maxBirthYear - minBirthYear + 1)) + minBirthYear;\n const month = String(Math.floor(Math.random() * 12) + 1).padStart(2, '0');\n const day = String(Math.floor(Math.random() * 28) + 1).padStart(2, '0');\n return `${year}-${month}-${day}`;\n }\n\n calculateAge(birthDateString: string | undefined): number | '' {\n if (!birthDateString) return '';\n const birth = new Date(birthDateString);\n const today = new Date();\n let age = today.getFullYear() - birth.getFullYear();\n const md = today.getMonth() - birth.getMonth();\n if (md < 0 || (md === 0 && today.getDate() < birth.getDate())) age--;\n return age;\n }\n\n calculateBirthDate(age: number): string {\n const now = new Date();\n const d = new Date(now.getFullYear() - age, now.getMonth(), now.getDate());\n const month = String(d.getMonth() + 1).padStart(2, '0');\n const day = String(d.getDate()).padStart(2, '0');\n return `${d.getFullYear()}-${month}-${day}`;\n }\n\n setToStorage(user: any): void {\n this.storage.set(USERS_KEY, [user]);\n }\n\n getUserFromStorage(): any[] {\n const list = this.storage.get<any[]>(USERS_KEY) ?? [];\n if (!Array.isArray(list) || !list.length) return [];\n return [list[list.length - 1]];\n }\n}\n\n/** Misc helpers (ported from the app's UtilsService) — toast/masks/params. */\n@Injectable()\nexport class DevtoolsUtils {\n private readonly toast = inject(DevtoolsToastService);\n\n objectParams(queryParams: Record<string, any>): HttpParams {\n let params = new HttpParams();\n Object.keys(queryParams).forEach((k) => {\n if (queryParams[k] !== undefined && queryParams[k] !== null && queryParams[k] !== '') {\n params = params.append(k, queryParams[k]);\n }\n });\n return params;\n }\n\n setErrorToast(err: any = {}): void {\n const message = err?.error?.message;\n this.toast.show(message || 'Erro desconhecido');\n }\n\n copyClipboard(value: any, label = 'Texto'): void {\n try {\n navigator.clipboard?.writeText(String(value));\n } catch {\n /* ignore */\n }\n this.toast.show(`${label} copiado`);\n }\n\n removePhoneMask(phone: any): string {\n return (phone ?? '').toString().replace(/\\D/g, '');\n }\n\n maskCpfCnpj(v: any): string {\n return (v ?? '').toString().replace(/(\\d{3})(\\d{3})(\\d{3})(\\d{2})/, '$1.$2.$3-$4');\n }\n}\n","/* Extracted verbatim from the app for self-contained packaging. */\n/* eslint-disable */\nexport const FEMALE_42 = {};\nexport const FEMALE_18 = {};\nexport const FEMALE_30 = {};\nexport const MALE_18 = {\n 'formSubmission': {\n 'landedAt': '2025-06-04T13:24:49.132Z',\n 'person': { 'id': 35008 },\n 'formAnswers': [{\n 'formQuestion': { 'slug': 'Race' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'BROWN' }, 'value': 'Parda' }]\n }, { 'value': 120, 'formQuestion': { 'slug': 'Weight' } }, {\n 'value': 180,\n 'formQuestion': { 'slug': 'Height' }\n }, {\n 'formQuestion': { 'slug': 'BellyShapeV2' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Three' }, 'value': '3' }]\n }, {\n 'formQuestion': { 'slug': 'FrequencyOfRedMeat' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Yes' }, 'value': 'Sim' }]\n }, {\n 'formQuestion': { 'slug': 'FrequencyOfCheeseAndButter' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Yes' }, 'value': 'Sim' }]\n }, {\n 'formQuestion': { 'slug': 'ExtraSalt' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Yes' }, 'value': 'Sim' }]\n }, {\n 'formQuestion': { 'slug': 'EverDayFruits' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Yes' }, 'value': 'Sim' }]\n }, {\n 'formQuestion': { 'slug': 'FrequencyOfPhysicalActivityV2' },\n 'formAnswerChoices': [{\n 'formQuestionChoice': { 'slug': 'DontPracticeRegularPhysicalActivity' },\n 'value': 'Não pratico atividade física regular'\n }]\n }, {\n 'formQuestion': { 'slug': 'TriageSmoking' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'No' }, 'value': 'Não' }]\n }, {\n 'formQuestion': { 'slug': 'TriageAlcohol' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Never' }, 'value': 'Nunca' }]\n }, {\n 'formQuestion': { 'slug': 'TriageMedicationAbuse' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Never' }, 'value': 'Nenhuma vez' }]\n }, {\n 'formQuestion': { 'slug': 'TriageIllicitDrugs' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Never' }, 'value': 'Nenhuma vez' }]\n }, {\n 'formQuestion': { 'slug': 'FeelingNervousOrAnxietyOrTense' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Never' }, 'value': 'Nenhuma vez' }]\n }, {\n 'formQuestion': { 'slug': 'IncapableToControlConcerns' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Never' }, 'value': 'Nenhuma vez' }]\n }, {\n 'formQuestion': { 'slug': 'LastTwoWeeksDepressed' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Never' }, 'value': 'Nenhuma vez' }]\n }, {\n 'formQuestion': { 'slug': 'LastTwoWeeksLostOfInterestDepressed' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Never' }, 'value': 'Nenhuma vez' }]\n }, {\n 'formQuestion': { 'slug': 'UnprotectedSexInfectiousDiseases' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Yes' }, 'value': 'Sim' }]\n }, {\n 'formQuestion': { 'slug': 'InjectionDrugsInfectiousDiseases' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Yes' }, 'value': 'Sim' }]\n }, {\n 'formQuestion': { 'slug': 'SyphilisTreatment' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Yes' }, 'value': 'Sim' }]\n }, {\n 'formQuestion': { 'slug': 'TuberculosisInfectiousDiseases' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Yes' }, 'value': 'Sim' }]\n }, {\n 'formQuestion': { 'slug': 'PreviousDiabetes' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Yes' }, 'value': 'Sim' }]\n }, {\n 'formQuestion': { 'slug': 'MedicalMonitoringDiabetes' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Yes' }, 'value': 'Sim' }]\n }, {\n 'formQuestion': { 'slug': 'PreviousHypertension' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Yes' }, 'value': 'Sim' }]\n }, {\n 'formQuestion': { 'slug': 'MedicalMonitoringHAS' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Yes' }, 'value': 'Sim' }]\n }, {\n 'formQuestion': { 'slug': 'PreviousCholesterol' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Yes' }, 'value': 'Sim' }]\n }, {\n 'formQuestion': { 'slug': 'MedicalMonitoringDyslipidemia' },\n 'formAnswerChoices': [{ 'formQuestionChoice': { 'slug': 'Yes' }, 'value': 'Sim' }]\n }]\n }\n};\nexport const MALE_50 = {};\nexport const MALE_70 = {};\n","import { inject, Injectable } from '@angular/core';\nimport { DevtoolsUserUtils } from './devtools-utils';\nimport {\n FEMALE_18,\n FEMALE_30,\n FEMALE_42,\n MALE_18,\n MALE_50,\n MALE_70,\n} from './data/typeform-cases.data';\n\n/** Builds the form-submission body for the automatic-signup triage flow. */\n@Injectable()\nexport class DevtoolsTypeform {\n private readonly userUtils = inject(DevtoolsUserUtils);\n private readonly cases: Record<string, any> = {\n MALE_18,\n MALE_50,\n MALE_70,\n FEMALE_18,\n FEMALE_30,\n FEMALE_42,\n };\n\n getCase(dataToReplace: any): any {\n const { biologicalSex, birthdate, personId } = dataToReplace;\n const key = `${biologicalSex}_${this.userUtils.calculateAge(birthdate)}`;\n const formJson = this.cases[key];\n if (!formJson || !formJson.formSubmission) {\n return {\n formSubmission: {\n person: { id: personId },\n landedAt: new Date().toISOString(),\n formAnswers: [],\n },\n };\n }\n return {\n formSubmission: {\n ...formJson.formSubmission,\n person: { id: personId },\n landedAt: new Date().toISOString(),\n },\n };\n }\n}\n","/* Extracted verbatim from the app for self-contained packaging. */\nexport const EXAMS_18 = [\n {\n 'person': {\n 'id': 5518\n },\n 'documentUrl': 'https://stag-mar-static.s3.us-east-2.amazonaws.com/performed-exam/83379b83-ce53-4738-9bb1-fd48fea247ae.pdf?X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJn%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMiJIMEYCIQCXmt5XvaK1l5abS6W5Wb20oJ51DrMszJPXJUOG5n%2BDxQIhAKOacn2Oj9PJqZQ02yuao2%2BparPJXCigLaaG0bEx7wtvKo4ECJL%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEQABoMODU4NTIwMjAxODY0IgyIKcHluQuoiNMjPu4q4gMfnluXq8jJxspyzNCwZ948wmhjj0ebDm8TmzFmUic68sdlE4WsZAcUPQmTcZDImBX0KaukGRcI3jdFX62XaMMJ4Byuxj0EloP%2BGZyah2eDrPZr2%2FhDIKZuyrUtebZUCpZe%2FLI%2FWCBnblI12u14TtJGbcVTbtiw58onl2kvOCgwb9FUskI3dJGmha8CqDMCdOAb3sMQozvU1PgXRIj1o5bDj0U5jFT7VVtuAGv3LqsEfd9dxAj%2FcCwgwCJQ%2BbrjH3ABdxwdiVacDOfqTDWuvemFvjIDjIKXG%2Fq%2BcDXEifcMBNdWk%2BVffcLb0RZLfvF2JW6h4n1vUrfqBiL6FW7s%2FWYF6qrv7h1ZfGt1JtPXiP%2B98vU9MEZhUqB6RmMDTtuvI3o11V7C9GuSdvP15imWhkbmylz0oA98MzjO6RsN5D7CvT1STICeXR1WTGKAvH8p2E5HNL%2BGo11oidE6wMFC0NLDbMD5tbVyPeTGA%2BYzX8XE21gmWoOfntRryK5kyZNbu6K7Y1L0owZ6nYGMBFV9G6jxIsZ3SaPbzh1M3sndmwFYit%2FxaeYNA1rIDyAUkZjdEFPbNMhTK3kKgdb5e8ZWbsXBBuzPdoBpIShIUIVvM%2FnbGkvxBo%2FCOl%2FwrU40by0MWhObpTDX%2Fui1BjqkAXoYq3ayR5DIQFaLyIqrRtqhKUugq5Mf7ecpa08dP729n7YMxd69OLKwLV%2BUAPdUsvsRGJq01BLFJqFyvX4big29FCgavwNb5BtaCPEbtGaGUkOhI44nPc0nIUTMEUc5K26kNbELQfk6sXElU7AfoQtP%2Bj6JmFO9FfJ%2FFTne1VZRcYdjhtPHeOmglGChz7sb3DSODSIVXBXK4fhY%2FD3LKfK6JNwP&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20240812T192159Z&X-Amz-SignedHeaders=host&X-Amz-Credential=ASIA4PY6KVKEEJCK2C4E%2F20240812%2Fus-east-2%2Fs3%2Faws4_request&X-Amz-Expires=3600&X-Amz-Signature=0cecd10df31c9c0ab2f890f30643441d595ce016865a02b7bd94065b605c4852',\n 'performedAt': '2024-08-12',\n 'exam': {\n 'id': 4\n },\n 'examParse': {},\n 'examResults': [\n {\n 'value': '20',\n 'expectedExamResult': {\n 'id': 5\n }\n }\n ],\n 'laboratory': null,\n 'id': null,\n 'source': 'MANUAL'\n },\n {\n 'person': {\n 'id': 5518\n },\n 'documentUrl': 'https://stag-mar-static.s3.us-east-2.amazonaws.com/performed-exam/83379b83-ce53-4738-9bb1-fd48fea247ae.pdf?X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJn%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMiJIMEYCIQCXmt5XvaK1l5abS6W5Wb20oJ51DrMszJPXJUOG5n%2BDxQIhAKOacn2Oj9PJqZQ02yuao2%2BparPJXCigLaaG0bEx7wtvKo4ECJL%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEQABoMODU4NTIwMjAxODY0IgyIKcHluQuoiNMjPu4q4gMfnluXq8jJxspyzNCwZ948wmhjj0ebDm8TmzFmUic68sdlE4WsZAcUPQmTcZDImBX0KaukGRcI3jdFX62XaMMJ4Byuxj0EloP%2BGZyah2eDrPZr2%2FhDIKZuyrUtebZUCpZe%2FLI%2FWCBnblI12u14TtJGbcVTbtiw58onl2kvOCgwb9FUskI3dJGmha8CqDMCdOAb3sMQozvU1PgXRIj1o5bDj0U5jFT7VVtuAGv3LqsEfd9dxAj%2FcCwgwCJQ%2BbrjH3ABdxwdiVacDOfqTDWuvemFvjIDjIKXG%2Fq%2BcDXEifcMBNdWk%2BVffcLb0RZLfvF2JW6h4n1vUrfqBiL6FW7s%2FWYF6qrv7h1ZfGt1JtPXiP%2B98vU9MEZhUqB6RmMDTtuvI3o11V7C9GuSdvP15imWhkbmylz0oA98MzjO6RsN5D7CvT1STICeXR1WTGKAvH8p2E5HNL%2BGo11oidE6wMFC0NLDbMD5tbVyPeTGA%2BYzX8XE21gmWoOfntRryK5kyZNbu6K7Y1L0owZ6nYGMBFV9G6jxIsZ3SaPbzh1M3sndmwFYit%2FxaeYNA1rIDyAUkZjdEFPbNMhTK3kKgdb5e8ZWbsXBBuzPdoBpIShIUIVvM%2FnbGkvxBo%2FCOl%2FwrU40by0MWhObpTDX%2Fui1BjqkAXoYq3ayR5DIQFaLyIqrRtqhKUugq5Mf7ecpa08dP729n7YMxd69OLKwLV%2BUAPdUsvsRGJq01BLFJqFyvX4big29FCgavwNb5BtaCPEbtGaGUkOhI44nPc0nIUTMEUc5K26kNbELQfk6sXElU7AfoQtP%2Bj6JmFO9FfJ%2FFTne1VZRcYdjhtPHeOmglGChz7sb3DSODSIVXBXK4fhY%2FD3LKfK6JNwP&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20240812T192159Z&X-Amz-SignedHeaders=host&X-Amz-Credential=ASIA4PY6KVKEEJCK2C4E%2F20240812%2Fus-east-2%2Fs3%2Faws4_request&X-Amz-Expires=3600&X-Amz-Signature=0cecd10df31c9c0ab2f890f30643441d595ce016865a02b7bd94065b605c4852',\n 'performedAt': '2024-08-12',\n 'exam': {\n 'id': 2\n },\n 'examParse': {},\n 'examResults': [\n {\n 'value': '12',\n 'expectedExamResult': {\n 'id': 2\n }\n },\n {\n 'value': '8',\n 'expectedExamResult': {\n 'id': 3\n }\n }\n ],\n 'laboratory': null,\n 'id': null,\n 'source': 'MANUAL'\n },\n {\n 'person': {\n 'id': 5518\n },\n 'documentUrl': 'https://stag-mar-static.s3.us-east-2.amazonaws.com/performed-exam/83379b83-ce53-4738-9bb1-fd48fea247ae.pdf?X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJn%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMiJIMEYCIQCXmt5XvaK1l5abS6W5Wb20oJ51DrMszJPXJUOG5n%2BDxQIhAKOacn2Oj9PJqZQ02yuao2%2BparPJXCigLaaG0bEx7wtvKo4ECJL%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEQABoMODU4NTIwMjAxODY0IgyIKcHluQuoiNMjPu4q4gMfnluXq8jJxspyzNCwZ948wmhjj0ebDm8TmzFmUic68sdlE4WsZAcUPQmTcZDImBX0KaukGRcI3jdFX62XaMMJ4Byuxj0EloP%2BGZyah2eDrPZr2%2FhDIKZuyrUtebZUCpZe%2FLI%2FWCBnblI12u14TtJGbcVTbtiw58onl2kvOCgwb9FUskI3dJGmha8CqDMCdOAb3sMQozvU1PgXRIj1o5bDj0U5jFT7VVtuAGv3LqsEfd9dxAj%2FcCwgwCJQ%2BbrjH3ABdxwdiVacDOfqTDWuvemFvjIDjIKXG%2Fq%2BcDXEifcMBNdWk%2BVffcLb0RZLfvF2JW6h4n1vUrfqBiL6FW7s%2FWYF6qrv7h1ZfGt1JtPXiP%2B98vU9MEZhUqB6RmMDTtuvI3o11V7C9GuSdvP15imWhkbmylz0oA98MzjO6RsN5D7CvT1STICeXR1WTGKAvH8p2E5HNL%2BGo11oidE6wMFC0NLDbMD5tbVyPeTGA%2BYzX8XE21gmWoOfntRryK5kyZNbu6K7Y1L0owZ6nYGMBFV9G6jxIsZ3SaPbzh1M3sndmwFYit%2FxaeYNA1rIDyAUkZjdEFPbNMhTK3kKgdb5e8ZWbsXBBuzPdoBpIShIUIVvM%2FnbGkvxBo%2FCOl%2FwrU40by0MWhObpTDX%2Fui1BjqkAXoYq3ayR5DIQFaLyIqrRtqhKUugq5Mf7ecpa08dP729n7YMxd69OLKwLV%2BUAPdUsvsRGJq01BLFJqFyvX4big29FCgavwNb5BtaCPEbtGaGUkOhI44nPc0nIUTMEUc5K26kNbELQfk6sXElU7AfoQtP%2Bj6JmFO9FfJ%2FFTne1VZRcYdjhtPHeOmglGChz7sb3DSODSIVXBXK4fhY%2FD3LKfK6JNwP&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20240812T192159Z&X-Amz-SignedHeaders=host&X-Amz-Credential=ASIA4PY6KVKEEJCK2C4E%2F20240812%2Fus-east-2%2Fs3%2Faws4_request&X-Amz-Expires=3600&X-Amz-Signature=0cecd10df31c9c0ab2f890f30643441d595ce016865a02b7bd94065b605c4852',\n 'performedAt': '2024-08-12',\n 'exam': {\n 'id': 5\n },\n 'examParse': {},\n 'examResults': [\n {\n 'value': '24',\n 'expectedExamResult': {\n 'id': 6\n }\n },\n {\n 'value': '24',\n 'expectedExamResult': {\n 'id': 7\n }\n },\n {\n 'value': '24',\n 'expectedExamResult': {\n 'id': 8\n }\n }\n ],\n 'laboratory': null,\n 'id': null,\n 'source': 'MANUAL'\n },\n {\n 'person': {\n 'id': 5518\n },\n 'documentUrl': 'https://stag-mar-static.s3.us-east-2.amazonaws.com/performed-exam/83379b83-ce53-4738-9bb1-fd48fea247ae.pdf?X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJn%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMiJIMEYCIQCXmt5XvaK1l5abS6W5Wb20oJ51DrMszJPXJUOG5n%2BDxQIhAKOacn2Oj9PJqZQ02yuao2%2BparPJXCigLaaG0bEx7wtvKo4ECJL%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEQABoMODU4NTIwMjAxODY0IgyIKcHluQuoiNMjPu4q4gMfnluXq8jJxspyzNCwZ948wmhjj0ebDm8TmzFmUic68sdlE4WsZAcUPQmTcZDImBX0KaukGRcI3jdFX62XaMMJ4Byuxj0EloP%2BGZyah2eDrPZr2%2FhDIKZuyrUtebZUCpZe%2FLI%2FWCBnblI12u14TtJGbcVTbtiw58onl2kvOCgwb9FUskI3dJGmha8CqDMCdOAb3sMQozvU1PgXRIj1o5bDj0U5jFT7VVtuAGv3LqsEfd9dxAj%2FcCwgwCJQ%2BbrjH3ABdxwdiVacDOfqTDWuvemFvjIDjIKXG%2Fq%2BcDXEifcMBNdWk%2BVffcLb0RZLfvF2JW6h4n1vUrfqBiL6FW7s%2FWYF6qrv7h1ZfGt1JtPXiP%2B98vU9MEZhUqB6RmMDTtuvI3o11V7C9GuSdvP15imWhkbmylz0oA98MzjO6RsN5D7CvT1STICeXR1WTGKAvH8p2E5HNL%2BGo11oidE6wMFC0NLDbMD5tbVyPeTGA%2BYzX8XE21gmWoOfntRryK5kyZNbu6K7Y1L0owZ6nYGMBFV9G6jxIsZ3SaPbzh1M3sndmwFYit%2FxaeYNA1rIDyAUkZjdEFPbNMhTK3kKgdb5e8ZWbsXBBuzPdoBpIShIUIVvM%2FnbGkvxBo%2FCOl%2FwrU40by0MWhObpTDX%2Fui1BjqkAXoYq3ayR5DIQFaLyIqrRtqhKUugq5Mf7ecpa08dP729n7YMxd69OLKwLV%2BUAPdUsvsRGJq01BLFJqFyvX4big29FCgavwNb5BtaCPEbtGaGUkOhI44nPc0nIUTMEUc5K26kNbELQfk6sXElU7AfoQtP%2Bj6JmFO9FfJ%2FFTne1VZRcYdjhtPHeOmglGChz7sb3DSODSIVXBXK4fhY%2FD3LKfK6JNwP&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20240812T192159Z&X-Amz-SignedHeaders=host&X-Amz-Credential=ASIA4PY6KVKEEJCK2C4E%2F20240812%2Fus-east-2%2Fs3%2Faws4_request&X-Amz-Expires=3600&X-Amz-Signature=0cecd10df31c9c0ab2f890f30643441d595ce016865a02b7bd94065b605c4852',\n 'performedAt': '2024-08-12',\n 'exam': {\n 'id': 6\n },\n 'examParse': {},\n 'examResults': [\n {\n 'value': '12',\n 'expectedExamResult': {\n 'id': 9\n }\n }\n ],\n 'laboratory': null,\n 'id': null,\n 'source': 'MANUAL'\n },\n {\n 'person': {\n 'id': 5518\n },\n 'documentUrl': 'https://stag-mar-static.s3.us-east-2.amazonaws.com/performed-exam/83379b83-ce53-4738-9bb1-fd48fea247ae.pdf?X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJn%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMiJIMEYCIQCXmt5XvaK1l5abS6W5Wb20oJ51DrMszJPXJUOG5n%2BDxQIhAKOacn2Oj9PJqZQ02yuao2%2BparPJXCigLaaG0bEx7wtvKo4ECJL%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEQABoMODU4NTIwMjAxODY0IgyIKcHluQuoiNMjPu4q4gMfnluXq8jJxspyzNCwZ948wmhjj0ebDm8TmzFmUic68sdlE4WsZAcUPQmTcZDImBX0KaukGRcI3jdFX62XaMMJ4Byuxj0EloP%2BGZyah2eDrPZr2%2FhDIKZuyrUtebZUCpZe%2FLI%2FWCBnblI12u14TtJGbcVTbtiw58onl2kvOCgwb9FUskI3dJGmha8CqDMCdOAb3sMQozvU1PgXRIj1o5bDj0U5jFT7VVtuAGv3LqsEfd9dxAj%2FcCwgwCJQ%2BbrjH3ABdxwdiVacDOfqTDWuvemFvjIDjIKXG%2Fq%2BcDXEifcMBNdWk%2BVffcLb0RZLfvF2JW6h4n1vUrfqBiL6FW7s%2FWYF6qrv7h1ZfGt1JtPXiP%2B98vU9MEZhUqB6RmMDTtuvI3o11V7C9GuSdvP15imWhkbmylz0oA98MzjO6RsN5D7CvT1STICeXR1WTGKAvH8p2E5HNL%2BGo11oidE6wMFC0NLDbMD5tbVyPeTGA%2BYzX8XE21gmWoOfntRryK5kyZNbu6K7Y1L0owZ6nYGMBFV9G6jxIsZ3SaPbzh1M3sndmwFYit%2FxaeYNA1rIDyAUkZjdEFPbNMhTK3kKgdb5e8ZWbsXBBuzPdoBpIShIUIVvM%2FnbGkvxBo%2FCOl%2FwrU40by0MWhObpTDX%2Fui1BjqkAXoYq3ayR5DIQFaLyIqrRtqhKUugq5Mf7ecpa08dP729n7YMxd69OLKwLV%2BUAPdUsvsRGJq01BLFJqFyvX4big29FCgavwNb5BtaCPEbtGaGUkOhI44nPc0nIUTMEUc5K26kNbELQfk6sXElU7AfoQtP%2Bj6JmFO9FfJ%2FFTne1VZRcYdjhtPHeOmglGChz7sb3DSODSIVXBXK4fhY%2FD3LKfK6JNwP&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20240812T192159Z&X-Amz-SignedHeaders=host&X-Amz-Credential=ASIA4PY6KVKEEJCK2C4E%2F20240812%2Fus-east-2%2Fs3%2Faws4_request&X-Amz-Expires=3600&X-Amz-Signature=0cecd10df31c9c0ab2f890f30643441d595ce016865a02b7bd94065b605c4852',\n 'performedAt': '2024-08-12',\n 'exam': {\n 'id': 7895\n },\n 'examParse': {},\n 'examResults': [\n {\n 'value': 'Positivo',\n 'expectedExamResult': {\n 'id': 39\n }\n }\n ],\n 'laboratory': null,\n 'id': null,\n 'source': 'MANUAL'\n },\n {\n 'person': {\n 'id': 5518\n },\n 'documentUrl': 'https://stag-mar-static.s3.us-east-2.amazonaws.com/performed-exam/83379b83-ce53-4738-9bb1-fd48fea247ae.pdf?X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJn%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMiJIMEYCIQCXmt5XvaK1l5abS6W5Wb20oJ51DrMszJPXJUOG5n%2BDxQIhAKOacn2Oj9PJqZQ02yuao2%2BparPJXCigLaaG0bEx7wtvKo4ECJL%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEQABoMODU4NTIwMjAxODY0IgyIKcHluQuoiNMjPu4q4gMfnluXq8jJxspyzNCwZ948wmhjj0ebDm8TmzFmUic68sdlE4WsZAcUPQmTcZDImBX0KaukGRcI3jdFX62XaMMJ4Byuxj0EloP%2BGZyah2eDrPZr2%2FhDIKZuyrUtebZUCpZe%2FLI%2FWCBnblI12u14TtJGbcVTbtiw58onl2kvOCgwb9FUskI3dJGmha8CqDMCdOAb3sMQozvU1PgXRIj1o5bDj0U5jFT7VVtuAGv3LqsEfd9dxAj%2FcCwgwCJQ%2BbrjH3ABdxwdiVacDOfqTDWuvemFvjIDjIKXG%2Fq%2BcDXEifcMBNdWk%2BVffcLb0RZLfvF2JW6h4n1vUrfqBiL6FW7s%2FWYF6qrv7h1ZfGt1JtPXiP%2B98vU9MEZhUqB6RmMDTtuvI3o11V7C9GuSdvP15imWhkbmylz0oA98MzjO6RsN5D7CvT1STICeXR1WTGKAvH8p2E5HNL%2BGo11oidE6wMFC0NLDbMD5tbVyPeTGA%2BYzX8XE21gmWoOfntRryK5kyZNbu6K7Y1L0owZ6nYGMBFV9G6jxIsZ3SaPbzh1M3sndmwFYit%2FxaeYNA1rIDyAUkZjdEFPbNMhTK3kKgdb5e8ZWbsXBBuzPdoBpIShIUIVvM%2FnbGkvxBo%2FCOl%2FwrU40by0MWhObpTDX%2Fui1BjqkAXoYq3ayR5DIQFaLyIqrRtqhKUugq5Mf7ecpa08dP729n7YMxd69OLKwLV%2BUAPdUsvsRGJq01BLFJqFyvX4big29FCgavwNb5BtaCPEbtGaGUkOhI44nPc0nIUTMEUc5K26kNbELQfk6sXElU7AfoQtP%2Bj6JmFO9FfJ%2FFTne1VZRcYdjhtPHeOmglGChz7sb3DSODSIVXBXK4fhY%2FD3LKfK6JNwP&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20240812T192159Z&X-Amz-SignedHeaders=host&X-Amz-Credential=ASIA4PY6KVKEEJCK2C4E%2F20240812%2Fus-east-2%2Fs3%2Faws4_request&X-Amz-Expires=3600&X-Amz-Signature=0cecd10df31c9c0ab2f890f30643441d595ce016865a02b7bd94065b605c4852',\n 'performedAt': '2024-08-12',\n 'exam': {\n 'id': 19\n },\n 'examParse': {},\n 'examResults': [\n {\n 'value': 'Reagente',\n 'expectedExamResult': {\n 'id': 23\n }\n }\n ],\n 'laboratory': null,\n 'id': null,\n 'source': 'MANUAL'\n },\n {\n 'person': {\n 'id': 5518\n },\n 'documentUrl': 'https://stag-mar-static.s3.us-east-2.amazonaws.com/performed-exam/83379b83-ce53-4738-9bb1-fd48fea247ae.pdf?X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJn%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMiJIMEYCIQCXmt5XvaK1l5abS6W5Wb20oJ51DrMszJPXJUOG5n%2BDxQIhAKOacn2Oj9PJqZQ02yuao2%2BparPJXCigLaaG0bEx7wtvKo4ECJL%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEQABoMODU4NTIwMjAxODY0IgyIKcHluQuoiNMjPu4q4gMfnluXq8jJxspyzNCwZ948wmhjj0ebDm8TmzFmUic68sdlE4WsZAcUPQmTcZDImBX0KaukGRcI3jdFX62XaMMJ4Byuxj0EloP%2BGZyah2eDrPZr2%2FhDIKZuyrUtebZUCpZe%2FLI%2FWCBnblI12u14TtJGbcVTbtiw58onl2kvOCgwb9FUskI3dJGmha8CqDMCdOAb3sMQozvU1PgXRIj1o5bDj0U5jFT7VVtuAGv3LqsEfd9dxAj%2FcCwgwCJQ%2BbrjH3ABdxwdiVacDOfqTDWuvemFvjIDjIKXG%2Fq%2BcDXEifcMBNdWk%2BVffcLb0RZLfvF2JW6h4n1vUrfqBiL6FW7s%2FWYF6qrv7h1ZfGt1JtPXiP%2B98vU9MEZhUqB6RmMDTtuvI3o11V7C9GuSdvP15imWhkbmylz0oA98MzjO6RsN5D7CvT1STICeXR1WTGKAvH8p2E5HNL%2BGo11oidE6wMFC0NLDbMD5tbVyPeTGA%2BYzX8XE21gmWoOfntRryK5kyZNbu6K7Y1L0owZ6nYGMBFV9G6jxIsZ3SaPbzh1M3sndmwFYit%2FxaeYNA1rIDyAUkZjdEFPbNMhTK3kKgdb5e8ZWbsXBBuzPdoBpIShIUIVvM%2FnbGkvxBo%2FCOl%2FwrU40by0MWhObpTDX%2Fui1BjqkAXoYq3ayR5DIQFaLyIqrRtqhKUugq5Mf7ecpa08dP729n7YMxd69OLKwLV%2BUAPdUsvsRGJq01BLFJqFyvX4big29FCgavwNb5BtaCPEbtGaGUkOhI44nPc0nIUTMEUc5K26kNbELQfk6sXElU7AfoQtP%2Bj6JmFO9FfJ%2FFTne1VZRcYdjhtPHeOmglGChz7sb3DSODSIVXBXK4fhY%2FD3LKfK6JNwP&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20240812T192159Z&X-Amz-SignedHeaders=host&X-Amz-Credential=ASIA4PY6KVKEEJCK2C4E%2F20240812%2Fus-east-2%2Fs3%2Faws4_request&X-Amz-Expires=3600&X-Amz-Signature=0cecd10df31c9c0ab2f890f30643441d595ce016865a02b7bd94065b605c4852',\n 'performedAt': '2024-08-12',\n 'exam': {\n 'id': 20\n },\n 'examParse': {},\n 'examResults': [\n {\n 'value': 'Reagente',\n 'expectedExamResult': {\n 'id': 24\n }\n }\n ],\n 'laboratory': null,\n 'id': null,\n 'source': 'MANUAL'\n },\n {\n 'person': {\n 'id': 5518\n },\n 'documentUrl': 'https://stag-mar-static.s3.us-east-2.amazonaws.com/performed-exam/83379b83-ce53-4738-9bb1-fd48fea247ae.pdf?X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJn%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMiJIMEYCIQCXmt5XvaK1l5abS6W5Wb20oJ51DrMszJPXJUOG5n%2BDxQIhAKOacn2Oj9PJqZQ02yuao2%2BparPJXCigLaaG0bEx7wtvKo4ECJL%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEQABoMODU4NTIwMjAxODY0IgyIKcHluQuoiNMjPu4q4gMfnluXq8jJxspyzNCwZ948wmhjj0ebDm8TmzFmUic68sdlE4WsZAcUPQmTcZDImBX0KaukGRcI3jdFX62XaMMJ4Byuxj0EloP%2BGZyah2eDrPZr2%2FhDIKZuyrUtebZUCpZe%2FLI%2FWCBnblI12u14TtJGbcVTbtiw58onl2kvOCgwb9FUskI3dJGmha8CqDMCdOAb3sMQozvU1PgXRIj1o5bDj0U5jFT7VVtuAGv3LqsEfd9dxAj%2FcCwgwCJQ%2BbrjH3ABdxwdiVacDOfqTDWuvemFvjIDjIKXG%2Fq%2BcDXEifcMBNdWk%2BVffcLb0RZLfvF2JW6h4n1vUrfqBiL6FW7s%2FWYF6qrv7h1ZfGt1JtPXiP%2B98vU9MEZhUqB6RmMDTtuvI3o11V7C9GuSdvP15imWhkbmylz0oA98MzjO6RsN5D7CvT1STICeXR1WTGKAvH8p2E5HNL%2BGo11oidE6wMFC0NLDbMD5tbVyPeTGA%2BYzX8XE21gmWoOfntRryK5kyZNbu6K7Y1L0owZ6nYGMBFV9G6jxIsZ3SaPbzh1M3sndmwFYit%2FxaeYNA1rIDyAUkZjdEFPbNMhTK3kKgdb5e8ZWbsXBBuzPdoBpIShIUIVvM%2FnbGkvxBo%2FCOl%2FwrU40by0MWhObpTDX%2Fui1BjqkAXoYq3ayR5DIQFaLyIqrRtqhKUugq5Mf7ecpa08dP729n7YMxd69OLKwLV%2BUAPdUsvsRGJq01BLFJqFyvX4big29FCgavwNb5BtaCPEbtGaGUkOhI44nPc0nIUTMEUc5K26kNbELQfk6sXElU7AfoQtP%2Bj6JmFO9FfJ%2FFTne1VZRcYdjhtPHeOmglGChz7sb3DSODSIVXBXK4fhY%2FD3LKfK6JNwP&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20240812T192159Z&X-Amz-SignedHeaders=host&X-Amz-Credential=ASIA4PY6KVKEEJCK2C4E%2F20240812%2Fus-east-2%2Fs3%2Faws4_request&X-Amz-Expires=3600&X-Amz-Signature=0cecd10df31c9c0ab2f890f30643441d595ce016865a02b7bd94065b605c4852',\n 'performedAt': '2024-08-12',\n 'exam': {\n 'id': 21\n },\n 'examParse': {},\n 'examResults': [\n {\n 'value': '1:8',\n 'expectedExamResult': {\n 'id': 25\n }\n }\n ],\n 'laboratory': null,\n 'id': null,\n 'source': 'MANUAL'\n }\n];\n","import { inject, Injectable } from '@angular/core';\nimport { HttpClient, HttpContext, HttpHeaders } from '@angular/common/http';\nimport { forkJoin, from, Observable, of } from 'rxjs';\nimport { map, switchMap, tap } from 'rxjs/operators';\nimport { DEVTOOLS_CONFIG, ValidationMedia } from './devtools-config';\nimport { DevtoolsUtils } from './devtools-utils';\nimport { DevtoolsTypeform } from './typeform';\nimport { DC_AUTH_TOKEN } from './devtools-http.interceptor';\nimport { EXAMS_18 } from './data/exams-18.data';\n\nexport interface UserData {\n customerOrganizationId?: string;\n orgDocument?: string;\n orgDocumentType?: string;\n document: string | undefined;\n fullName: string | undefined;\n biologicalSex: string | undefined;\n birthdate: string | undefined;\n typeGenerator: 'signup' | 'autoSignup' | 'removePhone' | undefined;\n}\n\nexport interface PersonRegistration {\n hasDocument: boolean;\n hasVerifiedPhone: boolean;\n phoneEnding?: string;\n phoneAreaCode?: string;\n}\n\nexport type BiologicalSex = 'MALE' | 'FEMALE';\nexport type Gender = 'MALE' | 'FEMALE' | 'NON_BINARY' | 'OTHER';\n\nexport interface SignupProperties {\n name: string;\n birthdate: string;\n biologicalSex: BiologicalSex;\n gender: Gender;\n}\n\nexport interface OtpLoginResult {\n accessToken: string;\n refreshToken: string;\n profile: any;\n}\n\nexport interface TokenResponse {\n accessToken: string;\n refreshToken: string;\n}\n\n/**\n * All API access for the DevTools, on the package's OWN HttpClient (isolated\n * interceptor). Mirrors the host UserService surface plus the OTP/Google auth\n * endpoints, so panels port across with no behavioural change.\n */\n@Injectable()\nexport class DevtoolsApiService {\n private readonly http = inject(HttpClient);\n private readonly config = inject(DEVTOOLS_CONFIG);\n private readonly utils = inject(DevtoolsUtils);\n private readonly typeform = inject(DevtoolsTypeform);\n\n private get api(): string {\n return this.config.apiBaseUrl;\n }\n get media(): ValidationMedia {\n return this.config.media ?? 'WHATSAPP';\n }\n\n // ---- auth endpoints ---------------------------------------------------\n checkRegistration(cpf: string): Observable<PersonRegistration> {\n return this.http.get<PersonRegistration>(`${this.api}/person-registrations`, {\n params: this.utils.objectParams({ document: onlyDigits(cpf) }),\n });\n }\n\n requestCode(input: { document: string; phone: string; personProperties?: SignupProperties }): Observable<unknown> {\n return this.recaptcha().pipe(\n switchMap((token) => {\n const headers = new HttpHeaders({ 'X-Google-Recaptcha-Token': token });\n const recipientValidationCode: Record<string, unknown> = {\n document: onlyDigits(input.document),\n phone: input.phone,\n media: this.media,\n };\n if (input.personProperties) recipientValidationCode['personProperties'] = input.personProperties;\n return this.http.post(`${this.api}/recipient-validation-codes`, { recipientValidationCode }, { headers });\n }),\n );\n }\n\n exchangeOtp(document: string, code: string): Observable<TokenResponse> {\n return this.http.post<TokenResponse>(`${this.api}/token`, {\n grantType: 'RECIPIENT_VALIDATION_CODE',\n code: onlyDigits(code),\n document: onlyDigits(document),\n });\n }\n\n /** Exchange the OTP code and load the profile in one shot. */\n otpLogin(document: string, code: string): Observable<OtpLoginResult> {\n return this.exchangeOtp(document, code).pipe(\n switchMap((tokens) =>\n this.self(tokens.accessToken).pipe(\n map((profile) => ({ accessToken: tokens.accessToken, refreshToken: tokens.refreshToken, profile })),\n ),\n ),\n );\n }\n\n exchangeGoogle(googleAccessToken: string): Observable<TokenResponse> {\n return this.http.post<TokenResponse>(`${this.api}/token`, {\n grantType: 'GOOGLE_ACCESS_TOKEN',\n googleAccessToken,\n });\n }\n\n refreshToken(refreshToken: string): Observable<TokenResponse> {\n return this.http.post<TokenResponse>(`${this.api}/token`, {\n grantType: 'REFRESH_TOKEN',\n refreshToken,\n });\n }\n\n /** GET /persons/self. Pass a token to use it instead of the admin token. */\n self(accessToken?: string): Observable<any> {\n const context = accessToken ? new HttpContext().set(DC_AUTH_TOKEN, accessToken) : undefined;\n return this.http\n .get<{ person: any }>(`${this.api}/persons/self`, context ? { context } : {})\n .pipe(map((r) => r?.person ?? null));\n }\n\n // ---- users ------------------------------------------------------------\n findUser(queryParams: any): Observable<any> {\n return this.http.get(`${this.api}/persons`, { params: this.utils.objectParams(queryParams) });\n }\n\n findRemoveUserPhone(phone: any): Observable<any> {\n return this.findUser({ phones: `+55${phone}` }).pipe(\n map((res: any) => res?.persons?.[0]),\n switchMap((user: any) => {\n if (user?.id) {\n return this.http.patch(`${this.api}/persons/${user.id}`, { person: { phone: null } });\n }\n return of('');\n }),\n );\n }\n\n signupForm(body: UserData, phone?: string): Observable<any> {\n const request = this.http.post(`${this.api}/person-imports`, this.personImportBody(body));\n if (phone) return this.findRemoveUserPhone(phone).pipe(switchMap(() => request));\n return request;\n }\n\n autoSignup(body: UserData, phone?: string): Observable<any> {\n return this.signupForm(body, phone).pipe(\n switchMap(() => this.findUser({ q: body.document }).pipe(map((r: any) => r?.persons?.[0]))),\n switchMap((person: any) => {\n const { biologicalSex, birthdate, fullName } = body;\n const formBody = this.typeform.getCase({ personId: person?.id, biologicalSex, birthdate, name: fullName });\n return this.http.post(`${this.api}/form-submissions`, formBody);\n }),\n );\n }\n\n private personImportBody(body: UserData) {\n const { document, fullName: name, birthdate, biologicalSex, orgDocument, orgDocumentType, customerOrganizationId } = body;\n return {\n personImport: {\n customerOrganization: { id: customerOrganizationId },\n persons: [\n {\n document,\n personProperties: { name, biologicalSex, birthdate },\n subscription: {\n ownership: 'HOLDER',\n organization: { document: orgDocument, documentType: orgDocumentType },\n },\n },\n ],\n },\n };\n }\n\n generatePerformedExams(user: UserData, age: number, documentUrl: string): Observable<any[]> {\n return this.findUser({ documents: user.document }).pipe(\n switchMap((res: any) => {\n const person = res?.persons?.[0];\n const today = new Date();\n const performedAt = `${today.getFullYear()}-${String(today.getMonth() + 1).padStart(2, '0')}-${String(today.getDate()).padStart(2, '0')}`;\n if (age === 18) {\n const performedExams = (EXAMS_18 as any[]).map((exam) => ({\n ...exam,\n person: { id: person?.id },\n performedAt,\n examSource: { name: 'ADMIN' },\n documentUrl,\n }));\n return this.http\n .post<any>(`${this.api}/performed-exams/create-many`, { performedExams })\n .pipe(map((r: any) => r?.performedExams ?? []));\n }\n return of([] as any[]);\n }),\n );\n }\n\n // ---- organizations + permissions -------------------------------------\n getWithQuery(params: any): Observable<any[]> {\n return this.http\n .get<any>(`${this.api}/organizations`, { params: this.utils.objectParams(params) })\n .pipe(map((r: any) => r?.organizations ?? []));\n }\n\n getOrganizationsByIds(ids: number[]): Observable<any[]> {\n if (!ids.length) return of([]);\n return this.getWithQuery({ minActiveSubscriptions: 1, ids: ids.join(','), offset: 0, limit: 15 });\n }\n\n getAuthStatements(personId: number): Observable<any[]> {\n return this.http\n .get<any>(`${this.api}/auth-statements`, { params: this.utils.objectParams({ principalPersonIds: personId, roleNames: 'MANAGER,DOCTOR' }) })\n .pipe(map((r: any) => r?.authStatements ?? []));\n }\n\n getAuthStatementsByPerson(personId: number): Observable<any[]> {\n return this.http\n .get<any>(`${this.api}/auth-statements`, { params: this.utils.objectParams({ principalPersonIds: personId }) })\n .pipe(map((r: any) => r?.authStatements ?? []));\n }\n\n createAuthStatement(personId: number, roleName: 'MANAGER' | 'DOCTOR', organizationId: number): Observable<any> {\n return this.http.post(`${this.api}/auth-statements`, {\n authStatement: {\n role: { name: roleName },\n principal: { person: { id: personId } },\n resource: { organization: { id: organizationId } },\n },\n });\n }\n\n deleteAuthStatement(authStatementId: number): Observable<void> {\n return this.http.delete<void>(`${this.api}/auth-statements/${authStatementId}`);\n }\n\n deleteAuthStatementsByIds(ids: number[]): Observable<void[]> {\n const valid = ids.filter((id): id is number => !!id);\n if (!valid.length) return of([]);\n return forkJoin(valid.map((id) => this.deleteAuthStatement(id)));\n }\n\n // ---- reCAPTCHA (v2 Invisible) -----------------------------------------\n /** Cached invisible-widget id: rendered once, re-executed per request. */\n private recaptchaWidgetId: number | null = null;\n /** Resolver for the in-flight execute() — the widget callback fires this. */\n private recaptchaResolver: ((token: string) => void) | null = null;\n\n private recaptcha(): Observable<string> {\n const key = this.config.recaptchaSiteKey;\n if (!key) {\n console.warn('[devtools] recaptchaSiteKey not configured — request will be sent without a reCAPTCHA token');\n return of('');\n }\n return from(\n ensureRecaptchaScript()\n .then(\n (grecaptcha) =>\n new Promise<string>((resolve) => {\n // v2 Invisible delivers the token via callback, not a promise.\n // Point the shared resolver at THIS request before executing.\n this.recaptchaResolver = (token: string) => {\n this.recaptchaResolver = null;\n try {\n grecaptcha.reset(this.recaptchaWidgetId!);\n } catch {\n /* ignore */\n }\n resolve(token || '');\n };\n if (this.recaptchaWidgetId == null) {\n const host = document.createElement('div');\n host.style.display = 'none';\n document.body.appendChild(host);\n this.recaptchaWidgetId = grecaptcha.render(host, {\n sitekey: key,\n size: 'invisible',\n callback: (token: string) => this.recaptchaResolver?.(token),\n 'error-callback': () => this.recaptchaResolver?.(''),\n 'expired-callback': () => this.recaptchaResolver?.(''),\n });\n }\n grecaptcha.execute(this.recaptchaWidgetId);\n }),\n )\n .catch((e: unknown) => {\n console.error('[devtools] failed to load reCAPTCHA', e);\n return '';\n }),\n );\n }\n}\n\nconst RECAPTCHA_SCRIPT_ID = 'dc-recaptcha-v2-invisible';\n\n/**\n * Lazy-load the reCAPTCHA v2 (explicit render) script (once) and resolve with\n * the `grecaptcha` API. The host only passes `recaptchaSiteKey`; the package\n * injects the script itself so nothing depends on the host having it loaded.\n */\nconst RECAPTCHA_ONLOAD_CB = '__dcRecaptchaOnload';\n\nfunction ensureRecaptchaScript(): Promise<any> {\n const w = window as any;\n if (w.grecaptcha?.render) return Promise.resolve(w.grecaptcha);\n\n return new Promise((resolve, reject) => {\n // The script tag's own `load` event fires before grecaptcha.render is ready.\n // The library's own `onload=` callback (passed in the URL) only fires once\n // the API is fully initialized — that's the reliable readiness signal.\n w[RECAPTCHA_ONLOAD_CB] = () => resolve(w.grecaptcha);\n\n const existing = document.getElementById(RECAPTCHA_SCRIPT_ID) as HTMLScriptElement | null;\n if (existing) {\n if (w.grecaptcha?.render) return resolve(w.grecaptcha);\n existing.addEventListener('error', () => reject(new Error('reCAPTCHA script failed to load')), { once: true });\n return; // the pending onload callback above will resolve us\n }\n const script = document.createElement('script');\n script.id = RECAPTCHA_SCRIPT_ID;\n // `onload=` => library calls us when ready; `render=explicit` => we create\n // the (invisible) widget ourselves.\n script.src = `https://www.google.com/recaptcha/api.js?onload=${RECAPTCHA_ONLOAD_CB}&render=explicit`;\n script.async = true;\n script.defer = true;\n script.onerror = () => reject(new Error('reCAPTCHA script failed to load'));\n document.head.appendChild(script);\n });\n}\n\nfunction onlyDigits(v: string | undefined): string {\n return (v ?? '').replace(/\\D/g, '');\n}\n","import { computed, inject, Injectable, signal } from '@angular/core';\nimport { Observable, tap } from 'rxjs';\nimport { DEVTOOLS_CONFIG } from './devtools-config';\nimport { DevtoolsStorage } from './devtools-storage.service';\nimport { DevtoolsApiService, TokenResponse } from './devtools-api.service';\n\nconst ADMIN_TOKEN = 'DEVTOOLS_ADMIN_TOKEN';\nconst ADMIN_REFRESH = 'DEVTOOLS_ADMIN_REFRESH';\nconst ADMIN_USER = 'DEVTOOLS_ADMIN_USER';\nconst OAUTH_FLAG = 'DEVTOOLS_OAUTH_PENDING';\n\n/**\n * The DevTools' OWN identity (admin). Completely separate from the host app's\n * session: its tokens live under `DEVTOOLS_ADMIN_*` and are what the package's\n * interceptor attaches. The package is \"logged in\" iff an admin token exists.\n */\n@Injectable()\nexport class DevtoolsAuthService {\n private readonly storage = inject(DevtoolsStorage);\n private readonly config = inject(DEVTOOLS_CONFIG);\n private readonly api = inject(DevtoolsApiService);\n\n private readonly _token = signal<string | null>(this.storage.get(ADMIN_TOKEN));\n readonly logged = computed(() => !!this._token());\n\n adminToken(): string | null {\n return this._token();\n }\n adminRefreshToken(): string | null {\n return this.storage.get<string>(ADMIN_REFRESH);\n }\n adminProfile(): any {\n return this.storage.get(ADMIN_USER);\n }\n isLogged(): boolean {\n return !!this._token();\n }\n\n /** Begin Google OAuth for the admin (full-page redirect). */\n loginGoogleRedirect(): void {\n const clientId = this.config.googleClientId;\n const redirect = this.config.googleRedirectUri;\n if (!clientId) {\n console.error('[devtools] googleClientId not configured');\n return;\n }\n if (!redirect) {\n console.error(\n '[devtools] googleRedirectUri not configured — set it to a URI whitelisted in the Google OAuth client',\n );\n return;\n }\n try {\n sessionStorage.setItem(OAUTH_FLAG, '1');\n } catch {\n /* ignore */\n }\n window.location.href =\n `https://accounts.google.com/o/oauth2/v2/auth?client_id=${clientId}` +\n `&redirect_uri=${encodeURIComponent(redirect)}` +\n `&response_type=token&scope=openid+email&include_granted_scopes=true`;\n }\n\n /**\n * Consume a Google OAuth return that WE initiated (guarded by a flag so we\n * never steal the host app's own OAuth redirect). Exchanges the access token\n * for admin JWTs and loads the admin profile.\n */\n handleGoogleReturn(): void {\n let pending = false;\n try {\n pending = sessionStorage.getItem(OAUTH_FLAG) === '1';\n } catch {\n /* ignore */\n }\n if (!pending) return;\n\n // Implicit flow returns everything in the URL fragment. We read the query\n // too so a misconfigured response_type still surfaces an error instead of\n // failing silently.\n const params = new URLSearchParams(\n window.location.hash.replace(/^#/, '') || window.location.search.replace(/^\\?/, ''),\n );\n const googleToken = params.get('access_token');\n const error = params.get('error');\n\n // Neither token nor error here => this isn't our OAuth landing yet; keep the\n // flag so the real return (the whitelisted redirect_uri) can consume it.\n if (!googleToken && !error) return;\n\n try {\n sessionStorage.removeItem(OAUTH_FLAG);\n } catch {\n /* ignore */\n }\n\n if (error) {\n console.error(\n '[devtools] google oauth returned an error:',\n error,\n params.get('error_description') ?? '',\n );\n this.cleanOAuthUrl();\n return;\n }\n\n this.exchangeGoogle(googleToken!).subscribe({\n next: () => this.cleanOAuthUrl(),\n error: (e) => console.error('[devtools] admin google login failed', e),\n });\n }\n\n /** Strip the OAuth fragment/query so a reload doesn't re-trigger the return. */\n private cleanOAuthUrl(): void {\n try {\n history.replaceState(null, '', window.location.pathname + window.location.search);\n } catch {\n /* ignore */\n }\n }\n\n exchangeGoogle(googleToken: string): Observable<any> {\n return this.api.exchangeGoogle(googleToken).pipe(\n tap((tokens) => this.setTokens(tokens)),\n tap(() => this.api.self(this._token() ?? undefined).subscribe((p) => this.storage.set(ADMIN_USER, p))),\n );\n }\n\n /** Used by the interceptor on 401. */\n refresh(): Observable<TokenResponse> {\n return this.api\n .refreshToken(this.adminRefreshToken() ?? '')\n .pipe(tap((tokens) => this.setTokens(tokens)));\n }\n\n setTokens(tokens: TokenResponse): void {\n this.storage.set(ADMIN_TOKEN, tokens.accessToken);\n this.storage.set(ADMIN_REFRESH, tokens.refreshToken);\n this._token.set(tokens.accessToken);\n }\n\n logout(): void {\n this.storage.remove(ADMIN_TOKEN);\n this.storage.remove(ADMIN_REFRESH);\n this.storage.remove(ADMIN_USER);\n this._token.set(null);\n }\n}\n","import { HttpContextToken, HttpInterceptorFn } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { catchError, switchMap, throwError } from 'rxjs';\nimport { DEVTOOLS_CONFIG } from './devtools-config';\nimport { DevtoolsAuthService } from './devtools-auth.service';\n\n/**\n * Per-request override token: when set, this access token is used instead of\n * the admin token (e.g. the just-issued test-user token for `persons/self`).\n */\nexport const DC_AUTH_TOKEN = new HttpContextToken<string | null>(() => null);\n\n/**\n * The package's OWN HTTP interceptor — registered only on the package's\n * isolated HttpClient, never on the host's. By default it attaches the DevTools\n * admin token + `X-Mar-Locale`, and refreshes the admin token on 401. `/token`\n * is sent bare (no auth, no locale); S3 is passed through untouched.\n */\nexport const devtoolsHttpInterceptor: HttpInterceptorFn = (req, next) => {\n const config = inject(DEVTOOLS_CONFIG);\n const auth = inject(DevtoolsAuthService);\n\n if (req.url.includes('.s3.')) return next(req);\n\n const isTokenEndpoint = req.url.includes('/token');\n const locale = config.locale ?? 'pt_BR';\n const override = req.context.get(DC_AUTH_TOKEN);\n const token = override ?? (isTokenEndpoint ? null : auth.adminToken());\n\n const setHeaders: Record<string, string> = isTokenEndpoint\n ? {}\n : { 'X-Mar-Locale': locale };\n if (token && !isTokenEndpoint) setHeaders['Authorization'] = `Bearer ${token}`;\n\n const authed = req.clone({ setHeaders });\n\n return next(authed).pipe(\n catchError((err: any) => {\n const canRefresh =\n err?.status === 401 &&\n !isTokenEndpoint &&\n !override &&\n !!auth.adminRefreshToken();\n if (canRefresh) {\n return auth.refresh().pipe(\n switchMap(() =>\n next(\n req.clone({\n setHeaders: {\n 'X-Mar-Locale': locale,\n Authorization: `Bearer ${auth.adminToken()}`,\n },\n }),\n ),\n ),\n catchError((e) => {\n auth.logout();\n return throwError(() => e);\n }),\n );\n }\n return throwError(() => err);\n }),\n );\n};\n","import { computed, inject, Injectable, signal } from '@angular/core';\nimport { DevtoolsStorage } from './devtools-storage.service';\nimport { DevtoolsAuthService } from './devtools-auth.service';\n\nexport interface DevtoolsSession {\n id: string; // 'admin' or CPF\n kind: 'admin' | 'test';\n name: string;\n document?: string;\n accessToken: string;\n refreshToken: string;\n profile?: any;\n}\n\nconst SESSIONS_KEY = 'DEVTOOLS_SESSIONS';\nconst ACTIVE_KEY = 'DEVTOOLS_ACTIVE';\n\n// The active app session — read by the HOST patient app. This is the ONE\n// intentional touch-point with the host, so these keys MUST match the host's\n// JwtAuthService exactly and must never change.\nconst JWT_TOKEN = 'JWT_TOKEN';\nconst JWT_REFRESH_TOKEN = 'JWT_REFRESH_TOKEN';\nconst APP_USER = 'EGRET_USER';\n\n/**\n * Manages the *active app session* that the host patient app consumes, letting\n * the QA switch it between the fixed admin (the DevTools identity) and any saved\n * generated user — without re-OTP. The DevTools' own API calls do NOT use this;\n * they always use the admin token via the package interceptor.\n */\n@Injectable()\nexport class DevtoolsSessionService {\n private readonly storage = inject(DevtoolsStorage);\n private readonly auth = inject(DevtoolsAuthService);\n\n private readonly _sessions = signal<DevtoolsSession[]>(this.storage.get(SESSIONS_KEY) ?? []);\n readonly sessions = this._sessions.asReadonly();\n readonly activeId = signal<string | null>(this.storage.get(ACTIVE_KEY));\n\n /** Admin session derived from the DevTools identity (auth). */\n readonly admin = computed<DevtoolsSession | null>(() => {\n const token = this.auth.adminToken();\n if (!token) return null;\n return {\n id: 'admin',\n kind: 'admin',\n name: this.auth.adminProfile()?.name || this.auth.adminProfile()?.email || 'Admin (DevTools)',\n accessToken: token,\n refreshToken: this.auth.adminRefreshToken() ?? '',\n profile: this.auth.adminProfile(),\n };\n });\n\n saveTestSession(session: Omit<DevtoolsSession, 'id' | 'kind'> & { document: string }): DevtoolsSession {\n const full: DevtoolsSession = { ...session, id: session.document, kind: 'test' };\n const next = [full, ...this._sessions().filter((s) => s.id !== full.id)].slice(0, 20);\n this._sessions.set(next);\n this.storage.set(SESSIONS_KEY, next);\n return full;\n }\n\n /**\n * Write a stored session into the host's active-session keys and send the user\n * to '/' (full navigation) so the host app re-reads it from a clean route — it\n * only reads these keys at bootstrap. Covers both a fresh login and switching\n * between users.\n */\n switchTo(id: string): DevtoolsSession | null {\n const session = id === 'admin' ? this.admin() : this._sessions().find((s) => s.id === id) ?? null;\n if (!session) return null;\n this.storage.set(JWT_TOKEN, session.accessToken);\n this.storage.set(JWT_REFRESH_TOKEN, session.refreshToken);\n this.storage.set(APP_USER, session.profile ?? null);\n this.activeId.set(id);\n this.storage.set(ACTIVE_KEY, id);\n try {\n window.location.href = '/';\n } catch {\n /* non-browser env — ignore */\n }\n return session;\n }\n\n removeSession(id: string): void {\n const next = this._sessions().filter((s) => s.id !== id);\n this._sessions.set(next);\n this.storage.set(SESSIONS_KEY, next);\n if (this.activeId() === id && this.admin()) this.switchTo('admin');\n }\n\n active(): DevtoolsSession | null {\n const id = this.activeId();\n if (!id) return null;\n return id === 'admin' ? this.admin() : this._sessions().find((s) => s.id === id) ?? null;\n }\n}\n","import { inject, Injectable, signal } from '@angular/core';\nimport { DEVTOOLS_CONFIG } from './devtools-config';\n\nexport interface TelemetryEntry {\n id: number;\n startedAt: number;\n method: string;\n url: string;\n params: Record<string, string>;\n requestBody: unknown;\n status: number | null;\n ok: boolean | null;\n responseBody: unknown;\n error: string | null;\n durationMs: number | null;\n pending: boolean;\n source: 'fetch' | 'xhr';\n}\n\n/** Ring-buffer cap so a long QA session never grows unbounded. */\nconst MAX_ENTRIES = 300;\n\n/**\n * In-memory telemetry of every HTTP call to the API host (the one in\n * `apiBaseUrl`). Patches `fetch` and `XMLHttpRequest` once so it captures BOTH\n * the host app's requests and the package's own — independent of which\n * HttpClient/interceptor issued them. Nothing is persisted: a page reload\n * clears the log.\n */\n@Injectable()\nexport class DevtoolsTelemetryService {\n private readonly config = inject(DEVTOOLS_CONFIG);\n private readonly _entries = signal<TelemetryEntry[]>([]);\n readonly entries = this._entries.asReadonly();\n\n private installed = false;\n private seq = 0;\n private readonly origin = this.deriveOrigin();\n\n clear(): void {\n this._entries.set([]);\n }\n\n /** Monkeypatch fetch + XHR once. Safe to call multiple times. */\n install(): void {\n if (this.installed || typeof window === 'undefined') return;\n this.installed = true;\n this.patchFetch();\n this.patchXhr();\n }\n\n // ---- capture helpers --------------------------------------------------\n private deriveOrigin(): string {\n try {\n return new URL(this.config.apiBaseUrl).origin;\n } catch {\n return this.config.apiBaseUrl;\n }\n }\n\n private matches(url: string): boolean {\n try {\n return new URL(url, window.location.href).origin === this.origin;\n } catch {\n return url.includes(this.origin);\n }\n }\n\n private parseParams(url: string): Record<string, string> {\n try {\n const out: Record<string, string> = {};\n new URL(url, window.location.href).searchParams.forEach((v, k) => (out[k] = v));\n return out;\n } catch {\n return {};\n }\n }\n\n /** Decode an arraybuffer response to text/JSON; fall back to a size label if binary. */\n private decodeArrayBuffer(buf: ArrayBuffer): unknown {\n if (!buf) return null;\n try {\n const text = new TextDecoder().decode(buf);\n const parsed = this.tryParse(text);\n if (typeof parsed !== 'string') return parsed; // parsed JSON object/array/number\n // Raw string: keep only if it looks like text, otherwise it's binary.\n return /[\\u0000-\\u0008\\u000e-\\u001f]/.test(parsed) ? `[arraybuffer ${buf.byteLength}b]` : parsed;\n } catch {\n return `[arraybuffer ${buf.byteLength ?? '?'}b]`;\n }\n }\n\n private tryParse(text: string | null | undefined): unknown {\n if (text == null || text === '') return null;\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n }\n\n private normalizeBody(body: unknown): unknown {\n if (body == null) return null;\n if (typeof body === 'string') return this.tryParse(body);\n if (typeof FormData !== 'undefined' && body instanceof FormData) {\n const out: Record<string, unknown> = {};\n body.forEach((v, k) => (out[k] = v instanceof File ? `[File ${v.name}]` : v));\n return out;\n }\n if (typeof Blob !== 'undefined' && body instanceof Blob) return `[Blob ${body.size}b]`;\n return body;\n }\n\n private begin(method: string, url: string, body: unknown, source: 'fetch' | 'xhr'): TelemetryEntry {\n const entry: TelemetryEntry = {\n id: ++this.seq,\n startedAt: Date.now(),\n method,\n url,\n params: this.parseParams(url),\n requestBody: this.normalizeBody(body),\n status: null,\n ok: null,\n responseBody: null,\n error: null,\n durationMs: null,\n pending: true,\n source,\n };\n this._entries.update((list) => [entry, ...list].slice(0, MAX_ENTRIES));\n return entry;\n }\n\n private finish(id: number, patch: Partial<TelemetryEntry>): void {\n this._entries.update((list) => list.map((e) => (e.id === id ? { ...e, ...patch, pending: false } : e)));\n }\n\n // ---- patches ----------------------------------------------------------\n private patchFetch(): void {\n if (typeof window.fetch !== 'function') return;\n const orig = window.fetch.bind(window);\n const self = this;\n window.fetch = function (input: RequestInfo | URL, init?: RequestInit): Promise<Response> {\n const url = typeof input === 'string' ? input : input instanceof URL ? input.href : input.url;\n if (!self.matches(url)) return orig(input as any, init);\n const method = (init?.method || (input instanceof Request ? input.method : 'GET')).toUpperCase();\n const entry = self.begin(method, url, init?.body, 'fetch');\n const t0 = performance.now();\n return orig(input as any, init).then(\n (res) => {\n const durationMs = Math.round(performance.now() - t0);\n res\n .clone()\n .text()\n .then((text) =>\n self.finish(entry.id, {\n status: res.status,\n ok: res.ok,\n responseBody: self.tryParse(text),\n error: res.ok ? null : `HTTP ${res.status}`,\n durationMs,\n }),\n )\n .catch(() => self.finish(entry.id, { status: res.status, ok: res.ok, durationMs }));\n return res;\n },\n (err: any) => {\n self.finish(entry.id, { error: String(err?.message ?? err), ok: false, durationMs: Math.round(performance.now() - t0) });\n throw err;\n },\n );\n } as typeof window.fetch;\n }\n\n private patchXhr(): void {\n if (typeof XMLHttpRequest === 'undefined') return;\n const proto = XMLHttpRequest.prototype;\n const origOpen = proto.open;\n const origSend = proto.send;\n const self = this;\n\n proto.open = function (method: string, url: string | URL, ...rest: any[]) {\n (this as any).__dtMeta = { method: String(method).toUpperCase(), url: String(url) };\n return (origOpen as any).call(this, method, url, ...rest);\n };\n\n proto.send = function (body?: Document | XMLHttpRequestBodyInit | null) {\n const meta = (this as any).__dtMeta as { method: string; url: string } | undefined;\n if (meta && self.matches(meta.url)) {\n const entry = self.begin(meta.method, meta.url, body, 'xhr');\n const t0 = performance.now();\n this.addEventListener('loadend', () => {\n const durationMs = Math.round(performance.now() - t0);\n const status = this.status;\n if (status === 0) {\n self.finish(entry.id, { error: 'Network error / aborted', ok: false, durationMs });\n return;\n }\n const ok = status >= 200 && status < 300;\n let responseBody: unknown = null;\n try {\n const type = this.responseType;\n if (type === '' || type === 'text') responseBody = self.tryParse(this.responseText);\n else if (type === 'json') responseBody = this.response;\n else if (type === 'arraybuffer') responseBody = self.decodeArrayBuffer(this.response as ArrayBuffer);\n else if (type === 'blob') responseBody = `[blob ${(this.response as Blob)?.size ?? '?'}b]`;\n else responseBody = `[${type}]`;\n } catch {\n /* ignore */\n }\n self.finish(entry.id, { status, ok, responseBody, error: ok ? null : `HTTP ${status}`, durationMs });\n });\n }\n return (origSend as any).call(this, body as any);\n };\n }\n}\n","import { Injectable, signal } from '@angular/core';\n\nexport type ErrorKind = 'error' | 'rejection' | 'console';\n\nexport interface ErrorEntry {\n id: number;\n at: number;\n kind: ErrorKind;\n message: string;\n stack: string | null;\n source: string | null;\n}\n\n/** Ring-buffer cap so a noisy session never grows unbounded. */\nconst MAX_ENTRIES = 300;\n\n/**\n * In-memory log of runtime JS/TS errors: uncaught exceptions (`window.error`),\n * unhandled promise rejections, and anything sent to `console.error` (which is\n * where Angular's default ErrorHandler reports zone-caught errors). Captures\n * the host app's errors and the package's alike. Nothing is persisted — a page\n * reload clears it.\n */\n@Injectable()\nexport class DevtoolsErrorsService {\n private readonly _entries = signal<ErrorEntry[]>([]);\n readonly entries = this._entries.asReadonly();\n\n private installed = false;\n private seq = 0;\n\n clear(): void {\n this._entries.set([]);\n }\n\n /** Attach the listeners + patch console.error once. Safe to call repeatedly. */\n install(): void {\n if (this.installed || typeof window === 'undefined') return;\n this.installed = true;\n\n window.addEventListener('error', (e: ErrorEvent) => {\n // Skip resource-load errors (img/script/link) — those carry no error/message.\n if (!e.error && !e.message) return;\n this.push('error', e.message || String(e.error), e.error?.stack ?? null, this.loc(e.filename, e.lineno, e.colno));\n });\n\n window.addEventListener('unhandledrejection', (e: PromiseRejectionEvent) => {\n const reason: any = e.reason;\n const message = reason instanceof Error ? reason.message : this.stringify(reason);\n this.push('rejection', message, reason?.stack ?? null, null);\n });\n\n const orig = console.error.bind(console);\n const self = this;\n console.error = function (...args: unknown[]) {\n orig(...args);\n try {\n self.captureConsole(args);\n } catch {\n /* never let telemetry break logging */\n }\n };\n }\n\n // ---- helpers ----------------------------------------------------------\n private captureConsole(args: unknown[]): void {\n const errArg = args.find((a) => a instanceof Error) as Error | undefined;\n const message = args\n .map((a) => (a instanceof Error ? a.message : typeof a === 'string' ? a : this.stringify(a)))\n .join(' ')\n .trim();\n if (!message) return;\n this.push('console', message, errArg?.stack ?? null, null);\n }\n\n private loc(file?: string, line?: number, col?: number): string | null {\n if (!file) return null;\n return `${file}${line != null ? ':' + line : ''}${col != null ? ':' + col : ''}`;\n }\n\n private stringify(v: unknown): string {\n if (v == null) return String(v);\n if (typeof v === 'string') return v;\n try {\n return JSON.stringify(v);\n } catch {\n return String(v);\n }\n }\n\n private push(kind: ErrorKind, message: string, stack: string | null, source: string | null): void {\n // Collapse an immediate duplicate (e.g. Angular ErrorHandler -> console.error\n // right after a window 'error' for the same throw).\n const last = this._entries()[0];\n if (last && last.message === message && last.stack === stack) return;\n const entry: ErrorEntry = { id: ++this.seq, at: Date.now(), kind, message, stack, source };\n this._entries.update((list) => [entry, ...list].slice(0, MAX_ENTRIES));\n }\n}\n","/**\n * Shared inline-style objects for the DevTools domain panels. Bound via\n * `[style]=\"UI.x\"` so there are no view-encapsulation surprises when the panels\n * are rendered inside the shell via NgComponentOutlet. Colours follow the\n * shell's dark theme (the `--dts-*` custom properties).\n */\nexport const UI = {\n intro: {\n fontSize: '13px',\n color: '#9a9eab',\n lineHeight: '1.5',\n margin: '0 0 16px',\n },\n field: {\n border: '1px solid #2a2c38',\n borderRadius: '11px',\n background: '#16181f',\n padding: '8px 13px',\n marginBottom: '12px',\n },\n label: {\n fontSize: '10.5px',\n fontFamily: \"'JetBrains Mono',monospace\",\n letterSpacing: '.06em',\n color: '#7a7e8b',\n marginBottom: '2px',\n textTransform: 'uppercase',\n },\n input: {\n width: '100%',\n border: 'none',\n background: 'transparent',\n color: '#eceef3',\n fontSize: '14.5px',\n outline: 'none',\n padding: '2px 0',\n },\n primary: {\n width: '100%',\n marginTop: '8px',\n padding: '14px',\n borderRadius: '12px',\n border: 'none',\n background: '#ffc454',\n color: '#1a1b22',\n fontSize: '14.5px',\n fontWeight: '700',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '9px',\n },\n ghost: {\n width: '100%',\n marginTop: '10px',\n padding: '12px',\n borderRadius: '12px',\n border: '1px solid #2a2c38',\n background: 'transparent',\n color: '#8b8f9c',\n fontSize: '13px',\n cursor: 'pointer',\n },\n card: {\n background: '#16181f',\n border: '1px solid #24262f',\n borderRadius: '12px',\n padding: '13px 15px',\n marginBottom: '9px',\n },\n row: {\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n width: '100%',\n textAlign: 'left',\n background: '#16181f',\n border: '1px solid #24262f',\n borderRadius: '12px',\n padding: '13px 15px',\n marginBottom: '10px',\n color: '#eceef3',\n cursor: 'pointer',\n },\n mono: {\n fontFamily: \"'JetBrains Mono',monospace\",\n fontSize: '11.5px',\n color: '#8b8f9c',\n },\n pre: {\n fontFamily: \"'JetBrains Mono',monospace\",\n fontSize: '12px',\n lineHeight: '1.7',\n color: '#c4c7d0',\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-all',\n margin: '0',\n background: '#16181f',\n border: '1px solid #24262f',\n borderRadius: '10px',\n padding: '12px',\n },\n} as const;\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { DevtoolsToastService } from '../devtools-toast.service';\nimport { DevtoolsAuthService } from '../core/devtools-auth.service';\nimport { DevtoolsSessionService } from '../core/devtools-session.service';\nimport { UI } from './ui';\n\n/**\n * DevTools admin login (Google OAuth, handled inside the package). The admin is\n * the package's own fixed identity — its tokens are stored separately and used\n * by the package interceptor for all DevTools calls.\n */\n@Component({\n selector: 'devtools-admin-login-panel',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (auth.logged()) {\n <div [style]=\"UI.card\">\n <div style=\"display:flex;align-items:center;gap:8px;color:#1fbe7e;font-size:13px;font-weight:600\">\n <span class=\"dts-sym\" style=\"font-family:'Material Symbols Outlined';font-size:18px\">shield_person</span>\n DevTools logado (admin)\n </div>\n <div [style]=\"UI.mono\" style=\"margin-top:8px;word-break:break-all\">{{ short(auth.adminToken()) }}</div>\n </div>\n @if (session.activeId() === 'admin') {\n <p [style]=\"UI.intro\" style=\"color:#1fbe7e\">Sessão do app ativa: admin.</p>\n } @else {\n <button type=\"button\" [style]=\"UI.primary\" (click)=\"activateAdmin()\">\n <span class=\"dts-sym\" style=\"font-family:'Material Symbols Outlined';font-size:19px\">switch_account</span>\n Ativar sessão admin no app\n </button>\n }\n <button type=\"button\" [style]=\"UI.ghost\" (click)=\"auth.loginGoogleRedirect()\">Refazer login Google</button>\n <button type=\"button\" [style]=\"UI.ghost\" (click)=\"logout()\">Sair (logout DevTools)</button>\n } @else {\n <p [style]=\"UI.intro\">\n O DevTools tem login próprio (admin). Entre com o Google para liberar as\n ferramentas — o acesso fica guardado separado do app.\n </p>\n <button type=\"button\" [style]=\"UI.primary\" (click)=\"auth.loginGoogleRedirect()\">\n <span style=\"width:20px;height:20px;border-radius:50%;background:#23242b;color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:12px;font-family:'JetBrains Mono',monospace\">G</span>\n Entrar com Google (admin)\n </button>\n }\n `,\n})\nexport class AdminLoginPanelComponent {\n protected readonly UI = UI;\n protected readonly auth = inject(DevtoolsAuthService);\n protected readonly session = inject(DevtoolsSessionService);\n private readonly toast = inject(DevtoolsToastService);\n\n protected short(token: string | null): string {\n return token && token.length > 42 ? token.slice(0, 42) + '…' : token ?? '';\n }\n\n protected activateAdmin(): void {\n this.session.switchTo('admin');\n this.toast.show('Sessão admin ativada no app');\n }\n\n protected logout(): void {\n this.auth.logout();\n this.toast.show('DevTools deslogado');\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n inject,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DevtoolsToastService } from '../devtools-toast.service';\nimport {\n BiologicalSex,\n DevtoolsApiService,\n Gender,\n PersonRegistration,\n SignupProperties,\n} from '../core/devtools-api.service';\nimport { DevtoolsSessionService } from '../core/devtools-session.service';\nimport { DevtoolsUserUtils, DevtoolsUtils } from '../core/devtools-utils';\nimport { UI } from './ui';\n\ntype Step = 'cpf' | 'signup' | 'phone' | 'code' | 'done';\n\n/** App login for a generated user via CPF + OTP. Saves + switches the session. */\n@Component({\n selector: 'devtools-login-panel',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [FormsModule],\n template: `\n @if (step === 'cpf') {\n <p [style]=\"UI.intro\">Login no app do paciente com um CPF gerado. O código de 6 dígitos chega via {{ media }}.</p>\n <div [style]=\"UI.field\"><div [style]=\"UI.label\">CPF gerado</div>\n <input [style]=\"UI.input\" [(ngModel)]=\"cpf\" placeholder=\"000.000.000-00\" inputmode=\"numeric\" /></div>\n <button type=\"button\" [style]=\"UI.primary\" [disabled]=\"busy\" (click)=\"checkCpf()\">{{ busy ? 'Verificando…' : 'Continuar' }}</button>\n }\n\n @if (step === 'signup') {\n <p [style]=\"UI.intro\">CPF novo — preencha os dados para criar a conta no app.</p>\n <div [style]=\"UI.field\"><div [style]=\"UI.label\">Nome completo</div><input [style]=\"UI.input\" [(ngModel)]=\"name\" placeholder=\"João Silva\" /></div>\n <div [style]=\"UI.field\"><div [style]=\"UI.label\">Data de nascimento</div><input [style]=\"UI.input\" type=\"date\" [(ngModel)]=\"birthdate\" /></div>\n <div [style]=\"UI.field\"><div [style]=\"UI.label\">Sexo biológico</div>\n <select [style]=\"UI.input\" [(ngModel)]=\"biologicalSex\"><option value=\"MALE\">MALE</option><option value=\"FEMALE\">FEMALE</option></select></div>\n <div [style]=\"UI.field\"><div [style]=\"UI.label\">Gênero</div>\n <select [style]=\"UI.input\" [(ngModel)]=\"gender\"><option value=\"MALE\">MALE</option><option value=\"FEMALE\">FEMALE</option><option value=\"NON_BINARY\">NON_BINARY</option><option value=\"OTHER\">OTHER</option></select></div>\n <div [style]=\"UI.field\"><div [style]=\"UI.label\">Celular</div><input [style]=\"UI.input\" [(ngModel)]=\"phone\" placeholder=\"(11) 98765-4321\" inputmode=\"tel\" /></div>\n <button type=\"button\" [style]=\"UI.primary\" [disabled]=\"busy\" (click)=\"sendCode(true)\">{{ busy ? 'Enviando…' : 'Enviar código' }}</button>\n }\n\n @if (step === 'phone') {\n <p [style]=\"UI.intro\">\n CPF encontrado. Código para o celular\n @if (registration?.phoneAreaCode || registration?.phoneEnding) {\n <strong style=\"color:#eceef3\">({{ registration?.phoneAreaCode }}) •••••-{{ registration?.phoneEnding }}</strong>.\n }\n Confirme o número completo.\n </p>\n <div [style]=\"UI.field\"><div [style]=\"UI.label\">Celular</div><input [style]=\"UI.input\" [(ngModel)]=\"phone\" placeholder=\"(11) 98765-4321\" inputmode=\"tel\" /></div>\n <button type=\"button\" [style]=\"UI.primary\" [disabled]=\"busy\" (click)=\"sendCode(false)\">{{ busy ? 'Enviando…' : 'Enviar código' }}</button>\n }\n\n @if (step === 'code') {\n <p [style]=\"UI.intro\">Digite o código de 6 dígitos enviado via {{ media }}.</p>\n <div [style]=\"UI.field\"><div [style]=\"UI.label\">Código</div>\n <input [style]=\"UI.input\" [(ngModel)]=\"code\" placeholder=\"000000\" inputmode=\"numeric\" maxlength=\"6\"\n style=\"font-family:'JetBrains Mono',monospace;letter-spacing:.4em;font-size:20px\" /></div>\n <button type=\"button\" [style]=\"UI.primary\" [disabled]=\"busy\" (click)=\"confirm()\">{{ busy ? 'Entrando…' : 'Entrar' }}</button>\n <button type=\"button\" [style]=\"UI.ghost\" [disabled]=\"busy\" (click)=\"resend()\">Reenviar código</button>\n }\n\n @if (step === 'done') {\n <div [style]=\"UI.card\">\n <div style=\"display:flex;align-items:center;gap:8px;color:#1fbe7e;font-size:13px;font-weight:600\">\n <span class=\"dts-sym\" style=\"font-family:'Material Symbols Outlined';font-size:18px\">check_circle</span>\n Logado como {{ doneName }}\n </div>\n <div [style]=\"UI.mono\" style=\"margin-top:6px\">Sessão do app ativada e salva.</div>\n </div>\n <button type=\"button\" [style]=\"UI.ghost\" (click)=\"reset()\">Entrar com outro CPF</button>\n }\n\n @if (message) { <div style=\"margin-top:14px;font-size:13px;color:#d6604f\">{{ message }}</div> }\n `,\n})\nexport class LoginPanelComponent {\n protected readonly UI = UI;\n private readonly api = inject(DevtoolsApiService);\n private readonly session = inject(DevtoolsSessionService);\n private readonly userUtils = inject(DevtoolsUserUtils);\n private readonly utils = inject(DevtoolsUtils);\n private readonly toast = inject(DevtoolsToastService);\n private readonly cdr = inject(ChangeDetectorRef);\n\n protected step: Step = 'cpf';\n protected busy = false;\n protected message = '';\n\n protected cpf = '';\n protected name = '';\n protected birthdate = '';\n protected biologicalSex: BiologicalSex = 'MALE';\n protected gender: Gender = 'MALE';\n protected phone = '';\n protected code = '';\n protected registration: PersonRegistration | null = null;\n protected doneName = '';\n\n constructor() {\n const [last] = this.userUtils.getUserFromStorage();\n if (last?.document) this.cpf = this.utils.maskCpfCnpj(last.document);\n }\n\n protected get media(): string {\n return this.api.media;\n }\n\n protected checkCpf(): void {\n const document = this.cpf.replace(/\\D/g, '');\n if (document.length !== 11) return this.fail('CPF inválido — informe 11 dígitos.');\n this.start('Verificando CPF…');\n this.api.checkRegistration(document).subscribe({\n next: (reg) => {\n this.registration = reg;\n this.busy = false;\n this.message = '';\n this.step = reg.hasDocument ? 'phone' : 'signup';\n this.cdr.markForCheck();\n },\n error: (err) => this.failFromHttp(err, 'Falha ao verificar o CPF.'),\n });\n }\n\n protected sendCode(isSignup: boolean): void {\n const phoneE164 = this.toE164(this.phone);\n if (!/^\\+55\\d{10,11}$/.test(phoneE164)) return this.fail('Celular inválido — use DDD + número.');\n let personProperties: SignupProperties | undefined;\n if (isSignup) {\n if (!this.name.trim()) return this.fail('Informe o nome.');\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(this.birthdate)) return this.fail('Data de nascimento inválida (YYYY-MM-DD).');\n personProperties = { name: this.name.trim(), birthdate: this.birthdate, biologicalSex: this.biologicalSex, gender: this.gender };\n }\n this.start('Enviando código…');\n this.api.requestCode({ document: this.cpf, phone: phoneE164, personProperties }).subscribe({\n next: () => {\n this.busy = false;\n this.message = '';\n this.step = 'code';\n this.toast.show('Código enviado via ' + this.media);\n this.cdr.markForCheck();\n },\n error: (err) => this.failFromHttp(err, 'Falha ao enviar o código.'),\n });\n }\n\n protected resend(): void {\n this.sendCode(!!this.registration && !this.registration.hasDocument);\n }\n\n protected confirm(): void {\n if (!/^\\d{6}$/.test(this.code)) return this.fail('Código inválido — 6 dígitos.');\n const document = this.cpf.replace(/\\D/g, '');\n this.start('Entrando…');\n this.api.otpLogin(document, this.code).subscribe({\n next: (res) => {\n const profile: any = res.profile;\n const name = profile?.personProperties?.name || profile?.name || this.name.trim() || this.fmtCpf(document);\n const saved = this.session.saveTestSession({\n name,\n document,\n accessToken: res.accessToken,\n refreshToken: res.refreshToken,\n profile,\n });\n this.session.switchTo(saved.id);\n this.doneName = name;\n this.busy = false;\n this.message = '';\n this.step = 'done';\n this.toast.show('Login efetuado · sessão do app ativada');\n this.cdr.markForCheck();\n },\n error: (err) => this.failFromHttp(err, 'Código incorreto ou expirado.'),\n });\n }\n\n protected reset(): void {\n this.step = 'cpf';\n this.code = '';\n this.message = '';\n this.cdr.markForCheck();\n }\n\n private toE164(phone: string): string {\n const digits = (phone || '').replace(/\\D/g, '');\n if (!digits) return '';\n return digits.startsWith('55') ? `+${digits}` : `+55${digits}`;\n }\n private fmtCpf(d: string): string {\n return (d || '').replace(/(\\d{3})(\\d{3})(\\d{3})(\\d{2})/, '$1.$2.$3-$4');\n }\n private start(msg: string): void {\n this.busy = true;\n this.message = msg;\n this.cdr.markForCheck();\n }\n private fail(msg: string): void {\n this.busy = false;\n this.message = msg;\n this.cdr.markForCheck();\n }\n private failFromHttp(err: any, fallback: string): void {\n this.busy = false;\n this.message = err?.error?.message || fallback;\n this.utils.setErrorToast(err);\n this.cdr.markForCheck();\n }\n}\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { DevtoolsToastService } from '../devtools-toast.service';\nimport { DevtoolsSession, DevtoolsSessionService } from '../core/devtools-session.service';\nimport { UI } from './ui';\n\n/** Switch the active app session between admin and saved generated users. */\n@Component({\n selector: 'devtools-switch-panel',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <p [style]=\"UI.intro\">\n Troque a sessão ativa do app. O admin fica sempre guardado; os usuários\n gerados são salvos para evitar refazer o OTP.\n </p>\n @for (s of rows(); track s.id) {\n <button type=\"button\" [style]=\"UI.row\" (click)=\"switch(s)\">\n <span class=\"dts-sym\" style=\"font-family:'Material Symbols Outlined';font-size:20px\"\n [style.color]=\"s.kind === 'admin' ? '#ffc454' : '#5b8cff'\">\n {{ s.kind === 'admin' ? 'shield_person' : 'person' }}\n </span>\n <div style=\"flex:1;min-width:0\">\n <div style=\"font-size:14px;font-weight:600;color:#eceef3\">{{ s.name }}</div>\n <div [style]=\"UI.mono\">{{ s.document ? fmtCpf(s.document) : 'DevTools' }}</div>\n </div>\n @if (active() === s.id) {\n <span style=\"font-family:'JetBrains Mono',monospace;font-size:10px;font-weight:700;color:#1fbe7e;background:#10241b;border:1px solid #1e4634;border-radius:6px;padding:4px 8px\">ATIVO</span>\n } @else if (s.kind === 'test') {\n <span class=\"dts-sym\" style=\"font-family:'Material Symbols Outlined';font-size:18px;color:#6a6e7b\" (click)=\"remove($event, s)\">delete</span>\n }\n </button>\n } @empty {\n <p [style]=\"UI.intro\">Nenhuma sessão salva. Faça login admin e gere usuários.</p>\n }\n `,\n})\nexport class SwitchPanelComponent {\n protected readonly UI = UI;\n protected readonly session = inject(DevtoolsSessionService);\n private readonly toast = inject(DevtoolsToastService);\n\n protected rows(): DevtoolsSession[] {\n const admin = this.session.admin();\n return [...(admin ? [admin] : []), ...this.session.sessions()];\n }\n\n protected active(): string | null {\n return this.session.activeId();\n }\n\n protected switch(s: DevtoolsSession): void {\n this.session.switchTo(s.id);\n this.toast.show('Sessão ativa: ' + s.name);\n }\n\n protected remove(event: Event, s: DevtoolsSession): void {\n event.stopPropagation();\n this.session.removeSession(s.id);\n this.toast.show('Sessão removida');\n }\n\n protected fmtCpf(d: string): string {\n return (d || '').replace(/(\\d{3})(\\d{3})(\\d{3})(\\d{2})/, '$1.$2.$3-$4');\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n inject,\n OnInit,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DevtoolsToastService } from '../devtools-toast.service';\nimport { DevtoolsApiService, UserData } from '../core/devtools-api.service';\nimport { DevtoolsUserUtils, DevtoolsUtils, OPTIONS_RESPONSES_CASE } from '../core/devtools-utils';\nimport { DevtoolsAuthService } from '../core/devtools-auth.service';\nimport { DevtoolsSessionService } from '../core/devtools-session.service';\nimport { DEVTOOLS_CONFIG } from '../core/devtools-config';\nimport { UI } from './ui';\n\ninterface ScenarioCard {\n key: 'manual' | 'auto';\n title: string;\n description: string;\n}\n\n/** Real user generator (manual + automatic) + post-run OTP login. */\n@Component({\n selector: 'devtools-generator-panel',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [FormsModule],\n template: `\n <div [style]=\"UI.label\">Cenários</div>\n @for (card of scenarios; track card.key) {\n <button type=\"button\" [style]=\"UI.card\"\n [style.borderColor]=\"scenario === card.key ? '#4b4ea8' : '#24262f'\"\n [style.background]=\"scenario === card.key ? '#1a1b2e' : '#16181f'\"\n style=\"width:100%;text-align:left;cursor:pointer\" (click)=\"selectScenario(card.key)\">\n <div style=\"font-size:14px;font-weight:600\" [style.color]=\"scenario === card.key ? '#bcbdff' : '#cdd0d9'\">{{ card.title }}</div>\n <div style=\"font-size:12px;color:#8b8f9c;margin-top:3px;line-height:1.4\">{{ card.description }}</div>\n </button>\n }\n\n <label style=\"display:flex;align-items:center;gap:12px;margin:16px 0;cursor:pointer\">\n <button type=\"button\" (click)=\"toggleSms()\"\n [style.background]=\"removePhone ? '#ffc454' : '#33353f'\"\n style=\"width:44px;height:26px;border-radius:999px;border:none;padding:3px;display:flex;flex:none\"\n [style.justifyContent]=\"removePhone ? 'flex-end' : 'flex-start'\">\n <span style=\"width:20px;height:20px;border-radius:50%;background:#fff;display:block\"></span>\n </button>\n <span style=\"font-size:13.5px;color:#cdd0d9\">Liberar meu celular para testes SMS</span>\n </label>\n @if (removePhone) {\n <div [style]=\"UI.field\"><div [style]=\"UI.label\">Celular (será liberado no cadastro)</div>\n <input [style]=\"UI.input\" [(ngModel)]=\"phone\" placeholder=\"11985024625\" inputmode=\"tel\" /></div>\n }\n\n @if (scenario === 'auto') {\n <div [style]=\"UI.field\"><div [style]=\"UI.label\">Tipo de formulário</div>\n <select [style]=\"UI.input\" [(ngModel)]=\"responseCase\">\n @for (c of responsesFormCase; track c.value) { <option [ngValue]=\"c\">{{ c.name }}</option> }\n </select></div>\n }\n\n <div [style]=\"UI.field\"><div [style]=\"UI.label\">Empresa do tipo RH (fixa)</div>\n <div style=\"color:#eceef3;font-size:14px;padding:2px 0\">{{ selectedOrgName }}</div></div>\n\n @if (scenario === 'manual') {\n <div [style]=\"UI.field\"><div [style]=\"UI.label\">Nome</div><input [style]=\"UI.input\" [(ngModel)]=\"fullName\" placeholder=\"Auto se vazio\" /></div>\n <div [style]=\"UI.field\"><div [style]=\"UI.label\">CPF</div><input [style]=\"UI.input\" [(ngModel)]=\"document\" placeholder=\"Auto se vazio\" /></div>\n <div [style]=\"UI.field\"><div [style]=\"UI.label\">Sexo Biológico *</div>\n <select [style]=\"UI.input\" [(ngModel)]=\"gender\"><option value=\"MALE\">Masculino</option><option value=\"FEMALE\">Feminino</option></select></div>\n <div [style]=\"UI.field\"><div [style]=\"UI.label\">Nascimento (YYYY-MM-DD)</div><input [style]=\"UI.input\" [(ngModel)]=\"bday\" placeholder=\"1990-05-15\" /></div>\n }\n\n <div style=\"margin:12px 0;padding:12px 14px;background:#16181f;border:1px solid #24262f;border-radius:11px\">\n <div [style]=\"UI.label\">Execução</div>\n <div style=\"font-size:13px;color:#d7d9e0;margin-top:2px\">{{ executionMessage }}</div>\n </div>\n\n <button type=\"button\" [style]=\"UI.primary\" [disabled]=\"status === 'running'\" (click)=\"run()\">\n {{ status === 'running' ? 'Executando…' : 'Executar cenário' }}\n </button>\n\n @if (generatedCpf) {\n <div style=\"margin-top:22px;border-top:1px solid #23252f;padding-top:18px\">\n <div style=\"font-size:13px;font-weight:600;color:#f0f1f4;margin-bottom:10px\">Usuário criado</div>\n @if (scenario === 'manual') { <pre [style]=\"UI.pre\" style=\"white-space:pre-wrap\">{{ dadosText }}</pre> }\n @else { <div [style]=\"UI.mono\">Usuário automático criado (dados ocultos).</div> }\n\n @if (loginStep === 'idle') {\n <button type=\"button\" [style]=\"UI.primary\" (click)=\"startLogin()\">\n <span class=\"dts-sym\" style=\"font-family:'Material Symbols Outlined';font-size:19px\">login</span>\n Login com este usuário\n </button>\n } @else if (loginStep === 'code') {\n <p [style]=\"UI.intro\" style=\"margin-top:14px\">Código enviado via {{ media }} para o celular do usuário.</p>\n <div [style]=\"UI.field\"><div [style]=\"UI.label\">Código (6 dígitos)</div>\n <input [style]=\"UI.input\" [(ngModel)]=\"loginCode\" placeholder=\"000000\" inputmode=\"numeric\" maxlength=\"6\"\n style=\"font-family:'JetBrains Mono',monospace;letter-spacing:.4em;font-size:20px\" /></div>\n <button type=\"button\" [style]=\"UI.primary\" [disabled]=\"loginBusy\" (click)=\"confirmLogin()\">{{ loginBusy ? 'Entrando…' : 'Entrar' }}</button>\n } @else {\n <div [style]=\"UI.card\" style=\"margin-top:14px;color:#1fbe7e\">Logado e sessão do app ativada.</div>\n }\n </div>\n }\n\n @if (message) { <div style=\"margin-top:14px;font-size:13px;color:#d6604f\">{{ message }}</div> }\n `,\n})\nexport class GeneratorPanelComponent implements OnInit {\n protected readonly UI = UI;\n private readonly api = inject(DevtoolsApiService);\n private readonly userUtils = inject(DevtoolsUserUtils);\n private readonly utils = inject(DevtoolsUtils);\n private readonly auth = inject(DevtoolsAuthService);\n private readonly session = inject(DevtoolsSessionService);\n private readonly config = inject(DEVTOOLS_CONFIG);\n private readonly toast = inject(DevtoolsToastService);\n private readonly cdr = inject(ChangeDetectorRef);\n\n protected readonly scenarios: ScenarioCard[] = [\n { key: 'manual', title: 'Cadastro manual', description: 'Preenche e envia formulário com dados visíveis.' },\n { key: 'auto', title: 'Cadastro automático', description: 'Cria usuário e envia formulário automático de triagem.' },\n ];\n protected readonly responsesFormCase = OPTIONS_RESPONSES_CASE;\n\n private readonly fixedOrgId = this.config.fixedOrgId ?? 200;\n protected scenario: 'manual' | 'auto' = 'manual';\n protected removePhone = false;\n protected phone = '';\n protected responseCase = OPTIONS_RESPONSES_CASE[0];\n\n protected selectedOrgName = 'Mar Salt Of';\n private customerOrganizationId = String(this.config.fixedOrgId ?? 200);\n private orgDocument: string | undefined;\n private orgDocumentType: string | undefined;\n\n protected fullName: string | undefined;\n protected document: string | undefined;\n protected gender = 'MALE';\n protected bday: string | undefined;\n\n protected status: 'idle' | 'running' | 'success' | 'error' = 'idle';\n protected executionMessage = 'Aguardando execução';\n protected dadosText = '';\n protected message = '';\n\n protected generatedCpf = '';\n private generatedPhone = '';\n protected loginStep: 'idle' | 'code' | 'done' = 'idle';\n protected loginCode = '';\n protected loginBusy = false;\n\n protected get media(): string {\n return this.api.media;\n }\n\n ngOnInit(): void {\n this.api.getWithQuery({ ids: String(this.fixedOrgId) }).subscribe({\n next: (list) => {\n const [org] = list ?? [];\n if (org) this.applyOrg(org);\n this.cdr.markForCheck();\n },\n error: () => {},\n });\n }\n\n protected toggleSms(): void {\n this.removePhone = !this.removePhone;\n if (this.removePhone && !this.phone.replace(/\\D/g, '')) this.phone = this.adminPhone();\n }\n\n private adminPhone(): string {\n const profile: any = this.session.admin()?.profile;\n const raw = profile?.phone || profile?.phones?.[0] || this.config.adminPhone || '';\n return String(raw).replace(/\\D/g, '').replace(/^55/, '');\n }\n\n private applyOrg(org: any): void {\n const { id, parent, document, documentType, name } = org ?? {};\n if (id || parent) {\n this.customerOrganizationId = (parent?.id ?? id)?.toString() ?? this.customerOrganizationId;\n this.orgDocument = document;\n this.orgDocumentType = documentType;\n }\n if (name) this.selectedOrgName = name;\n }\n\n protected selectScenario(key: 'manual' | 'auto'): void {\n this.scenario = key;\n this.status = 'idle';\n this.executionMessage = `Cenário selecionado: ${key === 'manual' ? 'Cadastro manual' : 'Cadastro automático'}`;\n if (key === 'manual' && !this.fullName) {\n this.fullName = this.userUtils.generateRandomName();\n this.document = this.userUtils.generateCPF();\n this.gender = this.userUtils.generateRandomGender();\n this.bday = this.userUtils.generateRandomBirthDate();\n }\n }\n\n protected run(): void {\n if (!this.auth.isLogged()) {\n this.toast.show('Faça login admin para gerar usuários');\n return;\n }\n const isManual = this.scenario === 'manual';\n const fullName = (this.fullName && this.fullName.trim()) || this.userUtils.generateRandomName();\n const document = (this.document && this.document.replace(/\\D/g, '')) || this.userUtils.generateCPF();\n if (!isManual) {\n this.fullName = fullName;\n this.document = document;\n }\n const payload: UserData = {\n fullName,\n document,\n biologicalSex: isManual ? this.gender : this.responseCase.biologicalSex,\n birthdate: isManual ? (this.bday || this.userUtils.generateRandomBirthDate()) : this.userUtils.calculateBirthDate(this.responseCase.age),\n typeGenerator: isManual ? 'signup' : 'autoSignup',\n orgDocument: this.orgDocument,\n orgDocumentType: this.orgDocumentType,\n customerOrganizationId: this.customerOrganizationId,\n };\n const phoneToRelease = this.removePhone ? this.phone.replace(/\\D/g, '') : undefined;\n const call = isManual ? this.api.signupForm(payload, phoneToRelease) : this.api.autoSignup(payload, phoneToRelease);\n\n this.status = 'running';\n this.executionMessage = 'Executando cenário…';\n this.message = '';\n this.loginStep = 'idle';\n this.cdr.markForCheck();\n\n call.subscribe({\n next: () => {\n this.userUtils.setToStorage(payload);\n this.status = 'success';\n this.executionMessage = 'Cenário executado com sucesso.';\n this.generatedCpf = document;\n this.generatedPhone = phoneToRelease ?? this.phone.replace(/\\D/g, '');\n this.dadosText = this.buildDados(payload);\n this.toast.show('Usuário gerado · ' + fullName);\n this.cdr.markForCheck();\n },\n error: (err) => {\n this.status = 'error';\n this.executionMessage = 'Falha na execução do cenário.';\n this.utils.setErrorToast(err);\n this.cdr.markForCheck();\n },\n });\n }\n\n protected startLogin(): void {\n const phoneE164 = this.toE164(this.generatedPhone || this.phone);\n if (!/^\\+55\\d{10,11}$/.test(phoneE164)) {\n this.message = 'Defina o celular do usuário (toggle SMS) para receber o código.';\n this.cdr.markForCheck();\n return;\n }\n this.loginBusy = true;\n this.message = '';\n this.cdr.markForCheck();\n this.api.requestCode({ document: this.generatedCpf, phone: phoneE164 }).subscribe({\n next: () => {\n this.loginBusy = false;\n this.loginStep = 'code';\n this.toast.show('Código enviado via ' + this.media);\n this.cdr.markForCheck();\n },\n error: (err) => {\n this.loginBusy = false;\n this.message = err?.error?.message || 'Falha ao enviar o código.';\n this.cdr.markForCheck();\n },\n });\n }\n\n protected confirmLogin(): void {\n if (!/^\\d{6}$/.test(this.loginCode)) {\n this.message = 'Código inválido — 6 dígitos.';\n this.cdr.markForCheck();\n return;\n }\n this.loginBusy = true;\n this.cdr.markForCheck();\n this.api.otpLogin(this.generatedCpf, this.loginCode).subscribe({\n next: (res) => {\n const profile: any = res.profile;\n const name = profile?.personProperties?.name || profile?.name || this.fullName || this.generatedCpf;\n const saved = this.session.saveTestSession({\n name,\n document: this.generatedCpf,\n accessToken: res.accessToken,\n refreshToken: res.refreshToken,\n profile,\n });\n this.session.switchTo(saved.id);\n this.loginBusy = false;\n this.loginStep = 'done';\n this.toast.show('Login efetuado · sessão do app ativada');\n this.cdr.markForCheck();\n },\n error: (err) => {\n this.loginBusy = false;\n this.message = err?.error?.message || 'Código incorreto ou expirado.';\n this.cdr.markForCheck();\n },\n });\n }\n\n private toE164(phone: string): string {\n const digits = (phone || '').replace(/\\D/g, '');\n if (!digits) return '';\n return digits.startsWith('55') ? `+${digits}` : `+55${digits}`;\n }\n\n private buildDados(u: UserData): string {\n const age = this.userUtils.calculateAge(u.birthdate);\n return `Documento: ${u.document}\\nNome: ${u.fullName}\\nSexo biológico: ${u.biologicalSex}\\nNascimento (idade): ${u.birthdate} (${age})\\nTipo: ${u.typeGenerator}`;\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n inject,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { EMPTY, of } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\nimport { DevtoolsToastService } from '../devtools-toast.service';\nimport { DevtoolsApiService } from '../core/devtools-api.service';\nimport { DevtoolsUtils } from '../core/devtools-utils';\nimport { DevtoolsAuthService } from '../core/devtools-auth.service';\nimport { UI } from './ui';\n\n/** Release a phone number (with the 2013 conflict recovery). */\n@Component({\n selector: 'devtools-phone-panel',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [FormsModule],\n template: `\n <p [style]=\"UI.intro\">Desvincula um número de celular para reutilizá-lo em testes de SMS / OTP.</p>\n <div [style]=\"UI.field\"><div [style]=\"UI.label\">Celular (DDD + número)</div>\n <input [style]=\"UI.input\" [(ngModel)]=\"phone\" placeholder=\"11990000000\" inputmode=\"tel\" /></div>\n <button type=\"button\" [style]=\"UI.primary\" [disabled]=\"running\" (click)=\"release()\">{{ running ? 'Liberando…' : 'Liberar celular' }}</button>\n @if (message) { <div style=\"margin-top:14px;font-size:13px;color:#9a9eab\">{{ message }}</div> }\n `,\n})\nexport class PhonePanelComponent {\n protected readonly UI = UI;\n private readonly api = inject(DevtoolsApiService);\n private readonly utils = inject(DevtoolsUtils);\n private readonly auth = inject(DevtoolsAuthService);\n private readonly toast = inject(DevtoolsToastService);\n private readonly cdr = inject(ChangeDetectorRef);\n\n protected phone = '';\n protected running = false;\n protected message = '';\n\n protected release(): void {\n if (!this.auth.isLogged()) {\n this.toast.show('Faça login admin para liberar celulares');\n return;\n }\n const phone = this.utils.removePhoneMask(this.phone);\n if (!phone) {\n this.toast.show('Informe um número');\n return;\n }\n this.running = true;\n this.message = 'Liberando celular…';\n this.cdr.markForCheck();\n this.api.findRemoveUserPhone(phone).subscribe({\n next: () => this.done('Celular liberado para testes.'),\n error: (err) => {\n if (err?.error?.code === 2013 || err?.error?.code === '2013') {\n this.resolveConflictAndRetry(phone);\n return;\n }\n this.fail(err);\n },\n });\n }\n\n private resolveConflictAndRetry(phone: string): void {\n this.message = 'Removendo permissões vinculadas e tentando novamente…';\n this.cdr.markForCheck();\n this.api\n .findUser({ phones: `+55${phone}` })\n .pipe(\n map((response: any) => response?.persons?.[0]),\n switchMap((person: any) => {\n if (!person?.id) {\n this.fail({ error: { message: 'Usuário do número não identificado.' } });\n return EMPTY;\n }\n return this.api.getAuthStatementsByPerson(person.id).pipe(\n switchMap((statements) => {\n if (statements.some((s: any) => s?.role?.name === 'ADMIN')) {\n this.running = false;\n this.message = 'Usuário admin detectado — peça a remoção manual.';\n this.toast.show('Não é possível liberar número de admin');\n this.cdr.markForCheck();\n return EMPTY;\n }\n const ids = statements.map((s: any) => s?.id).filter((id: any): id is number => !!id);\n return this.api.deleteAuthStatementsByIds(ids).pipe(switchMap(() => this.api.findRemoveUserPhone(phone)));\n }),\n );\n }),\n )\n .subscribe({\n next: () => this.done('Celular liberado após remover permissões vinculadas.'),\n error: (err) => this.fail(err),\n });\n }\n\n private done(msg: string): void {\n this.running = false;\n this.message = msg;\n this.toast.show('Celular liberado');\n this.cdr.markForCheck();\n }\n private fail(err: any): void {\n this.running = false;\n this.message = 'Falha ao liberar celular.';\n this.utils.setErrorToast(err);\n this.cdr.markForCheck();\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n inject,\n} from '@angular/core';\nimport { DevtoolsToastService } from '../devtools-toast.service';\nimport { DevtoolsApiService, UserData } from '../core/devtools-api.service';\nimport { DevtoolsUserUtils, DevtoolsUtils } from '../core/devtools-utils';\nimport { DevtoolsAuthService } from '../core/devtools-auth.service';\nimport { UI } from './ui';\n\n/** Generate performed exams for the last generated user (18yo flow). */\n@Component({\n selector: 'devtools-exams-panel',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (lastUser(); as u) {\n <p [style]=\"UI.intro\">\n Enviar exames para o último usuário gerado\n <strong style=\"color:#eceef3\">{{ u.fullName }}</strong>\n ({{ age(u.birthdate) }} anos).\n </p>\n <button type=\"button\" [style]=\"UI.primary\" [disabled]=\"running\" (click)=\"send(u)\">\n <span class=\"dts-sym\" style=\"font-family:'Material Symbols Outlined';font-size:19px\">biotech</span>\n {{ running ? 'Enviando…' : 'Enviar exames' }}\n </button>\n @if (message) { <div style=\"margin-top:14px;font-size:13px;color:#9a9eab\">{{ message }}</div> }\n } @else {\n <p [style]=\"UI.intro\">Nenhum usuário gerado ainda. Gere um pelo painel \"Gerador\".</p>\n }\n `,\n})\nexport class ExamsPanelComponent {\n protected readonly UI = UI;\n private readonly api = inject(DevtoolsApiService);\n private readonly userUtils = inject(DevtoolsUserUtils);\n private readonly utils = inject(DevtoolsUtils);\n private readonly auth = inject(DevtoolsAuthService);\n private readonly toast = inject(DevtoolsToastService);\n private readonly cdr = inject(ChangeDetectorRef);\n\n protected running = false;\n protected message = '';\n\n protected lastUser(): UserData | undefined {\n return this.userUtils.getUserFromStorage()[0];\n }\n\n protected age(birthdate: string | undefined): number {\n return (this.userUtils.calculateAge(birthdate) as number) || 0;\n }\n\n protected send(user: UserData): void {\n if (!this.auth.isLogged()) {\n this.toast.show('Faça login admin para enviar exames');\n return;\n }\n const age = this.age(user.birthdate);\n this.running = true;\n this.message = 'Gerando exames…';\n this.cdr.markForCheck();\n this.api.generatePerformedExams(user, age, '').subscribe({\n next: (exams) => {\n this.running = false;\n this.message = exams?.length ? `Exames gerados: ${exams.length}` : 'Nenhum exame aplicável para o cenário.';\n this.toast.show(exams?.length ? 'Exames enviados' : 'Sem exames para o perfil');\n this.cdr.markForCheck();\n },\n error: (err) => {\n this.running = false;\n this.message = 'Falha ao gerar exames.';\n this.utils.setErrorToast(err);\n this.cdr.markForCheck();\n },\n });\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n inject,\n OnInit,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { Subject, of } from 'rxjs';\nimport { debounceTime, switchMap } from 'rxjs/operators';\nimport { DevtoolsToastService } from '../devtools-toast.service';\nimport { DevtoolsApiService } from '../core/devtools-api.service';\nimport { DevtoolsUserUtils, DevtoolsUtils } from '../core/devtools-utils';\nimport { DevtoolsAuthService } from '../core/devtools-auth.service';\nimport { UI } from './ui';\n\ninterface PermissionItem {\n authStatementId: number;\n roleLabel: string;\n organizationName: string;\n}\n\n/** View the last generated user's data + manage auth-statements (no Material). */\n@Component({\n selector: 'devtools-data-panel',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [FormsModule],\n template: `\n @if (!hasUser) {\n <p [style]=\"UI.intro\">Nenhum usuário gerado ainda. Gere um pelo painel \"Gerador\".</p>\n } @else {\n @if (loading) { <p [style]=\"UI.intro\">Carregando dados do usuário…</p> }\n @if (error) { <p [style]=\"UI.intro\" style=\"color:#d6604f\">{{ error }}</p> }\n\n @if (person) {\n <div style=\"font-size:13px;font-weight:600;color:#f0f1f4;margin-bottom:10px\">Permissões</div>\n @for (item of permissions; track item.authStatementId) {\n <div [style]=\"UI.card\" style=\"display:flex;align-items:center;gap:10px;margin-bottom:8px\">\n <div style=\"flex:1;min-width:0\">\n <div style=\"font-size:13px;color:#eceef3\">{{ item.roleLabel }}</div>\n <div [style]=\"UI.mono\">{{ item.organizationName }}</div>\n </div>\n <button type=\"button\" [style]=\"UI.ghost\" style=\"width:auto;margin:0;color:#d6604f\" (click)=\"remove(item)\">Remover</button>\n </div>\n } @empty {\n <p [style]=\"UI.intro\">Nenhuma permissão cadastrada.</p>\n }\n\n <!-- add permission (inline) -->\n <div [style]=\"UI.card\" style=\"margin-top:8px\">\n <div [style]=\"UI.label\">Nova permissão</div>\n <select [style]=\"UI.input\" [(ngModel)]=\"newRole\" style=\"margin:6px 0\">\n <option value=\"MANAGER\">MANAGER (Gestor)</option>\n <option value=\"DOCTOR\">DOCTOR (Médico)</option>\n </select>\n <input [style]=\"UI.input\" [(ngModel)]=\"orgQuery\" (ngModelChange)=\"orgSearch$.next($event)\"\n [placeholder]=\"newOrgName || 'Buscar organização…'\" style=\"margin:6px 0\" />\n @for (org of orgResults; track org.id) {\n <button type=\"button\" (click)=\"pickOrg(org)\"\n style=\"display:block;width:100%;text-align:left;padding:8px 10px;background:#101117;border:1px solid #24262f;border-radius:8px;color:#eceef3;font-size:12.5px;cursor:pointer;margin-bottom:4px\">\n {{ org.name }}\n </button>\n }\n <button type=\"button\" [style]=\"UI.primary\" [disabled]=\"!newOrgId\" (click)=\"add()\">Adicionar permissão</button>\n </div>\n\n <div style=\"font-size:13px;font-weight:600;color:#f0f1f4;margin:22px 0 10px\">Dados brutos</div>\n <pre [style]=\"UI.pre\">{{ rawText }}</pre>\n }\n }\n `,\n})\nexport class DataPanelComponent implements OnInit {\n protected readonly UI = UI;\n private readonly api = inject(DevtoolsApiService);\n private readonly userUtils = inject(DevtoolsUserUtils);\n private readonly utils = inject(DevtoolsUtils);\n private readonly auth = inject(DevtoolsAuthService);\n private readonly toast = inject(DevtoolsToastService);\n private readonly cdr = inject(ChangeDetectorRef);\n\n protected hasUser = false;\n protected loading = false;\n protected error = '';\n protected person: any = null;\n protected rawText = '{}';\n protected permissions: PermissionItem[] = [];\n\n protected newRole: 'MANAGER' | 'DOCTOR' = 'MANAGER';\n protected orgQuery = '';\n protected orgResults: any[] = [];\n protected newOrgName = '';\n protected newOrgId: number | null = null;\n protected readonly orgSearch$ = new Subject<string>();\n\n ngOnInit(): void {\n const [lastUser] = this.userUtils.getUserFromStorage();\n this.hasUser = !!lastUser?.document;\n if (this.hasUser && this.auth.isLogged()) this.refresh(lastUser.document);\n\n this.orgSearch$\n .pipe(\n debounceTime(300),\n switchMap((q) => ((q ?? '').trim() ? this.api.getWithQuery({ q: (q ?? '').trim() }) : of([]))),\n )\n .subscribe({\n next: (list) => {\n this.orgResults = (list ?? []).slice(0, 6);\n this.cdr.markForCheck();\n },\n error: () => {\n this.orgResults = [];\n this.cdr.markForCheck();\n },\n });\n }\n\n private refresh(documentNumber: string): void {\n this.loading = true;\n this.error = '';\n this.cdr.markForCheck();\n this.api.findUser({ documents: documentNumber }).subscribe({\n next: (response: any) => {\n const [person] = response?.persons ?? [];\n this.loading = false;\n if (!person) {\n this.error = 'Usuário não encontrado.';\n this.person = null;\n this.cdr.markForCheck();\n return;\n }\n this.person = person;\n this.rawText = JSON.stringify(person, null, 2);\n this.loadPermissions(person.id);\n this.cdr.markForCheck();\n },\n error: (err) => {\n this.loading = false;\n this.error = 'Falha ao consultar dados do usuário.';\n this.utils.setErrorToast(err);\n this.cdr.markForCheck();\n },\n });\n }\n\n private loadPermissions(personId: number): void {\n this.api\n .getAuthStatements(personId)\n .pipe(\n switchMap((statements: any[]) => {\n if (!statements.length) return of({ statements, organizations: [] as any[] });\n const ids = Array.from(new Set(statements.map((s) => s?.resource?.organization?.id).filter((id): id is number => !!id)));\n return this.api.getOrganizationsByIds(ids).pipe(switchMap((organizations) => of({ statements, organizations })));\n }),\n )\n .subscribe({\n next: ({ statements, organizations }) => {\n const byId = new Map<number, any>();\n organizations.forEach((o: any) => o?.id && byId.set(o.id, o));\n this.permissions = statements.map((s: any) => {\n const orgId = s?.resource?.organization?.id;\n const role = s?.role?.name ?? '';\n return {\n authStatementId: s?.id ?? 0,\n roleLabel: role === 'MANAGER' ? 'Gestor' : role === 'DOCTOR' ? 'Médico' : role || '—',\n organizationName: (orgId && byId.get(orgId)?.name) || `Org #${orgId ?? '-'}`,\n };\n });\n this.cdr.markForCheck();\n },\n error: (err) => {\n this.permissions = [];\n this.utils.setErrorToast(err);\n this.cdr.markForCheck();\n },\n });\n }\n\n protected pickOrg(org: any): void {\n this.newOrgId = org?.id ?? null;\n this.newOrgName = org?.name ?? '';\n this.orgQuery = '';\n this.orgResults = [];\n }\n\n protected add(): void {\n if (!this.person?.id || !this.newOrgId) return;\n if (this.person?.phoneStatus !== 'VERIFIED') {\n this.toast.show('Phone não verificado — verifique no App do usuário');\n return;\n }\n this.api.createAuthStatement(this.person.id, this.newRole, this.newOrgId).subscribe({\n next: () => {\n this.toast.show('Permissão cadastrada');\n this.newOrgId = null;\n this.newOrgName = '';\n this.loadPermissions(this.person.id);\n },\n error: (err) => this.utils.setErrorToast(err),\n });\n }\n\n protected remove(item: PermissionItem): void {\n if (!item.authStatementId) return;\n if (!window.confirm(`Remover a permissão ${item.roleLabel} de ${item.organizationName}?`)) return;\n this.api.deleteAuthStatement(item.authStatementId).subscribe({\n next: () => {\n this.toast.show('Permissão removida');\n if (this.person?.id) this.loadPermissions(this.person.id);\n },\n error: (err) => this.utils.setErrorToast(err),\n });\n }\n}\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { DevtoolsToastService } from '../devtools-toast.service';\nimport { DevtoolsSessionService } from '../core/devtools-session.service';\nimport { DevtoolsUserUtils, DevtoolsUtils } from '../core/devtools-utils';\nimport { UI } from './ui';\n\n/** Copy data from the active app session (admin or generated user). */\n@Component({\n selector: 'devtools-copy-panel',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <p [style]=\"UI.intro\">Copie rapidamente dados da sessão ativa do app.</p>\n @for (item of rows(); track item.key) {\n <button type=\"button\" [style]=\"UI.row\" (click)=\"copy(item.value, item.label)\">\n <span class=\"dts-sym\" style=\"font-family:'Material Symbols Outlined';font-size:20px;color:#ffc454\">{{ item.icon }}</span>\n <div style=\"flex:1;min-width:0\">\n <div style=\"font-size:13px;font-weight:600;color:#eceef3\">{{ item.label }}</div>\n <div [style]=\"UI.mono\" style=\"white-space:nowrap;overflow:hidden;text-overflow:ellipsis\">{{ item.preview || '—' }}</div>\n </div>\n <span class=\"dts-sym\" style=\"font-family:'Material Symbols Outlined';font-size:18px;color:#6a6e7b\">content_copy</span>\n </button>\n }\n `,\n})\nexport class CopyPanelComponent {\n protected readonly UI = UI;\n private readonly session = inject(DevtoolsSessionService);\n private readonly userUtils = inject(DevtoolsUserUtils);\n private readonly utils = inject(DevtoolsUtils);\n private readonly toast = inject(DevtoolsToastService);\n\n protected rows() {\n const active = this.session.active();\n const [lastUser] = this.userUtils.getUserFromStorage();\n const cpf: string | undefined = lastUser?.document;\n const short = (v?: string) => (v ? v.slice(0, 30) + '…' : '');\n return [\n { key: 'cpf', label: 'CPF / documento', icon: 'badge', value: cpf, preview: cpf },\n { key: 'token', label: 'accessToken', icon: 'vpn_key', value: active?.accessToken, preview: short(active?.accessToken) },\n { key: 'refresh', label: 'refreshToken', icon: 'autorenew', value: active?.refreshToken, preview: short(active?.refreshToken) },\n {\n key: 'payload',\n label: 'Payload completo',\n icon: 'data_object',\n value: JSON.stringify({ accessToken: active?.accessToken, refreshToken: active?.refreshToken, document: cpf }, null, 2),\n preview: 'JSON da sessão',\n },\n ];\n }\n\n protected copy(value: string | undefined, label: string): void {\n if (!value) {\n this.toast.show(label + ' indisponível');\n return;\n }\n this.utils.copyClipboard(value, label);\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, signal } from '@angular/core';\nimport { DevtoolsTelemetryService, TelemetryEntry } from '../core/devtools-telemetry.service';\nimport { UI } from './ui';\n\n/**\n * Live, in-memory log of every API call (host app + package). Click a row to\n * inspect params/body/response/error. Cleared by a page reload or the button.\n */\n@Component({\n selector: 'devtools-telemetry-panel',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <p [style]=\"UI.intro\" style=\"margin-bottom:10px\">\n Todas as chamadas à API ({{ count() }}). Em memória — o reload limpa.\n </p>\n <button type=\"button\" [style]=\"UI.ghost\" style=\"margin-top:0;margin-bottom:14px\" (click)=\"clear()\">\n <span class=\"dts-sym\" style=\"font-family:'Material Symbols Outlined';font-size:17px;vertical-align:-3px\">delete_sweep</span>\n Limpar log\n </button>\n\n @if (!count()) {\n <p [style]=\"UI.mono\">Nenhuma requisição capturada ainda.</p>\n }\n\n @for (e of entries(); track e.id) {\n <div [style]=\"UI.card\" style=\"margin-bottom:8px;cursor:pointer;padding:11px 13px\" (click)=\"toggle(e.id)\">\n <div style=\"display:flex;align-items:center;gap:8px\">\n <span [style]=\"badge\">{{ e.method }}</span>\n <span style=\"font-size:11px;font-weight:700;min-width:32px\" [style.color]=\"statusColor(e)\">\n {{ e.pending ? '···' : (e.status ?? 'ERR') }}\n </span>\n <span [style]=\"UI.mono\" style=\"flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis\">\n {{ path(e.url) }}\n </span>\n @if (e.durationMs != null) {\n <span [style]=\"UI.mono\" style=\"white-space:nowrap;color:#6a6e7b\">{{ e.durationMs }}ms</span>\n }\n </div>\n\n @if (expanded() === e.id) {\n <div style=\"margin-top:11px;display:flex;flex-direction:column;gap:7px\" (click)=\"$event.stopPropagation()\">\n <div [style]=\"UI.label\">URL</div>\n <pre [style]=\"UI.pre\">{{ e.url }}</pre>\n\n @if (hasParams(e)) {\n <div [style]=\"UI.label\">Query params</div>\n <pre [style]=\"UI.pre\">{{ json(e.params) }}</pre>\n }\n @if (e.requestBody !== null) {\n <div [style]=\"UI.label\">Request body</div>\n <pre [style]=\"UI.pre\">{{ json(e.requestBody) }}</pre>\n }\n @if (e.error) {\n <div [style]=\"UI.label\" style=\"color:#ff7676\">Erro</div>\n <pre [style]=\"UI.pre\" style=\"color:#ff9b9b;border-color:#5a2a2a\">{{ e.error }}</pre>\n }\n @if (e.responseBody !== null) {\n <div [style]=\"UI.label\">Response</div>\n <pre [style]=\"UI.pre\">{{ json(e.responseBody) }}</pre>\n }\n </div>\n }\n </div>\n }\n `,\n})\nexport class TelemetryPanelComponent {\n protected readonly UI = UI;\n private readonly telemetry = inject(DevtoolsTelemetryService);\n\n protected readonly entries = this.telemetry.entries;\n protected readonly count = computed(() => this.entries().length);\n protected readonly expanded = signal<number | null>(null);\n\n protected readonly badge: Record<string, string> = {\n fontFamily: \"'JetBrains Mono',monospace\",\n fontSize: '9.5px',\n fontWeight: '700',\n letterSpacing: '.03em',\n padding: '2px 6px',\n borderRadius: '6px',\n background: '#23252f',\n color: '#c4c7d0',\n flex: 'none',\n };\n\n protected toggle(id: number): void {\n this.expanded.update((cur) => (cur === id ? null : id));\n }\n\n protected clear(): void {\n this.telemetry.clear();\n this.expanded.set(null);\n }\n\n protected path(url: string): string {\n try {\n const u = new URL(url, window.location.href);\n return u.pathname + u.search;\n } catch {\n return url;\n }\n }\n\n protected hasParams(e: TelemetryEntry): boolean {\n return Object.keys(e.params).length > 0;\n }\n\n protected json(v: unknown): string {\n try {\n return typeof v === 'string' ? v : JSON.stringify(v, null, 2);\n } catch {\n return String(v);\n }\n }\n\n protected statusColor(e: TelemetryEntry): string {\n if (e.pending) return '#ffc454';\n if (e.error || (e.status ?? 0) >= 400) return '#ff6b6b';\n return '#1fbe7e';\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, signal } from '@angular/core';\nimport { DevtoolsErrorsService, ErrorEntry, ErrorKind } from '../core/devtools-errors.service';\nimport { UI } from './ui';\n\n/**\n * Live, in-memory log of runtime JS/TS errors (uncaught, unhandled rejections,\n * console.error). Click a row to see the full stack. Cleared by a reload.\n */\n@Component({\n selector: 'devtools-errors-panel',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <p [style]=\"UI.intro\" style=\"margin-bottom:10px\">\n Erros de runtime JS/TS ({{ count() }}). Em memória — o reload limpa.\n </p>\n <button type=\"button\" [style]=\"UI.ghost\" style=\"margin-top:0;margin-bottom:14px\" (click)=\"clear()\">\n <span class=\"dts-sym\" style=\"font-family:'Material Symbols Outlined';font-size:17px;vertical-align:-3px\">delete_sweep</span>\n Limpar log\n </button>\n\n @if (!count()) {\n <p [style]=\"UI.mono\">Nenhum erro capturado. 🎉</p>\n }\n\n @for (e of entries(); track e.id) {\n <div [style]=\"UI.card\" style=\"margin-bottom:8px;cursor:pointer;padding:11px 13px;border-color:#3a2a2a\" (click)=\"toggle(e.id)\">\n <div style=\"display:flex;align-items:center;gap:8px\">\n <span [style]=\"badge\" [style.color]=\"kindColor(e.kind)\">{{ kindLabel(e.kind) }}</span>\n <span style=\"flex:1;min-width:0;font-size:12.5px;color:#f0d6d6;white-space:nowrap;overflow:hidden;text-overflow:ellipsis\">\n {{ e.message }}\n </span>\n </div>\n\n @if (expanded() === e.id) {\n <div style=\"margin-top:11px;display:flex;flex-direction:column;gap:7px\" (click)=\"$event.stopPropagation()\">\n <div [style]=\"UI.label\">Mensagem</div>\n <pre [style]=\"UI.pre\" style=\"color:#ff9b9b;border-color:#5a2a2a\">{{ e.message }}</pre>\n\n @if (e.source) {\n <div [style]=\"UI.label\">Origem</div>\n <pre [style]=\"UI.pre\">{{ e.source }}</pre>\n }\n @if (e.stack) {\n <div [style]=\"UI.label\">Stack</div>\n <pre [style]=\"UI.pre\">{{ e.stack }}</pre>\n }\n </div>\n }\n </div>\n }\n `,\n})\nexport class ErrorsPanelComponent {\n protected readonly UI = UI;\n private readonly errors = inject(DevtoolsErrorsService);\n\n protected readonly entries = this.errors.entries;\n protected readonly count = computed(() => this.entries().length);\n protected readonly expanded = signal<number | null>(null);\n\n protected readonly badge: Record<string, string> = {\n fontFamily: \"'JetBrains Mono',monospace\",\n fontSize: '9.5px',\n fontWeight: '700',\n letterSpacing: '.03em',\n padding: '2px 6px',\n borderRadius: '6px',\n background: '#2a2024',\n flex: 'none',\n };\n\n protected toggle(id: number): void {\n this.expanded.update((cur) => (cur === id ? null : id));\n }\n\n protected clear(): void {\n this.errors.clear();\n this.expanded.set(null);\n }\n\n protected kindLabel(kind: ErrorKind): string {\n return kind === 'rejection' ? 'PROMISE' : kind === 'console' ? 'CONSOLE' : 'ERROR';\n }\n\n protected kindColor(kind: ErrorKind): string {\n return kind === 'console' ? '#ffb454' : '#ff6b6b';\n }\n}\n","import {\n APP_BOOTSTRAP_LISTENER,\n ApplicationRef,\n createComponent,\n createEnvironmentInjector,\n EnvironmentInjector,\n EnvironmentProviders,\n inject,\n makeEnvironmentProviders,\n runInInjectionContext,\n} from '@angular/core';\nimport { provideHttpClient, withInterceptors } from '@angular/common/http';\nimport { DEVTOOLS_ACTION, DEVTOOLS_SHELL_CONFIG } from './devtools-shell.tokens';\nimport { DevtoolsShellComponent } from './devtools-shell.component';\nimport { DevtoolsAction } from './devtools-shell.types';\nimport { DevtoolsPositionService } from './devtools-position.service';\nimport { DevtoolsToastService } from './devtools-toast.service';\nimport { DevtoolsConfig, DEVTOOLS_CONFIG } from './core/devtools-config';\nimport { devtoolsHttpInterceptor } from './core/devtools-http.interceptor';\nimport { DevtoolsStorage } from './core/devtools-storage.service';\nimport { DevtoolsUserUtils, DevtoolsUtils } from './core/devtools-utils';\nimport { DevtoolsTypeform } from './core/typeform';\nimport { DevtoolsApiService } from './core/devtools-api.service';\nimport { DevtoolsAuthService } from './core/devtools-auth.service';\nimport { DevtoolsSessionService } from './core/devtools-session.service';\nimport { DevtoolsTelemetryService } from './core/devtools-telemetry.service';\nimport { DevtoolsErrorsService } from './core/devtools-errors.service';\nimport { AdminLoginPanelComponent } from './panels/admin-login-panel.component';\nimport { LoginPanelComponent } from './panels/login-panel.component';\nimport { SwitchPanelComponent } from './panels/switch-panel.component';\nimport { GeneratorPanelComponent } from './panels/generator-panel.component';\nimport { PhonePanelComponent } from './panels/phone-panel.component';\nimport { ExamsPanelComponent } from './panels/exams-panel.component';\nimport { DataPanelComponent } from './panels/data-panel.component';\nimport { CopyPanelComponent } from './panels/copy-panel.component';\nimport { TelemetryPanelComponent } from './panels/telemetry-panel.component';\nimport { ErrorsPanelComponent } from './panels/errors-panel.component';\n\nexport interface ProvideDevtoolsOptions extends DevtoolsConfig {\n /** Layer-1 production gate. Pass `!environment.production`. @default true */\n enabled?: boolean;\n /** Extra custom panels, appended to the built-in DevTools panels. */\n actions?: DevtoolsAction[];\n /** Container header title. */\n title?: string;\n /** FAB glyph. @default developer_mode */\n fabIcon?: string;\n}\n\nconst BUILTIN_ACTIONS: DevtoolsAction[] = [\n { id: 'admin', label: 'Admin', icon: 'shield_person', content: AdminLoginPanelComponent, order: 0 },\n { id: 'app-login', label: 'Login App', icon: 'login', content: LoginPanelComponent, order: 1 },\n { id: 'switch', label: 'Trocar', icon: 'switch_account', content: SwitchPanelComponent, order: 2 },\n { id: 'generator', label: 'Gerador', icon: 'groups', content: GeneratorPanelComponent, order: 3 },\n { id: 'phone', label: 'Celular', icon: 'sms', content: PhonePanelComponent, order: 4 },\n { id: 'exams', label: 'Exames', icon: 'biotech', content: ExamsPanelComponent, order: 5 },\n { id: 'data', label: 'Dados', icon: 'badge', content: DataPanelComponent, order: 6 },\n { id: 'copy', label: 'Copiar', icon: 'content_copy', content: CopyPanelComponent, order: 7 },\n { id: 'telemetry', label: 'Telemetria', icon: 'monitoring', content: TelemetryPanelComponent, order: 8 },\n { id: 'errors', label: 'Erros', icon: 'bug_report', content: ErrorsPanelComponent, order: 9 },\n];\n\n/**\n * Mount the self-contained DevTools. Add to `bootstrapApplication` providers or\n * `@NgModule({ providers })`. Everything runs in an ISOLATED environment\n * injector with the package's OWN HttpClient + interceptor — it never touches\n * the host app's services, interceptors or session beyond the deliberate\n * active-session keys used by the Switch panel.\n */\nexport function provideDevtools(options: ProvideDevtoolsOptions): EnvironmentProviders {\n const { enabled = true, actions = [], apiBaseUrl, title, fabIcon, ...rest } = options ?? ({} as ProvideDevtoolsOptions);\n\n // Layer 1 gate (Layer 2 = fileReplacements; see README).\n if (!enabled || !apiBaseUrl) return makeEnvironmentProviders([]);\n\n const config: DevtoolsConfig = { apiBaseUrl, ...rest };\n const allActions = [...BUILTIN_ACTIONS, ...actions];\n\n return makeEnvironmentProviders([\n {\n provide: APP_BOOTSTRAP_LISTENER,\n multi: true,\n useFactory: () => {\n const parent = inject(EnvironmentInjector);\n return () => mountIsolated(parent, config, allActions, { title, fabIcon });\n },\n },\n ]);\n}\n\n/** Load the Material Symbols Outlined font the package's icons rely on, so it\n * never depends on the host having it. Injected once. */\nfunction ensureIconFont(): void {\n const id = 'dc-material-symbols-font';\n if (document.getElementById(id)) return;\n const link = document.createElement('link');\n link.id = id;\n link.rel = 'stylesheet';\n link.href =\n 'https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap';\n document.head.appendChild(link);\n}\n\nfunction mountIsolated(\n parent: EnvironmentInjector,\n config: DevtoolsConfig,\n actions: DevtoolsAction[],\n shell: { title?: string; fabIcon?: string },\n): void {\n if (typeof document === 'undefined') return;\n ensureIconFont();\n\n const injector = createEnvironmentInjector(\n [\n // OWN HttpClient + interceptor — fully isolated from the host.\n provideHttpClient(withInterceptors([devtoolsHttpInterceptor])),\n { provide: DEVTOOLS_CONFIG, useValue: { media: 'WHATSAPP', locale: 'pt_BR', fixedOrgId: 200, ...config } },\n {\n provide: DEVTOOLS_SHELL_CONFIG,\n useValue: {\n title: shell.title ?? 'DevTools',\n fabIcon: shell.fabIcon ?? 'developer_mode',\n storageKey: 'marsaude.devtools.fab',\n },\n },\n ...actions.map((action) => ({ provide: DEVTOOLS_ACTION, useValue: action, multi: true })),\n DevtoolsStorage,\n DevtoolsUtils,\n DevtoolsUserUtils,\n DevtoolsTypeform,\n DevtoolsApiService,\n DevtoolsAuthService,\n DevtoolsSessionService,\n DevtoolsTelemetryService,\n DevtoolsErrorsService,\n DevtoolsPositionService,\n DevtoolsToastService,\n ],\n parent,\n );\n\n runInInjectionContext(injector, () => {\n // Start capturing API traffic + runtime errors ASAP, then consume our own\n // Google OAuth return (guarded) to finish admin login.\n inject(DevtoolsTelemetryService).install();\n inject(DevtoolsErrorsService).install();\n inject(DevtoolsAuthService).handleGoogleReturn();\n });\n\n const appRef = parent.get(ApplicationRef);\n const host = document.createElement('div');\n host.setAttribute('data-devtools-shell-host', '');\n document.body.appendChild(host);\n\n const ref = createComponent(DevtoolsShellComponent, { environmentInjector: injector, hostElement: host });\n appRef.attachView(ref.hostView);\n\n appRef.onDestroy(() => {\n ref.destroy();\n host.remove();\n injector.destroy();\n });\n}\n","/*\n * Public API of @marsaude/devtools-shell — a self-contained, draggable DevTools\n * package. The host only calls provideDevtools(config); everything else\n * (HttpClient, interceptor, auth, panels) lives inside the package.\n */\nexport { provideDevtools } from './lib/provide-devtools';\nexport type { ProvideDevtoolsOptions } from './lib/provide-devtools';\n\nexport type { DevtoolsConfig, ValidationMedia } from './lib/core/devtools-config';\n\n// Shell + extension points (for advanced/custom panels).\nexport { DevtoolsShellComponent } from './lib/devtools-shell.component';\nexport { DEVTOOLS_ACTION, DEVTOOLS_SHELL_CONFIG } from './lib/devtools-shell.tokens';\nexport type { DevtoolsAction, DevtoolsShellConfig, DevtoolsCorner } from './lib/devtools-shell.types';\nexport { DevtoolsToastService } from './lib/devtools-toast.service';\n\n// Session control (admin vs generated users) — exposed for custom panels.\nexport { DevtoolsSessionService } from './lib/core/devtools-session.service';\nexport type { DevtoolsSession } from './lib/core/devtools-session.service';\nexport { DevtoolsAuthService } from './lib/core/devtools-auth.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["switchMap","MAX_ENTRIES"],"mappings":"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"}