Repository navigation
Set up repo with organized docs and structure - #11
Conversation
Migrate clean-start from web-authenticator-experiments b4139268da213a680e89bf5877c29fcafb145f25, preserving the browser UI, contracts, simulator and tests. Add npm WalletKit 0.27.1, PRF-derived encrypted storage, explicit simulation labeling and browser regression coverage. Exclude private biometric and staging tooling.
|
Warning Review the following alerts detected in dependencies. According to your organization's Security Policy, it is recommended to resolve "Warn" alerts. Learn more about Socket for GitHub.
|
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 21f9353ae8
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 88ff25e5ff
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| {incoming && <button className="secondary-action" disabled={busy} onClick={() => void cancel()}>Cancel request</button>} | ||
| {wallet && !incoming && screen === "review" && <button className="secondary-action" disabled={busy} onClick={closeWallet}>Lock wallet</button>} | ||
| </>} | ||
| {screen === "delivery" && <button className="primary-action" disabled={busy || expired} onClick={() => void run(deliver)}>{busy ? "Sending…" : "Retry sending proof"}</button>} |
There was a problem hiding this comment.
Provide an exit when a delivery retry expires
If the initial bridge upload fails and the request then reaches expires_at, this button becomes disabled while the delivery screen suppresses every other action, including cancellation and the link back to the authenticator. The user is left permanently stranded on “Sending your proof” with no actionable control; expose an abandon/return action when expired is true rather than only disabling the retry.
Useful? React with 👍 / 👎.
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 1ef90128ca
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| if (!["queued", "batching", "submitted", "finalized"].includes(status.state)) { | ||
| throw new Error("Registration was not finalized."); |
There was a problem hiding this comment.
Recover wallets after a definitive registration failure
When pollRegistration() returns its explicit failed state, this branch throws but leaves the persisted state as submitting. Every subsequent unlock therefore skips both registration and polling and calls initializeAuthenticator() for an account known not to have finalized, permanently stranding the new passkey despite telling the user to unlock and retry. Preserve the no-resubmission behavior for ambiguous transport failures, but provide a reset or explicit retry path when staging definitively reports failure.
Useful? React with 👍 / 👎.
| import { WalletOpenError } from "./wallet-errors"; | ||
|
|
||
| const PROFILE_KEY = "world-id-wallet-v1"; | ||
| const PRF_INPUT = new TextEncoder().encode("world-id/web-authenticator/prf/v1"); |
There was a problem hiding this comment.
Align the wallet PRF input with the exported V1 contract
The newly exported V1 contract fixes the PRF input to world-id:web-authenticator:world-id-4:v1 (SHA-256 0b2ba1…), while the actual passkey ceremony uses this different label, whose digest is 98c8c3…. Consequently, an integration that provisions or validates authenticator material according to WebAuthnPrfAuthenticatorPolicyV1 derives a different secret from the wallet created by this app; use the shared contract label or version the contract to match the implemented derivation.
Useful? React with 👍 / 👎.
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b3126d2806
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| @@ -0,0 +1,6 @@ | |||
| { | |||
| "url": "/models/rgbnet.onnx", | |||
There was a problem hiding this comment.
Provision RGBNet before exposing the preview
In a clean checkout—including the CI and Docker builds—the requested /models/rgbnet.onnx cannot exist: a repo-wide tree search finds only web/public/models/README.md, and .gitignore excludes the model binary. Consequently every shipped build exposes “Open camera preview” but the worker always receives a 404 and reports that face guidance is unavailable. Add a build/deployment provisioning step for the pinned model, or hide the preview when the asset is absent.
Useful? React with 👍 / 👎.
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 512976b94b
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| const connector = parseConnector(href) | ||
| if (!connector) return null | ||
| progress('Fetching the encrypted request from the World ID bridge…') | ||
| const bridge = await openBridge(connector, signal) |
There was a problem hiding this comment.
Bind the fallback return URL to authenticated request data
When the encrypted payload omits return_to_url, this fallback accepts return_to directly from the mutable connector query. Anyone who can rewrite or redistribute an otherwise valid connector link can therefore send the user to an arbitrary HTTPS site through the trusted “Return to requesting app” action after approval or cancellation. Only expose a callback authenticated by the payload/RP, or otherwise bind the query callback to the validated request.
Useful? React with 👍 / 👎.
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 8095f73959
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| </>} | ||
| {screen === "delivery" && <button className="primary-action" disabled={busy || expired} onClick={() => void run(deliver)}>{busy && !expired ? "Sending…" : "Retry sending proof"}</button>} | ||
| {finished && incoming?.returnUrl && <a className="primary-action return-link" href={incoming.returnUrl}>Return to requesting app</a>} | ||
| {(finished || loadFailed || deliveryExpired || screen === "wallet-timeout" || screen === "wallet-error") && <a className="secondary-action return-link" href="/" onClick={deliveryExpired ? leaveDelivery : undefined}>Open authenticator</a>} |
There was a problem hiding this comment.
Offer an exit for requests that expire before delivery
When a request expires while the user is still on the review or enrollment screen, supported becomes false and removes the unlock, approve, and back actions, but this condition does not render the “Open authenticator” link because deliveryExpired is false. The only remaining action is cancellation; if the expired bridge request rejects that upload, the user is left retrying cancellation with no in-app way to clear the request other than manually reloading or closing the tab. Include ordinary expired requests in the local-exit condition as well.
Useful? React with 👍 / 👎.
The v1 contract named a different PRF input label and a verbatim output mapping, so an integration following it would derive other keys than this wallet. Describe the implemented input and HKDF mapping, and test that the wallet's label stays equal to the contract.
A request expiring on the review or enrollment screen removed every action except cancellation. Show the local exit and the requesting app's return link for any expired request.
Why
main.What
0.27.1.web/andapi/, with React components grouped underweb/components/and nosrc/wrappers.Test
1.4.2.Risk