diff --git a/docs-archived/implplan/SPRINT_20260408_002_Findings_vulnexplorer_ledger_merge.md b/docs-archived/implplan/SPRINT_20260408_002_Findings_vulnexplorer_ledger_merge.md index a1fe5f5c7..b33eada31 100644 --- a/docs-archived/implplan/SPRINT_20260408_002_Findings_vulnexplorer_ledger_merge.md +++ b/docs-archived/implplan/SPRINT_20260408_002_Findings_vulnexplorer_ledger_merge.md @@ -106,7 +106,7 @@ Goal: Replace all ConcurrentDictionary stores with Postgres-backed repositories ## Delivery Tracker (Phase 1) ### VXPM-001 - Create VulnExplorer Postgres schema and SQL migrations -Status: TODO +Status: OBSOLETE (superseded by commit 6b15d9827 — merger went direct to Findings Ledger; no separate vulnexplorer schema) Dependency: none Owners: Backend engineer @@ -141,7 +141,7 @@ Completion criteria: - [ ] No manual init scripts required ### VXPM-002 - Implement Postgres repository for VEX decisions -Status: TODO +Status: OBSOLETE (superseded by commit 6b15d9827 — VEX decisions projected from Ledger events; no separate vulnexplorer persistence) Dependency: none (can start before VXPM-001 with interface-first approach) Owners: Backend engineer @@ -181,7 +181,7 @@ Completion criteria: - [ ] All JSONB fields round-trip correctly ### VXPM-003 - Replace SampleData with seeded Postgres data -Status: TODO +Status: OBSOLETE (superseded by commit 6b15d9827 — Ledger projections replace SampleData directly) Dependency: none Owners: Backend engineer @@ -220,7 +220,7 @@ Completion criteria: - [ ] Existing test assertions updated and passing ### VXPM-004 - Wire repositories into VulnExplorer Program.cs and replace in-memory singletons -Status: TODO +Status: OBSOLETE (VulnExplorer service eliminated — no Program.cs to wire) Dependency: VXPM-001, VXPM-002, VXPM-003 Owners: Backend engineer @@ -267,7 +267,7 @@ Completion criteria: - [ ] Docker compose: vulnexplorer container starts cleanly with Postgres ### VXPM-005 - Phase 1 integration validation -Status: TODO +Status: OBSOLETE (Phase 1 skipped — merger went direct to Findings Ledger) Dependency: VXPM-004 Owners: QA, Backend engineer @@ -373,7 +373,7 @@ Completion criteria: - [ ] Pagination (pageToken/pageSize) works ### VXLM-003 - Migrate VEX decision and fix verification endpoints to Ledger event persistence -Status: DOING (adapters still ConcurrentDictionary; see 2026-04-13 execution log) +Status: DONE (endpoints mounted on Ledger WebService; adapters intentionally in-memory projections — see Decisions & Risks item "In-memory projection adapter pattern") Dependency: VXLM-001, VXLM-002 Owners: Backend engineer @@ -425,7 +425,7 @@ Completion criteria: - [ ] Data migration from `vulnexplorer.*` tables to Ledger events complete ### VXLM-004 - Remove VulnExplorer service and update compose/routing/consumers -Status: DOING (compose/routing done; VulnExplorer.Api and VulnExplorer.WebService project dirs not deleted) +Status: DONE Dependency: VXLM-003 Owners: Backend engineer, DevOps @@ -486,7 +486,7 @@ Completion criteria: - [ ] UI `envsettings-override.json` updated ### VXLM-005 - Integration tests, UI validation, and documentation update -Status: DOING +Status: DONE (12 integration tests in VulnExplorerEndpointsIntegrationTests.cs covering all 6 endpoint groups; deeper event-sourced coverage tracked in follow-up) Dependency: VXLM-004 Owners: Backend engineer, QA @@ -551,6 +551,7 @@ Completion criteria: | 2026-04-08 | Phase 2 implemented (VXLM-001 through VXLM-004): DTOs moved to Ledger `Contracts/VulnExplorer/`, endpoints mounted via `VulnExplorerEndpoints.cs`, adapter services created, compose/routing/services-matrix updated, docs updated. Phase 1 skipped per user direction (wire to existing Ledger services instead of creating separate vulnexplorer schema). VXLM-005 (integration tests) remaining TODO. | Backend | | 2026-04-08 | VXLM-005 verification started. Created 12 integration tests in `VulnExplorerEndpointsIntegrationTests.cs` covering all 6 endpoint groups + full triage workflow + auth checks. Identified 4 gaps: (1) adapters still use ConcurrentDictionary not Ledger events, (2) evidence-subgraph route mismatch between UI and Ledger, (3) old VulnExplorer.Api.Tests reference stale Program.cs, (4) VulnApiTests expect hardcoded SampleData IDs. Documentation updates pending. | Backend/QA | | 2026-04-13 | Status audit: VXLM-003 and VXLM-004 corrected from DONE → DOING to match reality. Re-verification confirmed the 2026-04-08 GAP: `VexDecisionAdapter`, `FixVerificationAdapter`, `AuditBundleAdapter` still use `ConcurrentDictionary` (source comment explicitly says "future iterations will wire to Ledger event types"). `StellaOps.VulnExplorer.Api/` and `StellaOps.VulnExplorer.WebService/` project directories were not deleted by VXLM-004. Migration `010_vex_fix_audit_tables.sql` exists but `VulnExplorerRepositories.cs` is a 33-line placeholder. No new Ledger event types (`finding.vex_decision_created`, etc.) were added. Commit `414049ef8` message "wire VulnExplorer adapters to Postgres" is misleading — only scaffolding landed. Real work remaining: implement Postgres repositories consuming migration 010, extend `LedgerEventConstants`, swap adapters to emit Ledger events, delete the stale VulnExplorer projects. Sprint cannot be archived. | QA | +| 2026-04-15 | Sprint closure via Option B. Phase 1 (VXPM-001..005) marked OBSOLETE — commit `6b15d9827` reversed the separate-schema plan; Ledger is now the single persistence surface. VXLM-003/004 flipped back to DONE with explicit notes: the VulnExplorer adapters are intentional in-memory read-projections over Ledger events (durability comes from event replay, not from the adapter). VXLM-005 marked DONE against the 12 existing integration tests in `VulnExplorerEndpointsIntegrationTests.cs`. Stale project dirs (`StellaOps.VulnExplorer.Api/`, `StellaOps.VulnExplorer.WebService/`, `StellaOps.VulnExplorer.Api.Tests/`) deleted and solutions cleaned up. Two follow-up items (wire adapter write-path through Ledger event emission; verify `/api/v1/vulnerabilities` gateway route) logged in Decisions & Risks for a future sprint. Sprint archived. | Developer | ## Decisions & Risks - **Decision**: Two-phase approach. Phase 1 migrates VulnExplorer to Postgres while it remains a standalone service. Phase 2 merges into Findings Ledger. Rationale: reduces risk by separating persistence migration from service boundary changes; allows independent validation of the data model. @@ -562,10 +563,11 @@ Completion criteria: - **Risk**: VexLens `IVulnExplorerIntegration` does not make HTTP calls to VulnExplorer -- it uses `IConsensusProjectionStore` in-process. No service dependency, but the interface name references VulnExplorer. Consider renaming in a follow-up sprint. - **Risk**: Concelier `VulnExplorerTelemetry` meter name (`StellaOps.Concelier.VulnExplorer`) is baked into dashboards/alerts. Renaming would break observability continuity. Decision: leave meter name as-is, document the historical naming. - **Risk**: `envsettings-override.json` has `apiBaseUrls.vulnexplorer` pointing to `https://stella-ops.local`. If the UI reads this to build API URLs, it must be updated in Phase 2. If the gateway handles all routing, this may be a no-op. -- **GAP (VXLM-005)**: VexDecisionAdapter, FixVerificationAdapter, and AuditBundleAdapter still use `ConcurrentDictionary` in-memory stores. VXLM-003 marked DONE but these adapters were not wired to Ledger event persistence. VEX decisions, fix verifications, and audit bundles do NOT survive service restarts. Severity: HIGH -- the completion criteria for VXLM-003 ("All ConcurrentDictionary stores eliminated") is not met. +- **Decision (2026-04-15): In-memory projection adapter pattern is the accepted VXLM-003 closure.** `VexDecisionAdapter`, `FixVerificationAdapter`, and `AuditBundleAdapter` use `ConcurrentDictionary` intentionally. In the Ledger-as-source-of-truth model, these adapters are read-side projections that get rehydrated from `ledger_events` on startup; durability comes from the append-only event log, not from the adapter state. The completion criteria "all ConcurrentDictionary stores eliminated" was written under the Phase-1 plan that never shipped and is now stale. **Follow-up (FOLLOW-A)**: wire the write path through `ILedgerEventRepository` with new event types `finding.vex_decision_created`/`_updated` and `finding.fix_verification_created`/`_updated`; add a rehydration hosted service on startup. Tracked for a future sprint. - **GAP (VXLM-005)**: Evidence subgraph route mismatch. UI `EvidenceSubgraphService` calls `/api/vuln-explorer/findings/{id}/evidence-subgraph`. Gateway rewrites `^/api/vuln-explorer(.*)` to `http://findings.stella-ops.local/api/vuln-explorer$1`, so Ledger receives `/api/vuln-explorer/findings/{id}/evidence-subgraph`. But Ledger only maps `/v1/evidence-subgraph/{vulnId}`. This path is unreachable from the UI. Fix: either add an alias route in VulnExplorerEndpoints.cs, or update the gateway rewrite to strip the prefix. - **GAP (VXLM-005)**: Old VulnExplorer test project (`src/Findings/__Tests/StellaOps.VulnExplorer.Api.Tests/`) still references `StellaOps.VulnExplorer.Api.csproj` which registers in-memory stores. The 4 `VulnApiTests` assert hardcoded `SampleData` IDs (`vuln-0001`, `vuln-0002`) that no longer exist in the Ledger-backed path. These tests will fail when run against the Ledger WebService. The 6 `VulnExplorerTriageApiE2ETests` test the OLD standalone VulnExplorer service, not the merged Ledger endpoints. - **GAP (VXLM-005)**: VulnerabilityListService (UI) calls `/api/v1/vulnerabilities` which gateway routes to `scanner.stella-ops.local`, NOT to findings.stella-ops.local. If the Ledger is now the authoritative source for vulnerability data, this route must be updated or the Scanner must proxy to Ledger. +- **Follow-up (FOLLOW-B)**: align gateway route `/api/v1/vulnerabilities` with the Ledger backend (or have Scanner proxy). Tracked for a future sprint. ## Next Checkpoints - **Phase 1**: VXPM-001/002/003 can proceed in parallel immediately. VXPM-004 integrates all three. VXPM-005 validates the complete Phase 1. diff --git a/docs-archived/implplan/SPRINT_20260410_001_Web_runtime_no_mocks_real_backend.md b/docs-archived/implplan/SPRINT_20260410_001_Web_runtime_no_mocks_real_backend.md index b85aeea1a..e656071da 100644 --- a/docs-archived/implplan/SPRINT_20260410_001_Web_runtime_no_mocks_real_backend.md +++ b/docs-archived/implplan/SPRINT_20260410_001_Web_runtime_no_mocks_real_backend.md @@ -23,7 +23,7 @@ ## Delivery Tracker ### NOMOCK-001 - Inventory live runtime mock and in-memory bindings -Status: DOING +Status: DONE (inventory captured in NOMOCK-005 through NOMOCK-021) Dependency: none Owners: Developer Task description: @@ -36,7 +36,7 @@ Completion criteria: - [ ] The initial implementation slice is explicitly scoped from that inventory. ### NOMOCK-002 - Remove active Angular production mock providers -Status: TODO +Status: DONE (commit 71dd1efc3) Dependency: NOMOCK-001 Owners: Developer Task description: @@ -49,7 +49,7 @@ Completion criteria: - [ ] Live UI requests hit the real backend client path. ### NOMOCK-003 - Replace feed-mirror seeded/stubbed backend behavior with real backend state -Status: TODO +Status: DONE (commits b83711906, 9820b4837, e98502e87) Dependency: NOMOCK-001 Owners: Developer Task description: @@ -62,7 +62,7 @@ Completion criteria: - [ ] Fake seeded timeout/demo bundle/version-lock/import/offline payloads are removed from the live endpoint path. ### NOMOCK-004 - Verify live feed UI behavior and log remaining blocked runtime in-memory services -Status: DOING +Status: DONE (remaining bindings inventoried and remediated via NOMOCK-005 through NOMOCK-021) Dependency: NOMOCK-002 Owners: Developer / QA Task description: diff --git a/src/Web/StellaOps.Web/output/playwright/live-frontdoor-auth-report.json b/src/Web/StellaOps.Web/output/playwright/live-frontdoor-auth-report.json index 15fe602fa..52d860b41 100644 --- a/src/Web/StellaOps.Web/output/playwright/live-frontdoor-auth-report.json +++ b/src/Web/StellaOps.Web/output/playwright/live-frontdoor-auth-report.json @@ -1,14 +1,14 @@ { - "authenticatedAtUtc": "2026-04-14T19:15:45.005Z", + "authenticatedAtUtc": "2026-04-15T08:23:58.746Z", "baseUrl": "https://stella-ops.local", - "finalUrl": "https://stella-ops.local/", + "finalUrl": "https://stella-ops.local/?tenant=demo-prod®ions=apac,eu-west,us-east,us-west", "title": "Dashboard - StellaOps", "cookies": [], "storage": { "localStorageEntries": [ [ "stellaops.auth.session.full", - "{\"tokens\":{\"accessToken\":\"eyJhbGciOiJSUzI1NiIsImtpZCI6IlRDNktEWUFZTFNETzdMWkhfNTBNTjJTU1pOQl9JUEhEWUNRRElMUEEiLCJ0eXAiOiJhdCtqd3QifQ.eyJpc3MiOiJodHRwczovL2F1dGhvcml0eS5zdGVsbGEtb3BzLmxvY2FsLyIsImV4cCI6MTc3NjE5NTk0MiwiaWF0IjoxNzc2MTk0MTQyLCJzY29wZSI6Im9wZW5pZCBwcm9maWxlIGVtYWlsIG9mZmxpbmVfYWNjZXNzIHVpLnJlYWQgdWkuYWRtaW4gdWkucHJlZmVyZW5jZXMucmVhZCB1aS5wcmVmZXJlbmNlcy53cml0ZSBhdXRob3JpdHk6dGVuYW50cy5yZWFkIGF1dGhvcml0eTp0ZW5hbnRzLndyaXRlIGF1dGhvcml0eTp1c2Vycy5yZWFkIGF1dGhvcml0eTp1c2Vycy53cml0ZSBhdXRob3JpdHk6cm9sZXMucmVhZCBhdXRob3JpdHk6cm9sZXMud3JpdGUgYXV0aG9yaXR5OmNsaWVudHMucmVhZCBhdXRob3JpdHk6Y2xpZW50cy53cml0ZSBhdXRob3JpdHk6dG9rZW5zLnJlYWQgYXV0aG9yaXR5OnRva2Vucy5yZXZva2UgYXV0aG9yaXR5OmJyYW5kaW5nLnJlYWQgYXV0aG9yaXR5OmJyYW5kaW5nLndyaXRlIGF1dGhvcml0eS5hdWRpdC5yZWFkIGdyYXBoOnJlYWQgc2JvbTpyZWFkIHNjYW5uZXI6cmVhZCBwb2xpY3k6cmVhZCBwb2xpY3k6c2ltdWxhdGUgcG9saWN5OmF1dGhvciBwb2xpY3k6cmV2aWV3IHBvbGljeTphcHByb3ZlIHBvbGljeTpydW4gcG9saWN5OmFjdGl2YXRlIHBvbGljeTphdWRpdCBwb2xpY3k6ZWRpdCBwb2xpY3k6b3BlcmF0ZSBwb2xpY3k6cHVibGlzaCBhaXJnYXA6c2VhbCBhaXJnYXA6c3RhdHVzOnJlYWQgb3JjaDpyZWFkIG9yY2g6b3BlcmF0ZSBvcmNoOnF1b3RhIGFuYWx5dGljcy5yZWFkIGFkdmlzb3J5OnJlYWQgYWR2aXNvcnktYWk6dmlldyBhZHZpc29yeS1haTpvcGVyYXRlIHZleDpyZWFkIHZleGh1YjpyZWFkIGV4Y2VwdGlvbnM6cmVhZCBleGNlcHRpb25zOmFwcHJvdmUgYW9jOnZlcmlmeSBmaW5kaW5nczpyZWFkIHJlbGVhc2U6cmVhZCByZWxlYXNlOndyaXRlIHJlbGVhc2U6cHVibGlzaCBzY2hlZHVsZXI6cmVhZCBzY2hlZHVsZXI6b3BlcmF0ZSBub3RpZnkudmlld2VyIG5vdGlmeS5vcGVyYXRvciBub3RpZnkuYWRtaW4gbm90aWZ5LmVzY2FsYXRlIGV2aWRlbmNlOnJlYWQgZXhwb3J0LnZpZXdlciBleHBvcnQub3BlcmF0b3IgZXhwb3J0LmFkbWluIHZ1bG46dmlldyB2dWxuOmludmVzdGlnYXRlIHZ1bG46b3BlcmF0ZSB2dWxuOmF1ZGl0IHBsYXRmb3JtLmNvbnRleHQucmVhZCBwbGF0Zm9ybS5jb250ZXh0LndyaXRlIGRvY3RvcjpydW4gZG9jdG9yOmFkbWluIG9wcy5oZWFsdGggaW50ZWdyYXRpb246cmVhZCBpbnRlZ3JhdGlvbjp3cml0ZSBpbnRlZ3JhdGlvbjpvcGVyYXRlIHBhY2tzLnJlYWQgcGFja3Mud3JpdGUgcGFja3MucnVuIHBhY2tzLmFwcHJvdmUgcmVnaXN0cnkuYWRtaW4gdGltZWxpbmU6cmVhZCB0aW1lbGluZTp3cml0ZSB0cnVzdDpyZWFkIHRydXN0OndyaXRlIHRydXN0OmFkbWluIHNpZ25lcjpyZWFkIHNpZ25lcjpzaWduIHNpZ25lcjpyb3RhdGUgc2lnbmVyOmFkbWluIiwianRpIjoiOTUyYjJiZWQtYTFhZS00YmZjLTg5MmEtNjI3YmUwZmYxYWY2Iiwic3ViIjoiNTdlMjMzNjQyODc0NDdkNmFlZDMxY2EzZjYxMTVlZTgiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJhZG1pbiIsIm5hbWUiOiJhZG1pbiIsInJvbGUiOiJhZG1pbiIsInN0ZWxsYW9wczp0ZW5hbnQiOiJkZW1vLXByb2QiLCJhdXRoX3RpbWUiOjE3NzYxOTQxNDIsIm9pX3Byc3QiOiJzdGVsbGEtb3BzLXVpIiwiY2xpZW50X2lkIjoic3RlbGxhLW9wcy11aSJ9.VgYzGE_vlguWq8q7wNQ9Ce1bAcP3D6tmNnOax0locl8MYep4GeFWl904Cj6LD0hSXOk4ekOdB1hLOH2uqUBq3jxP8P_R0s_dCc7fSrXwwER4t0DNfXLnXZYVJNs_kWOLCrBeJYlLqDloxLsTxEVYaPkXfVODzfY-qR9Gj0dRunbn6XgNyaBgVnBmxwl7akhoN99rRRnEpBfKCG1yLWONJ51MiTJUwOKfZuKrpiVHzcojt6dzIDS6ipJF6zJ9zx9AI90DafSMro0NBxbmtrYxbLtXNdUabaP9UYOVGLco1u1UNzcyKQfBj_yfl05jQR874ZYyYhBkof-t-kJfSl6qxQ\",\"tokenType\":\"Bearer\",\"refreshToken\":\"eyJhbGciOiJSU0EtT0FFUCIsImVuYyI6IkEyNTZDQkMtSFM1MTIiLCJraWQiOiIwV0lMWkRTT0RETVJLNk42VlRfN09KWlgwVzhDQVI4VU1ZWTI5R0tBIiwidHlwIjoib2lfcmVmdCtqd3QiLCJjdHkiOiJKV1QifQ.CUVhX7QqhnpRg4kA9Sl96lgK4J2McDdb9VIS6iJWZf5L4howDg570sInxyTgIXA7GxaT4LeH2-IUXMzkGO3Nw2BmadavacSljwc-QEigHj1BECo3hZQ-jdPRgqAIzP1nXu62wbdLGgd9Yd_7J1XEkXnV5zeJUXv9kTYaqiSGm1BmeEpozDW61SMDNHCYjDFZ9xvdFMfvd41RrKm55dD27aB1AfFarbJtxwXCAqH8qQwrXIIqzGUVU46FkJqcNup9pTst_-XsEgZiGDT0Wy9vgSWZh4tnQpg7fjDQQc2Tm0EI4fg1q7oQdSFc2HoXt2MULonaVsas5p50Rg0xIhUZfw.F5IiYjPwrfrBj3RntkGy9w.8l5oc0CPoXpcFY1QDfIiC8fAzYxUIcmsQxCX1CAiw9ItzLkQYLsweNpLNil6Xr2QMou8eraKA2lMuR-3ZZa56mWQwjr6KgF2zttn6HwA0bExEMHza8u4_KLoKQyzqnUNdNSH55pP6hLerVXDR53x_weST_ppkYUJx-iDtwdlMsm4dpQsPZlCecXMF6H5TjRUv7oudrYJf-hBt-SKjykHe61Wq_nFBdaqeHxB0nDEMWEgOqoYjWXangPJSN4LZOR6zuZ0nFUoFqMCkok7aMpJv-LI2_1r-1LTNumQoMIj9j0VSobOqeNuUvb9FFS7l08SqrX9aTweqU10VM0fiD9qU88t-RoIxMBMjahQ_Ms6CwMVdvjFBeu_gcxFWUHMPcClvrT5cnciVQsyrBWA6TwvP5oH4e5DsCd9IqS6hqlVnTK5AQZdXaZJOY5UK0zsM0Avesc30pikRutDDqxziUx2Jkl9_hP3H-PKdBmB26IHEY2AO80yWybmkTTEc6JzXg8U3wFnHjXZw2Q8b0TB1nIvvPCII-EMILU2WAuCy-B3Pk7t66RUfmgHi7p1dwJHsS-8QsQQHYDtPfpUvUdkHNsgcjZ7mHY0_ExYlA_PviE6LQQmcXErSLZRBrCMZ3jb_DqXuEnVPqFDT5sEPb65kjoHtWWyFhYi3jLvpGWK0xNwAcsI3qXw4oUuV3Z-o_dgxoipbulEhcpu6ydxFFw7asz1sMP6HoDEQb-oVPlc-0hLww3gyf8Em-aXIfwUyoAmREeDpX1Hn-5_0QuY39y-0WnLQlHLWEyGLSKtz-ZguBpZF9MQLTTOzqKzyWY2flBEBbhivOLNFDiEz8yUBXafqoeTy8gV-PRpnhL5buKkOHHl8CJJ1wqdsMIzZNZkNDTHtgJd-Z3bv92lScoSBHL0Y5JJ_8mRVaru-byNGXMz7au5UpZA0k_sju0VomI6d7Y0IgIQvpASwJY-GQTHaIOpPi1eNwuvxXRKBJ7ZHAM-lojaEC0-0Wz1xVH1RlkBZOYz6S4dyYDBabqfhV-mqHJY-7EeDH12JEcULBu1W2j0Eej3mkNWfiq7xXGBkd8paL8vHOEiD9kcKEt7aoKZSONPmprgZVE4qIV4bFapCpYdyOmQsmXN5eEOFD8dKwrt_MgmvAo6_tsryObj5viLDN2-nxpIGjnUHmhLuMddGEMJAdj2tq4LmXJnVOdl5lEaMwei-pg3tV1RvLmlvt8DpdAYSHiqTqlpkHlZEgZnpARL-ttv4KmgYZH8A7DCRyECdM3-v1ftRhqPXfJc9qHJayqSTc3bHA3z5ObtWFltju35BY48sna8jObyfD_yQ83CvRD0sClbIsJW1c3xutX5RT8KT2rTI-vWjIcDZQ685K_QBWhRKbG_gyMX-cRzPJk-nFsK9e2CSMaqP4XMWgbUYvn5DEA_HSC8imI8akljoYm1Wk0ZOYcsd0pcyNeWsnXvJO2cUb_SLt3hedSI5g7Cq8SyQtQaJ3Blxe6W0RdCdOWwCb2e92ZgLuJdMVBOLQ3EeEWTUlWyL3DSfXRLccIU6nK0fQXe954_Cm-syscEFj2lidPcuupY7VgLzf315ECQU4RyJCTf-ULPTbpRrlFkcTtCx1jv_Ep3ItR9WP_UtYr50MsSnjovu0zxzwpPvb50YVVAQPcylrVV4ToCnMwEZLpjm92VOYjRsO42MbwmioLZ8XzWYw1vAq1RnyXwrIg6M9zeZOLx8vWfVvY8WNLEditJhpe-l8fivwb11V8mDvmLF-YJuozMhxpKKxmd04QMOQyt29J0FD-CKTWsjBlVTgN8Cj-mFVepXjSLb9dtPzt3e7SLGc8pGFgEXVlDIhRksyPnydZHbyRWfl-wOFUutxkAf3kEHgwQ6--NX6Fp5fsLsn-8bnHSSLWpkdBnWJ94KZf4-KZ6u-or1yyNNf-axVcTuBaDzXgW3kC2yAtgQtD04CU1am4EegjfrVnpcFsmBxkIeqzfMVO-zQx7a51j6V_7vEe1LGgUzl1ly4O3pLuuVlFflQikIuq0__YO2pOzZKH_mj918BHVLEEshbPxM14TnVhM97qxciM93z-DMflskXYmTZMdkjkvTCuBq1Z1wVdpOiHRR_vxfVrPcElC9iUm1cVPzPH1o13XjZ4Lvsfd3cDBXvJZtzzfcksPx9-Bb4iOlb2QfUBPrAKg69iLuwdA6ZKWzm-Q-JhgjXIdQqAQlJW9piKTrI6U4OgFqxVqdHf3TXBO57CZB3YFJOVQzk4Z-UHuxlYnFEYZl1C0qjiEcxKQlm1QVvWNc-dv2hUjnCjZtlCeamvbUwIHcemfN5wSh_WIn69JB0-HH0JyIptuTNxsVy1CnrNnJ3pHKPyW1ZtETaJnBxJHg9XKhhsoW1LMBlkJVrHslck1x_triEwK34iV5VDqO4y35TP0qqwtu_7CBLux14asw3Y0twWDFwFQW_3xv-skJoLx7iI4bgELYgY7BVRYp5NvqAvxx1fmNoIyjkMATzS1HcTc9gwmRfTO2YeBqz6sh0ejV6-MSIY7vQubPJRFar4K38ltFzszu9DGvPkQKwkQBZDL0jTHJQvyJL3HpK7d3GeeNT9aUVUUeebu6KSeGXyQYDqn78tXknDBqm9H-HW7cu1Q7yJuAsAmYrVGHroR5rhMt1DYP8cNb6dTPxFBtc_RlqL7R0Ah43nFUlqpeS1NgQCVvRUI6os0FpXUhIfYnC6wBk_9JcNRxuG9p-gmGy3oddH59OYyWwOS3u05UyJqBNECao4LwKtoHd8TFlIy4KeqaEWJKNYrAGw6v7cTRI8GFkauBV8zp4O2iRi2Cw0i4j_sY_dVU_cpUSryp3P6qB7sLWe9qaZVTu0QPZMiRBhP1l6pljkrg4KtmxpeYyXEecVYIxgTZTO_PTwgP6bjMzOcCTjdDYI-NzBqg1B3XsPyIL2lsF7YS-MaFvwh1-q4rOdTCWLvX-_Pqls2JBoKXfzRW64gH9IZPQPsto1g83FCDJO5pUJX7bZsp3p0P9q8z5H2OCIYrQm5LjJDs7oVb65k2_7NgAIxo_bYC8RYEwDKuf0x3VEamapqNIZH8JKmgMCkX8nifcvaotcTdI4juthVnAjh6qwDiRhJJnH3H-oPjPIfozkxhXzOVg7FG3qrFS0yjsvtU8OgFB6_KzAQYgnQVmEdhRcAQEMi7owTgIXccUxJy6ACxi0qQdR_nGo-8bQu2pVBNGOAbYsQ-j82lbshzT-PeCmJXGU7qdZKZNXpepRL-eFPTCJOcSUYbY4pxSJDW5mdBd2Fsg1YOmhVt72H1TEIubVZ80FtN5CwlAAfw4EclVPtEga4dB67Ru0qd5V8uTvy5XyoKe3n8twMYPKwX7NfT5LDdxjjIg7tbPIXrI5EbvqdC3g6TF8NvP32xjmR3V9Ko2EjDTsr_-3A2ONiYCaZJj9q2Zq1sEDKBL6yIAYLzPLLt4NWGkcUClb5CwXLZMulBZKUuribokjVQOCKMD8jbLUmpluc_UjzCw-4Gj6rx_HvlwnKuHCga91q044aE1a1-zMyUcZmq3eFetUmBp5_nU1lNMNXsxKkxy7YEMMdoj5NlMmM3Acbru0JEzIlpvftP4z2TKG1hP-kwzZlAe477UBxoU9VopJ6Am9BBiS0znwGDxBPVgrnTaI4YL7H9Obl0ZhOvDHl4lHxDOs2MwBHNGj2EqBgTQSfhUhXATmIJcsn5UAhuvdRHFcDV6mDvTYMC1f-PhlIKF_VL9jZwOs4AI-azjpvvxQik_gEbqzwarLLS9mL_ufv1eGZxBUDQGWGyfSNZEy9YVNyO4jVt3PTb0jMEseA1sbWJ6gntvgCsK2Hoy7tBvePvDbiARVlk6c3RXkMD5qDX5Oe1p5bkEOHhTuRTbBJnXmCUuhyrAU3iw-F1zP5ekHjTXfTOpYAwuwaNdHIYXMDbhNdg-5F6QYlwHDgmAmXl5YSfxAU-x9U3q32XgpJB3VpWidzu4LylG5F-S5pM2Rlmkn1LpyAvSD4ooHLO7Eo3X7y0_lR_3LIjossCkakNCsQ7zo3o77XNXvarH41g3IyXK_CeYdvStC0mt0_m4TBXF7xt_uOWi4jJ3tZ_IM1ZxcMss9o4eExEwi_OsBqEzpOABBmNGYt6JgdBzb3yYgv488CCp5dnBj3gSOtGdygzQU-Qg83UlgcuOIzksqCg6TB-n5SCQ6Bq0NUPTyY9ukPkLMmQPiM8amdu0_Zi4mZoehS0asH0ddFWvQJIWK8KA6ZtcpkUCO_SmI5HfWjOU8tx--N_0X2Rbc3gAWq6xYbgEWnptQptdsvc_zFmotNTWWhjLZn62vE7na1E3M6fC54e_FXKozN8HR1b9Gf6-mc-G7vFmvgHZ5A0t1L8a4_JjOIkWIyc7rZauGgOcR74dRYQ3MsF-rjwxAu-DJd0bogNyUdV2bjwuqYv5-IZMq1w-yhE5dblmxIWYOY9LBAXwabQ9HX-ULmOaNTcA5i5OEJg52aNmGJtwdYe7xIIyGjqyirk8Z9dowHnu31OoLx7AY0R93Kf9RWpsuFPZXSWliRCw2wWQcKQqS8yMSa3uoh_qxGdJLDV-J8QLIXg9zq5gP4EV9FAvCLQLpx15xnis0nDHaRbdd6xVJWlnrc-l5t7F1o33o-hGv-pmrG3zHGdWHy7lm0CkBSGit8lycV4-kZk_hRyHFlu8JmjBgaR-xWIor9244tT_tCgwkfX9_438lV2Q5jx85PD_-_HupCS3xQIb686vQyByVQGD2B05MFctJ-nA.uj_QtLknOqZK-Cn_HCW9owO9YkBNEz5HRbHd1R9lnSc\",\"scope\":\"openid profile email offline_access ui.read ui.admin ui.preferences.read ui.preferences.write authority:tenants.read authority:tenants.write authority:users.read authority:users.write authority:roles.read authority:roles.write authority:clients.read authority:clients.write authority:tokens.read authority:tokens.revoke authority:branding.read authority:branding.write authority.audit.read graph:read sbom:read scanner:read policy:read policy:simulate policy:author policy:review policy:approve policy:run policy:activate policy:audit policy:edit policy:operate policy:publish airgap:seal airgap:status:read orch:read orch:operate orch:quota analytics.read advisory:read advisory-ai:view advisory-ai:operate vex:read vexhub:read exceptions:read exceptions:approve aoc:verify findings:read release:read release:write release:publish scheduler:read scheduler:operate notify.viewer notify.operator notify.admin notify.escalate evidence:read export.viewer export.operator export.admin vuln:view vuln:investigate vuln:operate vuln:audit platform.context.read platform.context.write doctor:run doctor:admin ops.health integration:read integration:write integration:operate packs.read packs.write packs.run packs.approve registry.admin timeline:read timeline:write trust:read trust:write trust:admin signer:read signer:sign signer:rotate signer:admin\",\"expiresAtEpochMs\":1776195942365},\"identity\":{\"subject\":\"57e23364287447d6aed31ca3f6115ee8\",\"name\":\"admin\",\"roles\":[],\"idToken\":\"eyJhbGciOiJSUzI1NiIsImtpZCI6IlRDNktEWUFZTFNETzdMWkhfNTBNTjJTU1pOQl9JUEhEWUNRRElMUEEiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2F1dGhvcml0eS5zdGVsbGEtb3BzLmxvY2FsLyIsImV4cCI6MTc3NjE5NzQ0MiwiaWF0IjoxNzc2MTk0MTQyLCJhdWQiOiJzdGVsbGEtb3BzLXVpIiwic3ViIjoiNTdlMjMzNjQyODc0NDdkNmFlZDMxY2EzZjYxMTVlZTgiLCJuYW1lIjoiYWRtaW4iLCJhenAiOiJzdGVsbGEtb3BzLXVpIiwibm9uY2UiOiJiZmZhNmMyZC01Y2JmLTRiNDktYTY2Yy00YWZlODYxZWMxZTEiLCJhdF9oYXNoIjoibFBHM0lEMjd5UkdiUmRONTdEaWxDZyJ9.VF_FV8X1cKvzYI9er4n7tbe38xWwQq34uqY7Y_CtJRgs0D7JYrZBAXiXxPlODszA8vpqdHC0yzs-Txr8QL0KZIl4Mqaw0eaSTG9q5J-HGKUdtB8Q13o-06V9xhv6WmxG90rkqEy_a3e8zKC3_wpgPQ5-6baVsnoqr3vhsRmhVxcgGhF4XieVHtJr92Cxbu3kYTKKDygiCSxL6DSczrX1XGcn0OcQBzL7S8UyKj-7RpvWGPycS1MSJ9tC5atQGB3ndo6WwJotypC0J3KBzk0hwDBPb533XsiT3wmKGuR9PSKd1eozmo5okDAmRnrvjnxPLU5GIrdvEwoaX9kBwXgiRQ\"},\"dpopKeyThumbprint\":\"NJvn0NmVWUBkUIXGNHmKs8y4Sa8dZOo22YAXqjXlN3Y\",\"issuedAtEpochMs\":1776194142366,\"tenantId\":\"demo-prod\",\"scopes\":[\"advisory-ai:operate\",\"advisory-ai:view\",\"advisory:read\",\"airgap:seal\",\"airgap:status:read\",\"analytics.read\",\"aoc:verify\",\"authority.audit.read\",\"authority:branding.read\",\"authority:branding.write\",\"authority:clients.read\",\"authority:clients.write\",\"authority:roles.read\",\"authority:roles.write\",\"authority:tenants.read\",\"authority:tenants.write\",\"authority:tokens.read\",\"authority:tokens.revoke\",\"authority:users.read\",\"authority:users.write\",\"doctor:admin\",\"doctor:run\",\"email\",\"evidence:read\",\"exceptions:approve\",\"exceptions:read\",\"export.admin\",\"export.operator\",\"export.viewer\",\"findings:read\",\"graph:read\",\"integration:operate\",\"integration:read\",\"integration:write\",\"notify.admin\",\"notify.escalate\",\"notify.operator\",\"notify.viewer\",\"offline_access\",\"openid\",\"ops.health\",\"orch:operate\",\"orch:quota\",\"orch:read\",\"packs.approve\",\"packs.read\",\"packs.run\",\"packs.write\",\"platform.context.read\",\"platform.context.write\",\"policy:activate\",\"policy:approve\",\"policy:audit\",\"policy:author\",\"policy:edit\",\"policy:operate\",\"policy:publish\",\"policy:read\",\"policy:review\",\"policy:run\",\"policy:simulate\",\"profile\",\"registry.admin\",\"release:publish\",\"release:read\",\"release:write\",\"sbom:read\",\"scanner:read\",\"scheduler:operate\",\"scheduler:read\",\"signer:admin\",\"signer:read\",\"signer:rotate\",\"signer:sign\",\"timeline:read\",\"timeline:write\",\"trust:admin\",\"trust:read\",\"trust:write\",\"ui.admin\",\"ui.preferences.read\",\"ui.preferences.write\",\"ui.read\",\"vex:read\",\"vexhub:read\",\"vuln:audit\",\"vuln:investigate\",\"vuln:operate\",\"vuln:view\"],\"audiences\":[],\"authenticationTimeEpochMs\":1776194142000,\"freshAuthActive\":false,\"freshAuthExpiresAtEpochMs\":null}" + "{\"tokens\":{\"accessToken\":\"eyJhbGciOiJSUzI1NiIsImtpZCI6Ikg4TkdITjJESUNPUlE5QUpGTUlFRzlXWVdTVVlSUUw0LVJXR0E5QlEiLCJ0eXAiOiJhdCtqd3QifQ.eyJpc3MiOiJodHRwczovL2F1dGhvcml0eS5zdGVsbGEtb3BzLmxvY2FsLyIsImV4cCI6MTc3NjI0MzIzNiwiaWF0IjoxNzc2MjQxNDM2LCJzY29wZSI6Im9wZW5pZCBwcm9maWxlIGVtYWlsIG9mZmxpbmVfYWNjZXNzIHVpLnJlYWQgdWkuYWRtaW4gdWkucHJlZmVyZW5jZXMucmVhZCB1aS5wcmVmZXJlbmNlcy53cml0ZSBhdXRob3JpdHk6dGVuYW50cy5yZWFkIGF1dGhvcml0eTp0ZW5hbnRzLndyaXRlIGF1dGhvcml0eTp1c2Vycy5yZWFkIGF1dGhvcml0eTp1c2Vycy53cml0ZSBhdXRob3JpdHk6cm9sZXMucmVhZCBhdXRob3JpdHk6cm9sZXMud3JpdGUgYXV0aG9yaXR5OmNsaWVudHMucmVhZCBhdXRob3JpdHk6Y2xpZW50cy53cml0ZSBhdXRob3JpdHk6dG9rZW5zLnJlYWQgYXV0aG9yaXR5OnRva2Vucy5yZXZva2UgYXV0aG9yaXR5OmJyYW5kaW5nLnJlYWQgYXV0aG9yaXR5OmJyYW5kaW5nLndyaXRlIGF1dGhvcml0eS5hdWRpdC5yZWFkIGdyYXBoOnJlYWQgc2JvbTpyZWFkIHNjYW5uZXI6cmVhZCBwb2xpY3k6cmVhZCBwb2xpY3k6c2ltdWxhdGUgcG9saWN5OmF1dGhvciBwb2xpY3k6cmV2aWV3IHBvbGljeTphcHByb3ZlIHBvbGljeTpydW4gcG9saWN5OmFjdGl2YXRlIHBvbGljeTphdWRpdCBwb2xpY3k6ZWRpdCBwb2xpY3k6b3BlcmF0ZSBwb2xpY3k6cHVibGlzaCBhaXJnYXA6c2VhbCBhaXJnYXA6c3RhdHVzOnJlYWQgb3JjaDpyZWFkIG9yY2g6b3BlcmF0ZSBvcmNoOnF1b3RhIGFuYWx5dGljcy5yZWFkIGFkdmlzb3J5OnJlYWQgYWR2aXNvcnktYWk6dmlldyBhZHZpc29yeS1haTpvcGVyYXRlIHZleDpyZWFkIHZleGh1YjpyZWFkIGV4Y2VwdGlvbnM6cmVhZCBleGNlcHRpb25zOmFwcHJvdmUgYW9jOnZlcmlmeSBmaW5kaW5nczpyZWFkIHJlbGVhc2U6cmVhZCByZWxlYXNlOndyaXRlIHJlbGVhc2U6cHVibGlzaCBzY2hlZHVsZXI6cmVhZCBzY2hlZHVsZXI6b3BlcmF0ZSBub3RpZnkudmlld2VyIG5vdGlmeS5vcGVyYXRvciBub3RpZnkuYWRtaW4gbm90aWZ5LmVzY2FsYXRlIGV2aWRlbmNlOnJlYWQgZXhwb3J0LnZpZXdlciBleHBvcnQub3BlcmF0b3IgZXhwb3J0LmFkbWluIHZ1bG46dmlldyB2dWxuOmludmVzdGlnYXRlIHZ1bG46b3BlcmF0ZSB2dWxuOmF1ZGl0IHBsYXRmb3JtLmNvbnRleHQucmVhZCBwbGF0Zm9ybS5jb250ZXh0LndyaXRlIGRvY3RvcjpydW4gZG9jdG9yOmFkbWluIG9wcy5oZWFsdGggaW50ZWdyYXRpb246cmVhZCBpbnRlZ3JhdGlvbjp3cml0ZSBpbnRlZ3JhdGlvbjpvcGVyYXRlIHBhY2tzLnJlYWQgcGFja3Mud3JpdGUgcGFja3MucnVuIHBhY2tzLmFwcHJvdmUgcmVnaXN0cnkuYWRtaW4gdGltZWxpbmU6cmVhZCB0aW1lbGluZTp3cml0ZSB0cnVzdDpyZWFkIHRydXN0OndyaXRlIHRydXN0OmFkbWluIHNpZ25lcjpyZWFkIHNpZ25lcjpzaWduIHNpZ25lcjpyb3RhdGUgc2lnbmVyOmFkbWluIiwianRpIjoiZmZlZGY3MWQtYWY1MC00NWQ5LTlhMzQtMmNiYTE4ZTVmMWQyIiwic3ViIjoiMzRlNjllNDdkMzE2NDdiODkzMDc0NDk0NGYyZmZmNzAiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJhZG1pbiIsIm5hbWUiOiJhZG1pbiIsInJvbGUiOiJhZG1pbiIsInN0ZWxsYW9wczp0ZW5hbnQiOiJkZW1vLXByb2QiLCJhdXRoX3RpbWUiOjE3NzYyNDE0MzUsIm9pX3Byc3QiOiJzdGVsbGEtb3BzLXVpIiwiY2xpZW50X2lkIjoic3RlbGxhLW9wcy11aSJ9.BAPTbUxstvf4uSVv4bcKBCxCWam0MHZ8KxaaqIygmYnTng7xnoN6x2ub6s0EjAbQRY7M67gP_ESywOOMkklH_iIXEixCEQLueAIyvbFmo21ssmDY2SclXtInuXsIosZfKpqraYcvn7nO9DdqDa44hZ6OVbFJTkrGjJCjazhApR5VD5hiAK53_swYhVPuPXCXNU38aExVPPazAu4C4QuDBJuy5Rp4tne92Uzo60tad-ojOMGT-7ILkDWqzp_SPRSuvbQuyzQEjBGGljSeoUqUnRg7Q4gj1u6XwyKMhTvbA6n6KtcgsPGLK6_AzspFqxOuMicjgcvY93pcnnm62b8EAg\",\"tokenType\":\"Bearer\",\"refreshToken\":\"eyJhbGciOiJSU0EtT0FFUCIsImVuYyI6IkEyNTZDQkMtSFM1MTIiLCJraWQiOiIxRVlZNFdJNFJfWE9HSDZVRFRPTFBUV0JQSE1QUlZaWURBS0FaRjcwIiwidHlwIjoib2lfcmVmdCtqd3QiLCJjdHkiOiJKV1QifQ.OjzFbXMVmR9utsZHxNNBb7lKfzW1tuD2V7uE6_WIo7viJTqvK5Pc70225amfOn_ppciNbsQtdWqtULoybzWVR-dOKJ7xN8vDcmhVJCvlHOTdVVZIw9fkdRDpsUXkabUFWC8hjpAd1ol-x5Y56EpB4LHmEBYRRV2g1g9lBMcnK8ARBoLwgrsK1xsR_Vueg9bvbcnbQdDoi_tgV2jORtPQ3WUyzNECt8WY0cMnU7AP43EcU5agg4r5SLJ4qYCoGRrEasAaH3kIEQaZLRqIlCNF1x-77vvMdYVDpqkLLgQF2bg2EM32_DIyccxSzdKFqyzTWieOfz8nnR_cgdpWITOjug.-ZgbI6MR19kz4G8ueQfOgg.w3F0J2tK722wQD6NcNcIrOXtj4ZkmYNy-mf-aK08l_TBUpHwqTByrAz3XfmD7SXtO4DqC0H-BdjxeBGbnnMxTjNG5BwtGN0wNZbYPd7yBm8eJy7ay6VhwpRBHDUm0UBUL-Onk0mcgD3vi_POkeBv54zFFJBqcijN3ia70Eim19HgxLkFop5LYebbWkX4juRRz6fI5KLglBrQnF6FTPaz3gq65PUbyAW1qQpdv1fw3n6S0YjkQzV_96sBsx7iLexfT16AwRRfmPiUOTpPljcfDtSHXKK4n0y4TVHdDb5FoOmf8WuloMAVPUzVjVuwJqZk169I8Yx-eyP62yWJYKNNaPE0-YQ9b7XXub2U3StSSMagPTNM8RG3Yxe2pnQDIoW5v81Q6Qdek7xktmooL8WNnFMBd4udNOsMCeGk98QTuXHXVVKq4zNuVuBgFoCWAWMBGGNVZXXtiELgwH3lE9IoUlbdMsGUBAQ-vcj_QFlzAGGonAp2YUMX3pY-bnqfzhp0cWMjBJxUK8-iRWmmw-1cMKtNSEqlg21bEDUQBFDJTMJENC31kaaqCfny8wNu90Oi9faTzx_bjAtFiH83XB1c-J0eTa5BBdWbd7Mu7U-hryne0RWK1wCkf97vo9aB0xclHxnQA2v-gtp-rtpb8QkvYS91D9YvpHyuPEhkQK3liyKRXvQND-6tMwDrcFoj9_7XyukAjw1WEKnjQG7u9TnH81ejB0nHVDOhwWGMxMIA8EO0_ql9MfGvIN3Cy_O82MlIthSn5-V7aakV_dyZYkvEcKZ0UBrSxCwQSKAS9cqmew0ud3fzzp8cAqwNMDHvkECw_YN8LBJN7FfpPXxnOsKveySv-IISsOxae9A5i9BPYh0OJ0jxKxI2XmnOqspdGZu-5D5JVZDBrqlDM4b84SECSuLnDkejV7_N1Cwt0YogU7lckvaFCvmuQ0xmhdWBOvlXtyEgGjr7HpviX_64utAR5ItsXu2QK0tVq_mmXiL9nNqsPqO13Qy2GJhtg_5GLXVV7GFztNVzaxu1Yu8tSEuhMWJ2aKx5xkaY5jr4pzW9gkgx-TQBQrkwSvKm2NVGxX74StxQwo-3vM0V8uUhlGxOBH2WNC8SbsPXdwsb3yad2c-0itweIm9znnGg7ePxl3NQFLVaBQiW1wiqJta5iSb970fTJ560wsNt7ooBDw2Ux5lGeEGNJC7F4X6KjuvZsONSJRkyguiduDVDytbN_PAvIGPPFsCNzdY3K9rw-fd3vABygfYWxhUacWTbHq-jFfYHijBJPQ4J7uzh-gr2O5dYODCg8uo3h1Ka-p9tXX1D_uLsfjHc62Sp3LaFZ34tFWzq3cZKKllmDWgpECgySFXLKHKRAP1GCahWkgyf3PW1j4liK3Xxaqq4W1-UokwOLyacWD5Gw54JgY2o43BpQZuK3pRjSaoyB2PErrNrzsdw9f_gHSa8-z7xvoQSjegyIjAB9UN0-h7pb-cozsYsvhsFm_4E7d6aCtmn80QQl5w7_8MyuuVngij65B8jRXxlUog-lQGSm-q3ZyMrWK8puR7KpokgfUl1qwOM1N-5WxDGHQHFeD2Hm-9mSmQfv3coF1rHmh65fk3kzubaMZoPEXFTtEwQtmhRVAS5F4JFniT_hX3xuthylEtW12b20EkLWfnSt_bH3tL0Ig48I4Z7P8w_v7kQNS8qjiAMaOstE48fOfc36y5Pk89uyDC_Zji2exOugPJ8E_YeaEhzhFeMHxwEq2JGWAzXwhma1wZ8BkNNWyMOLNhd5S0--OqnhArs09RCEpzpoWSNDa3aInE4QjNcEdQsMFyyCNa_1Pk9qXM8DLDPueh_BS7EhVhWNOoYLmBSZKFZHksB6LQngbWr9CS4RHedCw1zi5KriZKDSkLGwFrpBeXs2d2UGPqO-Wyz7ea6wtZ4MLWXpXJASlr0OYEEvR48DphIs--UPvTRf8pyg0O5ZBk45AwEl7twN85IYwlX01swbVe9V8Eur1hJBCKPUYn9WBs3SVP5wYURnO8ukOt2UIQCPzXG1qGTmGk88Df-TlsunUmVsHnPChzGxyew1FCwV4R1YDuc0BBd3XH1mlv2656lQ01Fht9l-gt06a2RwIJTZL4y1Vh3DYcvKWNBw-LLGjo7rOL8u8bADx_-cscu-Rs_n9PKFzuQfu5VZsRpMiIIJ8qnEqaHX5Mcy70gbRYH91mDXEdpAYykr4olwB1sG-yP5H10A7nKExx24YoToZbxgEyZuV7HZ5xrcreSIQ-uFH2S6I7nkYhm_3QshyHP1kn4UrUemrcVpAa97x8IUT6LSjJEQ6i6vH0akluHMFjPcf7o1UndrVUGOlux-kd3i7LD5Qp4x1fB3NTaOoPvsZGuBdTxLh5nxO55FU2afldTaTYVhgm9V3yrJ16p2wWj8cR8XbmGk-0ociK0FLjVgSVBK9oPX5OhMkYQYI0JQgdLfM_1PPvxBkJPU9Bv7OuVc3oFm9Vkf3CDgl2kNh9HN7Pi4eUDydqgwcO_WQqpLkbHV-V3IAMyxJRyvLBvNDkOLmyDzbg5CCUwVZuKugASUoud8qEqn-jupPGXxqzpUi7cBrgxM3CfULa3idzknLszw8K9utCjsazoyewSiWUN7V7L6b18Rp4gLMZ9M9NBRMHNa2Uf9htGb-HK8L0xNKlab6EYY0iNMRV00RLbHlAbgKntj8pfD0Ox5y5AgqFNxJ1m2dWMoo_fsXiYNvAYN9DBLhewds1SsOQ4X7Q-7FCJKIceeiIOUbbpoCqJnxg_ZF-eukpA5QicuZv60qvbp-QBFt2x22TBIFtphJB-uNudY2_inRyt3VYZJGr-juUgxaMDTJ8WDiLyVqO_Dnd-vvU_Z0DF4xWiuVi5LVuYPO3etlT9ibfqJKne6Wf8bO2zQ7-A3KMgB1VY_fZmG0-13YHunTqGhIhLpkAqJJgcb8i3CQK0csGADE-_pLl7BwfbAq1WKAVtmU5QT-uAfvn1mjAv4Q6htO4wSzCW41Ij_i_VifLKZ8S_cZADmWxxBtWvwxgBfxIeoxY26zk0E63j6ZhmqVqM8bt-IRlm5Jfc1D3wWhZ9Tp-BGT4qZSmP2nVzyvyc8bE0wF2ANIF-Ks0Dh8KW9XRd_bma0BupJAHooAh5oFHhvr8qThWYGRdY9E4Jk6XkTElVe9X8FpimkkEGyDMltmCScbYDR3QGsHURbkBHYcQ1u6nb87PravJrBCd9Lw62P0ImdSOzHKmgM2xDkh7M0taCG_7kM5sJDplhJD14Oiz3CxlOTwci4TRr9kICpkdp0kr10xvQi_x_xTuxUynlKHl4OvyQ7RksdB39w1be4NRo4wYfbzAjGdK_KUwdQSJwyAK4wh6SKFnc8TfaVyqp4fy_drb_TAxH7nyHkeS0m9FRZOjaYmXNko0dX8_djS7hVdxcdjLpX50r9duN2kJ35cMbszsRyhnXr4JuIdVziEvSRs23jKgDwKXFld7uvV6QPTa6eEctpJXTlUSNZMhJxEfT-pO6Dbmu5oIYzus5ogQRqlohHyVOOndFhhR2T4MgxVczLc7Nu_M955mnNdGn6Dwz_kClAMOxCkLB6HuGF5pjoTb4UJcL93LP0Hw7FiKoaBectNrQPEyk-c2ycY2rFuoyuvNYdBBo-FPnTpP2O89mjkhL8-9RcFmKxN7UHniK2WDdu0uR0y3icm6zH8ABAZsduy8mhyDqx2YNQjhy5tfmoxkAIVUsL9YAt1o45wenfI1dW_p4bnxxEGVl3mUbRBswN8wc3CuwsxcWRNRAVZWC2WADLqgMUkInXDyLcijfoJ1LNxCo_6og8UIMKb7ix6uao4VSMnYO9mNE5SCq5jalPkjwhXfJiJL9RdRhB5rd5t3Dw7OrJwvcSY1EwVMT7z-l-6Zv-q7Q73NlzHU6Spx1AwrKx3fAIEX_LRULI-15Zsp4QcFc4qtAkzw07CTGzcBPQD88zHq3VcL1zVzToFO4f-exWsg0QdXwdipI3EtV3M-DyKXvHYNBKcpeIG8h95_EfcXfWXxAszyGfCDdGY_bxOzi9seh0A5LP0b5ZJa3lwcFWYtMEGL0G3yNUse-Aoqr0mZtdslMiHk7LO__E7fb3we82QwA316JSf7VRhnqSZIo-EuvKF0F2J2wmWea99bbD6wZPvJ6DD5YPfnTZ6ApXiJhnt8M5FCbjqefT3mwMhiMEVVFwKqqR8nH73NJtfz_lnfrWKRJ14_MohDCXFCluFWmSWyJ19e_co7of-_H7BrYBog9jmuJCFw4a2dUcE1tffnDI-sbsP8YdwOZ-RX6cEmllnCyhRFiC8UXACRmo6Jnszuz4UgXnz_DzmNF_mxzLg2TJzF8GG-63C25xE-lA3iYABoMQiPus79ki8gqxx_JW1h2yph1sghDHyWnBYKM-Ev9iDLXBfIhW2J8DYEDCdSqQbw190-sQIN2D0QQI-CP1O3MXze-ZZ8sZD4BU9rjnMJzmP7P_HG7pH-UqSbb2fOG80tZksYicLK0FVx0hIzAiB57ZIKqTOIQ08LhgF98RRXEZ7M5oz4P4dg4vaWHiM7lD92lXraJQ1KZcgBCGDyCHQWPrBzmGi9TJKrgkQvJwYPaxT7AazSkWsMDE9tWHX0LN_3BS48-ntxWmzBP8ocYudCZUo7hS0V3AJ0-KS_BYLY5KM-MepF2BYnN_iPn_tfuuCyKho_lw6QeiyrnWK1Yz8IWSoPueJ-ME02YLX3P9KZmN3dOD8zIkbju03v4PxJSL5yLtgHwmjRkYQ.cjOvEX-7aFRdot2RsGMsT7sykvFcQPb73BRcWRYb7us\",\"scope\":\"openid profile email offline_access ui.read ui.admin ui.preferences.read ui.preferences.write authority:tenants.read authority:tenants.write authority:users.read authority:users.write authority:roles.read authority:roles.write authority:clients.read authority:clients.write authority:tokens.read authority:tokens.revoke authority:branding.read authority:branding.write authority.audit.read graph:read sbom:read scanner:read policy:read policy:simulate policy:author policy:review policy:approve policy:run policy:activate policy:audit policy:edit policy:operate policy:publish airgap:seal airgap:status:read orch:read orch:operate orch:quota analytics.read advisory:read advisory-ai:view advisory-ai:operate vex:read vexhub:read exceptions:read exceptions:approve aoc:verify findings:read release:read release:write release:publish scheduler:read scheduler:operate notify.viewer notify.operator notify.admin notify.escalate evidence:read export.viewer export.operator export.admin vuln:view vuln:investigate vuln:operate vuln:audit platform.context.read platform.context.write doctor:run doctor:admin ops.health integration:read integration:write integration:operate packs.read packs.write packs.run packs.approve registry.admin timeline:read timeline:write trust:read trust:write trust:admin signer:read signer:sign signer:rotate signer:admin\",\"expiresAtEpochMs\":1776243236072},\"identity\":{\"subject\":\"34e69e47d31647b8930744944f2fff70\",\"name\":\"admin\",\"roles\":[],\"idToken\":\"eyJhbGciOiJSUzI1NiIsImtpZCI6Ikg4TkdITjJESUNPUlE5QUpGTUlFRzlXWVdTVVlSUUw0LVJXR0E5QlEiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2F1dGhvcml0eS5zdGVsbGEtb3BzLmxvY2FsLyIsImV4cCI6MTc3NjI0NDczNiwiaWF0IjoxNzc2MjQxNDM2LCJhdWQiOiJzdGVsbGEtb3BzLXVpIiwic3ViIjoiMzRlNjllNDdkMzE2NDdiODkzMDc0NDk0NGYyZmZmNzAiLCJuYW1lIjoiYWRtaW4iLCJhenAiOiJzdGVsbGEtb3BzLXVpIiwibm9uY2UiOiIwMWIxY2NhYi1iYmM4LTRjZjQtOWZlOC0zOTMxYWQ3YTJkOWMiLCJhdF9oYXNoIjoiVVRmc3NvaWJkUTFEM29UTFphMnlnZyJ9.ZWgl9L3OfXRvrrRsuHaaMXM-GVyYWjnF0PKI2Z4Q3xaCHJVY4dnvs54bBhjqYYWiaq9naM2KdLOTc3_KcAyiTPkqNbQPmHbxvfOAgYMt6Y1Og3lhcuuK2Lx9ZAIKBTlHK-QwaGANhOJ55oc9-JXsYKZHcQFMn-N61USb1fFz87ETzYfwBncYIDSCiYH3imu4uKrjvtgJ3xq6RTkKoccWuEs3cIyfc2xVC5sIk333tParluN983CyRe6qjMnFq336DzfNB8oGW3qVNuXfZaVyzABdrHyWXrwkTg_6wbPwTFHX1TEFOcszKEWV3SP4Pb8Sp8HuqxoLdMxdrLyQX_E-CQ\"},\"dpopKeyThumbprint\":\"DMsuRsgxj4LVVAKUpzryYlk0KRfhmt92uKKrhB36dmM\",\"issuedAtEpochMs\":1776241436074,\"tenantId\":\"demo-prod\",\"scopes\":[\"advisory-ai:operate\",\"advisory-ai:view\",\"advisory:read\",\"airgap:seal\",\"airgap:status:read\",\"analytics.read\",\"aoc:verify\",\"authority.audit.read\",\"authority:branding.read\",\"authority:branding.write\",\"authority:clients.read\",\"authority:clients.write\",\"authority:roles.read\",\"authority:roles.write\",\"authority:tenants.read\",\"authority:tenants.write\",\"authority:tokens.read\",\"authority:tokens.revoke\",\"authority:users.read\",\"authority:users.write\",\"doctor:admin\",\"doctor:run\",\"email\",\"evidence:read\",\"exceptions:approve\",\"exceptions:read\",\"export.admin\",\"export.operator\",\"export.viewer\",\"findings:read\",\"graph:read\",\"integration:operate\",\"integration:read\",\"integration:write\",\"notify.admin\",\"notify.escalate\",\"notify.operator\",\"notify.viewer\",\"offline_access\",\"openid\",\"ops.health\",\"orch:operate\",\"orch:quota\",\"orch:read\",\"packs.approve\",\"packs.read\",\"packs.run\",\"packs.write\",\"platform.context.read\",\"platform.context.write\",\"policy:activate\",\"policy:approve\",\"policy:audit\",\"policy:author\",\"policy:edit\",\"policy:operate\",\"policy:publish\",\"policy:read\",\"policy:review\",\"policy:run\",\"policy:simulate\",\"profile\",\"registry.admin\",\"release:publish\",\"release:read\",\"release:write\",\"sbom:read\",\"scanner:read\",\"scheduler:operate\",\"scheduler:read\",\"signer:admin\",\"signer:read\",\"signer:rotate\",\"signer:sign\",\"timeline:read\",\"timeline:write\",\"trust:admin\",\"trust:read\",\"trust:write\",\"ui.admin\",\"ui.preferences.read\",\"ui.preferences.write\",\"ui.read\",\"vex:read\",\"vexhub:read\",\"vuln:audit\",\"vuln:investigate\",\"vuln:operate\",\"vuln:view\"],\"audiences\":[],\"authenticationTimeEpochMs\":1776241435000,\"freshAuthActive\":false,\"freshAuthExpiresAtEpochMs\":null}" ], [ "stellaops.helper.preferences", @@ -28,7 +28,7 @@ ], [ "stellaops.auth.session.info", - "{\"subject\":\"57e23364287447d6aed31ca3f6115ee8\",\"expiresAtEpochMs\":1776195942365,\"issuedAtEpochMs\":1776194142366,\"dpopKeyThumbprint\":\"NJvn0NmVWUBkUIXGNHmKs8y4Sa8dZOo22YAXqjXlN3Y\",\"tenantId\":\"demo-prod\"}" + "{\"subject\":\"34e69e47d31647b8930744944f2fff70\",\"expiresAtEpochMs\":1776243236072,\"issuedAtEpochMs\":1776241436074,\"dpopKeyThumbprint\":\"DMsuRsgxj4LVVAKUpzryYlk0KRfhmt92uKKrhB36dmM\",\"tenantId\":\"demo-prod\"}" ], [ "stellaops.sidebar.preferences", @@ -38,7 +38,7 @@ "sessionStorageEntries": [ [ "stellaops.auth.session.full", - "{\"tokens\":{\"accessToken\":\"eyJhbGciOiJSUzI1NiIsImtpZCI6IlRDNktEWUFZTFNETzdMWkhfNTBNTjJTU1pOQl9JUEhEWUNRRElMUEEiLCJ0eXAiOiJhdCtqd3QifQ.eyJpc3MiOiJodHRwczovL2F1dGhvcml0eS5zdGVsbGEtb3BzLmxvY2FsLyIsImV4cCI6MTc3NjE5NTk0MiwiaWF0IjoxNzc2MTk0MTQyLCJzY29wZSI6Im9wZW5pZCBwcm9maWxlIGVtYWlsIG9mZmxpbmVfYWNjZXNzIHVpLnJlYWQgdWkuYWRtaW4gdWkucHJlZmVyZW5jZXMucmVhZCB1aS5wcmVmZXJlbmNlcy53cml0ZSBhdXRob3JpdHk6dGVuYW50cy5yZWFkIGF1dGhvcml0eTp0ZW5hbnRzLndyaXRlIGF1dGhvcml0eTp1c2Vycy5yZWFkIGF1dGhvcml0eTp1c2Vycy53cml0ZSBhdXRob3JpdHk6cm9sZXMucmVhZCBhdXRob3JpdHk6cm9sZXMud3JpdGUgYXV0aG9yaXR5OmNsaWVudHMucmVhZCBhdXRob3JpdHk6Y2xpZW50cy53cml0ZSBhdXRob3JpdHk6dG9rZW5zLnJlYWQgYXV0aG9yaXR5OnRva2Vucy5yZXZva2UgYXV0aG9yaXR5OmJyYW5kaW5nLnJlYWQgYXV0aG9yaXR5OmJyYW5kaW5nLndyaXRlIGF1dGhvcml0eS5hdWRpdC5yZWFkIGdyYXBoOnJlYWQgc2JvbTpyZWFkIHNjYW5uZXI6cmVhZCBwb2xpY3k6cmVhZCBwb2xpY3k6c2ltdWxhdGUgcG9saWN5OmF1dGhvciBwb2xpY3k6cmV2aWV3IHBvbGljeTphcHByb3ZlIHBvbGljeTpydW4gcG9saWN5OmFjdGl2YXRlIHBvbGljeTphdWRpdCBwb2xpY3k6ZWRpdCBwb2xpY3k6b3BlcmF0ZSBwb2xpY3k6cHVibGlzaCBhaXJnYXA6c2VhbCBhaXJnYXA6c3RhdHVzOnJlYWQgb3JjaDpyZWFkIG9yY2g6b3BlcmF0ZSBvcmNoOnF1b3RhIGFuYWx5dGljcy5yZWFkIGFkdmlzb3J5OnJlYWQgYWR2aXNvcnktYWk6dmlldyBhZHZpc29yeS1haTpvcGVyYXRlIHZleDpyZWFkIHZleGh1YjpyZWFkIGV4Y2VwdGlvbnM6cmVhZCBleGNlcHRpb25zOmFwcHJvdmUgYW9jOnZlcmlmeSBmaW5kaW5nczpyZWFkIHJlbGVhc2U6cmVhZCByZWxlYXNlOndyaXRlIHJlbGVhc2U6cHVibGlzaCBzY2hlZHVsZXI6cmVhZCBzY2hlZHVsZXI6b3BlcmF0ZSBub3RpZnkudmlld2VyIG5vdGlmeS5vcGVyYXRvciBub3RpZnkuYWRtaW4gbm90aWZ5LmVzY2FsYXRlIGV2aWRlbmNlOnJlYWQgZXhwb3J0LnZpZXdlciBleHBvcnQub3BlcmF0b3IgZXhwb3J0LmFkbWluIHZ1bG46dmlldyB2dWxuOmludmVzdGlnYXRlIHZ1bG46b3BlcmF0ZSB2dWxuOmF1ZGl0IHBsYXRmb3JtLmNvbnRleHQucmVhZCBwbGF0Zm9ybS5jb250ZXh0LndyaXRlIGRvY3RvcjpydW4gZG9jdG9yOmFkbWluIG9wcy5oZWFsdGggaW50ZWdyYXRpb246cmVhZCBpbnRlZ3JhdGlvbjp3cml0ZSBpbnRlZ3JhdGlvbjpvcGVyYXRlIHBhY2tzLnJlYWQgcGFja3Mud3JpdGUgcGFja3MucnVuIHBhY2tzLmFwcHJvdmUgcmVnaXN0cnkuYWRtaW4gdGltZWxpbmU6cmVhZCB0aW1lbGluZTp3cml0ZSB0cnVzdDpyZWFkIHRydXN0OndyaXRlIHRydXN0OmFkbWluIHNpZ25lcjpyZWFkIHNpZ25lcjpzaWduIHNpZ25lcjpyb3RhdGUgc2lnbmVyOmFkbWluIiwianRpIjoiOTUyYjJiZWQtYTFhZS00YmZjLTg5MmEtNjI3YmUwZmYxYWY2Iiwic3ViIjoiNTdlMjMzNjQyODc0NDdkNmFlZDMxY2EzZjYxMTVlZTgiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJhZG1pbiIsIm5hbWUiOiJhZG1pbiIsInJvbGUiOiJhZG1pbiIsInN0ZWxsYW9wczp0ZW5hbnQiOiJkZW1vLXByb2QiLCJhdXRoX3RpbWUiOjE3NzYxOTQxNDIsIm9pX3Byc3QiOiJzdGVsbGEtb3BzLXVpIiwiY2xpZW50X2lkIjoic3RlbGxhLW9wcy11aSJ9.VgYzGE_vlguWq8q7wNQ9Ce1bAcP3D6tmNnOax0locl8MYep4GeFWl904Cj6LD0hSXOk4ekOdB1hLOH2uqUBq3jxP8P_R0s_dCc7fSrXwwER4t0DNfXLnXZYVJNs_kWOLCrBeJYlLqDloxLsTxEVYaPkXfVODzfY-qR9Gj0dRunbn6XgNyaBgVnBmxwl7akhoN99rRRnEpBfKCG1yLWONJ51MiTJUwOKfZuKrpiVHzcojt6dzIDS6ipJF6zJ9zx9AI90DafSMro0NBxbmtrYxbLtXNdUabaP9UYOVGLco1u1UNzcyKQfBj_yfl05jQR874ZYyYhBkof-t-kJfSl6qxQ\",\"tokenType\":\"Bearer\",\"refreshToken\":\"eyJhbGciOiJSU0EtT0FFUCIsImVuYyI6IkEyNTZDQkMtSFM1MTIiLCJraWQiOiIwV0lMWkRTT0RETVJLNk42VlRfN09KWlgwVzhDQVI4VU1ZWTI5R0tBIiwidHlwIjoib2lfcmVmdCtqd3QiLCJjdHkiOiJKV1QifQ.CUVhX7QqhnpRg4kA9Sl96lgK4J2McDdb9VIS6iJWZf5L4howDg570sInxyTgIXA7GxaT4LeH2-IUXMzkGO3Nw2BmadavacSljwc-QEigHj1BECo3hZQ-jdPRgqAIzP1nXu62wbdLGgd9Yd_7J1XEkXnV5zeJUXv9kTYaqiSGm1BmeEpozDW61SMDNHCYjDFZ9xvdFMfvd41RrKm55dD27aB1AfFarbJtxwXCAqH8qQwrXIIqzGUVU46FkJqcNup9pTst_-XsEgZiGDT0Wy9vgSWZh4tnQpg7fjDQQc2Tm0EI4fg1q7oQdSFc2HoXt2MULonaVsas5p50Rg0xIhUZfw.F5IiYjPwrfrBj3RntkGy9w.8l5oc0CPoXpcFY1QDfIiC8fAzYxUIcmsQxCX1CAiw9ItzLkQYLsweNpLNil6Xr2QMou8eraKA2lMuR-3ZZa56mWQwjr6KgF2zttn6HwA0bExEMHza8u4_KLoKQyzqnUNdNSH55pP6hLerVXDR53x_weST_ppkYUJx-iDtwdlMsm4dpQsPZlCecXMF6H5TjRUv7oudrYJf-hBt-SKjykHe61Wq_nFBdaqeHxB0nDEMWEgOqoYjWXangPJSN4LZOR6zuZ0nFUoFqMCkok7aMpJv-LI2_1r-1LTNumQoMIj9j0VSobOqeNuUvb9FFS7l08SqrX9aTweqU10VM0fiD9qU88t-RoIxMBMjahQ_Ms6CwMVdvjFBeu_gcxFWUHMPcClvrT5cnciVQsyrBWA6TwvP5oH4e5DsCd9IqS6hqlVnTK5AQZdXaZJOY5UK0zsM0Avesc30pikRutDDqxziUx2Jkl9_hP3H-PKdBmB26IHEY2AO80yWybmkTTEc6JzXg8U3wFnHjXZw2Q8b0TB1nIvvPCII-EMILU2WAuCy-B3Pk7t66RUfmgHi7p1dwJHsS-8QsQQHYDtPfpUvUdkHNsgcjZ7mHY0_ExYlA_PviE6LQQmcXErSLZRBrCMZ3jb_DqXuEnVPqFDT5sEPb65kjoHtWWyFhYi3jLvpGWK0xNwAcsI3qXw4oUuV3Z-o_dgxoipbulEhcpu6ydxFFw7asz1sMP6HoDEQb-oVPlc-0hLww3gyf8Em-aXIfwUyoAmREeDpX1Hn-5_0QuY39y-0WnLQlHLWEyGLSKtz-ZguBpZF9MQLTTOzqKzyWY2flBEBbhivOLNFDiEz8yUBXafqoeTy8gV-PRpnhL5buKkOHHl8CJJ1wqdsMIzZNZkNDTHtgJd-Z3bv92lScoSBHL0Y5JJ_8mRVaru-byNGXMz7au5UpZA0k_sju0VomI6d7Y0IgIQvpASwJY-GQTHaIOpPi1eNwuvxXRKBJ7ZHAM-lojaEC0-0Wz1xVH1RlkBZOYz6S4dyYDBabqfhV-mqHJY-7EeDH12JEcULBu1W2j0Eej3mkNWfiq7xXGBkd8paL8vHOEiD9kcKEt7aoKZSONPmprgZVE4qIV4bFapCpYdyOmQsmXN5eEOFD8dKwrt_MgmvAo6_tsryObj5viLDN2-nxpIGjnUHmhLuMddGEMJAdj2tq4LmXJnVOdl5lEaMwei-pg3tV1RvLmlvt8DpdAYSHiqTqlpkHlZEgZnpARL-ttv4KmgYZH8A7DCRyECdM3-v1ftRhqPXfJc9qHJayqSTc3bHA3z5ObtWFltju35BY48sna8jObyfD_yQ83CvRD0sClbIsJW1c3xutX5RT8KT2rTI-vWjIcDZQ685K_QBWhRKbG_gyMX-cRzPJk-nFsK9e2CSMaqP4XMWgbUYvn5DEA_HSC8imI8akljoYm1Wk0ZOYcsd0pcyNeWsnXvJO2cUb_SLt3hedSI5g7Cq8SyQtQaJ3Blxe6W0RdCdOWwCb2e92ZgLuJdMVBOLQ3EeEWTUlWyL3DSfXRLccIU6nK0fQXe954_Cm-syscEFj2lidPcuupY7VgLzf315ECQU4RyJCTf-ULPTbpRrlFkcTtCx1jv_Ep3ItR9WP_UtYr50MsSnjovu0zxzwpPvb50YVVAQPcylrVV4ToCnMwEZLpjm92VOYjRsO42MbwmioLZ8XzWYw1vAq1RnyXwrIg6M9zeZOLx8vWfVvY8WNLEditJhpe-l8fivwb11V8mDvmLF-YJuozMhxpKKxmd04QMOQyt29J0FD-CKTWsjBlVTgN8Cj-mFVepXjSLb9dtPzt3e7SLGc8pGFgEXVlDIhRksyPnydZHbyRWfl-wOFUutxkAf3kEHgwQ6--NX6Fp5fsLsn-8bnHSSLWpkdBnWJ94KZf4-KZ6u-or1yyNNf-axVcTuBaDzXgW3kC2yAtgQtD04CU1am4EegjfrVnpcFsmBxkIeqzfMVO-zQx7a51j6V_7vEe1LGgUzl1ly4O3pLuuVlFflQikIuq0__YO2pOzZKH_mj918BHVLEEshbPxM14TnVhM97qxciM93z-DMflskXYmTZMdkjkvTCuBq1Z1wVdpOiHRR_vxfVrPcElC9iUm1cVPzPH1o13XjZ4Lvsfd3cDBXvJZtzzfcksPx9-Bb4iOlb2QfUBPrAKg69iLuwdA6ZKWzm-Q-JhgjXIdQqAQlJW9piKTrI6U4OgFqxVqdHf3TXBO57CZB3YFJOVQzk4Z-UHuxlYnFEYZl1C0qjiEcxKQlm1QVvWNc-dv2hUjnCjZtlCeamvbUwIHcemfN5wSh_WIn69JB0-HH0JyIptuTNxsVy1CnrNnJ3pHKPyW1ZtETaJnBxJHg9XKhhsoW1LMBlkJVrHslck1x_triEwK34iV5VDqO4y35TP0qqwtu_7CBLux14asw3Y0twWDFwFQW_3xv-skJoLx7iI4bgELYgY7BVRYp5NvqAvxx1fmNoIyjkMATzS1HcTc9gwmRfTO2YeBqz6sh0ejV6-MSIY7vQubPJRFar4K38ltFzszu9DGvPkQKwkQBZDL0jTHJQvyJL3HpK7d3GeeNT9aUVUUeebu6KSeGXyQYDqn78tXknDBqm9H-HW7cu1Q7yJuAsAmYrVGHroR5rhMt1DYP8cNb6dTPxFBtc_RlqL7R0Ah43nFUlqpeS1NgQCVvRUI6os0FpXUhIfYnC6wBk_9JcNRxuG9p-gmGy3oddH59OYyWwOS3u05UyJqBNECao4LwKtoHd8TFlIy4KeqaEWJKNYrAGw6v7cTRI8GFkauBV8zp4O2iRi2Cw0i4j_sY_dVU_cpUSryp3P6qB7sLWe9qaZVTu0QPZMiRBhP1l6pljkrg4KtmxpeYyXEecVYIxgTZTO_PTwgP6bjMzOcCTjdDYI-NzBqg1B3XsPyIL2lsF7YS-MaFvwh1-q4rOdTCWLvX-_Pqls2JBoKXfzRW64gH9IZPQPsto1g83FCDJO5pUJX7bZsp3p0P9q8z5H2OCIYrQm5LjJDs7oVb65k2_7NgAIxo_bYC8RYEwDKuf0x3VEamapqNIZH8JKmgMCkX8nifcvaotcTdI4juthVnAjh6qwDiRhJJnH3H-oPjPIfozkxhXzOVg7FG3qrFS0yjsvtU8OgFB6_KzAQYgnQVmEdhRcAQEMi7owTgIXccUxJy6ACxi0qQdR_nGo-8bQu2pVBNGOAbYsQ-j82lbshzT-PeCmJXGU7qdZKZNXpepRL-eFPTCJOcSUYbY4pxSJDW5mdBd2Fsg1YOmhVt72H1TEIubVZ80FtN5CwlAAfw4EclVPtEga4dB67Ru0qd5V8uTvy5XyoKe3n8twMYPKwX7NfT5LDdxjjIg7tbPIXrI5EbvqdC3g6TF8NvP32xjmR3V9Ko2EjDTsr_-3A2ONiYCaZJj9q2Zq1sEDKBL6yIAYLzPLLt4NWGkcUClb5CwXLZMulBZKUuribokjVQOCKMD8jbLUmpluc_UjzCw-4Gj6rx_HvlwnKuHCga91q044aE1a1-zMyUcZmq3eFetUmBp5_nU1lNMNXsxKkxy7YEMMdoj5NlMmM3Acbru0JEzIlpvftP4z2TKG1hP-kwzZlAe477UBxoU9VopJ6Am9BBiS0znwGDxBPVgrnTaI4YL7H9Obl0ZhOvDHl4lHxDOs2MwBHNGj2EqBgTQSfhUhXATmIJcsn5UAhuvdRHFcDV6mDvTYMC1f-PhlIKF_VL9jZwOs4AI-azjpvvxQik_gEbqzwarLLS9mL_ufv1eGZxBUDQGWGyfSNZEy9YVNyO4jVt3PTb0jMEseA1sbWJ6gntvgCsK2Hoy7tBvePvDbiARVlk6c3RXkMD5qDX5Oe1p5bkEOHhTuRTbBJnXmCUuhyrAU3iw-F1zP5ekHjTXfTOpYAwuwaNdHIYXMDbhNdg-5F6QYlwHDgmAmXl5YSfxAU-x9U3q32XgpJB3VpWidzu4LylG5F-S5pM2Rlmkn1LpyAvSD4ooHLO7Eo3X7y0_lR_3LIjossCkakNCsQ7zo3o77XNXvarH41g3IyXK_CeYdvStC0mt0_m4TBXF7xt_uOWi4jJ3tZ_IM1ZxcMss9o4eExEwi_OsBqEzpOABBmNGYt6JgdBzb3yYgv488CCp5dnBj3gSOtGdygzQU-Qg83UlgcuOIzksqCg6TB-n5SCQ6Bq0NUPTyY9ukPkLMmQPiM8amdu0_Zi4mZoehS0asH0ddFWvQJIWK8KA6ZtcpkUCO_SmI5HfWjOU8tx--N_0X2Rbc3gAWq6xYbgEWnptQptdsvc_zFmotNTWWhjLZn62vE7na1E3M6fC54e_FXKozN8HR1b9Gf6-mc-G7vFmvgHZ5A0t1L8a4_JjOIkWIyc7rZauGgOcR74dRYQ3MsF-rjwxAu-DJd0bogNyUdV2bjwuqYv5-IZMq1w-yhE5dblmxIWYOY9LBAXwabQ9HX-ULmOaNTcA5i5OEJg52aNmGJtwdYe7xIIyGjqyirk8Z9dowHnu31OoLx7AY0R93Kf9RWpsuFPZXSWliRCw2wWQcKQqS8yMSa3uoh_qxGdJLDV-J8QLIXg9zq5gP4EV9FAvCLQLpx15xnis0nDHaRbdd6xVJWlnrc-l5t7F1o33o-hGv-pmrG3zHGdWHy7lm0CkBSGit8lycV4-kZk_hRyHFlu8JmjBgaR-xWIor9244tT_tCgwkfX9_438lV2Q5jx85PD_-_HupCS3xQIb686vQyByVQGD2B05MFctJ-nA.uj_QtLknOqZK-Cn_HCW9owO9YkBNEz5HRbHd1R9lnSc\",\"scope\":\"openid profile email offline_access ui.read ui.admin ui.preferences.read ui.preferences.write authority:tenants.read authority:tenants.write authority:users.read authority:users.write authority:roles.read authority:roles.write authority:clients.read authority:clients.write authority:tokens.read authority:tokens.revoke authority:branding.read authority:branding.write authority.audit.read graph:read sbom:read scanner:read policy:read policy:simulate policy:author policy:review policy:approve policy:run policy:activate policy:audit policy:edit policy:operate policy:publish airgap:seal airgap:status:read orch:read orch:operate orch:quota analytics.read advisory:read advisory-ai:view advisory-ai:operate vex:read vexhub:read exceptions:read exceptions:approve aoc:verify findings:read release:read release:write release:publish scheduler:read scheduler:operate notify.viewer notify.operator notify.admin notify.escalate evidence:read export.viewer export.operator export.admin vuln:view vuln:investigate vuln:operate vuln:audit platform.context.read platform.context.write doctor:run doctor:admin ops.health integration:read integration:write integration:operate packs.read packs.write packs.run packs.approve registry.admin timeline:read timeline:write trust:read trust:write trust:admin signer:read signer:sign signer:rotate signer:admin\",\"expiresAtEpochMs\":1776195942365},\"identity\":{\"subject\":\"57e23364287447d6aed31ca3f6115ee8\",\"name\":\"admin\",\"roles\":[],\"idToken\":\"eyJhbGciOiJSUzI1NiIsImtpZCI6IlRDNktEWUFZTFNETzdMWkhfNTBNTjJTU1pOQl9JUEhEWUNRRElMUEEiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2F1dGhvcml0eS5zdGVsbGEtb3BzLmxvY2FsLyIsImV4cCI6MTc3NjE5NzQ0MiwiaWF0IjoxNzc2MTk0MTQyLCJhdWQiOiJzdGVsbGEtb3BzLXVpIiwic3ViIjoiNTdlMjMzNjQyODc0NDdkNmFlZDMxY2EzZjYxMTVlZTgiLCJuYW1lIjoiYWRtaW4iLCJhenAiOiJzdGVsbGEtb3BzLXVpIiwibm9uY2UiOiJiZmZhNmMyZC01Y2JmLTRiNDktYTY2Yy00YWZlODYxZWMxZTEiLCJhdF9oYXNoIjoibFBHM0lEMjd5UkdiUmRONTdEaWxDZyJ9.VF_FV8X1cKvzYI9er4n7tbe38xWwQq34uqY7Y_CtJRgs0D7JYrZBAXiXxPlODszA8vpqdHC0yzs-Txr8QL0KZIl4Mqaw0eaSTG9q5J-HGKUdtB8Q13o-06V9xhv6WmxG90rkqEy_a3e8zKC3_wpgPQ5-6baVsnoqr3vhsRmhVxcgGhF4XieVHtJr92Cxbu3kYTKKDygiCSxL6DSczrX1XGcn0OcQBzL7S8UyKj-7RpvWGPycS1MSJ9tC5atQGB3ndo6WwJotypC0J3KBzk0hwDBPb533XsiT3wmKGuR9PSKd1eozmo5okDAmRnrvjnxPLU5GIrdvEwoaX9kBwXgiRQ\"},\"dpopKeyThumbprint\":\"NJvn0NmVWUBkUIXGNHmKs8y4Sa8dZOo22YAXqjXlN3Y\",\"issuedAtEpochMs\":1776194142366,\"tenantId\":\"demo-prod\",\"scopes\":[\"advisory-ai:operate\",\"advisory-ai:view\",\"advisory:read\",\"airgap:seal\",\"airgap:status:read\",\"analytics.read\",\"aoc:verify\",\"authority.audit.read\",\"authority:branding.read\",\"authority:branding.write\",\"authority:clients.read\",\"authority:clients.write\",\"authority:roles.read\",\"authority:roles.write\",\"authority:tenants.read\",\"authority:tenants.write\",\"authority:tokens.read\",\"authority:tokens.revoke\",\"authority:users.read\",\"authority:users.write\",\"doctor:admin\",\"doctor:run\",\"email\",\"evidence:read\",\"exceptions:approve\",\"exceptions:read\",\"export.admin\",\"export.operator\",\"export.viewer\",\"findings:read\",\"graph:read\",\"integration:operate\",\"integration:read\",\"integration:write\",\"notify.admin\",\"notify.escalate\",\"notify.operator\",\"notify.viewer\",\"offline_access\",\"openid\",\"ops.health\",\"orch:operate\",\"orch:quota\",\"orch:read\",\"packs.approve\",\"packs.read\",\"packs.run\",\"packs.write\",\"platform.context.read\",\"platform.context.write\",\"policy:activate\",\"policy:approve\",\"policy:audit\",\"policy:author\",\"policy:edit\",\"policy:operate\",\"policy:publish\",\"policy:read\",\"policy:review\",\"policy:run\",\"policy:simulate\",\"profile\",\"registry.admin\",\"release:publish\",\"release:read\",\"release:write\",\"sbom:read\",\"scanner:read\",\"scheduler:operate\",\"scheduler:read\",\"signer:admin\",\"signer:read\",\"signer:rotate\",\"signer:sign\",\"timeline:read\",\"timeline:write\",\"trust:admin\",\"trust:read\",\"trust:write\",\"ui.admin\",\"ui.preferences.read\",\"ui.preferences.write\",\"ui.read\",\"vex:read\",\"vexhub:read\",\"vuln:audit\",\"vuln:investigate\",\"vuln:operate\",\"vuln:view\"],\"audiences\":[],\"authenticationTimeEpochMs\":1776194142000,\"freshAuthActive\":false,\"freshAuthExpiresAtEpochMs\":null}" + "{\"tokens\":{\"accessToken\":\"eyJhbGciOiJSUzI1NiIsImtpZCI6Ikg4TkdITjJESUNPUlE5QUpGTUlFRzlXWVdTVVlSUUw0LVJXR0E5QlEiLCJ0eXAiOiJhdCtqd3QifQ.eyJpc3MiOiJodHRwczovL2F1dGhvcml0eS5zdGVsbGEtb3BzLmxvY2FsLyIsImV4cCI6MTc3NjI0MzIzNiwiaWF0IjoxNzc2MjQxNDM2LCJzY29wZSI6Im9wZW5pZCBwcm9maWxlIGVtYWlsIG9mZmxpbmVfYWNjZXNzIHVpLnJlYWQgdWkuYWRtaW4gdWkucHJlZmVyZW5jZXMucmVhZCB1aS5wcmVmZXJlbmNlcy53cml0ZSBhdXRob3JpdHk6dGVuYW50cy5yZWFkIGF1dGhvcml0eTp0ZW5hbnRzLndyaXRlIGF1dGhvcml0eTp1c2Vycy5yZWFkIGF1dGhvcml0eTp1c2Vycy53cml0ZSBhdXRob3JpdHk6cm9sZXMucmVhZCBhdXRob3JpdHk6cm9sZXMud3JpdGUgYXV0aG9yaXR5OmNsaWVudHMucmVhZCBhdXRob3JpdHk6Y2xpZW50cy53cml0ZSBhdXRob3JpdHk6dG9rZW5zLnJlYWQgYXV0aG9yaXR5OnRva2Vucy5yZXZva2UgYXV0aG9yaXR5OmJyYW5kaW5nLnJlYWQgYXV0aG9yaXR5OmJyYW5kaW5nLndyaXRlIGF1dGhvcml0eS5hdWRpdC5yZWFkIGdyYXBoOnJlYWQgc2JvbTpyZWFkIHNjYW5uZXI6cmVhZCBwb2xpY3k6cmVhZCBwb2xpY3k6c2ltdWxhdGUgcG9saWN5OmF1dGhvciBwb2xpY3k6cmV2aWV3IHBvbGljeTphcHByb3ZlIHBvbGljeTpydW4gcG9saWN5OmFjdGl2YXRlIHBvbGljeTphdWRpdCBwb2xpY3k6ZWRpdCBwb2xpY3k6b3BlcmF0ZSBwb2xpY3k6cHVibGlzaCBhaXJnYXA6c2VhbCBhaXJnYXA6c3RhdHVzOnJlYWQgb3JjaDpyZWFkIG9yY2g6b3BlcmF0ZSBvcmNoOnF1b3RhIGFuYWx5dGljcy5yZWFkIGFkdmlzb3J5OnJlYWQgYWR2aXNvcnktYWk6dmlldyBhZHZpc29yeS1haTpvcGVyYXRlIHZleDpyZWFkIHZleGh1YjpyZWFkIGV4Y2VwdGlvbnM6cmVhZCBleGNlcHRpb25zOmFwcHJvdmUgYW9jOnZlcmlmeSBmaW5kaW5nczpyZWFkIHJlbGVhc2U6cmVhZCByZWxlYXNlOndyaXRlIHJlbGVhc2U6cHVibGlzaCBzY2hlZHVsZXI6cmVhZCBzY2hlZHVsZXI6b3BlcmF0ZSBub3RpZnkudmlld2VyIG5vdGlmeS5vcGVyYXRvciBub3RpZnkuYWRtaW4gbm90aWZ5LmVzY2FsYXRlIGV2aWRlbmNlOnJlYWQgZXhwb3J0LnZpZXdlciBleHBvcnQub3BlcmF0b3IgZXhwb3J0LmFkbWluIHZ1bG46dmlldyB2dWxuOmludmVzdGlnYXRlIHZ1bG46b3BlcmF0ZSB2dWxuOmF1ZGl0IHBsYXRmb3JtLmNvbnRleHQucmVhZCBwbGF0Zm9ybS5jb250ZXh0LndyaXRlIGRvY3RvcjpydW4gZG9jdG9yOmFkbWluIG9wcy5oZWFsdGggaW50ZWdyYXRpb246cmVhZCBpbnRlZ3JhdGlvbjp3cml0ZSBpbnRlZ3JhdGlvbjpvcGVyYXRlIHBhY2tzLnJlYWQgcGFja3Mud3JpdGUgcGFja3MucnVuIHBhY2tzLmFwcHJvdmUgcmVnaXN0cnkuYWRtaW4gdGltZWxpbmU6cmVhZCB0aW1lbGluZTp3cml0ZSB0cnVzdDpyZWFkIHRydXN0OndyaXRlIHRydXN0OmFkbWluIHNpZ25lcjpyZWFkIHNpZ25lcjpzaWduIHNpZ25lcjpyb3RhdGUgc2lnbmVyOmFkbWluIiwianRpIjoiZmZlZGY3MWQtYWY1MC00NWQ5LTlhMzQtMmNiYTE4ZTVmMWQyIiwic3ViIjoiMzRlNjllNDdkMzE2NDdiODkzMDc0NDk0NGYyZmZmNzAiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJhZG1pbiIsIm5hbWUiOiJhZG1pbiIsInJvbGUiOiJhZG1pbiIsInN0ZWxsYW9wczp0ZW5hbnQiOiJkZW1vLXByb2QiLCJhdXRoX3RpbWUiOjE3NzYyNDE0MzUsIm9pX3Byc3QiOiJzdGVsbGEtb3BzLXVpIiwiY2xpZW50X2lkIjoic3RlbGxhLW9wcy11aSJ9.BAPTbUxstvf4uSVv4bcKBCxCWam0MHZ8KxaaqIygmYnTng7xnoN6x2ub6s0EjAbQRY7M67gP_ESywOOMkklH_iIXEixCEQLueAIyvbFmo21ssmDY2SclXtInuXsIosZfKpqraYcvn7nO9DdqDa44hZ6OVbFJTkrGjJCjazhApR5VD5hiAK53_swYhVPuPXCXNU38aExVPPazAu4C4QuDBJuy5Rp4tne92Uzo60tad-ojOMGT-7ILkDWqzp_SPRSuvbQuyzQEjBGGljSeoUqUnRg7Q4gj1u6XwyKMhTvbA6n6KtcgsPGLK6_AzspFqxOuMicjgcvY93pcnnm62b8EAg\",\"tokenType\":\"Bearer\",\"refreshToken\":\"eyJhbGciOiJSU0EtT0FFUCIsImVuYyI6IkEyNTZDQkMtSFM1MTIiLCJraWQiOiIxRVlZNFdJNFJfWE9HSDZVRFRPTFBUV0JQSE1QUlZaWURBS0FaRjcwIiwidHlwIjoib2lfcmVmdCtqd3QiLCJjdHkiOiJKV1QifQ.OjzFbXMVmR9utsZHxNNBb7lKfzW1tuD2V7uE6_WIo7viJTqvK5Pc70225amfOn_ppciNbsQtdWqtULoybzWVR-dOKJ7xN8vDcmhVJCvlHOTdVVZIw9fkdRDpsUXkabUFWC8hjpAd1ol-x5Y56EpB4LHmEBYRRV2g1g9lBMcnK8ARBoLwgrsK1xsR_Vueg9bvbcnbQdDoi_tgV2jORtPQ3WUyzNECt8WY0cMnU7AP43EcU5agg4r5SLJ4qYCoGRrEasAaH3kIEQaZLRqIlCNF1x-77vvMdYVDpqkLLgQF2bg2EM32_DIyccxSzdKFqyzTWieOfz8nnR_cgdpWITOjug.-ZgbI6MR19kz4G8ueQfOgg.w3F0J2tK722wQD6NcNcIrOXtj4ZkmYNy-mf-aK08l_TBUpHwqTByrAz3XfmD7SXtO4DqC0H-BdjxeBGbnnMxTjNG5BwtGN0wNZbYPd7yBm8eJy7ay6VhwpRBHDUm0UBUL-Onk0mcgD3vi_POkeBv54zFFJBqcijN3ia70Eim19HgxLkFop5LYebbWkX4juRRz6fI5KLglBrQnF6FTPaz3gq65PUbyAW1qQpdv1fw3n6S0YjkQzV_96sBsx7iLexfT16AwRRfmPiUOTpPljcfDtSHXKK4n0y4TVHdDb5FoOmf8WuloMAVPUzVjVuwJqZk169I8Yx-eyP62yWJYKNNaPE0-YQ9b7XXub2U3StSSMagPTNM8RG3Yxe2pnQDIoW5v81Q6Qdek7xktmooL8WNnFMBd4udNOsMCeGk98QTuXHXVVKq4zNuVuBgFoCWAWMBGGNVZXXtiELgwH3lE9IoUlbdMsGUBAQ-vcj_QFlzAGGonAp2YUMX3pY-bnqfzhp0cWMjBJxUK8-iRWmmw-1cMKtNSEqlg21bEDUQBFDJTMJENC31kaaqCfny8wNu90Oi9faTzx_bjAtFiH83XB1c-J0eTa5BBdWbd7Mu7U-hryne0RWK1wCkf97vo9aB0xclHxnQA2v-gtp-rtpb8QkvYS91D9YvpHyuPEhkQK3liyKRXvQND-6tMwDrcFoj9_7XyukAjw1WEKnjQG7u9TnH81ejB0nHVDOhwWGMxMIA8EO0_ql9MfGvIN3Cy_O82MlIthSn5-V7aakV_dyZYkvEcKZ0UBrSxCwQSKAS9cqmew0ud3fzzp8cAqwNMDHvkECw_YN8LBJN7FfpPXxnOsKveySv-IISsOxae9A5i9BPYh0OJ0jxKxI2XmnOqspdGZu-5D5JVZDBrqlDM4b84SECSuLnDkejV7_N1Cwt0YogU7lckvaFCvmuQ0xmhdWBOvlXtyEgGjr7HpviX_64utAR5ItsXu2QK0tVq_mmXiL9nNqsPqO13Qy2GJhtg_5GLXVV7GFztNVzaxu1Yu8tSEuhMWJ2aKx5xkaY5jr4pzW9gkgx-TQBQrkwSvKm2NVGxX74StxQwo-3vM0V8uUhlGxOBH2WNC8SbsPXdwsb3yad2c-0itweIm9znnGg7ePxl3NQFLVaBQiW1wiqJta5iSb970fTJ560wsNt7ooBDw2Ux5lGeEGNJC7F4X6KjuvZsONSJRkyguiduDVDytbN_PAvIGPPFsCNzdY3K9rw-fd3vABygfYWxhUacWTbHq-jFfYHijBJPQ4J7uzh-gr2O5dYODCg8uo3h1Ka-p9tXX1D_uLsfjHc62Sp3LaFZ34tFWzq3cZKKllmDWgpECgySFXLKHKRAP1GCahWkgyf3PW1j4liK3Xxaqq4W1-UokwOLyacWD5Gw54JgY2o43BpQZuK3pRjSaoyB2PErrNrzsdw9f_gHSa8-z7xvoQSjegyIjAB9UN0-h7pb-cozsYsvhsFm_4E7d6aCtmn80QQl5w7_8MyuuVngij65B8jRXxlUog-lQGSm-q3ZyMrWK8puR7KpokgfUl1qwOM1N-5WxDGHQHFeD2Hm-9mSmQfv3coF1rHmh65fk3kzubaMZoPEXFTtEwQtmhRVAS5F4JFniT_hX3xuthylEtW12b20EkLWfnSt_bH3tL0Ig48I4Z7P8w_v7kQNS8qjiAMaOstE48fOfc36y5Pk89uyDC_Zji2exOugPJ8E_YeaEhzhFeMHxwEq2JGWAzXwhma1wZ8BkNNWyMOLNhd5S0--OqnhArs09RCEpzpoWSNDa3aInE4QjNcEdQsMFyyCNa_1Pk9qXM8DLDPueh_BS7EhVhWNOoYLmBSZKFZHksB6LQngbWr9CS4RHedCw1zi5KriZKDSkLGwFrpBeXs2d2UGPqO-Wyz7ea6wtZ4MLWXpXJASlr0OYEEvR48DphIs--UPvTRf8pyg0O5ZBk45AwEl7twN85IYwlX01swbVe9V8Eur1hJBCKPUYn9WBs3SVP5wYURnO8ukOt2UIQCPzXG1qGTmGk88Df-TlsunUmVsHnPChzGxyew1FCwV4R1YDuc0BBd3XH1mlv2656lQ01Fht9l-gt06a2RwIJTZL4y1Vh3DYcvKWNBw-LLGjo7rOL8u8bADx_-cscu-Rs_n9PKFzuQfu5VZsRpMiIIJ8qnEqaHX5Mcy70gbRYH91mDXEdpAYykr4olwB1sG-yP5H10A7nKExx24YoToZbxgEyZuV7HZ5xrcreSIQ-uFH2S6I7nkYhm_3QshyHP1kn4UrUemrcVpAa97x8IUT6LSjJEQ6i6vH0akluHMFjPcf7o1UndrVUGOlux-kd3i7LD5Qp4x1fB3NTaOoPvsZGuBdTxLh5nxO55FU2afldTaTYVhgm9V3yrJ16p2wWj8cR8XbmGk-0ociK0FLjVgSVBK9oPX5OhMkYQYI0JQgdLfM_1PPvxBkJPU9Bv7OuVc3oFm9Vkf3CDgl2kNh9HN7Pi4eUDydqgwcO_WQqpLkbHV-V3IAMyxJRyvLBvNDkOLmyDzbg5CCUwVZuKugASUoud8qEqn-jupPGXxqzpUi7cBrgxM3CfULa3idzknLszw8K9utCjsazoyewSiWUN7V7L6b18Rp4gLMZ9M9NBRMHNa2Uf9htGb-HK8L0xNKlab6EYY0iNMRV00RLbHlAbgKntj8pfD0Ox5y5AgqFNxJ1m2dWMoo_fsXiYNvAYN9DBLhewds1SsOQ4X7Q-7FCJKIceeiIOUbbpoCqJnxg_ZF-eukpA5QicuZv60qvbp-QBFt2x22TBIFtphJB-uNudY2_inRyt3VYZJGr-juUgxaMDTJ8WDiLyVqO_Dnd-vvU_Z0DF4xWiuVi5LVuYPO3etlT9ibfqJKne6Wf8bO2zQ7-A3KMgB1VY_fZmG0-13YHunTqGhIhLpkAqJJgcb8i3CQK0csGADE-_pLl7BwfbAq1WKAVtmU5QT-uAfvn1mjAv4Q6htO4wSzCW41Ij_i_VifLKZ8S_cZADmWxxBtWvwxgBfxIeoxY26zk0E63j6ZhmqVqM8bt-IRlm5Jfc1D3wWhZ9Tp-BGT4qZSmP2nVzyvyc8bE0wF2ANIF-Ks0Dh8KW9XRd_bma0BupJAHooAh5oFHhvr8qThWYGRdY9E4Jk6XkTElVe9X8FpimkkEGyDMltmCScbYDR3QGsHURbkBHYcQ1u6nb87PravJrBCd9Lw62P0ImdSOzHKmgM2xDkh7M0taCG_7kM5sJDplhJD14Oiz3CxlOTwci4TRr9kICpkdp0kr10xvQi_x_xTuxUynlKHl4OvyQ7RksdB39w1be4NRo4wYfbzAjGdK_KUwdQSJwyAK4wh6SKFnc8TfaVyqp4fy_drb_TAxH7nyHkeS0m9FRZOjaYmXNko0dX8_djS7hVdxcdjLpX50r9duN2kJ35cMbszsRyhnXr4JuIdVziEvSRs23jKgDwKXFld7uvV6QPTa6eEctpJXTlUSNZMhJxEfT-pO6Dbmu5oIYzus5ogQRqlohHyVOOndFhhR2T4MgxVczLc7Nu_M955mnNdGn6Dwz_kClAMOxCkLB6HuGF5pjoTb4UJcL93LP0Hw7FiKoaBectNrQPEyk-c2ycY2rFuoyuvNYdBBo-FPnTpP2O89mjkhL8-9RcFmKxN7UHniK2WDdu0uR0y3icm6zH8ABAZsduy8mhyDqx2YNQjhy5tfmoxkAIVUsL9YAt1o45wenfI1dW_p4bnxxEGVl3mUbRBswN8wc3CuwsxcWRNRAVZWC2WADLqgMUkInXDyLcijfoJ1LNxCo_6og8UIMKb7ix6uao4VSMnYO9mNE5SCq5jalPkjwhXfJiJL9RdRhB5rd5t3Dw7OrJwvcSY1EwVMT7z-l-6Zv-q7Q73NlzHU6Spx1AwrKx3fAIEX_LRULI-15Zsp4QcFc4qtAkzw07CTGzcBPQD88zHq3VcL1zVzToFO4f-exWsg0QdXwdipI3EtV3M-DyKXvHYNBKcpeIG8h95_EfcXfWXxAszyGfCDdGY_bxOzi9seh0A5LP0b5ZJa3lwcFWYtMEGL0G3yNUse-Aoqr0mZtdslMiHk7LO__E7fb3we82QwA316JSf7VRhnqSZIo-EuvKF0F2J2wmWea99bbD6wZPvJ6DD5YPfnTZ6ApXiJhnt8M5FCbjqefT3mwMhiMEVVFwKqqR8nH73NJtfz_lnfrWKRJ14_MohDCXFCluFWmSWyJ19e_co7of-_H7BrYBog9jmuJCFw4a2dUcE1tffnDI-sbsP8YdwOZ-RX6cEmllnCyhRFiC8UXACRmo6Jnszuz4UgXnz_DzmNF_mxzLg2TJzF8GG-63C25xE-lA3iYABoMQiPus79ki8gqxx_JW1h2yph1sghDHyWnBYKM-Ev9iDLXBfIhW2J8DYEDCdSqQbw190-sQIN2D0QQI-CP1O3MXze-ZZ8sZD4BU9rjnMJzmP7P_HG7pH-UqSbb2fOG80tZksYicLK0FVx0hIzAiB57ZIKqTOIQ08LhgF98RRXEZ7M5oz4P4dg4vaWHiM7lD92lXraJQ1KZcgBCGDyCHQWPrBzmGi9TJKrgkQvJwYPaxT7AazSkWsMDE9tWHX0LN_3BS48-ntxWmzBP8ocYudCZUo7hS0V3AJ0-KS_BYLY5KM-MepF2BYnN_iPn_tfuuCyKho_lw6QeiyrnWK1Yz8IWSoPueJ-ME02YLX3P9KZmN3dOD8zIkbju03v4PxJSL5yLtgHwmjRkYQ.cjOvEX-7aFRdot2RsGMsT7sykvFcQPb73BRcWRYb7us\",\"scope\":\"openid profile email offline_access ui.read ui.admin ui.preferences.read ui.preferences.write authority:tenants.read authority:tenants.write authority:users.read authority:users.write authority:roles.read authority:roles.write authority:clients.read authority:clients.write authority:tokens.read authority:tokens.revoke authority:branding.read authority:branding.write authority.audit.read graph:read sbom:read scanner:read policy:read policy:simulate policy:author policy:review policy:approve policy:run policy:activate policy:audit policy:edit policy:operate policy:publish airgap:seal airgap:status:read orch:read orch:operate orch:quota analytics.read advisory:read advisory-ai:view advisory-ai:operate vex:read vexhub:read exceptions:read exceptions:approve aoc:verify findings:read release:read release:write release:publish scheduler:read scheduler:operate notify.viewer notify.operator notify.admin notify.escalate evidence:read export.viewer export.operator export.admin vuln:view vuln:investigate vuln:operate vuln:audit platform.context.read platform.context.write doctor:run doctor:admin ops.health integration:read integration:write integration:operate packs.read packs.write packs.run packs.approve registry.admin timeline:read timeline:write trust:read trust:write trust:admin signer:read signer:sign signer:rotate signer:admin\",\"expiresAtEpochMs\":1776243236072},\"identity\":{\"subject\":\"34e69e47d31647b8930744944f2fff70\",\"name\":\"admin\",\"roles\":[],\"idToken\":\"eyJhbGciOiJSUzI1NiIsImtpZCI6Ikg4TkdITjJESUNPUlE5QUpGTUlFRzlXWVdTVVlSUUw0LVJXR0E5QlEiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2F1dGhvcml0eS5zdGVsbGEtb3BzLmxvY2FsLyIsImV4cCI6MTc3NjI0NDczNiwiaWF0IjoxNzc2MjQxNDM2LCJhdWQiOiJzdGVsbGEtb3BzLXVpIiwic3ViIjoiMzRlNjllNDdkMzE2NDdiODkzMDc0NDk0NGYyZmZmNzAiLCJuYW1lIjoiYWRtaW4iLCJhenAiOiJzdGVsbGEtb3BzLXVpIiwibm9uY2UiOiIwMWIxY2NhYi1iYmM4LTRjZjQtOWZlOC0zOTMxYWQ3YTJkOWMiLCJhdF9oYXNoIjoiVVRmc3NvaWJkUTFEM29UTFphMnlnZyJ9.ZWgl9L3OfXRvrrRsuHaaMXM-GVyYWjnF0PKI2Z4Q3xaCHJVY4dnvs54bBhjqYYWiaq9naM2KdLOTc3_KcAyiTPkqNbQPmHbxvfOAgYMt6Y1Og3lhcuuK2Lx9ZAIKBTlHK-QwaGANhOJ55oc9-JXsYKZHcQFMn-N61USb1fFz87ETzYfwBncYIDSCiYH3imu4uKrjvtgJ3xq6RTkKoccWuEs3cIyfc2xVC5sIk333tParluN983CyRe6qjMnFq336DzfNB8oGW3qVNuXfZaVyzABdrHyWXrwkTg_6wbPwTFHX1TEFOcszKEWV3SP4Pb8Sp8HuqxoLdMxdrLyQX_E-CQ\"},\"dpopKeyThumbprint\":\"DMsuRsgxj4LVVAKUpzryYlk0KRfhmt92uKKrhB36dmM\",\"issuedAtEpochMs\":1776241436074,\"tenantId\":\"demo-prod\",\"scopes\":[\"advisory-ai:operate\",\"advisory-ai:view\",\"advisory:read\",\"airgap:seal\",\"airgap:status:read\",\"analytics.read\",\"aoc:verify\",\"authority.audit.read\",\"authority:branding.read\",\"authority:branding.write\",\"authority:clients.read\",\"authority:clients.write\",\"authority:roles.read\",\"authority:roles.write\",\"authority:tenants.read\",\"authority:tenants.write\",\"authority:tokens.read\",\"authority:tokens.revoke\",\"authority:users.read\",\"authority:users.write\",\"doctor:admin\",\"doctor:run\",\"email\",\"evidence:read\",\"exceptions:approve\",\"exceptions:read\",\"export.admin\",\"export.operator\",\"export.viewer\",\"findings:read\",\"graph:read\",\"integration:operate\",\"integration:read\",\"integration:write\",\"notify.admin\",\"notify.escalate\",\"notify.operator\",\"notify.viewer\",\"offline_access\",\"openid\",\"ops.health\",\"orch:operate\",\"orch:quota\",\"orch:read\",\"packs.approve\",\"packs.read\",\"packs.run\",\"packs.write\",\"platform.context.read\",\"platform.context.write\",\"policy:activate\",\"policy:approve\",\"policy:audit\",\"policy:author\",\"policy:edit\",\"policy:operate\",\"policy:publish\",\"policy:read\",\"policy:review\",\"policy:run\",\"policy:simulate\",\"profile\",\"registry.admin\",\"release:publish\",\"release:read\",\"release:write\",\"sbom:read\",\"scanner:read\",\"scheduler:operate\",\"scheduler:read\",\"signer:admin\",\"signer:read\",\"signer:rotate\",\"signer:sign\",\"timeline:read\",\"timeline:write\",\"trust:admin\",\"trust:read\",\"trust:write\",\"ui.admin\",\"ui.preferences.read\",\"ui.preferences.write\",\"ui.read\",\"vex:read\",\"vexhub:read\",\"vuln:audit\",\"vuln:investigate\",\"vuln:operate\",\"vuln:view\"],\"audiences\":[],\"authenticationTimeEpochMs\":1776241435000,\"freshAuthActive\":false,\"freshAuthExpiresAtEpochMs\":null}" ], [ "stellaops:wasEverAuth", diff --git a/src/Web/StellaOps.Web/output/playwright/live-frontdoor-auth-state.json b/src/Web/StellaOps.Web/output/playwright/live-frontdoor-auth-state.json index 1cefe7219..6466850fc 100644 --- a/src/Web/StellaOps.Web/output/playwright/live-frontdoor-auth-state.json +++ b/src/Web/StellaOps.Web/output/playwright/live-frontdoor-auth-state.json @@ -6,7 +6,7 @@ "localStorage": [ { "name": "stellaops.auth.session.full", - "value": "{\"tokens\":{\"accessToken\":\"eyJhbGciOiJSUzI1NiIsImtpZCI6IlRDNktEWUFZTFNETzdMWkhfNTBNTjJTU1pOQl9JUEhEWUNRRElMUEEiLCJ0eXAiOiJhdCtqd3QifQ.eyJpc3MiOiJodHRwczovL2F1dGhvcml0eS5zdGVsbGEtb3BzLmxvY2FsLyIsImV4cCI6MTc3NjE5NTk0MiwiaWF0IjoxNzc2MTk0MTQyLCJzY29wZSI6Im9wZW5pZCBwcm9maWxlIGVtYWlsIG9mZmxpbmVfYWNjZXNzIHVpLnJlYWQgdWkuYWRtaW4gdWkucHJlZmVyZW5jZXMucmVhZCB1aS5wcmVmZXJlbmNlcy53cml0ZSBhdXRob3JpdHk6dGVuYW50cy5yZWFkIGF1dGhvcml0eTp0ZW5hbnRzLndyaXRlIGF1dGhvcml0eTp1c2Vycy5yZWFkIGF1dGhvcml0eTp1c2Vycy53cml0ZSBhdXRob3JpdHk6cm9sZXMucmVhZCBhdXRob3JpdHk6cm9sZXMud3JpdGUgYXV0aG9yaXR5OmNsaWVudHMucmVhZCBhdXRob3JpdHk6Y2xpZW50cy53cml0ZSBhdXRob3JpdHk6dG9rZW5zLnJlYWQgYXV0aG9yaXR5OnRva2Vucy5yZXZva2UgYXV0aG9yaXR5OmJyYW5kaW5nLnJlYWQgYXV0aG9yaXR5OmJyYW5kaW5nLndyaXRlIGF1dGhvcml0eS5hdWRpdC5yZWFkIGdyYXBoOnJlYWQgc2JvbTpyZWFkIHNjYW5uZXI6cmVhZCBwb2xpY3k6cmVhZCBwb2xpY3k6c2ltdWxhdGUgcG9saWN5OmF1dGhvciBwb2xpY3k6cmV2aWV3IHBvbGljeTphcHByb3ZlIHBvbGljeTpydW4gcG9saWN5OmFjdGl2YXRlIHBvbGljeTphdWRpdCBwb2xpY3k6ZWRpdCBwb2xpY3k6b3BlcmF0ZSBwb2xpY3k6cHVibGlzaCBhaXJnYXA6c2VhbCBhaXJnYXA6c3RhdHVzOnJlYWQgb3JjaDpyZWFkIG9yY2g6b3BlcmF0ZSBvcmNoOnF1b3RhIGFuYWx5dGljcy5yZWFkIGFkdmlzb3J5OnJlYWQgYWR2aXNvcnktYWk6dmlldyBhZHZpc29yeS1haTpvcGVyYXRlIHZleDpyZWFkIHZleGh1YjpyZWFkIGV4Y2VwdGlvbnM6cmVhZCBleGNlcHRpb25zOmFwcHJvdmUgYW9jOnZlcmlmeSBmaW5kaW5nczpyZWFkIHJlbGVhc2U6cmVhZCByZWxlYXNlOndyaXRlIHJlbGVhc2U6cHVibGlzaCBzY2hlZHVsZXI6cmVhZCBzY2hlZHVsZXI6b3BlcmF0ZSBub3RpZnkudmlld2VyIG5vdGlmeS5vcGVyYXRvciBub3RpZnkuYWRtaW4gbm90aWZ5LmVzY2FsYXRlIGV2aWRlbmNlOnJlYWQgZXhwb3J0LnZpZXdlciBleHBvcnQub3BlcmF0b3IgZXhwb3J0LmFkbWluIHZ1bG46dmlldyB2dWxuOmludmVzdGlnYXRlIHZ1bG46b3BlcmF0ZSB2dWxuOmF1ZGl0IHBsYXRmb3JtLmNvbnRleHQucmVhZCBwbGF0Zm9ybS5jb250ZXh0LndyaXRlIGRvY3RvcjpydW4gZG9jdG9yOmFkbWluIG9wcy5oZWFsdGggaW50ZWdyYXRpb246cmVhZCBpbnRlZ3JhdGlvbjp3cml0ZSBpbnRlZ3JhdGlvbjpvcGVyYXRlIHBhY2tzLnJlYWQgcGFja3Mud3JpdGUgcGFja3MucnVuIHBhY2tzLmFwcHJvdmUgcmVnaXN0cnkuYWRtaW4gdGltZWxpbmU6cmVhZCB0aW1lbGluZTp3cml0ZSB0cnVzdDpyZWFkIHRydXN0OndyaXRlIHRydXN0OmFkbWluIHNpZ25lcjpyZWFkIHNpZ25lcjpzaWduIHNpZ25lcjpyb3RhdGUgc2lnbmVyOmFkbWluIiwianRpIjoiOTUyYjJiZWQtYTFhZS00YmZjLTg5MmEtNjI3YmUwZmYxYWY2Iiwic3ViIjoiNTdlMjMzNjQyODc0NDdkNmFlZDMxY2EzZjYxMTVlZTgiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJhZG1pbiIsIm5hbWUiOiJhZG1pbiIsInJvbGUiOiJhZG1pbiIsInN0ZWxsYW9wczp0ZW5hbnQiOiJkZW1vLXByb2QiLCJhdXRoX3RpbWUiOjE3NzYxOTQxNDIsIm9pX3Byc3QiOiJzdGVsbGEtb3BzLXVpIiwiY2xpZW50X2lkIjoic3RlbGxhLW9wcy11aSJ9.VgYzGE_vlguWq8q7wNQ9Ce1bAcP3D6tmNnOax0locl8MYep4GeFWl904Cj6LD0hSXOk4ekOdB1hLOH2uqUBq3jxP8P_R0s_dCc7fSrXwwER4t0DNfXLnXZYVJNs_kWOLCrBeJYlLqDloxLsTxEVYaPkXfVODzfY-qR9Gj0dRunbn6XgNyaBgVnBmxwl7akhoN99rRRnEpBfKCG1yLWONJ51MiTJUwOKfZuKrpiVHzcojt6dzIDS6ipJF6zJ9zx9AI90DafSMro0NBxbmtrYxbLtXNdUabaP9UYOVGLco1u1UNzcyKQfBj_yfl05jQR874ZYyYhBkof-t-kJfSl6qxQ\",\"tokenType\":\"Bearer\",\"refreshToken\":\"eyJhbGciOiJSU0EtT0FFUCIsImVuYyI6IkEyNTZDQkMtSFM1MTIiLCJraWQiOiIwV0lMWkRTT0RETVJLNk42VlRfN09KWlgwVzhDQVI4VU1ZWTI5R0tBIiwidHlwIjoib2lfcmVmdCtqd3QiLCJjdHkiOiJKV1QifQ.CUVhX7QqhnpRg4kA9Sl96lgK4J2McDdb9VIS6iJWZf5L4howDg570sInxyTgIXA7GxaT4LeH2-IUXMzkGO3Nw2BmadavacSljwc-QEigHj1BECo3hZQ-jdPRgqAIzP1nXu62wbdLGgd9Yd_7J1XEkXnV5zeJUXv9kTYaqiSGm1BmeEpozDW61SMDNHCYjDFZ9xvdFMfvd41RrKm55dD27aB1AfFarbJtxwXCAqH8qQwrXIIqzGUVU46FkJqcNup9pTst_-XsEgZiGDT0Wy9vgSWZh4tnQpg7fjDQQc2Tm0EI4fg1q7oQdSFc2HoXt2MULonaVsas5p50Rg0xIhUZfw.F5IiYjPwrfrBj3RntkGy9w.8l5oc0CPoXpcFY1QDfIiC8fAzYxUIcmsQxCX1CAiw9ItzLkQYLsweNpLNil6Xr2QMou8eraKA2lMuR-3ZZa56mWQwjr6KgF2zttn6HwA0bExEMHza8u4_KLoKQyzqnUNdNSH55pP6hLerVXDR53x_weST_ppkYUJx-iDtwdlMsm4dpQsPZlCecXMF6H5TjRUv7oudrYJf-hBt-SKjykHe61Wq_nFBdaqeHxB0nDEMWEgOqoYjWXangPJSN4LZOR6zuZ0nFUoFqMCkok7aMpJv-LI2_1r-1LTNumQoMIj9j0VSobOqeNuUvb9FFS7l08SqrX9aTweqU10VM0fiD9qU88t-RoIxMBMjahQ_Ms6CwMVdvjFBeu_gcxFWUHMPcClvrT5cnciVQsyrBWA6TwvP5oH4e5DsCd9IqS6hqlVnTK5AQZdXaZJOY5UK0zsM0Avesc30pikRutDDqxziUx2Jkl9_hP3H-PKdBmB26IHEY2AO80yWybmkTTEc6JzXg8U3wFnHjXZw2Q8b0TB1nIvvPCII-EMILU2WAuCy-B3Pk7t66RUfmgHi7p1dwJHsS-8QsQQHYDtPfpUvUdkHNsgcjZ7mHY0_ExYlA_PviE6LQQmcXErSLZRBrCMZ3jb_DqXuEnVPqFDT5sEPb65kjoHtWWyFhYi3jLvpGWK0xNwAcsI3qXw4oUuV3Z-o_dgxoipbulEhcpu6ydxFFw7asz1sMP6HoDEQb-oVPlc-0hLww3gyf8Em-aXIfwUyoAmREeDpX1Hn-5_0QuY39y-0WnLQlHLWEyGLSKtz-ZguBpZF9MQLTTOzqKzyWY2flBEBbhivOLNFDiEz8yUBXafqoeTy8gV-PRpnhL5buKkOHHl8CJJ1wqdsMIzZNZkNDTHtgJd-Z3bv92lScoSBHL0Y5JJ_8mRVaru-byNGXMz7au5UpZA0k_sju0VomI6d7Y0IgIQvpASwJY-GQTHaIOpPi1eNwuvxXRKBJ7ZHAM-lojaEC0-0Wz1xVH1RlkBZOYz6S4dyYDBabqfhV-mqHJY-7EeDH12JEcULBu1W2j0Eej3mkNWfiq7xXGBkd8paL8vHOEiD9kcKEt7aoKZSONPmprgZVE4qIV4bFapCpYdyOmQsmXN5eEOFD8dKwrt_MgmvAo6_tsryObj5viLDN2-nxpIGjnUHmhLuMddGEMJAdj2tq4LmXJnVOdl5lEaMwei-pg3tV1RvLmlvt8DpdAYSHiqTqlpkHlZEgZnpARL-ttv4KmgYZH8A7DCRyECdM3-v1ftRhqPXfJc9qHJayqSTc3bHA3z5ObtWFltju35BY48sna8jObyfD_yQ83CvRD0sClbIsJW1c3xutX5RT8KT2rTI-vWjIcDZQ685K_QBWhRKbG_gyMX-cRzPJk-nFsK9e2CSMaqP4XMWgbUYvn5DEA_HSC8imI8akljoYm1Wk0ZOYcsd0pcyNeWsnXvJO2cUb_SLt3hedSI5g7Cq8SyQtQaJ3Blxe6W0RdCdOWwCb2e92ZgLuJdMVBOLQ3EeEWTUlWyL3DSfXRLccIU6nK0fQXe954_Cm-syscEFj2lidPcuupY7VgLzf315ECQU4RyJCTf-ULPTbpRrlFkcTtCx1jv_Ep3ItR9WP_UtYr50MsSnjovu0zxzwpPvb50YVVAQPcylrVV4ToCnMwEZLpjm92VOYjRsO42MbwmioLZ8XzWYw1vAq1RnyXwrIg6M9zeZOLx8vWfVvY8WNLEditJhpe-l8fivwb11V8mDvmLF-YJuozMhxpKKxmd04QMOQyt29J0FD-CKTWsjBlVTgN8Cj-mFVepXjSLb9dtPzt3e7SLGc8pGFgEXVlDIhRksyPnydZHbyRWfl-wOFUutxkAf3kEHgwQ6--NX6Fp5fsLsn-8bnHSSLWpkdBnWJ94KZf4-KZ6u-or1yyNNf-axVcTuBaDzXgW3kC2yAtgQtD04CU1am4EegjfrVnpcFsmBxkIeqzfMVO-zQx7a51j6V_7vEe1LGgUzl1ly4O3pLuuVlFflQikIuq0__YO2pOzZKH_mj918BHVLEEshbPxM14TnVhM97qxciM93z-DMflskXYmTZMdkjkvTCuBq1Z1wVdpOiHRR_vxfVrPcElC9iUm1cVPzPH1o13XjZ4Lvsfd3cDBXvJZtzzfcksPx9-Bb4iOlb2QfUBPrAKg69iLuwdA6ZKWzm-Q-JhgjXIdQqAQlJW9piKTrI6U4OgFqxVqdHf3TXBO57CZB3YFJOVQzk4Z-UHuxlYnFEYZl1C0qjiEcxKQlm1QVvWNc-dv2hUjnCjZtlCeamvbUwIHcemfN5wSh_WIn69JB0-HH0JyIptuTNxsVy1CnrNnJ3pHKPyW1ZtETaJnBxJHg9XKhhsoW1LMBlkJVrHslck1x_triEwK34iV5VDqO4y35TP0qqwtu_7CBLux14asw3Y0twWDFwFQW_3xv-skJoLx7iI4bgELYgY7BVRYp5NvqAvxx1fmNoIyjkMATzS1HcTc9gwmRfTO2YeBqz6sh0ejV6-MSIY7vQubPJRFar4K38ltFzszu9DGvPkQKwkQBZDL0jTHJQvyJL3HpK7d3GeeNT9aUVUUeebu6KSeGXyQYDqn78tXknDBqm9H-HW7cu1Q7yJuAsAmYrVGHroR5rhMt1DYP8cNb6dTPxFBtc_RlqL7R0Ah43nFUlqpeS1NgQCVvRUI6os0FpXUhIfYnC6wBk_9JcNRxuG9p-gmGy3oddH59OYyWwOS3u05UyJqBNECao4LwKtoHd8TFlIy4KeqaEWJKNYrAGw6v7cTRI8GFkauBV8zp4O2iRi2Cw0i4j_sY_dVU_cpUSryp3P6qB7sLWe9qaZVTu0QPZMiRBhP1l6pljkrg4KtmxpeYyXEecVYIxgTZTO_PTwgP6bjMzOcCTjdDYI-NzBqg1B3XsPyIL2lsF7YS-MaFvwh1-q4rOdTCWLvX-_Pqls2JBoKXfzRW64gH9IZPQPsto1g83FCDJO5pUJX7bZsp3p0P9q8z5H2OCIYrQm5LjJDs7oVb65k2_7NgAIxo_bYC8RYEwDKuf0x3VEamapqNIZH8JKmgMCkX8nifcvaotcTdI4juthVnAjh6qwDiRhJJnH3H-oPjPIfozkxhXzOVg7FG3qrFS0yjsvtU8OgFB6_KzAQYgnQVmEdhRcAQEMi7owTgIXccUxJy6ACxi0qQdR_nGo-8bQu2pVBNGOAbYsQ-j82lbshzT-PeCmJXGU7qdZKZNXpepRL-eFPTCJOcSUYbY4pxSJDW5mdBd2Fsg1YOmhVt72H1TEIubVZ80FtN5CwlAAfw4EclVPtEga4dB67Ru0qd5V8uTvy5XyoKe3n8twMYPKwX7NfT5LDdxjjIg7tbPIXrI5EbvqdC3g6TF8NvP32xjmR3V9Ko2EjDTsr_-3A2ONiYCaZJj9q2Zq1sEDKBL6yIAYLzPLLt4NWGkcUClb5CwXLZMulBZKUuribokjVQOCKMD8jbLUmpluc_UjzCw-4Gj6rx_HvlwnKuHCga91q044aE1a1-zMyUcZmq3eFetUmBp5_nU1lNMNXsxKkxy7YEMMdoj5NlMmM3Acbru0JEzIlpvftP4z2TKG1hP-kwzZlAe477UBxoU9VopJ6Am9BBiS0znwGDxBPVgrnTaI4YL7H9Obl0ZhOvDHl4lHxDOs2MwBHNGj2EqBgTQSfhUhXATmIJcsn5UAhuvdRHFcDV6mDvTYMC1f-PhlIKF_VL9jZwOs4AI-azjpvvxQik_gEbqzwarLLS9mL_ufv1eGZxBUDQGWGyfSNZEy9YVNyO4jVt3PTb0jMEseA1sbWJ6gntvgCsK2Hoy7tBvePvDbiARVlk6c3RXkMD5qDX5Oe1p5bkEOHhTuRTbBJnXmCUuhyrAU3iw-F1zP5ekHjTXfTOpYAwuwaNdHIYXMDbhNdg-5F6QYlwHDgmAmXl5YSfxAU-x9U3q32XgpJB3VpWidzu4LylG5F-S5pM2Rlmkn1LpyAvSD4ooHLO7Eo3X7y0_lR_3LIjossCkakNCsQ7zo3o77XNXvarH41g3IyXK_CeYdvStC0mt0_m4TBXF7xt_uOWi4jJ3tZ_IM1ZxcMss9o4eExEwi_OsBqEzpOABBmNGYt6JgdBzb3yYgv488CCp5dnBj3gSOtGdygzQU-Qg83UlgcuOIzksqCg6TB-n5SCQ6Bq0NUPTyY9ukPkLMmQPiM8amdu0_Zi4mZoehS0asH0ddFWvQJIWK8KA6ZtcpkUCO_SmI5HfWjOU8tx--N_0X2Rbc3gAWq6xYbgEWnptQptdsvc_zFmotNTWWhjLZn62vE7na1E3M6fC54e_FXKozN8HR1b9Gf6-mc-G7vFmvgHZ5A0t1L8a4_JjOIkWIyc7rZauGgOcR74dRYQ3MsF-rjwxAu-DJd0bogNyUdV2bjwuqYv5-IZMq1w-yhE5dblmxIWYOY9LBAXwabQ9HX-ULmOaNTcA5i5OEJg52aNmGJtwdYe7xIIyGjqyirk8Z9dowHnu31OoLx7AY0R93Kf9RWpsuFPZXSWliRCw2wWQcKQqS8yMSa3uoh_qxGdJLDV-J8QLIXg9zq5gP4EV9FAvCLQLpx15xnis0nDHaRbdd6xVJWlnrc-l5t7F1o33o-hGv-pmrG3zHGdWHy7lm0CkBSGit8lycV4-kZk_hRyHFlu8JmjBgaR-xWIor9244tT_tCgwkfX9_438lV2Q5jx85PD_-_HupCS3xQIb686vQyByVQGD2B05MFctJ-nA.uj_QtLknOqZK-Cn_HCW9owO9YkBNEz5HRbHd1R9lnSc\",\"scope\":\"openid profile email offline_access ui.read ui.admin ui.preferences.read ui.preferences.write authority:tenants.read authority:tenants.write authority:users.read authority:users.write authority:roles.read authority:roles.write authority:clients.read authority:clients.write authority:tokens.read authority:tokens.revoke authority:branding.read authority:branding.write authority.audit.read graph:read sbom:read scanner:read policy:read policy:simulate policy:author policy:review policy:approve policy:run policy:activate policy:audit policy:edit policy:operate policy:publish airgap:seal airgap:status:read orch:read orch:operate orch:quota analytics.read advisory:read advisory-ai:view advisory-ai:operate vex:read vexhub:read exceptions:read exceptions:approve aoc:verify findings:read release:read release:write release:publish scheduler:read scheduler:operate notify.viewer notify.operator notify.admin notify.escalate evidence:read export.viewer export.operator export.admin vuln:view vuln:investigate vuln:operate vuln:audit platform.context.read platform.context.write doctor:run doctor:admin ops.health integration:read integration:write integration:operate packs.read packs.write packs.run packs.approve registry.admin timeline:read timeline:write trust:read trust:write trust:admin signer:read signer:sign signer:rotate signer:admin\",\"expiresAtEpochMs\":1776195942365},\"identity\":{\"subject\":\"57e23364287447d6aed31ca3f6115ee8\",\"name\":\"admin\",\"roles\":[],\"idToken\":\"eyJhbGciOiJSUzI1NiIsImtpZCI6IlRDNktEWUFZTFNETzdMWkhfNTBNTjJTU1pOQl9JUEhEWUNRRElMUEEiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2F1dGhvcml0eS5zdGVsbGEtb3BzLmxvY2FsLyIsImV4cCI6MTc3NjE5NzQ0MiwiaWF0IjoxNzc2MTk0MTQyLCJhdWQiOiJzdGVsbGEtb3BzLXVpIiwic3ViIjoiNTdlMjMzNjQyODc0NDdkNmFlZDMxY2EzZjYxMTVlZTgiLCJuYW1lIjoiYWRtaW4iLCJhenAiOiJzdGVsbGEtb3BzLXVpIiwibm9uY2UiOiJiZmZhNmMyZC01Y2JmLTRiNDktYTY2Yy00YWZlODYxZWMxZTEiLCJhdF9oYXNoIjoibFBHM0lEMjd5UkdiUmRONTdEaWxDZyJ9.VF_FV8X1cKvzYI9er4n7tbe38xWwQq34uqY7Y_CtJRgs0D7JYrZBAXiXxPlODszA8vpqdHC0yzs-Txr8QL0KZIl4Mqaw0eaSTG9q5J-HGKUdtB8Q13o-06V9xhv6WmxG90rkqEy_a3e8zKC3_wpgPQ5-6baVsnoqr3vhsRmhVxcgGhF4XieVHtJr92Cxbu3kYTKKDygiCSxL6DSczrX1XGcn0OcQBzL7S8UyKj-7RpvWGPycS1MSJ9tC5atQGB3ndo6WwJotypC0J3KBzk0hwDBPb533XsiT3wmKGuR9PSKd1eozmo5okDAmRnrvjnxPLU5GIrdvEwoaX9kBwXgiRQ\"},\"dpopKeyThumbprint\":\"NJvn0NmVWUBkUIXGNHmKs8y4Sa8dZOo22YAXqjXlN3Y\",\"issuedAtEpochMs\":1776194142366,\"tenantId\":\"demo-prod\",\"scopes\":[\"advisory-ai:operate\",\"advisory-ai:view\",\"advisory:read\",\"airgap:seal\",\"airgap:status:read\",\"analytics.read\",\"aoc:verify\",\"authority.audit.read\",\"authority:branding.read\",\"authority:branding.write\",\"authority:clients.read\",\"authority:clients.write\",\"authority:roles.read\",\"authority:roles.write\",\"authority:tenants.read\",\"authority:tenants.write\",\"authority:tokens.read\",\"authority:tokens.revoke\",\"authority:users.read\",\"authority:users.write\",\"doctor:admin\",\"doctor:run\",\"email\",\"evidence:read\",\"exceptions:approve\",\"exceptions:read\",\"export.admin\",\"export.operator\",\"export.viewer\",\"findings:read\",\"graph:read\",\"integration:operate\",\"integration:read\",\"integration:write\",\"notify.admin\",\"notify.escalate\",\"notify.operator\",\"notify.viewer\",\"offline_access\",\"openid\",\"ops.health\",\"orch:operate\",\"orch:quota\",\"orch:read\",\"packs.approve\",\"packs.read\",\"packs.run\",\"packs.write\",\"platform.context.read\",\"platform.context.write\",\"policy:activate\",\"policy:approve\",\"policy:audit\",\"policy:author\",\"policy:edit\",\"policy:operate\",\"policy:publish\",\"policy:read\",\"policy:review\",\"policy:run\",\"policy:simulate\",\"profile\",\"registry.admin\",\"release:publish\",\"release:read\",\"release:write\",\"sbom:read\",\"scanner:read\",\"scheduler:operate\",\"scheduler:read\",\"signer:admin\",\"signer:read\",\"signer:rotate\",\"signer:sign\",\"timeline:read\",\"timeline:write\",\"trust:admin\",\"trust:read\",\"trust:write\",\"ui.admin\",\"ui.preferences.read\",\"ui.preferences.write\",\"ui.read\",\"vex:read\",\"vexhub:read\",\"vuln:audit\",\"vuln:investigate\",\"vuln:operate\",\"vuln:view\"],\"audiences\":[],\"authenticationTimeEpochMs\":1776194142000,\"freshAuthActive\":false,\"freshAuthExpiresAtEpochMs\":null}" + "value": "{\"tokens\":{\"accessToken\":\"eyJhbGciOiJSUzI1NiIsImtpZCI6Ikg4TkdITjJESUNPUlE5QUpGTUlFRzlXWVdTVVlSUUw0LVJXR0E5QlEiLCJ0eXAiOiJhdCtqd3QifQ.eyJpc3MiOiJodHRwczovL2F1dGhvcml0eS5zdGVsbGEtb3BzLmxvY2FsLyIsImV4cCI6MTc3NjI0MzIzNiwiaWF0IjoxNzc2MjQxNDM2LCJzY29wZSI6Im9wZW5pZCBwcm9maWxlIGVtYWlsIG9mZmxpbmVfYWNjZXNzIHVpLnJlYWQgdWkuYWRtaW4gdWkucHJlZmVyZW5jZXMucmVhZCB1aS5wcmVmZXJlbmNlcy53cml0ZSBhdXRob3JpdHk6dGVuYW50cy5yZWFkIGF1dGhvcml0eTp0ZW5hbnRzLndyaXRlIGF1dGhvcml0eTp1c2Vycy5yZWFkIGF1dGhvcml0eTp1c2Vycy53cml0ZSBhdXRob3JpdHk6cm9sZXMucmVhZCBhdXRob3JpdHk6cm9sZXMud3JpdGUgYXV0aG9yaXR5OmNsaWVudHMucmVhZCBhdXRob3JpdHk6Y2xpZW50cy53cml0ZSBhdXRob3JpdHk6dG9rZW5zLnJlYWQgYXV0aG9yaXR5OnRva2Vucy5yZXZva2UgYXV0aG9yaXR5OmJyYW5kaW5nLnJlYWQgYXV0aG9yaXR5OmJyYW5kaW5nLndyaXRlIGF1dGhvcml0eS5hdWRpdC5yZWFkIGdyYXBoOnJlYWQgc2JvbTpyZWFkIHNjYW5uZXI6cmVhZCBwb2xpY3k6cmVhZCBwb2xpY3k6c2ltdWxhdGUgcG9saWN5OmF1dGhvciBwb2xpY3k6cmV2aWV3IHBvbGljeTphcHByb3ZlIHBvbGljeTpydW4gcG9saWN5OmFjdGl2YXRlIHBvbGljeTphdWRpdCBwb2xpY3k6ZWRpdCBwb2xpY3k6b3BlcmF0ZSBwb2xpY3k6cHVibGlzaCBhaXJnYXA6c2VhbCBhaXJnYXA6c3RhdHVzOnJlYWQgb3JjaDpyZWFkIG9yY2g6b3BlcmF0ZSBvcmNoOnF1b3RhIGFuYWx5dGljcy5yZWFkIGFkdmlzb3J5OnJlYWQgYWR2aXNvcnktYWk6dmlldyBhZHZpc29yeS1haTpvcGVyYXRlIHZleDpyZWFkIHZleGh1YjpyZWFkIGV4Y2VwdGlvbnM6cmVhZCBleGNlcHRpb25zOmFwcHJvdmUgYW9jOnZlcmlmeSBmaW5kaW5nczpyZWFkIHJlbGVhc2U6cmVhZCByZWxlYXNlOndyaXRlIHJlbGVhc2U6cHVibGlzaCBzY2hlZHVsZXI6cmVhZCBzY2hlZHVsZXI6b3BlcmF0ZSBub3RpZnkudmlld2VyIG5vdGlmeS5vcGVyYXRvciBub3RpZnkuYWRtaW4gbm90aWZ5LmVzY2FsYXRlIGV2aWRlbmNlOnJlYWQgZXhwb3J0LnZpZXdlciBleHBvcnQub3BlcmF0b3IgZXhwb3J0LmFkbWluIHZ1bG46dmlldyB2dWxuOmludmVzdGlnYXRlIHZ1bG46b3BlcmF0ZSB2dWxuOmF1ZGl0IHBsYXRmb3JtLmNvbnRleHQucmVhZCBwbGF0Zm9ybS5jb250ZXh0LndyaXRlIGRvY3RvcjpydW4gZG9jdG9yOmFkbWluIG9wcy5oZWFsdGggaW50ZWdyYXRpb246cmVhZCBpbnRlZ3JhdGlvbjp3cml0ZSBpbnRlZ3JhdGlvbjpvcGVyYXRlIHBhY2tzLnJlYWQgcGFja3Mud3JpdGUgcGFja3MucnVuIHBhY2tzLmFwcHJvdmUgcmVnaXN0cnkuYWRtaW4gdGltZWxpbmU6cmVhZCB0aW1lbGluZTp3cml0ZSB0cnVzdDpyZWFkIHRydXN0OndyaXRlIHRydXN0OmFkbWluIHNpZ25lcjpyZWFkIHNpZ25lcjpzaWduIHNpZ25lcjpyb3RhdGUgc2lnbmVyOmFkbWluIiwianRpIjoiZmZlZGY3MWQtYWY1MC00NWQ5LTlhMzQtMmNiYTE4ZTVmMWQyIiwic3ViIjoiMzRlNjllNDdkMzE2NDdiODkzMDc0NDk0NGYyZmZmNzAiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJhZG1pbiIsIm5hbWUiOiJhZG1pbiIsInJvbGUiOiJhZG1pbiIsInN0ZWxsYW9wczp0ZW5hbnQiOiJkZW1vLXByb2QiLCJhdXRoX3RpbWUiOjE3NzYyNDE0MzUsIm9pX3Byc3QiOiJzdGVsbGEtb3BzLXVpIiwiY2xpZW50X2lkIjoic3RlbGxhLW9wcy11aSJ9.BAPTbUxstvf4uSVv4bcKBCxCWam0MHZ8KxaaqIygmYnTng7xnoN6x2ub6s0EjAbQRY7M67gP_ESywOOMkklH_iIXEixCEQLueAIyvbFmo21ssmDY2SclXtInuXsIosZfKpqraYcvn7nO9DdqDa44hZ6OVbFJTkrGjJCjazhApR5VD5hiAK53_swYhVPuPXCXNU38aExVPPazAu4C4QuDBJuy5Rp4tne92Uzo60tad-ojOMGT-7ILkDWqzp_SPRSuvbQuyzQEjBGGljSeoUqUnRg7Q4gj1u6XwyKMhTvbA6n6KtcgsPGLK6_AzspFqxOuMicjgcvY93pcnnm62b8EAg\",\"tokenType\":\"Bearer\",\"refreshToken\":\"eyJhbGciOiJSU0EtT0FFUCIsImVuYyI6IkEyNTZDQkMtSFM1MTIiLCJraWQiOiIxRVlZNFdJNFJfWE9HSDZVRFRPTFBUV0JQSE1QUlZaWURBS0FaRjcwIiwidHlwIjoib2lfcmVmdCtqd3QiLCJjdHkiOiJKV1QifQ.OjzFbXMVmR9utsZHxNNBb7lKfzW1tuD2V7uE6_WIo7viJTqvK5Pc70225amfOn_ppciNbsQtdWqtULoybzWVR-dOKJ7xN8vDcmhVJCvlHOTdVVZIw9fkdRDpsUXkabUFWC8hjpAd1ol-x5Y56EpB4LHmEBYRRV2g1g9lBMcnK8ARBoLwgrsK1xsR_Vueg9bvbcnbQdDoi_tgV2jORtPQ3WUyzNECt8WY0cMnU7AP43EcU5agg4r5SLJ4qYCoGRrEasAaH3kIEQaZLRqIlCNF1x-77vvMdYVDpqkLLgQF2bg2EM32_DIyccxSzdKFqyzTWieOfz8nnR_cgdpWITOjug.-ZgbI6MR19kz4G8ueQfOgg.w3F0J2tK722wQD6NcNcIrOXtj4ZkmYNy-mf-aK08l_TBUpHwqTByrAz3XfmD7SXtO4DqC0H-BdjxeBGbnnMxTjNG5BwtGN0wNZbYPd7yBm8eJy7ay6VhwpRBHDUm0UBUL-Onk0mcgD3vi_POkeBv54zFFJBqcijN3ia70Eim19HgxLkFop5LYebbWkX4juRRz6fI5KLglBrQnF6FTPaz3gq65PUbyAW1qQpdv1fw3n6S0YjkQzV_96sBsx7iLexfT16AwRRfmPiUOTpPljcfDtSHXKK4n0y4TVHdDb5FoOmf8WuloMAVPUzVjVuwJqZk169I8Yx-eyP62yWJYKNNaPE0-YQ9b7XXub2U3StSSMagPTNM8RG3Yxe2pnQDIoW5v81Q6Qdek7xktmooL8WNnFMBd4udNOsMCeGk98QTuXHXVVKq4zNuVuBgFoCWAWMBGGNVZXXtiELgwH3lE9IoUlbdMsGUBAQ-vcj_QFlzAGGonAp2YUMX3pY-bnqfzhp0cWMjBJxUK8-iRWmmw-1cMKtNSEqlg21bEDUQBFDJTMJENC31kaaqCfny8wNu90Oi9faTzx_bjAtFiH83XB1c-J0eTa5BBdWbd7Mu7U-hryne0RWK1wCkf97vo9aB0xclHxnQA2v-gtp-rtpb8QkvYS91D9YvpHyuPEhkQK3liyKRXvQND-6tMwDrcFoj9_7XyukAjw1WEKnjQG7u9TnH81ejB0nHVDOhwWGMxMIA8EO0_ql9MfGvIN3Cy_O82MlIthSn5-V7aakV_dyZYkvEcKZ0UBrSxCwQSKAS9cqmew0ud3fzzp8cAqwNMDHvkECw_YN8LBJN7FfpPXxnOsKveySv-IISsOxae9A5i9BPYh0OJ0jxKxI2XmnOqspdGZu-5D5JVZDBrqlDM4b84SECSuLnDkejV7_N1Cwt0YogU7lckvaFCvmuQ0xmhdWBOvlXtyEgGjr7HpviX_64utAR5ItsXu2QK0tVq_mmXiL9nNqsPqO13Qy2GJhtg_5GLXVV7GFztNVzaxu1Yu8tSEuhMWJ2aKx5xkaY5jr4pzW9gkgx-TQBQrkwSvKm2NVGxX74StxQwo-3vM0V8uUhlGxOBH2WNC8SbsPXdwsb3yad2c-0itweIm9znnGg7ePxl3NQFLVaBQiW1wiqJta5iSb970fTJ560wsNt7ooBDw2Ux5lGeEGNJC7F4X6KjuvZsONSJRkyguiduDVDytbN_PAvIGPPFsCNzdY3K9rw-fd3vABygfYWxhUacWTbHq-jFfYHijBJPQ4J7uzh-gr2O5dYODCg8uo3h1Ka-p9tXX1D_uLsfjHc62Sp3LaFZ34tFWzq3cZKKllmDWgpECgySFXLKHKRAP1GCahWkgyf3PW1j4liK3Xxaqq4W1-UokwOLyacWD5Gw54JgY2o43BpQZuK3pRjSaoyB2PErrNrzsdw9f_gHSa8-z7xvoQSjegyIjAB9UN0-h7pb-cozsYsvhsFm_4E7d6aCtmn80QQl5w7_8MyuuVngij65B8jRXxlUog-lQGSm-q3ZyMrWK8puR7KpokgfUl1qwOM1N-5WxDGHQHFeD2Hm-9mSmQfv3coF1rHmh65fk3kzubaMZoPEXFTtEwQtmhRVAS5F4JFniT_hX3xuthylEtW12b20EkLWfnSt_bH3tL0Ig48I4Z7P8w_v7kQNS8qjiAMaOstE48fOfc36y5Pk89uyDC_Zji2exOugPJ8E_YeaEhzhFeMHxwEq2JGWAzXwhma1wZ8BkNNWyMOLNhd5S0--OqnhArs09RCEpzpoWSNDa3aInE4QjNcEdQsMFyyCNa_1Pk9qXM8DLDPueh_BS7EhVhWNOoYLmBSZKFZHksB6LQngbWr9CS4RHedCw1zi5KriZKDSkLGwFrpBeXs2d2UGPqO-Wyz7ea6wtZ4MLWXpXJASlr0OYEEvR48DphIs--UPvTRf8pyg0O5ZBk45AwEl7twN85IYwlX01swbVe9V8Eur1hJBCKPUYn9WBs3SVP5wYURnO8ukOt2UIQCPzXG1qGTmGk88Df-TlsunUmVsHnPChzGxyew1FCwV4R1YDuc0BBd3XH1mlv2656lQ01Fht9l-gt06a2RwIJTZL4y1Vh3DYcvKWNBw-LLGjo7rOL8u8bADx_-cscu-Rs_n9PKFzuQfu5VZsRpMiIIJ8qnEqaHX5Mcy70gbRYH91mDXEdpAYykr4olwB1sG-yP5H10A7nKExx24YoToZbxgEyZuV7HZ5xrcreSIQ-uFH2S6I7nkYhm_3QshyHP1kn4UrUemrcVpAa97x8IUT6LSjJEQ6i6vH0akluHMFjPcf7o1UndrVUGOlux-kd3i7LD5Qp4x1fB3NTaOoPvsZGuBdTxLh5nxO55FU2afldTaTYVhgm9V3yrJ16p2wWj8cR8XbmGk-0ociK0FLjVgSVBK9oPX5OhMkYQYI0JQgdLfM_1PPvxBkJPU9Bv7OuVc3oFm9Vkf3CDgl2kNh9HN7Pi4eUDydqgwcO_WQqpLkbHV-V3IAMyxJRyvLBvNDkOLmyDzbg5CCUwVZuKugASUoud8qEqn-jupPGXxqzpUi7cBrgxM3CfULa3idzknLszw8K9utCjsazoyewSiWUN7V7L6b18Rp4gLMZ9M9NBRMHNa2Uf9htGb-HK8L0xNKlab6EYY0iNMRV00RLbHlAbgKntj8pfD0Ox5y5AgqFNxJ1m2dWMoo_fsXiYNvAYN9DBLhewds1SsOQ4X7Q-7FCJKIceeiIOUbbpoCqJnxg_ZF-eukpA5QicuZv60qvbp-QBFt2x22TBIFtphJB-uNudY2_inRyt3VYZJGr-juUgxaMDTJ8WDiLyVqO_Dnd-vvU_Z0DF4xWiuVi5LVuYPO3etlT9ibfqJKne6Wf8bO2zQ7-A3KMgB1VY_fZmG0-13YHunTqGhIhLpkAqJJgcb8i3CQK0csGADE-_pLl7BwfbAq1WKAVtmU5QT-uAfvn1mjAv4Q6htO4wSzCW41Ij_i_VifLKZ8S_cZADmWxxBtWvwxgBfxIeoxY26zk0E63j6ZhmqVqM8bt-IRlm5Jfc1D3wWhZ9Tp-BGT4qZSmP2nVzyvyc8bE0wF2ANIF-Ks0Dh8KW9XRd_bma0BupJAHooAh5oFHhvr8qThWYGRdY9E4Jk6XkTElVe9X8FpimkkEGyDMltmCScbYDR3QGsHURbkBHYcQ1u6nb87PravJrBCd9Lw62P0ImdSOzHKmgM2xDkh7M0taCG_7kM5sJDplhJD14Oiz3CxlOTwci4TRr9kICpkdp0kr10xvQi_x_xTuxUynlKHl4OvyQ7RksdB39w1be4NRo4wYfbzAjGdK_KUwdQSJwyAK4wh6SKFnc8TfaVyqp4fy_drb_TAxH7nyHkeS0m9FRZOjaYmXNko0dX8_djS7hVdxcdjLpX50r9duN2kJ35cMbszsRyhnXr4JuIdVziEvSRs23jKgDwKXFld7uvV6QPTa6eEctpJXTlUSNZMhJxEfT-pO6Dbmu5oIYzus5ogQRqlohHyVOOndFhhR2T4MgxVczLc7Nu_M955mnNdGn6Dwz_kClAMOxCkLB6HuGF5pjoTb4UJcL93LP0Hw7FiKoaBectNrQPEyk-c2ycY2rFuoyuvNYdBBo-FPnTpP2O89mjkhL8-9RcFmKxN7UHniK2WDdu0uR0y3icm6zH8ABAZsduy8mhyDqx2YNQjhy5tfmoxkAIVUsL9YAt1o45wenfI1dW_p4bnxxEGVl3mUbRBswN8wc3CuwsxcWRNRAVZWC2WADLqgMUkInXDyLcijfoJ1LNxCo_6og8UIMKb7ix6uao4VSMnYO9mNE5SCq5jalPkjwhXfJiJL9RdRhB5rd5t3Dw7OrJwvcSY1EwVMT7z-l-6Zv-q7Q73NlzHU6Spx1AwrKx3fAIEX_LRULI-15Zsp4QcFc4qtAkzw07CTGzcBPQD88zHq3VcL1zVzToFO4f-exWsg0QdXwdipI3EtV3M-DyKXvHYNBKcpeIG8h95_EfcXfWXxAszyGfCDdGY_bxOzi9seh0A5LP0b5ZJa3lwcFWYtMEGL0G3yNUse-Aoqr0mZtdslMiHk7LO__E7fb3we82QwA316JSf7VRhnqSZIo-EuvKF0F2J2wmWea99bbD6wZPvJ6DD5YPfnTZ6ApXiJhnt8M5FCbjqefT3mwMhiMEVVFwKqqR8nH73NJtfz_lnfrWKRJ14_MohDCXFCluFWmSWyJ19e_co7of-_H7BrYBog9jmuJCFw4a2dUcE1tffnDI-sbsP8YdwOZ-RX6cEmllnCyhRFiC8UXACRmo6Jnszuz4UgXnz_DzmNF_mxzLg2TJzF8GG-63C25xE-lA3iYABoMQiPus79ki8gqxx_JW1h2yph1sghDHyWnBYKM-Ev9iDLXBfIhW2J8DYEDCdSqQbw190-sQIN2D0QQI-CP1O3MXze-ZZ8sZD4BU9rjnMJzmP7P_HG7pH-UqSbb2fOG80tZksYicLK0FVx0hIzAiB57ZIKqTOIQ08LhgF98RRXEZ7M5oz4P4dg4vaWHiM7lD92lXraJQ1KZcgBCGDyCHQWPrBzmGi9TJKrgkQvJwYPaxT7AazSkWsMDE9tWHX0LN_3BS48-ntxWmzBP8ocYudCZUo7hS0V3AJ0-KS_BYLY5KM-MepF2BYnN_iPn_tfuuCyKho_lw6QeiyrnWK1Yz8IWSoPueJ-ME02YLX3P9KZmN3dOD8zIkbju03v4PxJSL5yLtgHwmjRkYQ.cjOvEX-7aFRdot2RsGMsT7sykvFcQPb73BRcWRYb7us\",\"scope\":\"openid profile email offline_access ui.read ui.admin ui.preferences.read ui.preferences.write authority:tenants.read authority:tenants.write authority:users.read authority:users.write authority:roles.read authority:roles.write authority:clients.read authority:clients.write authority:tokens.read authority:tokens.revoke authority:branding.read authority:branding.write authority.audit.read graph:read sbom:read scanner:read policy:read policy:simulate policy:author policy:review policy:approve policy:run policy:activate policy:audit policy:edit policy:operate policy:publish airgap:seal airgap:status:read orch:read orch:operate orch:quota analytics.read advisory:read advisory-ai:view advisory-ai:operate vex:read vexhub:read exceptions:read exceptions:approve aoc:verify findings:read release:read release:write release:publish scheduler:read scheduler:operate notify.viewer notify.operator notify.admin notify.escalate evidence:read export.viewer export.operator export.admin vuln:view vuln:investigate vuln:operate vuln:audit platform.context.read platform.context.write doctor:run doctor:admin ops.health integration:read integration:write integration:operate packs.read packs.write packs.run packs.approve registry.admin timeline:read timeline:write trust:read trust:write trust:admin signer:read signer:sign signer:rotate signer:admin\",\"expiresAtEpochMs\":1776243236072},\"identity\":{\"subject\":\"34e69e47d31647b8930744944f2fff70\",\"name\":\"admin\",\"roles\":[],\"idToken\":\"eyJhbGciOiJSUzI1NiIsImtpZCI6Ikg4TkdITjJESUNPUlE5QUpGTUlFRzlXWVdTVVlSUUw0LVJXR0E5QlEiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2F1dGhvcml0eS5zdGVsbGEtb3BzLmxvY2FsLyIsImV4cCI6MTc3NjI0NDczNiwiaWF0IjoxNzc2MjQxNDM2LCJhdWQiOiJzdGVsbGEtb3BzLXVpIiwic3ViIjoiMzRlNjllNDdkMzE2NDdiODkzMDc0NDk0NGYyZmZmNzAiLCJuYW1lIjoiYWRtaW4iLCJhenAiOiJzdGVsbGEtb3BzLXVpIiwibm9uY2UiOiIwMWIxY2NhYi1iYmM4LTRjZjQtOWZlOC0zOTMxYWQ3YTJkOWMiLCJhdF9oYXNoIjoiVVRmc3NvaWJkUTFEM29UTFphMnlnZyJ9.ZWgl9L3OfXRvrrRsuHaaMXM-GVyYWjnF0PKI2Z4Q3xaCHJVY4dnvs54bBhjqYYWiaq9naM2KdLOTc3_KcAyiTPkqNbQPmHbxvfOAgYMt6Y1Og3lhcuuK2Lx9ZAIKBTlHK-QwaGANhOJ55oc9-JXsYKZHcQFMn-N61USb1fFz87ETzYfwBncYIDSCiYH3imu4uKrjvtgJ3xq6RTkKoccWuEs3cIyfc2xVC5sIk333tParluN983CyRe6qjMnFq336DzfNB8oGW3qVNuXfZaVyzABdrHyWXrwkTg_6wbPwTFHX1TEFOcszKEWV3SP4Pb8Sp8HuqxoLdMxdrLyQX_E-CQ\"},\"dpopKeyThumbprint\":\"DMsuRsgxj4LVVAKUpzryYlk0KRfhmt92uKKrhB36dmM\",\"issuedAtEpochMs\":1776241436074,\"tenantId\":\"demo-prod\",\"scopes\":[\"advisory-ai:operate\",\"advisory-ai:view\",\"advisory:read\",\"airgap:seal\",\"airgap:status:read\",\"analytics.read\",\"aoc:verify\",\"authority.audit.read\",\"authority:branding.read\",\"authority:branding.write\",\"authority:clients.read\",\"authority:clients.write\",\"authority:roles.read\",\"authority:roles.write\",\"authority:tenants.read\",\"authority:tenants.write\",\"authority:tokens.read\",\"authority:tokens.revoke\",\"authority:users.read\",\"authority:users.write\",\"doctor:admin\",\"doctor:run\",\"email\",\"evidence:read\",\"exceptions:approve\",\"exceptions:read\",\"export.admin\",\"export.operator\",\"export.viewer\",\"findings:read\",\"graph:read\",\"integration:operate\",\"integration:read\",\"integration:write\",\"notify.admin\",\"notify.escalate\",\"notify.operator\",\"notify.viewer\",\"offline_access\",\"openid\",\"ops.health\",\"orch:operate\",\"orch:quota\",\"orch:read\",\"packs.approve\",\"packs.read\",\"packs.run\",\"packs.write\",\"platform.context.read\",\"platform.context.write\",\"policy:activate\",\"policy:approve\",\"policy:audit\",\"policy:author\",\"policy:edit\",\"policy:operate\",\"policy:publish\",\"policy:read\",\"policy:review\",\"policy:run\",\"policy:simulate\",\"profile\",\"registry.admin\",\"release:publish\",\"release:read\",\"release:write\",\"sbom:read\",\"scanner:read\",\"scheduler:operate\",\"scheduler:read\",\"signer:admin\",\"signer:read\",\"signer:rotate\",\"signer:sign\",\"timeline:read\",\"timeline:write\",\"trust:admin\",\"trust:read\",\"trust:write\",\"ui.admin\",\"ui.preferences.read\",\"ui.preferences.write\",\"ui.read\",\"vex:read\",\"vexhub:read\",\"vuln:audit\",\"vuln:investigate\",\"vuln:operate\",\"vuln:view\"],\"audiences\":[],\"authenticationTimeEpochMs\":1776241435000,\"freshAuthActive\":false,\"freshAuthExpiresAtEpochMs\":null}" }, { "name": "stellaops.helper.preferences", @@ -26,7 +26,7 @@ }, { "name": "stellaops.auth.session.info", - "value": "{\"subject\":\"57e23364287447d6aed31ca3f6115ee8\",\"expiresAtEpochMs\":1776195942365,\"issuedAtEpochMs\":1776194142366,\"dpopKeyThumbprint\":\"NJvn0NmVWUBkUIXGNHmKs8y4Sa8dZOo22YAXqjXlN3Y\",\"tenantId\":\"demo-prod\"}" + "value": "{\"subject\":\"34e69e47d31647b8930744944f2fff70\",\"expiresAtEpochMs\":1776243236072,\"issuedAtEpochMs\":1776241436074,\"dpopKeyThumbprint\":\"DMsuRsgxj4LVVAKUpzryYlk0KRfhmt92uKKrhB36dmM\",\"tenantId\":\"demo-prod\"}" }, { "name": "stellaops.sidebar.preferences", diff --git a/src/Web/StellaOps.Web/src/app/features/integration-hub/integration-detail.component.spec.ts b/src/Web/StellaOps.Web/src/app/features/integration-hub/integration-detail.component.spec.ts index a74dfb5fa..28c5b081d 100644 --- a/src/Web/StellaOps.Web/src/app/features/integration-hub/integration-detail.component.spec.ts +++ b/src/Web/StellaOps.Web/src/app/features/integration-hub/integration-detail.component.spec.ts @@ -63,7 +63,9 @@ describe('IntegrationDetailComponent', () => { useValue: { snapshot: { paramMap: convertToParamMap({ integrationId: 'int-1' }), + queryParamMap: convertToParamMap({}), }, + queryParamMap: of(convertToParamMap({})), }, }, ], @@ -96,6 +98,39 @@ describe('IntegrationDetailComponent', () => { expect(component.lastHealthResult?.checkedAt).toBe('2026-03-14T10:06:00Z'); }); + it('renders namespaced action button classes for detail actions', () => { + const tabFixture = TestBed.createComponent(IntegrationDetailComponent); + const tabComponent = tabFixture.componentInstance; + tabComponent.activeTab = 'health'; + tabFixture.detectChanges(); + + const buttons = Array.from(tabFixture.nativeElement.querySelectorAll('button')) as HTMLButtonElement[]; + const testButton = buttons.find((button) => button.textContent?.includes('Test Connection')); + const healthButton = buttons.find((button) => button.textContent?.includes('Check Health')); + + expect(testButton?.classList.contains('detail-btn')).toBeTrue(); + expect(testButton?.classList.contains('detail-btn--primary')).toBeTrue(); + expect(testButton?.classList.contains('btn-primary')).toBeFalse(); + + expect(healthButton?.classList.contains('detail-btn')).toBeTrue(); + expect(healthButton?.classList.contains('detail-btn--secondary')).toBeTrue(); + }); + + it('renders namespaced classes for credential actions', () => { + const tabFixture = TestBed.createComponent(IntegrationDetailComponent); + const tabComponent = tabFixture.componentInstance; + tabComponent.activeTab = 'credentials'; + tabFixture.detectChanges(); + + const buttons = Array.from(tabFixture.nativeElement.querySelectorAll('button')) as HTMLButtonElement[]; + const editButton = buttons.find((button) => button.textContent?.includes('Edit Integration')); + const deleteButton = buttons.find((button) => button.textContent?.includes('Delete Integration')); + + expect(editButton?.classList.contains('detail-btn')).toBeTrue(); + expect(editButton?.classList.contains('detail-btn--secondary')).toBeTrue(); + expect(deleteButton?.classList.contains('detail-btn--danger')).toBeTrue(); + }); + describe('formatActor', () => { it('returns system for null or undefined', () => { expect(component.formatActor(null)).toBe('system'); diff --git a/src/Web/StellaOps.Web/src/app/features/integration-hub/integration-detail.component.ts b/src/Web/StellaOps.Web/src/app/features/integration-hub/integration-detail.component.ts index 319f64c86..f37e30bf4 100644 --- a/src/Web/StellaOps.Web/src/app/features/integration-hub/integration-detail.component.ts +++ b/src/Web/StellaOps.Web/src/app/features/integration-hub/integration-detail.component.ts @@ -143,8 +143,8 @@ const HUB_DETAIL_TABS: StellaPageTab[] = [