URI handler (3/3): dark gated create deep-link handlers#1627
Closed
amitjoshi438 wants to merge 3 commits into
Closed
URI handler (3/3): dark gated create deep-link handlers#1627amitjoshi438 wants to merge 3 commits into
amitjoshi438 wants to merge 3 commits into
Conversation
Convert `UriHandler.handleUri` from an if/else chain into a `ReadonlyMap<string, UriRouteHandler>` built in the constructor. The two existing paths (`/pcfInit`, `/open`) keep identical behavior; unrecognized paths are now ignored for forward compatibility instead of falling through. Add the versioned deep-link contract constants that the Power Pages home page will use to launch VS Code: - reserved paths `/agenticCreate` and `/pacCreate` (registered but not yet wired to any handler) - shared params `region`, `tenantid`, `source`, `agenthost`, `v` - enumerated `SOURCE_VALUES`, `AGENT_HOST_VALUES`, and `CONTRACT_VERSION` Export the `UriHandler` class so dispatch can be covered by an integration test. Adds a pure unit test asserting the constants contract and an integration test asserting each path routes correctly (including the reserved/unknown no-op paths). This change is behavior-preserving and ships dark: no new user-facing behavior. Follow-up PRs extract shared auth/env helpers and add the flag-gated skeleton handlers. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Move the PAC CLI authentication, environment-selection, and process-reset logic out of the `UriHandler` class into a new `utils/authEnvironment.ts` `AuthEnvironmentService` that takes a `PacWrapper`. `UriHandler` now composes the service and delegates: - `handleOpenPowerPages` (`/open`) calls `authEnvironmentService.prepareAuthenticationAndEnvironment(...)` - `executeDownload` calls `authEnvironmentService.resetPacProcessSafely(...)` This is a behavior-preserving refactor: the moved methods (`prepareAuthenticationAndEnvironment`, `ensureAuthentication`, `ensureCorrectEnvironment`, `resetPacProcessAndThrow`, `resetPacProcessSafely`) keep identical logic, telemetry, prompts, and error handling. Extracting them lets the upcoming `/pacCreate` and `/agenticCreate` handlers reuse the exact same auth/environment flow instead of duplicating it. Adds an integration test (`test/integration/authEnvironment.test.ts`) covering the no-prompt happy path, the environment-switch path, and the reset-safely / reset-and-throw error behaviors with a stubbed PacWrapper. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
PR-3 of 3 (stacked on the auth/env extraction). Introduces the dark
scaffolding for the two new Power Pages "create" deep links launched from
the Power Pages home page:
- vscode://.../agenticCreate (agentic / terminal CLI agent-host flow)
- vscode://.../pacCreate (PAC CLI flow)
Both ship OFF by default and change no user-facing behavior. When their
ECS flag is off the handler is a no-op that emits a "disabled" telemetry
event; when on it parses the versioned, secret-free deep-link parameters
and emits a "triggered" telemetry event. The actual create behavior
(auth -> environment -> folder -> PAC CLI / agent-host bootstrapping) is
intentionally deferred to follow-up changes.
Changes:
- ecs-features/ecsFeatureGates.ts: add EnableAgenticCreateFromHome and
EnablePacCreateFromHome gates (fallback = off).
- uriHandler/telemetry/uriHandlerTelemetryEvents.ts: add triggered /
disabled / failed events for both flows.
- uriHandler/handlers/createFlowParams.ts: shared param parsing plus a
redacted telemetry builder (records only low-cardinality, non-secret
values and presence flags — never raw org URLs or tenant IDs).
- uriHandler/handlers/{agenticCreateHandler,pacCreateHandler}.ts: gated
dark handlers wired into the PR-1 route map.
- uriHandler/uriHandler.ts: construct and register both handlers.
- test/integration/createHandlers.test.ts: covers gated no-op (flag off)
and enabled-parse (flag on) paths for both handlers.
- test/integration/uriHandler.test.ts: assert routing dispatches the new
paths to their handlers now that they are wired up.
Validated: gulp lint, compile-tests, npm test (106 unit passing), build.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Contributor
Author
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PR 3 of 3 (Phase 0-1 foundation). Stacked on the PR 2 branch.
Focus commit
b4c53b7 - Add dark, flag-gated skeleton handlers for the two Power Pages create deep links (/agenticCreate, /pacCreate). Both ship OFF by default (ECS gates EnableAgenticCreateFromHome / EnablePacCreateFromHome). Flag OFF = no-op emitting a *_Disabled telemetry event; flag ON = parse params + *_Triggered event. Redacted telemetry records only presence flags, never raw org URLs / tenant IDs. No user-facing behavior yet.
Validation
gulp lint clean; compile-tests clean; npm test 106 passing; npm run build OK.
Note on diff
Base is main because intermediate branches cannot be pushed upstream (contributor works from fork). This PR's diff also contains PR 1 + PR 2 commits. Review only the focus commit b4c53b7, and merge last (after PRs 1 and 2).
Co-authored-by: Copilot App 223556219+Copilot@users.noreply.github.com