Ecosystem metrics

New Repos
17
New
Commits
459
up 3.8%
Releases
1
down 66.7%
Contributors
35
down 12.5%
Merges
6
down 62.5%

Repository Explorer

8833 commits in all time Aug 13, 2026 04:37 – Nov 11, 2026 04:37 UTC
renovate[bot] use-wallet
Merge 3331841e433eebf40b65cec72f07e7462a144e69 into 1c49eb8a4fe3fcf2b0f0140f683ff3b4bf1d8c5e
Git Commit 64401b53 Branch pull/497/merge Document 1/1 ++ 1 --
renovate[bot] use-wallet
Merge 0e6bb79ee4c18330ebc3cd7c248792e53f3720b4 into 1c49eb8a4fe3fcf2b0f0140f683ff3b4bf1d8c5e
Git Commit b3380c11 Branch pull/487/merge Document 1/1,298 ++ 1,289 --
renovate[bot] use-wallet
Merge 6e4a93ad05adf1b8af27e245840339b5f33f36ee into 1c49eb8a4fe3fcf2b0f0140f683ff3b4bf1d8c5e
Git Commit 66f4b6f7 Branch pull/486/merge Document 2/93 ++ 62 --
renovate[bot] use-wallet
Merge e94d75462e825343f97788abbcfcc6f8f9e9ef0d into 1c49eb8a4fe3fcf2b0f0140f683ff3b4bf1d8c5e
Git Commit 26f1fdf2 Branch pull/485/merge Document 2/2 ++ 2 --
renovate[bot] use-wallet
Merge 486c084039848a63935016d92bebf31e83f0be39 into 1c49eb8a4fe3fcf2b0f0140f683ff3b4bf1d8c5e
Git Commit 2f68d2d1 Branch pull/463/merge Document 2/5,537 ++ 3,766 --
renovate[bot] use-wallet
Merge d46863dd548a611dbf2ba45ec877cde707fe3b3d into 1c49eb8a4fe3fcf2b0f0140f683ff3b4bf1d8c5e
Git Commit 20d38880 Branch pull/472/merge Document 3/115 ++ 102 --
renovate[bot] use-wallet
Merge 05e60d53cfd10d627a311e5aff2cc9cd93de6e00 into 1c49eb8a4fe3fcf2b0f0140f683ff3b4bf1d8c5e
Git Commit 6d95358a Branch pull/469/merge Document 2/94 ++ 63 --
renovate[bot] use-wallet
Merge b4ff613cbe60f35f81ad4eb1626902b66339552c into 1c49eb8a4fe3fcf2b0f0140f683ff3b4bf1d8c5e
Git Commit 79c1af68 Branch pull/477/merge Document 22/178 ++ 147 --
acfunk xHD-Wallet-API-ts
Merge 24e1ce11486d8c40841f1a145f80fb8dfe6bd181 into 6256402b3196fc0e344d8aee1baa77a7b5adb529
Git Commit 6426cdff Branch pull/36/merge Document 18/6,316 ++ 6,164 --
acfunk xHD-Wallet-API-ts
fix: simplify signing policy, fix public derivation and README vectors, switch to pnpm
Signing:
- signData no longer takes a metadata argument. The encoding/JSON-schema
  validation and the Algorand tag-prefix check were removed; it signs exactly
  the bytes given. SignMetadata, Encoding, ERROR_BAD_DATA and
  ERROR_TAGS_FOUND are no longer exported, and ajv/algo-msgpack-with-bigint
  are no longer runtime dependencies. Callers signing untrusted data must
  domain-separate it (e.g. as ARC-60 does).
- signAlgoTransaction rejects input not prefixed with "TX" by throwing
  TxTagMissingError, catching an encoded transaction passed in place of its
  bytes to sign.

Fixes:
- deriveChildNodePublic rejects harden(0) (previously returned a wrong key).
- Import bip32-ed25519 with its .js extension instead of a ts-expect-error.
- README test vectors regenerated; the previous ones did not match the
  library's output. A test now checks the README vectors.
- Await rejected-promise assertions in tests so failures are reported.
- build/test clean dist first so stale spec files are never packed.

Packaging and tooling:
- Only the package root is importable (package.json "exports").
- Test-only libsodium helpers (kx, secretbox, keypair, sk_to_curve25519,
  to_base64) move from sumo.facade.ts to src/test-utils, outside the
  published build; @noble/ciphers becomes a dev dependency.
- Switch from yarn to pnpm; update CI to Node 22/24 and current actions;
  bump dev dependencies (TypeScript 6, Jest 30, semantic-release 25).
Git Commit 24e1ce11 Branch pull/36/head Document 18/6,316 ++ 6,164 --
JBScaled devportal
Merge pull request #678 from algorandfoundation/feat/unpublish-internal-docs
fix: moved files to truly hidden folder
Git Commit 3e573685 Branch main Document 2/0 ++ 0 --
JBScaled devportal
Merge pull request #677 from algorandfoundation/docs/consensus-v43-close-out
docs: update account close-out rules for consensus v43
Git Commit aeab70b9 Branch main Document 6/23 ++ 13 --
JBScaled devportal
docs: simplify new rule wording
Git Commit 5998a6d1 Branch main Document 5/6 ++ 6 --
renovate[bot] use-wallet
Merge ecd8de9a35af8957a4573b64cacd80b9faafaefb into 1c49eb8a4fe3fcf2b0f0140f683ff3b4bf1d8c5e
Git Commit 2913d881 Branch pull/498/merge Document 10/531 ++ 98 --
renovate[bot] use-wallet
chore(deps): update dependency tsdown to v0.23.7
Git Commit ecd8de9a Branch renovate/wallet-adapter-packages Document 10/531 ++ 98 --
renovate[bot] use-wallet
Merge d6a19ea9339ad6a620e4372ab33d60a4a4592dc1 into c9d480e9879975a0d5270975b0bc2e28cfa168e5
Git Commit dfef7fc1 Branch pull/476/merge Document 14/1,306 ++ 713 --
renovate[bot] use-wallet
chore(deps): update non-major dependencies
Git Commit d6a19ea9 Branch renovate/non-major-dependencies Document 14/1,306 ++ 713 --
pbennett use-wallet
feat(passkey): opt-in app secret from a second PRF output (#499)
* feat(passkey): opt-in app secret from a second PRF output

An app can ask the passkey for a secret of its own, derived from the
same credential but separate from the signing key: pass
`appSecret: { label }` and read it with `withAppSecret(callback)`.

- Every PRF ceremony (connect, unlock) also evaluates `eval.second`
  with `@txnlab/use-wallet-passkey:app-secret:v1:<label>` while the
  option is set. The label is 1-128 characters, no `:`.
- The secret is held only while the session is unlocked and zeroed on
  lock, release, a failed connect and a key mismatch. `withAppSecret`
  hands the callback a copy it zeroes afterwards; while locked it runs
  a PRF ceremony (confirmed per `confirm`).
- A provider that returns no second output gives `PasskeyError` code
  `app-secret-unavailable`.
- `PasskeySigningRequest` gains `{ type: 'app-secret' }`.
- `APP_SECRET_PREFIX`, `appSecretInput` and `PasskeyAppSecretOptions`
  are exported; the prefix is frozen.

hay.app uses it to derive a separate ZeroSignal payer account from a
passkey Haystack Login, as it already does from a legacy login's key.

* fix(passkey): fail a worker unlock as key-store-failed, not a TypeError

WorkerKeyStore.unlock transfers the entropy buffer to the worker. When the unlock then failed (the worker answered with an error, or the store locked while the worker derived the key), the catch block made a view of that detached buffer to zero it, which throws. The caller got a TypeError instead of the PasskeyError, and lock() was skipped, leaving the worker running.

Zero the buffer only while the page still holds it (a worker that never started). The test worker now detaches what it's sent, as a real one does, and tests cover a failure before and after the transfer.

* fix(passkey): tighten the app secret's label and refuse the key's own output

- The label must be a string of 1 to 128 printable ASCII characters, no ":". Anything else passed the old check as its text, so a missing value derived a secret under "undefined"; and outside ASCII, labels that look alike can encode differently (composed and decomposed accents) or differ and encode the same (lone surrogates). The label is the PRF input and frozen once used, so the rule is set before the first release.

- A second PRF output equal to the first is zeroed and treated as missing: a provider that ignores the PRF input would otherwise hand the app the Falcon key's entropy. withAppSecret throws app-secret-unavailable and the account still signs.

- The credential's own copy of the first output is zeroed like the second's. Both are copied before either is zeroed, in case they share a buffer.

The README and the guide state the label rule, and that context is not part of the secret's input.

* docs(passkey): show how to derive keys from the app secret

The app secret is key material, not a key of one kind. The README and the Passkey Accounts guide gain "Deriving keys from the secret": an HKDF helper with one info string per key, a single ed25519 account with its 25-word phrase, and an HD (xHD, ARC-52) wallet from a 24-word BIP-39 phrase with @algorandfoundation/xhd-wallet-api, down to a signed transaction.

It also says what to settle before relying on derived keys: offer the phrase as a backup, they are ed25519 and not post-quantum, they are derived on the main thread, and one secret serves every account of the passkey. The appSecret option's JSDoc points to the section.

---------

Co-authored-by: Patrick Bennett <170563+pbennett@users.noreply.github.com>
Git Commit c9d480e9 Branch main Document 11/955 ++ 33 --
pbennett use-wallet
Merge 8e449c20b6edc17069c3968025947461cb6af94f into 3563e702c453dd7767d37b4ee0d98ec76a0221f5
Git Commit 7a025b55 Branch pull/499/merge Document 11/955 ++ 33 --
pbennett use-wallet
docs(passkey): show how to derive keys from the app secret
The app secret is key material, not a key of one kind. The README and the Passkey Accounts guide gain "Deriving keys from the secret": an HKDF helper with one info string per key, a single ed25519 account with its 25-word phrase, and an HD (xHD, ARC-52) wallet from a 24-word BIP-39 phrase with @algorandfoundation/xhd-wallet-api, down to a signed transaction.

It also says what to settle before relying on derived keys: offer the phrase as a backup, they are ed25519 and not post-quantum, they are derived on the main thread, and one secret serves every account of the passkey. The appSecret option's JSDoc points to the section.
Git Commit 8e449c20 Branch feat/passkey-app-secret Document 3/163 ++ 4 --
pbennett use-wallet
Merge 415df1c4786d715588cc34884d947fce2b91e173 into 3563e702c453dd7767d37b4ee0d98ec76a0221f5
Git Commit 63cbc772 Branch pull/499/merge Document 11/796 ++ 33 --