feat(#14): bump @nostr-dev-kit/ndk 2.8.1 → 3.0.3 + nostr-tools v1 → v2.20 + acl wire-name vocabulary #15

Merged
padreug merged 4 commits from issue-14-ndk-bump into dev 2026-05-31 11:49:30 +00:00
2 changed files with 53 additions and 47 deletions
Showing only changes of commit e8f245c917 - Show all commits

fix(deps): cap nostr-tools at ~2.20.0 (regtest Node 20 / curves v2 ESM-only) (#14)
Some checks failed
Docker image / build-and-push-image (push) Has been cancelled

Caught during regtest dogfood after the previous three commits
landed. With `nostr-tools: ^2.17.2` pnpm resolved to 2.23.5, which
in turn pulls `@noble/curves@2.0.1` — ESM-only. The regtest
Dockerfile runs on Node 20.11.1, where CJS `require()` of pure-ESM
modules is hard-blocked:

  Error [ERR_REQUIRE_ESM]: require() of ES Module
  /app/node_modules/.pnpm/@noble+curves@2.0.1/.../secp256k1.js
  from /app/node_modules/.pnpm/nostr-tools@2.23.5/.../index.js
  not supported.

nostr-tools 2.21.0 was the cutover — that release flipped
`@noble/curves` from `1.2.0` to `2.0.1`. 2.20.0 is the last
nostr-tools 2.x release that's still CJS-friendly via @noble/curves
1.2.0. Capping our pin at `~2.20.0` keeps us within the
"nostr-tools >= 2.17.2" range NDK 3.0.3 asks for in its
peerDependency while sidestepping the ESM/CJS hazard.

This isn't a regression we introduce — it's a CJS-output footgun
unique to the regtest container's Node 20 + tsup-default-CJS
combination. Long-term fix paths (out of scope here):

  * Bump the container's Node base image to >= 22 (where
    `--experimental-require-module` is on by default for `.js`
    files inside `package.json type: "commonjs"`)
  * Switch tsup output to ESM (`tsup --format esm`) — wider
    surface change across the daemon, the client CLI, and the
    Dockerfile entrypoint
  * Accept the cap forever (small downside: 2.21+ patch fixes
    won't reach us until we fix one of the above)

The cap is intentionally tight (`~2.20.0` allows 2.20.x patches,
nothing newer) so a future `pnpm update` doesn't silently jump us
back over the 2.21 edge. Revisit when one of the long-term paths
above lands.

Refs aiolabs/nsecbunkerd#14, regtest dogfood 2026-05-31.
Padreug 2026-05-31 13:43:37 +02:00

View file

@ -57,7 +57,7 @@
"isomorphic-ws": "^5.0.0", "isomorphic-ws": "^5.0.0",
"lnbits": "^1.1.5", "lnbits": "^1.1.5",
"lnbits-ts": "^0.0.2", "lnbits-ts": "^0.0.2",
"nostr-tools": "^2.17.2", "nostr-tools": "~2.20.0",
"websocket-polyfill": "^0.0.3", "websocket-polyfill": "^0.0.3",
"ws": "^8.13.0", "ws": "^8.13.0",
"yargs": "^17.7.2" "yargs": "^17.7.2"

98
pnpm-lock.yaml generated
View file

@ -22,7 +22,7 @@ importers:
version: 1.2.3 version: 1.2.3
'@nostr-dev-kit/ndk': '@nostr-dev-kit/ndk':
specifier: 3.0.3 specifier: 3.0.3
version: 3.0.3(nostr-tools@2.23.5(typescript@5.9.3)) version: 3.0.3(nostr-tools@2.20.0(typescript@5.9.3))
'@prisma/client': '@prisma/client':
specifier: ^5.4.1 specifier: ^5.4.1
version: 5.22.0(prisma@5.22.0) version: 5.22.0(prisma@5.22.0)
@ -75,8 +75,8 @@ importers:
specifier: ^0.0.2 specifier: ^0.0.2
version: 0.0.2(debug@4.4.3) version: 0.0.2(debug@4.4.3)
nostr-tools: nostr-tools:
specifier: ^2.17.2 specifier: ~2.20.0
version: 2.23.5(typescript@5.9.3) version: 2.20.0(typescript@5.9.3)
websocket-polyfill: websocket-polyfill:
specifier: ^0.0.3 specifier: ^0.0.3
version: 0.0.3 version: 0.0.3
@ -400,26 +400,31 @@ packages:
resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==}
hasBin: true hasBin: true
'@noble/ciphers@2.1.1': '@noble/ciphers@0.5.3':
resolution: {integrity: sha512-bysYuiVfhxNJuldNXlFEitTVdNnYUc+XNJZd7Qm2a5j1vZHgY+fazadNFWFaMK/2vye0JVlxV3gHmC0WDfAOQw==} resolution: {integrity: sha512-B0+6IIHiqEs3BPMT0hcRmHvEj2QHOLu+uwt+tqDDeVd0oyVzh7BPrDcPjRnV1PV/5LaknXJJQvOuRGR0zQJz+w==}
engines: {node: '>= 20.19.0'}
'@noble/curves@1.1.0':
resolution: {integrity: sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==}
'@noble/curves@1.2.0':
resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==}
'@noble/curves@1.9.7': '@noble/curves@1.9.7':
resolution: {integrity: sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==} resolution: {integrity: sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==}
engines: {node: ^14.21.3 || >=16} engines: {node: ^14.21.3 || >=16}
'@noble/curves@2.0.1': '@noble/hashes@1.3.1':
resolution: {integrity: sha512-vs1Az2OOTBiP4q0pwjW5aF0xp9n4MxVrmkFBxc6EKZc6ddYx5gaZiAsZoq0uRRXWbi3AT/sBqn05eRPtn1JCPw==} resolution: {integrity: sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==}
engines: {node: '>= 20.19.0'} engines: {node: '>= 16'}
'@noble/hashes@1.3.2':
resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==}
engines: {node: '>= 16'}
'@noble/hashes@1.8.0': '@noble/hashes@1.8.0':
resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==}
engines: {node: ^14.21.3 || >=16} engines: {node: ^14.21.3 || >=16}
'@noble/hashes@2.0.1':
resolution: {integrity: sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==}
engines: {node: '>= 20.19.0'}
'@noble/secp256k1@2.3.0': '@noble/secp256k1@2.3.0':
resolution: {integrity: sha512-0TQed2gcBbIrh7Ccyw+y/uZQvbJwm7Ao4scBUxqpBCcsOlZG0O4KGfjtNAy/li4W8n1xt3dxrwJ0beZ2h2G6Kw==} resolution: {integrity: sha512-0TQed2gcBbIrh7Ccyw+y/uZQvbJwm7Ao4scBUxqpBCcsOlZG0O4KGfjtNAy/li4W8n1xt3dxrwJ0beZ2h2G6Kw==}
@ -618,14 +623,11 @@ packages:
'@scure/base@1.2.6': '@scure/base@1.2.6':
resolution: {integrity: sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==} resolution: {integrity: sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==}
'@scure/base@2.0.0': '@scure/bip32@1.3.1':
resolution: {integrity: sha512-3E1kpuZginKkek01ovG8krQ0Z44E3DHPjc5S2rjJw9lZn3KSQOs8S7wqikF/AH7iRanHypj85uGyxk0XAyC37w==} resolution: {integrity: sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==}
'@scure/bip32@2.0.1': '@scure/bip39@1.2.1':
resolution: {integrity: sha512-4Md1NI5BzoVP+bhyJaY3K6yMesEFzNS1sE/cP+9nuvE7p/b0kx9XbpDHHFl8dHtufcbdHRUUQdRqLIPHN/s7yA==} resolution: {integrity: sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==}
'@scure/bip39@2.0.1':
resolution: {integrity: sha512-PsxdFj/d2AcJcZDX1FXN3dDgitDDTmwf78rKZq1a6c1P1Nan1X/Sxc7667zU3U+AN60g7SxxP0YCVw2H/hBycg==}
'@shikijs/core@3.23.0': '@shikijs/core@3.23.0':
resolution: {integrity: sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA==} resolution: {integrity: sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA==}
@ -1895,8 +1897,8 @@ packages:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
nostr-tools@2.23.5: nostr-tools@2.20.0:
resolution: {integrity: sha512-Fa7ZlUdjfUW1P4E7H3yBexhOHYi18XNyvd2n7eNHkYR085xADX6Y8V8Vm7nT/XQajaFOBrptXmVIGkJ2E4vfVw==} resolution: {integrity: sha512-Kq/2lMyeOdGvpDsYH2an8HP4H0aFCqwKythhTzxfgZTVv4L3NOgrJw2SxH8jkWlH8xPhWxGfN6lFtC+EAa2qYQ==}
peerDependencies: peerDependencies:
typescript: '>=5.0.0' typescript: '>=5.0.0'
peerDependenciesMeta: peerDependenciesMeta:
@ -2993,20 +2995,26 @@ snapshots:
- encoding - encoding
- supports-color - supports-color
'@noble/ciphers@2.1.1': {} '@noble/ciphers@0.5.3': {}
'@noble/curves@1.1.0':
dependencies:
'@noble/hashes': 1.3.1
'@noble/curves@1.2.0':
dependencies:
'@noble/hashes': 1.3.2
'@noble/curves@1.9.7': '@noble/curves@1.9.7':
dependencies: dependencies:
'@noble/hashes': 1.8.0 '@noble/hashes': 1.8.0
'@noble/curves@2.0.1': '@noble/hashes@1.3.1': {}
dependencies:
'@noble/hashes': 2.0.1 '@noble/hashes@1.3.2': {}
'@noble/hashes@1.8.0': {} '@noble/hashes@1.8.0': {}
'@noble/hashes@2.0.1': {}
'@noble/secp256k1@2.3.0': {} '@noble/secp256k1@2.3.0': {}
'@nodelib/fs.scandir@2.1.5': '@nodelib/fs.scandir@2.1.5':
@ -3021,7 +3029,7 @@ snapshots:
'@nodelib/fs.scandir': 2.1.5 '@nodelib/fs.scandir': 2.1.5
fastq: 1.20.1 fastq: 1.20.1
'@nostr-dev-kit/ndk@3.0.3(nostr-tools@2.23.5(typescript@5.9.3))': '@nostr-dev-kit/ndk@3.0.3(nostr-tools@2.20.0(typescript@5.9.3))':
dependencies: dependencies:
'@codesandbox/sandpack-client': 2.19.8 '@codesandbox/sandpack-client': 2.19.8
'@noble/curves': 1.9.7 '@noble/curves': 1.9.7
@ -3030,7 +3038,7 @@ snapshots:
'@scure/base': 1.2.6 '@scure/base': 1.2.6
debug: 4.4.3 debug: 4.4.3
light-bolt11-decoder: 3.2.0 light-bolt11-decoder: 3.2.0
nostr-tools: 2.23.5(typescript@5.9.3) nostr-tools: 2.20.0(typescript@5.9.3)
shiki: 3.23.0 shiki: 3.23.0
tseep: 1.3.1 tseep: 1.3.1
typescript-lru-cache: 2.0.0 typescript-lru-cache: 2.0.0
@ -3147,18 +3155,16 @@ snapshots:
'@scure/base@1.2.6': {} '@scure/base@1.2.6': {}
'@scure/base@2.0.0': {} '@scure/bip32@1.3.1':
'@scure/bip32@2.0.1':
dependencies: dependencies:
'@noble/curves': 2.0.1 '@noble/curves': 1.1.0
'@noble/hashes': 2.0.1 '@noble/hashes': 1.3.1
'@scure/base': 2.0.0 '@scure/base': 1.1.1
'@scure/bip39@2.0.1': '@scure/bip39@1.2.1':
dependencies: dependencies:
'@noble/hashes': 2.0.1 '@noble/hashes': 1.3.1
'@scure/base': 2.0.0 '@scure/base': 1.1.1
'@shikijs/core@3.23.0': '@shikijs/core@3.23.0':
dependencies: dependencies:
@ -4619,14 +4625,14 @@ snapshots:
normalize-path@3.0.0: {} normalize-path@3.0.0: {}
nostr-tools@2.23.5(typescript@5.9.3): nostr-tools@2.20.0(typescript@5.9.3):
dependencies: dependencies:
'@noble/ciphers': 2.1.1 '@noble/ciphers': 0.5.3
'@noble/curves': 2.0.1 '@noble/curves': 1.2.0
'@noble/hashes': 2.0.1 '@noble/hashes': 1.3.1
'@scure/base': 2.0.0 '@scure/base': 1.1.1
'@scure/bip32': 2.0.1 '@scure/bip32': 1.3.1
'@scure/bip39': 2.0.1 '@scure/bip39': 1.2.1
nostr-wasm: 0.1.0 nostr-wasm: 0.1.0
optionalDependencies: optionalDependencies:
typescript: 5.9.3 typescript: 5.9.3