Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
141 commits
Select commit Hold shift + click to select a range
235df7d
refactor: decouple keystore from `WebStore`
juan518munoz Feb 13, 2026
97279d3
chore: address PR comments
juan518munoz Feb 20, 2026
007df4e
Merge branch 'next' into jmunoz-decouple-store-from-web
juan518munoz Feb 20, 2026
66af56c
Merge branch 'next' into jmunoz-decouple-store-from-web
juan518munoz Feb 27, 2026
5ebc008
chore: address PR comments
juan518munoz Feb 27, 2026
efefb90
refactor: impl `WebStore` trait
juan518munoz Feb 27, 2026
d000399
docs: fix changelog
juan518munoz Mar 2, 2026
558e186
remove duplicate keystore field from WebClient
JereSalo Mar 2, 2026
e054179
make setup_client accept Arc<dyn WebStore> instead of concrete IdxdbS…
JereSalo Mar 3, 2026
57e0b71
fix review findings: restore slotName field, remove dead code, drop C…
JereSalo Mar 3, 2026
11186c6
revert slotName change to match base branch
JereSalo Mar 3, 2026
fc7137b
feat: support nodejs
igamigo Mar 5, 2026
0bcffaa
reduce platform-specific duplication in web-client
JereSalo Mar 5, 2026
5c47870
remove store field from WebClient, move export/import to standalone f…
JereSalo Mar 5, 2026
7da0f64
remove debug_mode field from WebClient, pass as parameter instead
JereSalo Mar 5, 2026
0e74f19
remove platform cfg blocks from shared code
JereSalo Mar 5, 2026
0c1f42c
remove duplicate js_to_bytes and unused backward-compat aliases
JereSalo Mar 5, 2026
d26a4b1
clean up fully qualified wasm_bindgen paths in export/import
JereSalo Mar 5, 2026
d0e8a94
add missing await for functions that became async
JereSalo Mar 5, 2026
5b7f06c
fix js_export migration regressions: restore borrow semantics and get…
JereSalo Mar 5, 2026
5cdba4e
Merge remote-tracking branch 'origin/next' into jere/webclient-generi…
JereSalo Mar 13, 2026
446692c
apply nightly formatting
JereSalo Mar 13, 2026
577f20a
remove accidentally committed demo script
JereSalo Mar 13, 2026
d3cdcc5
remove WebStore trait, use standalone functions for export/import
JereSalo Mar 13, 2026
b732c24
fix nodejs build: gate browser-only code, fix napi self-by-value
JereSalo Mar 13, 2026
240990f
add missing await for async createCodeBuilder in compiler resource
JereSalo Mar 13, 2026
8daaeb0
add Node.js support: napi build, mock client, test adapter, demo API
JereSalo Mar 16, 2026
32ffccd
improve node adapter: wrap static methods, fix array conversions
JereSalo Mar 16, 2026
a3381e8
fix standalone init and NoteScript method aliases in node adapter
JereSalo Mar 16, 2026
170b334
fix buildSwapTag, remove overzealous nullToUndefined in fake page
JereSalo Mar 16, 2026
312cc32
add Account type, null→undefined patches, serialized mock chain array…
JereSalo Mar 16, 2026
0df84a0
skip browser-only tests in nodejs project, add null→undefined patches
JereSalo Mar 16, 2026
5317c34
port mockchain, token_symbol, settings, key tests to platform-agnosti…
JereSalo Mar 16, 2026
0485f7f
port new_account, tags, account_component tests to platform-agnostic …
JereSalo Mar 16, 2026
90768ef
port remaining browser tests to platform-agnostic format
JereSalo Mar 16, 2026
0cb2735
fix CI: skip webServer for nodejs tests, fix clippy and machete errors
JereSalo Mar 17, 2026
b732715
fix react-sdk async TransactionRequest calls, regenerate typedoc
JereSalo Mar 17, 2026
ae4b2b0
fix TOML formatting
JereSalo Mar 17, 2026
daf21b1
fix CI: remove page dependency from nodejs fixture, fix remaining cli…
JereSalo Mar 17, 2026
79d2811
fix clippy-wasm errors: dead code, redundant bindings, identity maps
JereSalo Mar 17, 2026
d15549b
fix JsU64 type mismatches: add js_u64_to_u64 conversion helper
JereSalo Mar 17, 2026
1c4f46b
fix browser CI: lazy-load napi SDK, add js_u64_to_u64 conversions
JereSalo Mar 18, 2026
c118560
fix all nodejs test failures
JereSalo Mar 18, 2026
9c651de
merge next into jere/webclient-generic-clean
JereSalo Mar 18, 2026
ff98246
fix napi build: use &mut self for withExpirationDelta builder method
JereSalo Mar 18, 2026
306f65b
port integration tests (notes, fpi, import) to platform-agnostic format
JereSalo Mar 18, 2026
29ac1bc
fix browser CI: defer all napi SDK patches to lazy init
JereSalo Mar 18, 2026
cb2700a
fix browser fixtures: proxy sdk to window.*, forward client from window
JereSalo Mar 18, 2026
9b15ba0
fix napi prototype patches: apply to_commitment alias and null→undefi…
JereSalo Mar 18, 2026
3ebc239
fix browser CI: skip MidenClient/napi-dependent tests on chromium
JereSalo Mar 18, 2026
8ba6288
fix eslint camelcase warning
JereSalo Mar 18, 2026
b03be6c
exclude ported test files from chromium/webkit projects
JereSalo Mar 18, 2026
b3b1c2d
add remote prover test file for chromium CI
JereSalo Mar 18, 2026
8576723
merge next into jere/webclient-generic-clean
JereSalo Mar 19, 2026
b0b79d3
fix react-sdk: await async storeIdentifier() in useExportStore
JereSalo Mar 19, 2026
c5563b4
run integration tests on nodejs CI: start node, remove testIgnore
JereSalo Mar 19, 2026
a4387e9
fix integration test failures on nodejs
JereSalo Mar 19, 2026
4a5a89e
fix standalone RpcClient timeout: 0ms → 30s
JereSalo Mar 19, 2026
3aef6b9
fix FPI test and RPC timeout on napi
JereSalo Mar 19, 2026
1ee1180
add run fixture for cross-platform tests (browser + nodejs)
JereSalo Mar 19, 2026
119a60b
fix browser test failures: enum comparison and shared IndexedDB store
JereSalo Mar 19, 2026
23f7a65
fix browser mock chain: disable worker to avoid broken serialization …
JereSalo Mar 19, 2026
7e59065
fix TransactionId consumed by TransactionFilter.ids() on browser
JereSalo Mar 19, 2026
5befab0
Merge remote-tracking branch 'origin/next' into jere/webclient-generi…
JereSalo Mar 19, 2026
5babf27
fix merge: use js_export with proper error handling from next
JereSalo Mar 19, 2026
1361f0a
fix browser: enum string comparison and fresh mock client worker
JereSalo Mar 19, 2026
34427bc
fix browser tests: enum type mismatch and dual mock client crash
JereSalo Mar 19, 2026
0d22901
fix browser: wrap plain arrays with WASM typed array constructors
JereSalo Mar 19, 2026
5bc3da2
fix WASM typed arrays: FeltArray for hashElements/NoteStorage/AdviceMap
JereSalo Mar 19, 2026
ebb84e1
fix browser: avoid WASM object consumption in consumable notes test
JereSalo Mar 20, 2026
004d459
remove stale node-demo example and old test directories
JereSalo Mar 25, 2026
8c1c914
Merge remote-tracking branch 'origin/next' into jere/webclient-generi…
JereSalo Mar 25, 2026
82c76e3
fix warnings and safety comments for nodejs build
JereSalo Mar 25, 2026
97dcf5f
add @miden-sdk/node package for Node.js SDK
JereSalo Mar 27, 2026
1ee6163
add CI workflow and platform packages for @miden-sdk/node publishing
JereSalo Mar 27, 2026
cc8b872
fix prettier formatting in node-sdk packages
JereSalo Mar 27, 2026
4c27399
fix eslint camelcase error in napi-compat
JereSalo Mar 27, 2026
7364999
move Node.js SDK into web-client as single package
JereSalo Mar 27, 2026
895807a
enable publishing js-export-macro to crates.io
JereSalo Mar 27, 2026
238b181
fix CI: taplo formatting and remove unpublished optionalDependencies
JereSalo Mar 27, 2026
d111f8d
inject optionalDependencies at publish time in CI workflows
JereSalo Mar 27, 2026
269be66
address code review findings
JereSalo Mar 27, 2026
00f28ae
improve error handling for Node.js safety
JereSalo Mar 27, 2026
137ff27
fix nightly formatting
JereSalo Mar 27, 2026
1e867f1
remove accidentally committed scheduled_tasks.lock
JereSalo Mar 27, 2026
e78bdf7
Merge branch 'next' of github.com:0xMiden/miden-client into jere/webc…
JereSalo Mar 27, 2026
b4ff47d
fix review findings: bigint range check, arch mapping, version sync, …
JereSalo Mar 27, 2026
585bb2a
merge next and convert new storage map types to js_export
JereSalo Mar 27, 2026
5e7fb70
fix clippy-wasm: remove js_name from impl blocks to avoid unused vari…
JereSalo Mar 27, 2026
7fbc799
update yarn.lock after merge
JereSalo Mar 27, 2026
8c9ce6e
merge next into jere/webclient-generic-clean
JereSalo Mar 30, 2026
f96a27a
fix nodejs build: replace wasm_bindgen attribute and __inner field ac…
JereSalo Mar 30, 2026
d45e2ee
reject NaN and Infinity in js_u64_to_u64
JereSalo Mar 30, 2026
c197493
remove FromNapiRef leak by taking array params by value
JereSalo Mar 30, 2026
7b8a3c9
return Result from TransactionRequestBuilder::build instead of panicking
JereSalo Mar 30, 2026
03d3a82
return Result from FungibleAsset constructor instead of panicking
JereSalo Mar 30, 2026
1e601b7
remove unused nullToUndefined function
JereSalo Mar 30, 2026
e0c4810
fix import ordering for nightly fmt
JereSalo Mar 30, 2026
c63d9b3
merge next, fix by-value array tests, skip browser-only tests on nodejs
JereSalo Mar 30, 2026
05580eb
fix trailing blank line in account_builder.rs
JereSalo Mar 30, 2026
df5e92f
fix prettier formatting in test files
JereSalo Mar 30, 2026
c856b3b
fix consumed Felt objects in FeltArray tests and skip browser-only te…
JereSalo Mar 31, 2026
3f8e4df
merge next into jere/webclient-generic-clean
JereSalo Apr 1, 2026
0f52462
classify new keystore methods and add Node.js fallbacks in KeystoreRe…
JereSalo Apr 1, 2026
c23c9fa
merge next into jere/webclient-generic-clean
JereSalo Apr 6, 2026
cd1ad25
fix formatting after merge
JereSalo Apr 6, 2026
90b77a7
regenerate yarn.lock after merge
JereSalo Apr 6, 2026
8f5d1cb
fix node-builder cache keys in nodejs and remote-prover CI jobs
JereSalo Apr 6, 2026
0a8ed50
add keystore shim to Node.js client wrapper
JereSalo Apr 6, 2026
8d7ca5d
fix reversed Word expected values in custom component tests
JereSalo Apr 6, 2026
0471ffc
add binaryen peer dep and fix storage map test for Node.js
JereSalo Apr 6, 2026
2932675
fix NoteArray type in custom transaction test and storage map comparison
JereSalo Apr 6, 2026
caf38ec
fix NoteArray usage for browser and Node.js, fix storage map comparison
JereSalo Apr 6, 2026
01a20b3
merge next into jere/webclient-generic-clean
JereSalo Apr 6, 2026
038bb52
replace all OutputNoteArray usages with NoteArray for updated API
JereSalo Apr 6, 2026
1a4e39f
Merge remote-tracking branch 'origin/next' into jere/webclient-generi…
JereSalo Apr 7, 2026
760d553
exclude remote prover tests from regular chromium/webkit CI shards
JereSalo Apr 7, 2026
277015a
skip remote prover tests at runtime when no prover service is available
JereSalo Apr 7, 2026
da7027f
merge next into jere/webclient-generic-clean
JereSalo Apr 7, 2026
36c96f6
fix Node.js build and export MockWebClient for React SDK tests
JereSalo Apr 7, 2026
03e80ed
convert browser createMockClient from wasm_bindgen to js_export
JereSalo Apr 7, 2026
2d7d20e
coerce undefined to null in MockWebClient.createClient args
JereSalo Apr 7, 2026
c57f7ee
skip mockchain tests in React SDK until MockWebClient is compatible w…
JereSalo Apr 7, 2026
f4e85f9
trigger CI
JereSalo Apr 7, 2026
3c828d8
merge next into jere/webclient-generic-clean
JereSalo Apr 7, 2026
b03be0a
merge next into jere/webclient-generic-clean
JereSalo Apr 8, 2026
fab7a85
decouple WASM publish from Node.js native builds in publish workflows
JereSalo Apr 8, 2026
19b3067
rename build-native to build-native-nodejs in publish workflows
JereSalo Apr 8, 2026
e496d2f
update macOS runners to macos-26 and macos-26-intel
JereSalo Apr 8, 2026
1373991
fix async mock APIs, incomplete node exports, and unawaited mint request
JereSalo Apr 8, 2026
66cd553
only leak WebClient on Node.js when tokio runtime is gone
JereSalo Apr 8, 2026
f2df725
merge next into jere/webclient-generic-clean
JereSalo Apr 10, 2026
de2235e
fix Cargo.lock version after merge
JereSalo Apr 10, 2026
4c9b473
merge next into jere/webclient-generic-clean
JereSalo Apr 10, 2026
55de484
replace wasm_bindgen with js_export for vaultFungibleAssets
JereSalo Apr 10, 2026
748fb96
web-client: remove AsyncCell SendWrapper
JereSalo Apr 10, 2026
9a9c692
replace deprecated actions-rs/toolchain with rustup update in publish…
JereSalo Apr 10, 2026
7f2bf2d
Merge remote-tracking branch 'origin/next' into jere/webclient-generi…
JereSalo Apr 13, 2026
5c90e14
Add clarifying comments to js-export macro
JereSalo Apr 13, 2026
88dc2fe
Clarify JsU64 handling comment
JereSalo Apr 13, 2026
ceca383
clean up js-export-macro impl handler
JereSalo Apr 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
195 changes: 140 additions & 55 deletions .github/workflows/publish-web-client-next.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# This workflow publishes the web-client and react-sdk packages to npm if a patch release
# label is applied to the PR and the corresponding package.json version is bumped.
# This workflow publishes the web-client (with Node.js platform binaries) and
# react-sdk packages to npm if a patch release label is applied to the PR and
# the corresponding package.json version is bumped.

name: Publish Web Client SDK to NPM on Next

Expand All @@ -14,12 +15,85 @@ permissions:
contents: read

jobs:
publish:
check-version:
if: >
github.event.pull_request.merged == true &&
contains(github.event.pull_request.labels.*.name, 'patch release')
runs-on: ubuntu-24.04
outputs:
should_publish_web: ${{ steps.check_web_version.outputs.should_publish }}
web_version: ${{ steps.check_web_version.outputs.current_version }}
should_publish_react: ${{ steps.check_react_version.outputs.should_publish }}
react_version: ${{ steps.check_react_version.outputs.current_version }}
steps:
- name: Check out code
uses: actions/checkout@v6
with:
fetch-depth: 0
ref: next

- name: Verify web-client version bump against next
id: check_web_version
run: ./scripts/check-web-client-version-pr.sh "${{ github.event.pull_request.base.sha }}"

- name: Verify react-sdk version bump against next
id: check_react_version
run: ./scripts/check-react-sdk-version-pr.sh "${{ github.event.pull_request.base.sha }}"

# Build native Node.js binaries for each platform
build-native-nodejs:
needs: check-version
if: needs.check-version.outputs.should_publish_web == 'true'
strategy:
matrix:
include:
- os: macos-26
platform-package: node-sdk-darwin-arm64
- os: macos-26-intel
platform-package: node-sdk-darwin-x64
- os: ubuntu-24.04
platform-package: node-sdk-linux-x64-gnu
runs-on: ${{ matrix.os }}
steps:
- name: Check out code
uses: actions/checkout@v6
with:
ref: next

- name: Install Rust
run: rustup update --no-self-update

- name: Build napi binary
run: cargo build -p miden-client-web --no-default-features --features nodejs --release

- name: Prepare .node binary
run: |
if [ "${{ runner.os }}" = "macOS" ]; then
EXT="dylib"
else
EXT="so"
fi
# Find the binary (may be in target/release/ or target/<triple>/release/)
BINARY=$(find target -name "libmiden_client_web.${EXT}" -path "*/release/*" | head -1)
if [ -z "$BINARY" ]; then
echo "Binary not found"
exit 1
fi
cp "$BINARY" "packages/${{ matrix.platform-package }}/miden_client_web.node"

- name: Upload binary artifact
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.platform-package }}
path: packages/${{ matrix.platform-package }}/miden_client_web.node

# Publish all packages to npm
publish:
needs: [check-version, build-native-nodejs]
if: >
!cancelled() &&
needs.check-version.result == 'success'
runs-on: ubuntu-24.04
steps:
- name: Check out code
uses: actions/checkout@v6
Expand All @@ -33,88 +107,99 @@ jobs:
node-version: '20'
registry-url: 'https://registry.npmjs.org/'

- name: Set up Rust and wasm target
uses: actions-rs/toolchain@v1
with:
toolchain: stable
profile: minimal
override: true
target: wasm32-unknown-unknown
components: rust-src

- name: Install binaryen (wasm-opt)
- name: Install Rust and wasm target
run: |
sudo apt-get update && sudo apt-get install -y binaryen
rustup update --no-self-update
rustup target add wasm32-unknown-unknown

- name: Verify web-client version bump against next
id: check_web_version
run: ./scripts/check-web-client-version-pr.sh "${{ github.event.pull_request.base.sha }}"
- name: Install binaryen (wasm-opt)
run: sudo apt-get update && sudo apt-get install -y binaryen

- name: Verify react-sdk version bump against next
id: check_react_version
run: ./scripts/check-react-sdk-version-pr.sh "${{ github.event.pull_request.base.sha }}"
# ── Publish Node.js platform packages ──
- name: Download native binary artifacts
if: needs.check-version.outputs.should_publish_web == 'true' && needs.build-native-nodejs.result == 'success'
uses: actions/download-artifact@v4
with:
path: artifacts

- name: Sync platform package versions and publish
if: needs.check-version.outputs.should_publish_web == 'true' && needs.build-native-nodejs.result == 'success'
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_WEBCLIENT_TOKEN }}
run: |
WEB_VERSION=$(jq -r '.version' crates/web-client/package.json)
for pkg in node-sdk-darwin-arm64 node-sdk-darwin-x64 node-sdk-linux-x64-gnu; do
cp "artifacts/${pkg}/miden_client_web.node" "packages/${pkg}/miden_client_web.node"
# Sync version with web-client
jq --arg v "$WEB_VERSION" '.version = $v' "packages/${pkg}/package.json" > /tmp/pkg.json
mv /tmp/pkg.json "packages/${pkg}/package.json"
echo "Publishing @miden-sdk/${pkg}@${WEB_VERSION}..."
cd "packages/${pkg}"
npm publish --tag next --access public
cd ../..
done

# ── Build and publish web-client ──
- name: Install & build web-client
if: steps.check_web_version.outputs.should_publish == 'true' || steps.check_react_version.outputs.should_publish == 'true'
if: needs.check-version.outputs.should_publish_web == 'true' || needs.check-version.outputs.should_publish_react == 'true'
run: |
cd crates/web-client
yarn install --frozen-lockfile
yarn build

- name: Publish to npm
if: steps.check_web_version.outputs.should_publish == 'true'
- name: Inject Node.js optionalDependencies before publish
if: needs.check-version.outputs.should_publish_web == 'true' && needs.build-native-nodejs.result == 'success'
run: |
cd crates/web-client
node -e "
const pkg = JSON.parse(require('fs').readFileSync('package.json', 'utf8'));
const v = pkg.version;
pkg.optionalDependencies = {
'@miden-sdk/node-darwin-arm64': v,
'@miden-sdk/node-darwin-x64': v,
'@miden-sdk/node-linux-x64-gnu': v,
};
require('fs').writeFileSync('package.json', JSON.stringify(pkg, null, 2) + '\n');
console.log('Injected optionalDependencies with version ' + v);
"

- name: Publish web-client to npm
if: needs.check-version.outputs.should_publish_web == 'true'
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_WEBCLIENT_TOKEN }}
run: |
cd crates/web-client
npm publish --tag next

# ── Build and publish react-sdk ──
- name: Install & build react-sdk
if: steps.check_react_version.outputs.should_publish == 'true'
if: needs.check-version.outputs.should_publish_react == 'true'
run: |
cd packages/react-sdk
yarn install --frozen-lockfile
yarn build

- name: Publish react-sdk to npm
if: steps.check_react_version.outputs.should_publish == 'true'
if: needs.check-version.outputs.should_publish_react == 'true'
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_WEBCLIENT_TOKEN }}
run: |
cd packages/react-sdk
npm publish --tag next

- name: Done
if: steps.check_web_version.outputs.should_publish == 'true'
env:
CURRENT_VERSION: ${{ steps.check_web_version.outputs.current_version }}
run: echo "✅ Web-client published version $CURRENT_VERSION."
# ── Status ──
- name: Done (web-client)
if: needs.check-version.outputs.should_publish_web == 'true'
run: echo "Published @miden-sdk/miden-sdk v${{ needs.check-version.outputs.web_version }} with Node.js platform binaries."

- name: Done (react-sdk)
if: steps.check_react_version.outputs.should_publish == 'true'
env:
CURRENT_VERSION: ${{ steps.check_react_version.outputs.current_version }}
run: echo "✅ React SDK published version $CURRENT_VERSION."
if: needs.check-version.outputs.should_publish_react == 'true'
run: echo "Published @miden-sdk/react v${{ needs.check-version.outputs.react_version }}."

- name: Skipped publish
if: steps.check_web_version.outputs.should_publish != 'true'
env:
SHOULD_PUBLISH: ${{ steps.check_web_version.outputs.should_publish }}
CURRENT_VERSION: ${{ steps.check_web_version.outputs.current_version }}
run: |
echo "ℹ️ Web-client publish skipped; should_publish=$SHOULD_PUBLISH"
if [ -n "$CURRENT_VERSION" ]; then
echo "Current version: $CURRENT_VERSION"
fi

- name: Skipped publish (react-sdk)
if: steps.check_react_version.outputs.should_publish != 'true'
env:
SHOULD_PUBLISH: ${{ steps.check_react_version.outputs.should_publish }}
CURRENT_VERSION: ${{ steps.check_react_version.outputs.current_version }}
run: |
echo "ℹ️ React SDK publish skipped; should_publish=$SHOULD_PUBLISH"
if [ -n "$CURRENT_VERSION" ]; then
echo "Current version: $CURRENT_VERSION"
fi
- name: Skipped (web-client)
if: needs.check-version.outputs.should_publish_web != 'true'
run: echo "Web-client publish skipped (no version bump)."

- name: Skipped (react-sdk)
if: needs.check-version.outputs.should_publish_react != 'true'
run: echo "React SDK publish skipped (no version bump)."
Loading
Loading