diff --git a/.cargo/config.toml b/.cargo/config.toml
new file mode 100644
index 00000000..49cf28a3
--- /dev/null
+++ b/.cargo/config.toml
@@ -0,0 +1,5 @@
+[target.aarch64-unknown-linux-musl]
+linker = "aarch64-linux-musl-gcc"
+rustflags = ["-C", "target-feature=-crt-static"]
+[target.x86_64-pc-windows-msvc]
+rustflags = ["-C", "target-feature=+crt-static"]
diff --git a/.github/workflows/kotlin.yml b/.github/workflows/kotlin.yml
new file mode 100644
index 00000000..a920a4af
--- /dev/null
+++ b/.github/workflows/kotlin.yml
@@ -0,0 +1,105 @@
+---
+name: Build Android
+
+on:
+ release:
+ types: [created]
+
+defaults:
+ run:
+ shell: bash
+
+jobs:
+ build_kotlin:
+ runs-on: ubuntu-22.04
+ strategy:
+ fail-fast: false
+ matrix:
+ settings:
+ - target: aarch64-linux-android
+ - target: armv7-linux-androideabi
+ - target: x86_64-linux-android
+ - target: i686-linux-android
+ steps:
+ - name: Checkout repo
+ uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0
+
+ - name: Set up Rust
+ uses: actions-rs/toolchain@v1
+ with:
+ toolchain: stable
+ override: true
+
+ - name: Cache cargo registry
+ uses: Swatinem/rust-cache@a95ba195448af2da9b00fb742d14ffaaf3c21f43 # v2.7.0
+ with:
+ key: ${{ matrix.settings.target }}-cargo
+
+ - name: Install Cross
+ run: cargo install cross --git https://github.com/cross-rs/cross
+
+ - name: Clean
+ env:
+ TARGET: ${{ matrix.settings.target }}
+ run: cargo clean
+
+ - name: Build
+ env:
+ TARGET: ${{ matrix.settings.target }}
+ run: cross build -p walletkit --release --target=${{ matrix.settings.target }}
+
+ - name: Upload artifact
+ uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3
+ with:
+ name: android-${{ matrix.settings.target }}
+ path: ./target/${{ matrix.settings.target }}/release/libwalletkit.so
+ if-no-files-found: error
+
+ combine:
+ runs-on: ubuntu-22.04
+ needs: build_kotlin
+ steps:
+ - name: Checkout repo
+ uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0
+ with:
+ fetch-depth: 0
+
+ - name: Install rust
+ uses: dtolnay/rust-toolchain@439cf607258077187679211f12aa6f19af4a0af7 # stable
+ with:
+ toolchain: stable
+
+ - name: Cache cargo registry
+ uses: Swatinem/rust-cache@a95ba195448af2da9b00fb742d14ffaaf3c21f43 # v2.7.0
+ with:
+ key: cargo-combine-cache
+
+ - name: Setup Java
+ uses: actions/setup-java@0ab4596768b603586c0de567f2430c30f5b0d2b0 # v3.13.0
+ with:
+ distribution: temurin
+ java-version: 17
+
+ - name: Download Artifacts
+ uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3.0.2
+
+ - name: Move artifacts
+ working-directory: kotlin/sdk/src/main/jniLibs
+ run: |
+ tree -L 3 /home/runner/work
+ mkdir armeabi-v7a arm64-v8a x86 x86_64
+ mv /home/runner/work/walletkit/walletkit/android-armv7-linux-androideabi/libwalletkit.so ./armeabi-v7a/libwalletkit.so
+ mv /home/runner/work/walletkit/walletkit/android-aarch64-linux-android/libwalletkit.so ./arm64-v8a/libwalletkit.so
+ mv /home/runner/work/walletkit/walletkit/android-i686-linux-android/libwalletkit.so ./x86/libwalletkit.so
+ mv /home/runner/work/walletkit/walletkit/android-x86_64-linux-android/libwalletkit.so ./x86_64/libwalletkit.so
+
+ - name: Generate bindings
+ working-directory: kotlin
+ run: cargo run -p uniffi-bindgen generate ./sdk/src/main/jniLibs/arm64-v8a/libwalletkit.so --library --language kotlin --no-format --out-dir sdk/src/main/java
+
+ - name: Publish
+ working-directory: kotlin
+ run: ./gradlew sdk:publish
+ env:
+ GITHUB_ACTOR: ${{ github.actor }}
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/napi.yml b/.github/workflows/napi.yml
new file mode 100644
index 00000000..11776690
--- /dev/null
+++ b/.github/workflows/napi.yml
@@ -0,0 +1,432 @@
+name: CI
+env:
+ DEBUG: napi:*
+ APP_NAME: walletkit
+ MACOSX_DEPLOYMENT_TARGET: "10.13"
+permissions:
+ contents: write
+ id-token: write
+"on":
+ push:
+ branches:
+ - scaffolding
+ tags-ignore:
+ - "**"
+ paths-ignore:
+ - "**/*.md"
+ - LICENSE
+ - "**/*.gitignore"
+ - .editorconfig
+ - docs/**
+ pull_request: null
+jobs:
+ build:
+ strategy:
+ fail-fast: false
+ matrix:
+ settings:
+ - host: macos-latest
+ target: x86_64-apple-darwin
+ build: yarn build --cargo-cwd walletkit-napi
+ - host: windows-latest
+ build: yarn build --cargo-cwd walletkit-napi
+ target: x86_64-pc-windows-msvc
+ - host: windows-latest
+ build: |
+ yarn build --cargo-cwd walletkit-napi --target i686-pc-windows-msvc
+ yarn test
+ target: i686-pc-windows-msvc
+ - host: ubuntu-latest
+ target: x86_64-unknown-linux-gnu
+ docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian
+ build: yarn build --cargo-cwd walletkit-napi --target x86_64-unknown-linux-gnu
+ - host: ubuntu-latest
+ target: x86_64-unknown-linux-musl
+ docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine
+ build: yarn build --cargo-cwd walletkit-napi
+ - host: macos-latest
+ target: aarch64-apple-darwin
+ build: yarn build --cargo-cwd walletkit-napi --target aarch64-apple-darwin
+ - host: ubuntu-latest
+ target: aarch64-unknown-linux-gnu
+ docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian-aarch64
+ build: yarn build --cargo-cwd walletkit-napi --target aarch64-unknown-linux-gnu
+ - host: ubuntu-latest
+ target: armv7-unknown-linux-gnueabihf
+ setup: |
+ sudo apt-get update
+ sudo apt-get install gcc-arm-linux-gnueabihf -y
+ build: yarn build --cargo-cwd walletkit-napi --target armv7-unknown-linux-gnueabihf
+ - host: ubuntu-latest
+ target: aarch64-linux-android
+ build: yarn build --cargo-cwd walletkit-napi --target aarch64-linux-android
+ - host: ubuntu-latest
+ target: armv7-linux-androideabi
+ build: yarn build --cargo-cwd walletkit-napi --target armv7-linux-androideabi
+ - host: ubuntu-latest
+ target: aarch64-unknown-linux-musl
+ docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine
+ build: |-
+ set -e &&
+ rustup target add aarch64-unknown-linux-musl &&
+ yarn build --cargo-cwd walletkit-napi --target aarch64-unknown-linux-musl
+ - host: windows-latest
+ target: aarch64-pc-windows-msvc
+ build: yarn build --cargo-cwd walletkit-napi --target aarch64-pc-windows-msvc
+ - host: ubuntu-latest
+ target: riscv64gc-unknown-linux-gnu
+ setup: |
+ sudo apt-get update
+ sudo apt-get install gcc-riscv64-linux-gnu -y
+ build: yarn build --cargo-cwd walletkit-napi --target riscv64gc-unknown-linux-gnu
+ name: stable - ${{ matrix.settings.target }} - node@20
+ runs-on: ${{ matrix.settings.host }}
+ steps:
+ - uses: actions/checkout@v4
+ - name: Setup node
+ uses: actions/setup-node@v4
+ if: ${{ !matrix.settings.docker }}
+ with:
+ node-version: 20
+ cache: yarn
+ - name: Install
+ uses: dtolnay/rust-toolchain@stable
+ if: ${{ !matrix.settings.docker }}
+ with:
+ toolchain: stable
+ targets: ${{ matrix.settings.target }}
+ - name: Cache cargo
+ uses: actions/cache@v4
+ with:
+ path: |
+ ~/.cargo/registry/index/
+ ~/.cargo/registry/cache/
+ ~/.cargo/git/db/
+ .cargo-cache
+ target/
+ key: ${{ matrix.settings.target }}-cargo-${{ matrix.settings.host }}
+ - uses: goto-bus-stop/setup-zig@v2
+ if: ${{ matrix.settings.target == 'armv7-unknown-linux-gnueabihf' }}
+ with:
+ version: 0.11.0
+ - name: Setup toolchain
+ run: ${{ matrix.settings.setup }}
+ if: ${{ matrix.settings.setup }}
+ shell: bash
+ - name: Setup node x86
+ if: matrix.settings.target == 'i686-pc-windows-msvc'
+ run: yarn config set supportedArchitectures.cpu "ia32"
+ shell: bash
+ - name: Install dependencies
+ run: yarn install
+ - name: Setup node x86
+ uses: actions/setup-node@v4
+ if: matrix.settings.target == 'i686-pc-windows-msvc'
+ with:
+ node-version: 20
+ cache: yarn
+ architecture: x86
+ - name: Build in docker
+ uses: addnab/docker-run-action@v3
+ if: ${{ matrix.settings.docker }}
+ with:
+ image: ${{ matrix.settings.docker }}
+ options: "--user 0:0 -v ${{ github.workspace }}/.cargo-cache/git/db:/usr/local/cargo/git/db -v ${{ github.workspace }}/.cargo/registry/cache:/usr/local/cargo/registry/cache -v ${{ github.workspace }}/.cargo/registry/index:/usr/local/cargo/registry/index -v ${{ github.workspace }}:/build -w /build"
+ run: ${{ matrix.settings.build }}
+ - name: Build
+ run: ${{ matrix.settings.build }}
+ if: ${{ !matrix.settings.docker }}
+ shell: bash
+ - name: Upload artifact
+ uses: actions/upload-artifact@v4
+ with:
+ name: bindings-${{ matrix.settings.target }}
+ path: ${{ env.APP_NAME }}.*.node
+ if-no-files-found: error
+ test-macOS-windows-binding:
+ name: Test bindings on ${{ matrix.settings.target }} - node@${{ matrix.node }}
+ needs:
+ - build
+ strategy:
+ fail-fast: false
+ matrix:
+ settings:
+ - host: macos-latest
+ target: x86_64-apple-darwin
+ - host: windows-latest
+ target: x86_64-pc-windows-msvc
+ node:
+ - "18"
+ - "20"
+ runs-on: ${{ matrix.settings.host }}
+ steps:
+ - uses: actions/checkout@v4
+ - name: Setup node
+ uses: actions/setup-node@v4
+ with:
+ node-version: ${{ matrix.node }}
+ cache: yarn
+ - name: Install dependencies
+ run: yarn install
+ - name: Download artifacts
+ uses: actions/download-artifact@v4
+ with:
+ name: bindings-${{ matrix.settings.target }}
+ path: .
+ - name: List packages
+ run: ls -R .
+ shell: bash
+ - name: Test bindings
+ run: yarn test
+ test-linux-x64-gnu-binding:
+ name: Test bindings on Linux-x64-gnu - node@${{ matrix.node }}
+ needs:
+ - build
+ strategy:
+ fail-fast: false
+ matrix:
+ node:
+ - "18"
+ - "20"
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - name: Setup node
+ uses: actions/setup-node@v4
+ with:
+ node-version: ${{ matrix.node }}
+ cache: yarn
+ - name: Install dependencies
+ run: yarn install
+ - name: Download artifacts
+ uses: actions/download-artifact@v4
+ with:
+ name: bindings-x86_64-unknown-linux-gnu
+ path: .
+ - name: List packages
+ run: ls -R .
+ shell: bash
+ - name: Test bindings
+ run: docker run --rm -v $(pwd):/build -w /build node:${{ matrix.node }}-slim yarn test
+ test-linux-x64-musl-binding:
+ name: Test bindings on x86_64-unknown-linux-musl - node@${{ matrix.node }}
+ needs:
+ - build
+ strategy:
+ fail-fast: false
+ matrix:
+ node:
+ - "18"
+ - "20"
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - name: Setup node
+ uses: actions/setup-node@v4
+ with:
+ node-version: ${{ matrix.node }}
+ cache: yarn
+ - name: Install dependencies
+ run: |
+ yarn config set supportedArchitectures.libc "musl"
+ yarn install
+ - name: Download artifacts
+ uses: actions/download-artifact@v4
+ with:
+ name: bindings-x86_64-unknown-linux-musl
+ path: .
+ - name: List packages
+ run: ls -R .
+ shell: bash
+ - name: Test bindings
+ run: docker run --rm -v $(pwd):/build -w /build node:${{ matrix.node }}-alpine yarn test
+ test-linux-aarch64-gnu-binding:
+ name: Test bindings on aarch64-unknown-linux-gnu - node@${{ matrix.node }}
+ needs:
+ - build
+ strategy:
+ fail-fast: false
+ matrix:
+ node:
+ - "18"
+ - "20"
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - name: Download artifacts
+ uses: actions/download-artifact@v4
+ with:
+ name: bindings-aarch64-unknown-linux-gnu
+ path: .
+ - name: List packages
+ run: ls -R .
+ shell: bash
+ - name: Install dependencies
+ run: |
+ yarn config set supportedArchitectures.cpu "arm64"
+ yarn config set supportedArchitectures.libc "glibc"
+ yarn install
+ - name: Set up QEMU
+ uses: docker/setup-qemu-action@v3
+ with:
+ platforms: arm64
+ - run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
+ - name: Setup and run tests
+ uses: addnab/docker-run-action@v3
+ with:
+ image: node:${{ matrix.node }}-slim
+ options: "--platform linux/arm64 -v ${{ github.workspace }}:/build -w /build"
+ run: |
+ set -e
+ yarn test
+ ls -la
+ test-linux-aarch64-musl-binding:
+ name: Test bindings on aarch64-unknown-linux-musl - node@${{ matrix.node }}
+ needs:
+ - build
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - name: Download artifacts
+ uses: actions/download-artifact@v4
+ with:
+ name: bindings-aarch64-unknown-linux-musl
+ path: .
+ - name: List packages
+ run: ls -R .
+ shell: bash
+ - name: Install dependencies
+ run: |
+ yarn config set supportedArchitectures.cpu "arm64"
+ yarn config set supportedArchitectures.libc "musl"
+ yarn install
+ - name: Set up QEMU
+ uses: docker/setup-qemu-action@v3
+ with:
+ platforms: arm64
+ - run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
+ - name: Setup and run tests
+ uses: addnab/docker-run-action@v3
+ with:
+ image: node:lts-alpine
+ options: "--platform linux/arm64 -v ${{ github.workspace }}:/build -w /build"
+ run: |
+ set -e
+ yarn test
+ test-linux-arm-gnueabihf-binding:
+ name: Test bindings on armv7-unknown-linux-gnueabihf - node@${{ matrix.node }}
+ needs:
+ - build
+ strategy:
+ fail-fast: false
+ matrix:
+ node:
+ - "18"
+ - "20"
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - name: Download artifacts
+ uses: actions/download-artifact@v4
+ with:
+ name: bindings-armv7-unknown-linux-gnueabihf
+ path: .
+ - name: List packages
+ run: ls -R .
+ shell: bash
+ - name: Install dependencies
+ run: |
+ yarn config set supportedArchitectures.cpu "arm"
+ yarn install
+ - name: Set up QEMU
+ uses: docker/setup-qemu-action@v3
+ with:
+ platforms: arm
+ - run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
+ - name: Setup and run tests
+ uses: addnab/docker-run-action@v3
+ with:
+ image: node:${{ matrix.node }}-bullseye-slim
+ options: "--platform linux/arm/v7 -v ${{ github.workspace }}:/build -w /build"
+ run: |
+ set -e
+ yarn test
+ ls -la
+ universal-macOS:
+ name: Build universal macOS binary
+ needs:
+ - build
+ runs-on: macos-latest
+ steps:
+ - uses: actions/checkout@v4
+ - name: Setup node
+ uses: actions/setup-node@v4
+ with:
+ node-version: 20
+ cache: yarn
+ - name: Install dependencies
+ run: yarn install
+ - name: Download macOS x64 artifact
+ uses: actions/download-artifact@v4
+ with:
+ name: bindings-x86_64-apple-darwin
+ path: artifacts
+ - name: Download macOS arm64 artifact
+ uses: actions/download-artifact@v4
+ with:
+ name: bindings-aarch64-apple-darwin
+ path: artifacts
+ - name: Combine binaries
+ run: yarn universal
+ - name: Upload artifact
+ uses: actions/upload-artifact@v4
+ with:
+ name: bindings-universal-apple-darwin
+ path: ${{ env.APP_NAME }}.*.node
+ if-no-files-found: error
+ # publish:
+ # name: Publish
+ # runs-on: ubuntu-latest
+ # needs:
+ # - test-macOS-windows-binding
+ # - test-linux-x64-gnu-binding
+ # - test-linux-x64-musl-binding
+ # - test-linux-aarch64-gnu-binding
+ # - test-linux-aarch64-musl-binding
+ # - test-linux-arm-gnueabihf-binding
+ # - universal-macOS
+ # steps:
+ # - uses: actions/checkout@v4
+ # - name: Setup node
+ # uses: actions/setup-node@v4
+ # with:
+ # node-version: 20
+ # cache: yarn
+ # - name: Install dependencies
+ # run: yarn install
+ # - name: Download all artifacts
+ # uses: actions/download-artifact@v4
+ # with:
+ # path: artifacts
+ # - name: Move artifacts
+ # run: yarn artifacts
+ # - name: List packages
+ # run: ls -R ./npm
+ # shell: bash
+ # - name: Publish
+ # run: |
+ # npm config set provenance true
+ # if git log -1 --pretty=%B | grep "^[0-9]\+\.[0-9]\+\.[0-9]\+$";
+ # then
+ # echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc
+ # npm publish --access public
+ # elif git log -1 --pretty=%B | grep "^[0-9]\+\.[0-9]\+\.[0-9]\+";
+ # then
+ # echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc
+ # npm publish --tag next --access public
+ # else
+ # echo "Not a release, skipping publish"
+ # fi
+ # env:
+ # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ # NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
diff --git a/.github/workflows/swift.yml b/.github/workflows/swift.yml
new file mode 100644
index 00000000..f7d7f8ef
--- /dev/null
+++ b/.github/workflows/swift.yml
@@ -0,0 +1,44 @@
+name: Build iOS and Push Changes
+
+on:
+ release:
+ types: [created]
+
+jobs:
+ build_swift:
+ runs-on: macos-latest
+
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v2
+
+ - name: Set up Rust
+ uses: actions-rs/toolchain@v1
+ with:
+ toolchain: stable
+ override: true
+
+ - name: Install Rust targets
+ run: |
+ rustup target install aarch64-apple-ios-sim
+ rustup target install aarch64-apple-ios
+ rustup target install x86_64-apple-ios
+
+ - name: Run build script
+ run: |
+ chmod +x ./build_ios.sh
+ ./build_ios.sh
+
+ - name: Update Package.swift
+ run: |
+ sed -i.bak 's|// Release version: .*|// Release version: '"${GITHUB_REF#refs/tags/}"'|' Package.swift && rm Package.swift.bak
+
+ - name: Commit and push changes
+ run: |
+ git config --local user.email "action@github.com"
+ git config --local user.name "GitHub Action"
+ git add .
+ git commit -m "Increment version tag and push changes" -a
+ git push origin HEAD:main
+ env:
+ GITHUB_TOKEN: ${{ secrets.GIT_HUB_TOKEN }}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 00000000..4f5cbc63
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,57 @@
+# Built files
+/*.map
+*.node
+*.tmp_node_swc_fixture_test
+.yarn/
+
+target/
+**/*.bk
+*.log
+
+.vscode/*
+!.vscode/settings.json
+*.swp
+
+/.idea
+*.iml
+
+.DS_Store
+
+/node_modules/
+
+# Flamegraph
+*.html
+!crates/swc_html*/**/*.html
+*.svg
+package-lock.json
+*.data
+*.old
+*.stacks
+
+# Coverage datas
+*.zip
+*.info
+# Custom cargo target directory for converages
+.COVERAGE_DIR
+
+**/*~
+**/.DS_Store
+
+pkg/
+
+.idea/
+
+
+# Generated while testing
+*.tmp.js
+
+# Used to see output of babel.
+/lab
+
+*.mm_profdata
+.tsbuildinfo
+.swc/
+
+# Used by scripts
+*.tmp.txt
+swc-core-*.tgz
\ No newline at end of file
diff --git a/.npmignore b/.npmignore
new file mode 100644
index 00000000..ec144db2
--- /dev/null
+++ b/.npmignore
@@ -0,0 +1,13 @@
+target
+Cargo.lock
+.cargo
+.github
+npm
+.eslintrc
+.prettierignore
+rustfmt.toml
+yarn.lock
+*.node
+.yarn
+__test__
+renovate.json
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 00000000..ffc85f62
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,9 @@
+{
+ "cSpell.words": [
+ "Keypair",
+ "Merkle",
+ "walletkit",
+ "worldcoin",
+ "xsalsa"
+ ]
+}
diff --git a/Cargo.lock b/Cargo.lock
new file mode 100644
index 00000000..e1c207f1
--- /dev/null
+++ b/Cargo.lock
@@ -0,0 +1,1359 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "anstream"
+version = "0.6.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e2e1ebcb11de5c03c67de28a7df593d32191b44939c482e97702baaaa6ab6a5"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2faccea4cc4ab4a667ce676a30e8ec13922a692c99bb8f5b11f1502c72e04220"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648"
+dependencies = [
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "3.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7"
+dependencies = [
+ "anstyle",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca"
+
+[[package]]
+name = "askama"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b79091df18a97caea757e28cd2d5fda49c6cd4bd01ddffd7ff01ace0c0ad2c28"
+dependencies = [
+ "askama_derive",
+ "askama_escape",
+]
+
+[[package]]
+name = "askama_derive"
+version = "0.12.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19fe8d6cb13c4714962c072ea496f3392015f0989b1a2847bb4b2d9effd71d83"
+dependencies = [
+ "askama_parser",
+ "basic-toml",
+ "mime",
+ "mime_guess",
+ "proc-macro2",
+ "quote",
+ "serde",
+ "syn",
+]
+
+[[package]]
+name = "askama_escape"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "619743e34b5ba4e9703bba34deac3427c72507c7159f5fd030aea8cac0cfe341"
+
+[[package]]
+name = "askama_parser"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acb1161c6b64d1c3d83108213c2a2533a342ac225aabd0bda218278c2ddb00c0"
+dependencies = [
+ "nom",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backtrace"
+version = "0.3.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "basic-toml"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2db21524cad41c5591204d22d75e1970a2d1f71060214ca931dc7d5afe2c14e5"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bincode"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf"
+
+[[package]]
+name = "bytes"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
+
+[[package]]
+name = "camino"
+version = "1.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "cargo-platform"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ceed8ef69d8518a5dda55c07425450b58a4e1946f4951eab6d7191ee86c2443d"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "cargo_metadata"
+version = "0.15.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a"
+dependencies = [
+ "camino",
+ "cargo-platform",
+ "semver",
+ "serde",
+ "serde_json",
+ "thiserror",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "clap"
+version = "4.4.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e578d6ec4194633722ccf9544794b71b1385c3c027efe0c55db226fc880865c"
+dependencies = [
+ "clap_builder",
+ "clap_derive",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.4.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4df4df40ec50c46000231c914968278b1eb05098cf8f1b3a518a95030e71d1c7"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "clap_lex",
+ "strsim",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1"
+
+[[package]]
+name = "colorchoice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+
+[[package]]
+name = "convert_case"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "ctor"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30d2b3721e861707777e3195b0158f950ae6dc4a27e4d02ff9f67e3eb3de199e"
+dependencies = [
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "fs-err"
+version = "2.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88a41f105fe1d5b6b34b2055e3dc59bb79b46b48b2040b9e6c7b4b5de097aa41"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "generator"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cc16584ff22b460a382b7feec54b23d2908d858152e5739a120b949293bd74e"
+dependencies = [
+ "cc",
+ "libc",
+ "log",
+ "rustversion",
+ "windows",
+]
+
+[[package]]
+name = "gimli"
+version = "0.28.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253"
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "goblin"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d6b4de4a8eb6c46a8c77e1d3be942cb9a8bf073c22374578e5ba4b08ed0ff68"
+dependencies = [
+ "log",
+ "plain",
+ "scroll",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d3d0e0f38255e7fa3cf31335b3a56f05febd18025f4db5ef7a0cfb4f8da651f"
+
+[[package]]
+name = "itoa"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c"
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.153"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd"
+
+[[package]]
+name = "libloading"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161"
+dependencies = [
+ "cfg-if",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "lock_api"
+version = "0.4.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+
+[[package]]
+name = "loom"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5"
+dependencies = [
+ "cfg-if",
+ "generator",
+ "pin-utils",
+ "scoped-tls",
+ "tracing",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "matchers"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
+dependencies = [
+ "regex-automata 0.1.10",
+]
+
+[[package]]
+name = "memchr"
+version = "2.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149"
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "mime_guess"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef"
+dependencies = [
+ "mime",
+ "unicase",
+]
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09"
+dependencies = [
+ "libc",
+ "wasi",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "napi"
+version = "2.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "efbf98e1bcb85cc441bbf7cdfb11070d2537a100e2697d75397b2584c32492d1"
+dependencies = [
+ "bitflags 2.4.2",
+ "ctor",
+ "napi-derive",
+ "napi-sys",
+ "once_cell",
+ "tokio",
+]
+
+[[package]]
+name = "napi-build"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4b4532cf86bfef556348ac65e561e3123879f0e7566cca6d43a6ff5326f13df"
+
+[[package]]
+name = "napi-derive"
+version = "2.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7622f0dbe0968af2dacdd64870eee6dee94f93c989c841f1ad8f300cf1abd514"
+dependencies = [
+ "cfg-if",
+ "convert_case",
+ "napi-derive-backend",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "napi-derive-backend"
+version = "1.0.59"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ec514d65fce18a959be55e7f683ac89c6cb850fb59b09e25ab777fd5a4a8d9e"
+dependencies = [
+ "convert_case",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "semver",
+ "syn",
+]
+
+[[package]]
+name = "napi-sys"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2503fa6af34dc83fb74888df8b22afe933b58d37daf7d80424b1c60c68196b8b"
+dependencies = [
+ "libloading",
+]
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "nu-ansi-term"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
+dependencies = [
+ "overload",
+ "winapi",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "object"
+version = "0.32.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
+
+[[package]]
+name = "oneshot"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f6640c6bda7731b1fdbab747981a0f896dd1fedaf9f4a53fa237a04a84431f4"
+dependencies = [
+ "loom",
+]
+
+[[package]]
+name = "overload"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "paste"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "plain"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.78"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "regex"
+version = "1.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata 0.4.5",
+ "regex-syntax 0.8.2",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+dependencies = [
+ "regex-syntax 0.6.29",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax 0.8.2",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "rustversion"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
+
+[[package]]
+name = "ryu"
+version = "1.0.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c"
+
+[[package]]
+name = "scoped-tls"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "scroll"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04c565b551bafbef4157586fa379538366e4385d42082f255bfd96e4fe8519da"
+dependencies = [
+ "scroll_derive",
+]
+
+[[package]]
+name = "scroll_derive"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1db149f81d46d2deba7cd3c50772474707729550221e69588478ebf9ada425ae"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.196"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.196"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.113"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69801b70b1c3dac963ecb03a364ba0ceda9cf60c71cfe475e99864759c8b8a79"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "sharded-slab"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "siphasher"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
+
+[[package]]
+name = "smallvec"
+version = "1.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7"
+
+[[package]]
+name = "socket2"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9"
+dependencies = [
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "syn"
+version = "2.0.48"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+]
+
+[[package]]
+name = "tokio"
+version = "1.35.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104"
+dependencies = [
+ "backtrace",
+ "bytes",
+ "libc",
+ "mio",
+ "num_cpus",
+ "parking_lot",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2",
+ "tokio-macros",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "tracing"
+version = "0.1.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
+dependencies = [
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
+dependencies = [
+ "once_cell",
+ "valuable",
+]
+
+[[package]]
+name = "tracing-log"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
+dependencies = [
+ "log",
+ "once_cell",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-subscriber"
+version = "0.3.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b"
+dependencies = [
+ "matchers",
+ "nu-ansi-term",
+ "once_cell",
+ "regex",
+ "sharded-slab",
+ "smallvec",
+ "thread_local",
+ "tracing",
+ "tracing-core",
+ "tracing-log",
+]
+
+[[package]]
+name = "unicase"
+version = "2.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "uniffi"
+version = "0.24.3"
+source = "git+https://github.com/mozilla/uniffi-rs?rev=eb8ab92b53084ddd05fc6658d057b38e31a1c4c7#eb8ab92b53084ddd05fc6658d057b38e31a1c4c7"
+dependencies = [
+ "anyhow",
+ "camino",
+ "clap",
+ "uniffi_bindgen",
+ "uniffi_build",
+ "uniffi_core",
+ "uniffi_macros",
+]
+
+[[package]]
+name = "uniffi-bindgen"
+version = "0.0.1"
+dependencies = [
+ "uniffi",
+]
+
+[[package]]
+name = "uniffi_bindgen"
+version = "0.24.3"
+source = "git+https://github.com/mozilla/uniffi-rs?rev=eb8ab92b53084ddd05fc6658d057b38e31a1c4c7#eb8ab92b53084ddd05fc6658d057b38e31a1c4c7"
+dependencies = [
+ "anyhow",
+ "askama",
+ "camino",
+ "cargo_metadata",
+ "clap",
+ "fs-err",
+ "glob",
+ "goblin",
+ "heck",
+ "once_cell",
+ "paste",
+ "serde",
+ "toml",
+ "uniffi_meta",
+ "uniffi_testing",
+ "uniffi_udl",
+]
+
+[[package]]
+name = "uniffi_build"
+version = "0.24.3"
+source = "git+https://github.com/mozilla/uniffi-rs?rev=eb8ab92b53084ddd05fc6658d057b38e31a1c4c7#eb8ab92b53084ddd05fc6658d057b38e31a1c4c7"
+dependencies = [
+ "anyhow",
+ "camino",
+ "uniffi_bindgen",
+]
+
+[[package]]
+name = "uniffi_checksum_derive"
+version = "0.24.3"
+source = "git+https://github.com/mozilla/uniffi-rs?rev=eb8ab92b53084ddd05fc6658d057b38e31a1c4c7#eb8ab92b53084ddd05fc6658d057b38e31a1c4c7"
+dependencies = [
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "uniffi_core"
+version = "0.24.3"
+source = "git+https://github.com/mozilla/uniffi-rs?rev=eb8ab92b53084ddd05fc6658d057b38e31a1c4c7#eb8ab92b53084ddd05fc6658d057b38e31a1c4c7"
+dependencies = [
+ "anyhow",
+ "bytes",
+ "camino",
+ "log",
+ "oneshot",
+ "paste",
+ "static_assertions",
+]
+
+[[package]]
+name = "uniffi_macros"
+version = "0.24.3"
+source = "git+https://github.com/mozilla/uniffi-rs?rev=eb8ab92b53084ddd05fc6658d057b38e31a1c4c7#eb8ab92b53084ddd05fc6658d057b38e31a1c4c7"
+dependencies = [
+ "bincode",
+ "camino",
+ "fs-err",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "serde",
+ "syn",
+ "toml",
+ "uniffi_build",
+ "uniffi_meta",
+]
+
+[[package]]
+name = "uniffi_meta"
+version = "0.24.3"
+source = "git+https://github.com/mozilla/uniffi-rs?rev=eb8ab92b53084ddd05fc6658d057b38e31a1c4c7#eb8ab92b53084ddd05fc6658d057b38e31a1c4c7"
+dependencies = [
+ "anyhow",
+ "bytes",
+ "siphasher",
+ "uniffi_checksum_derive",
+]
+
+[[package]]
+name = "uniffi_testing"
+version = "0.24.3"
+source = "git+https://github.com/mozilla/uniffi-rs?rev=eb8ab92b53084ddd05fc6658d057b38e31a1c4c7#eb8ab92b53084ddd05fc6658d057b38e31a1c4c7"
+dependencies = [
+ "anyhow",
+ "camino",
+ "cargo_metadata",
+ "fs-err",
+ "once_cell",
+]
+
+[[package]]
+name = "uniffi_udl"
+version = "0.24.3"
+source = "git+https://github.com/mozilla/uniffi-rs?rev=eb8ab92b53084ddd05fc6658d057b38e31a1c4c7#eb8ab92b53084ddd05fc6658d057b38e31a1c4c7"
+dependencies = [
+ "anyhow",
+ "uniffi_meta",
+ "uniffi_testing",
+ "weedle2",
+]
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
+name = "valuable"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "walletkit"
+version = "0.0.0"
+dependencies = [
+ "napi",
+ "napi-build",
+ "napi-derive",
+ "thiserror",
+ "tokio",
+]
+
+[[package]]
+name = "walletkit-napi"
+version = "0.0.1"
+dependencies = [
+ "napi",
+ "napi-build",
+ "napi-derive",
+ "walletkit",
+]
+
+[[package]]
+name = "walletkit-uniffi"
+version = "0.0.1"
+dependencies = [
+ "napi",
+ "napi-derive",
+ "thiserror",
+ "uniffi",
+ "walletkit",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "weedle2"
+version = "4.0.0"
+source = "git+https://github.com/mozilla/uniffi-rs?rev=eb8ab92b53084ddd05fc6658d057b38e31a1c4c7#eb8ab92b53084ddd05fc6658d057b38e31a1c4c7"
+dependencies = [
+ "nom",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+dependencies = [
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+dependencies = [
+ "windows-targets 0.52.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.5",
+ "windows_aarch64_msvc 0.48.5",
+ "windows_i686_gnu 0.48.5",
+ "windows_i686_msvc 0.48.5",
+ "windows_x86_64_gnu 0.48.5",
+ "windows_x86_64_gnullvm 0.48.5",
+ "windows_x86_64_msvc 0.48.5",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd"
+dependencies = [
+ "windows_aarch64_gnullvm 0.52.0",
+ "windows_aarch64_msvc 0.52.0",
+ "windows_i686_gnu 0.52.0",
+ "windows_i686_msvc 0.52.0",
+ "windows_x86_64_gnu 0.52.0",
+ "windows_x86_64_gnullvm 0.52.0",
+ "windows_x86_64_msvc 0.52.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
diff --git a/Cargo.toml b/Cargo.toml
new file mode 100644
index 00000000..8abec065
--- /dev/null
+++ b/Cargo.toml
@@ -0,0 +1,14 @@
+[workspace]
+members = ["uniffi-bindgen", "walletkit", "walletkit-uniffi", "walletkit-napi"]
+
+[workspace.dependencies]
+uniffi = { git = "https://github.com/mozilla/uniffi-rs", rev = "eb8ab92b53084ddd05fc6658d057b38e31a1c4c7", features = [
+ "build",
+] }
+
+
+[profile.release]
+lto = true
+panic = 'abort'
+codegen-units = 1
+opt-level = "z"
diff --git a/__test__/index.spec.mjs b/__test__/index.spec.mjs
new file mode 100644
index 00000000..f35a438d
--- /dev/null
+++ b/__test__/index.spec.mjs
@@ -0,0 +1,13 @@
+import test from "ava";
+
+import { Hello } from "../index.js";
+
+test("hello", (t) => {
+ const hello = new Hello();
+ const testAsync = async () => {
+ const out = await hello.echo("hello");
+ t.is(out, "hello");
+ };
+ const out = hello.sayHello();
+ t.is(out, "Hello, World!");
+});
diff --git a/build_ios.sh b/build_ios.sh
new file mode 100755
index 00000000..731eba8c
--- /dev/null
+++ b/build_ios.sh
@@ -0,0 +1,42 @@
+#!/bin/bash
+rm -rf ios_build
+rm -rf WalletKit.xcframework
+mkdir ios_build
+mkdir ios_build/bindings
+mkdir -p ios_build/target/universal-ios-sim/release
+mkdir -p ./Sources/Oxide
+
+
+export IPHONEOS_DEPLOYMENT_TARGET="13.0"
+export RUSTFLAGS="-C link-arg=-Wl,-application_extension"
+cargo build --package walletkit --target aarch64-apple-ios-sim --release
+cargo build --package walletkit --target aarch64-apple-ios --release
+cargo build --package walletkit --target x86_64-apple-ios --release
+
+
+lipo -create target/aarch64-apple-ios-sim/release/libwalletkit.a \
+ target/x86_64-apple-ios/release/libwalletkit.a \
+ -output ./ios_build/target/universal-ios-sim/release/libwalletkit.a
+
+cargo run -p uniffi-bindgen generate \
+ target/aarch64-apple-ios-sim/release/libwalletkit.dylib \
+ --library \
+ --language swift \
+ --no-format \
+ --out-dir ios_build/bindings
+
+mv ./ios_build/bindings/walletkit.swift ./Sources/Oxide/
+
+mkdir ios_build/Headers
+mv ./ios_build/bindings/walletkitFFI.h ./ios_build/Headers/
+
+cat ./ios_build/bindings/walletkitFFI.modulemap > ./ios_build/Headers/module.modulemap
+
+xcodebuild -create-xcframework \
+ -library target/aarch64-apple-ios/release/libwalletkit.a \
+ -headers ./ios_build/Headers \
+ -library ./ios_build/target/universal-ios-sim/release/libwalletkit.a \
+ -headers ./ios_build/Headers \
+ -output ./WalletKit.xcframework
+
+rm -rf ios_build
\ No newline at end of file
diff --git a/examples/android/.gitignore b/examples/android/.gitignore
new file mode 100644
index 00000000..aa724b77
--- /dev/null
+++ b/examples/android/.gitignore
@@ -0,0 +1,15 @@
+*.iml
+.gradle
+/local.properties
+/.idea/caches
+/.idea/libraries
+/.idea/modules.xml
+/.idea/workspace.xml
+/.idea/navEditor.xml
+/.idea/assetWizardSettings.xml
+.DS_Store
+/build
+/captures
+.externalNativeBuild
+.cxx
+local.properties
diff --git a/examples/android/.idea/.gitignore b/examples/android/.idea/.gitignore
new file mode 100644
index 00000000..26d33521
--- /dev/null
+++ b/examples/android/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/examples/android/.idea/.name b/examples/android/.idea/.name
new file mode 100644
index 00000000..a78329e3
--- /dev/null
+++ b/examples/android/.idea/.name
@@ -0,0 +1 @@
+walletkit-sample
\ No newline at end of file
diff --git a/examples/android/.idea/compiler.xml b/examples/android/.idea/compiler.xml
new file mode 100644
index 00000000..b589d56e
--- /dev/null
+++ b/examples/android/.idea/compiler.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/android/.idea/gradle.xml b/examples/android/.idea/gradle.xml
new file mode 100644
index 00000000..ae388c2a
--- /dev/null
+++ b/examples/android/.idea/gradle.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/android/.idea/jarRepositories.xml b/examples/android/.idea/jarRepositories.xml
new file mode 100644
index 00000000..6caf852a
--- /dev/null
+++ b/examples/android/.idea/jarRepositories.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/android/.idea/kotlinc.xml b/examples/android/.idea/kotlinc.xml
new file mode 100644
index 00000000..0fc31131
--- /dev/null
+++ b/examples/android/.idea/kotlinc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/android/.idea/misc.xml b/examples/android/.idea/misc.xml
new file mode 100644
index 00000000..8978d23d
--- /dev/null
+++ b/examples/android/.idea/misc.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/android/.idea/vcs.xml b/examples/android/.idea/vcs.xml
new file mode 100644
index 00000000..b2bdec2d
--- /dev/null
+++ b/examples/android/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/android/app/.gitignore b/examples/android/app/.gitignore
new file mode 100644
index 00000000..42afabfd
--- /dev/null
+++ b/examples/android/app/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/examples/android/app/build.gradle.kts b/examples/android/app/build.gradle.kts
new file mode 100644
index 00000000..ef21f6f6
--- /dev/null
+++ b/examples/android/app/build.gradle.kts
@@ -0,0 +1,70 @@
+plugins {
+ id("com.android.application")
+ id("org.jetbrains.kotlin.android")
+}
+
+android {
+ namespace = "com.example.wallet_kit_sample"
+ compileSdk = 33
+
+ defaultConfig {
+ applicationId = "com.example.wallet_kit_sample"
+ minSdk = 23
+ targetSdk = 33
+ versionCode = 1
+ versionName = "1.0"
+
+ testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
+ vectorDrawables {
+ useSupportLibrary = true
+ }
+ }
+
+ buildTypes {
+ release {
+ isMinifyEnabled = false
+ proguardFiles(
+ getDefaultProguardFile("proguard-android-optimize.txt"),
+ "proguard-rules.pro"
+ )
+ }
+ }
+ compileOptions {
+ sourceCompatibility = JavaVersion.VERSION_1_8
+ targetCompatibility = JavaVersion.VERSION_1_8
+ }
+ kotlinOptions {
+ jvmTarget = "1.8"
+ }
+ buildFeatures {
+ compose = true
+ }
+ composeOptions {
+ kotlinCompilerExtensionVersion = "1.4.3"
+ }
+ packaging {
+ resources {
+ excludes += "/META-INF/{AL2.0,LGPL2.1}"
+ }
+ }
+}
+
+dependencies {
+
+ implementation("androidx.core:core-ktx:1.9.0")
+ implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.2")
+ implementation("androidx.activity:activity-compose:1.7.0")
+ implementation(platform("androidx.compose:compose-bom:2023.03.00"))
+ implementation("androidx.compose.ui:ui")
+ implementation("androidx.compose.ui:ui-graphics")
+ implementation("androidx.compose.ui:ui-tooling-preview")
+ implementation("androidx.compose.material3:material3")
+ testImplementation("junit:junit:4.13.2")
+ androidTestImplementation("androidx.test.ext:junit:1.1.5")
+ androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
+ androidTestImplementation(platform("androidx.compose:compose-bom:2023.03.00"))
+ androidTestImplementation("androidx.compose.ui:ui-test-junit4")
+ debugImplementation("androidx.compose.ui:ui-tooling")
+ debugImplementation("androidx.compose.ui:ui-test-manifest")
+ implementation("com.worldcoin:walletkit-android:v0.0.1-SNAPSHOT")
+}
\ No newline at end of file
diff --git a/examples/android/app/proguard-rules.pro b/examples/android/app/proguard-rules.pro
new file mode 100644
index 00000000..481bb434
--- /dev/null
+++ b/examples/android/app/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/examples/android/app/src/androidTest/java/com/example/wallet_kit_sample/ExampleInstrumentedTest.kt b/examples/android/app/src/androidTest/java/com/example/wallet_kit_sample/ExampleInstrumentedTest.kt
new file mode 100644
index 00000000..049cb0d7
--- /dev/null
+++ b/examples/android/app/src/androidTest/java/com/example/wallet_kit_sample/ExampleInstrumentedTest.kt
@@ -0,0 +1,24 @@
+package com.example.wallet_kit_sample
+
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.ext.junit.runners.AndroidJUnit4
+
+import org.junit.Test
+import org.junit.runner.RunWith
+
+import org.junit.Assert.*
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+@RunWith(AndroidJUnit4::class)
+class ExampleInstrumentedTest {
+ @Test
+ fun useAppContext() {
+ // Context of the app under test.
+ val appContext = InstrumentationRegistry.getInstrumentation().targetContext
+ assertEquals("com.example.wallet_kit_sample", appContext.packageName)
+ }
+}
\ No newline at end of file
diff --git a/examples/android/app/src/main/AndroidManifest.xml b/examples/android/app/src/main/AndroidManifest.xml
new file mode 100644
index 00000000..674af68a
--- /dev/null
+++ b/examples/android/app/src/main/AndroidManifest.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/android/app/src/main/java/com/example/wallet_kit_sample/MainActivity.kt b/examples/android/app/src/main/java/com/example/wallet_kit_sample/MainActivity.kt
new file mode 100644
index 00000000..1e204b03
--- /dev/null
+++ b/examples/android/app/src/main/java/com/example/wallet_kit_sample/MainActivity.kt
@@ -0,0 +1,50 @@
+package com.example.wallet_kit_sample
+
+import android.os.Bundle
+import androidx.activity.ComponentActivity
+import androidx.activity.compose.setContent
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.Surface
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.tooling.preview.Preview
+import com.example.wallet_kit_sample.ui.theme.WalletkitsampleTheme
+import uniffi.wallet_kit.Hello
+import uniffi.wallet_kit.generateNulliferHash
+
+
+class MainActivity : ComponentActivity() {
+ val hello = Hello()
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContent {
+ WalletkitsampleTheme {
+ // A surface container using the 'background' color from the theme
+ Surface(
+ modifier = Modifier.fillMaxSize(),
+ color = MaterialTheme.colorScheme.background
+ ) {
+ Greeting("Android")
+ }
+ }
+ }
+ }
+}
+
+@Composable
+fun Greeting(name: String, modifier: Modifier = Modifier) {
+ Text(
+ text = "Hello $name!",
+ modifier = modifier
+ )
+}
+
+@Preview(showBackground = true)
+@Composable
+fun GreetingPreview() {
+ WalletkitsampleTheme {
+ Greeting("Android")
+ }
+}
\ No newline at end of file
diff --git a/examples/android/app/src/main/java/com/example/wallet_kit_sample/ui/theme/Color.kt b/examples/android/app/src/main/java/com/example/wallet_kit_sample/ui/theme/Color.kt
new file mode 100644
index 00000000..08b37e42
--- /dev/null
+++ b/examples/android/app/src/main/java/com/example/wallet_kit_sample/ui/theme/Color.kt
@@ -0,0 +1,11 @@
+package com.example.wallet_kit_sample.ui.theme
+
+import androidx.compose.ui.graphics.Color
+
+val Purple80 = Color(0xFFD0BCFF)
+val PurpleGrey80 = Color(0xFFCCC2DC)
+val Pink80 = Color(0xFFEFB8C8)
+
+val Purple40 = Color(0xFF6650a4)
+val PurpleGrey40 = Color(0xFF625b71)
+val Pink40 = Color(0xFF7D5260)
\ No newline at end of file
diff --git a/examples/android/app/src/main/java/com/example/wallet_kit_sample/ui/theme/Theme.kt b/examples/android/app/src/main/java/com/example/wallet_kit_sample/ui/theme/Theme.kt
new file mode 100644
index 00000000..e355ee69
--- /dev/null
+++ b/examples/android/app/src/main/java/com/example/wallet_kit_sample/ui/theme/Theme.kt
@@ -0,0 +1,70 @@
+package com.example.wallet_kit_sample.ui.theme
+
+import android.app.Activity
+import android.os.Build
+import androidx.compose.foundation.isSystemInDarkTheme
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.darkColorScheme
+import androidx.compose.material3.dynamicDarkColorScheme
+import androidx.compose.material3.dynamicLightColorScheme
+import androidx.compose.material3.lightColorScheme
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.SideEffect
+import androidx.compose.ui.graphics.toArgb
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.platform.LocalView
+import androidx.core.view.WindowCompat
+
+private val DarkColorScheme = darkColorScheme(
+ primary = Purple80,
+ secondary = PurpleGrey80,
+ tertiary = Pink80
+)
+
+private val LightColorScheme = lightColorScheme(
+ primary = Purple40,
+ secondary = PurpleGrey40,
+ tertiary = Pink40
+
+ /* Other default colors to override
+ background = Color(0xFFFFFBFE),
+ surface = Color(0xFFFFFBFE),
+ onPrimary = Color.White,
+ onSecondary = Color.White,
+ onTertiary = Color.White,
+ onBackground = Color(0xFF1C1B1F),
+ onSurface = Color(0xFF1C1B1F),
+ */
+)
+
+@Composable
+fun WalletkitsampleTheme(
+ darkTheme: Boolean = isSystemInDarkTheme(),
+ // Dynamic color is available on Android 12+
+ dynamicColor: Boolean = true,
+ content: @Composable () -> Unit
+) {
+ val colorScheme = when {
+ dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> {
+ val context = LocalContext.current
+ if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context)
+ }
+
+ darkTheme -> DarkColorScheme
+ else -> LightColorScheme
+ }
+ val view = LocalView.current
+ if (!view.isInEditMode) {
+ SideEffect {
+ val window = (view.context as Activity).window
+ window.statusBarColor = colorScheme.primary.toArgb()
+ WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = darkTheme
+ }
+ }
+
+ MaterialTheme(
+ colorScheme = colorScheme,
+ typography = Typography,
+ content = content
+ )
+}
\ No newline at end of file
diff --git a/examples/android/app/src/main/java/com/example/wallet_kit_sample/ui/theme/Type.kt b/examples/android/app/src/main/java/com/example/wallet_kit_sample/ui/theme/Type.kt
new file mode 100644
index 00000000..b434cf57
--- /dev/null
+++ b/examples/android/app/src/main/java/com/example/wallet_kit_sample/ui/theme/Type.kt
@@ -0,0 +1,34 @@
+package com.example.wallet_kit_sample.ui.theme
+
+import androidx.compose.material3.Typography
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.unit.sp
+
+// Set of Material typography styles to start with
+val Typography = Typography(
+ bodyLarge = TextStyle(
+ fontFamily = FontFamily.Default,
+ fontWeight = FontWeight.Normal,
+ fontSize = 16.sp,
+ lineHeight = 24.sp,
+ letterSpacing = 0.5.sp
+ )
+ /* Other default text styles to override
+ titleLarge = TextStyle(
+ fontFamily = FontFamily.Default,
+ fontWeight = FontWeight.Normal,
+ fontSize = 22.sp,
+ lineHeight = 28.sp,
+ letterSpacing = 0.sp
+ ),
+ labelSmall = TextStyle(
+ fontFamily = FontFamily.Default,
+ fontWeight = FontWeight.Medium,
+ fontSize = 11.sp,
+ lineHeight = 16.sp,
+ letterSpacing = 0.5.sp
+ )
+ */
+)
\ No newline at end of file
diff --git a/examples/android/app/src/main/res/drawable/ic_launcher_background.xml b/examples/android/app/src/main/res/drawable/ic_launcher_background.xml
new file mode 100644
index 00000000..07d5da9c
--- /dev/null
+++ b/examples/android/app/src/main/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,170 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/android/app/src/main/res/drawable/ic_launcher_foreground.xml b/examples/android/app/src/main/res/drawable/ic_launcher_foreground.xml
new file mode 100644
index 00000000..2b068d11
--- /dev/null
+++ b/examples/android/app/src/main/res/drawable/ic_launcher_foreground.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/examples/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 00000000..6f3b755b
--- /dev/null
+++ b/examples/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/examples/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100644
index 00000000..6f3b755b
--- /dev/null
+++ b/examples/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/examples/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp
new file mode 100644
index 00000000..c209e78e
Binary files /dev/null and b/examples/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp differ
diff --git a/examples/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/examples/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
new file mode 100644
index 00000000..b2dfe3d1
Binary files /dev/null and b/examples/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ
diff --git a/examples/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/examples/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp
new file mode 100644
index 00000000..4f0f1d64
Binary files /dev/null and b/examples/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp differ
diff --git a/examples/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/examples/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
new file mode 100644
index 00000000..62b611da
Binary files /dev/null and b/examples/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ
diff --git a/examples/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/examples/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp
new file mode 100644
index 00000000..948a3070
Binary files /dev/null and b/examples/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp differ
diff --git a/examples/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/examples/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
new file mode 100644
index 00000000..1b9a6956
Binary files /dev/null and b/examples/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ
diff --git a/examples/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/examples/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
new file mode 100644
index 00000000..28d4b77f
Binary files /dev/null and b/examples/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ
diff --git a/examples/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/examples/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
new file mode 100644
index 00000000..9287f508
Binary files /dev/null and b/examples/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ
diff --git a/examples/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/examples/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
new file mode 100644
index 00000000..aa7d6427
Binary files /dev/null and b/examples/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ
diff --git a/examples/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/examples/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
new file mode 100644
index 00000000..9126ae37
Binary files /dev/null and b/examples/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ
diff --git a/examples/android/app/src/main/res/values/colors.xml b/examples/android/app/src/main/res/values/colors.xml
new file mode 100644
index 00000000..f8c6127d
--- /dev/null
+++ b/examples/android/app/src/main/res/values/colors.xml
@@ -0,0 +1,10 @@
+
+
+ #FFBB86FC
+ #FF6200EE
+ #FF3700B3
+ #FF03DAC5
+ #FF018786
+ #FF000000
+ #FFFFFFFF
+
\ No newline at end of file
diff --git a/examples/android/app/src/main/res/values/strings.xml b/examples/android/app/src/main/res/values/strings.xml
new file mode 100644
index 00000000..27671742
--- /dev/null
+++ b/examples/android/app/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+
+ walletkit-sample
+
\ No newline at end of file
diff --git a/examples/android/app/src/main/res/values/themes.xml b/examples/android/app/src/main/res/values/themes.xml
new file mode 100644
index 00000000..93c74ce4
--- /dev/null
+++ b/examples/android/app/src/main/res/values/themes.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/android/app/src/main/res/xml/backup_rules.xml b/examples/android/app/src/main/res/xml/backup_rules.xml
new file mode 100644
index 00000000..fa0f996d
--- /dev/null
+++ b/examples/android/app/src/main/res/xml/backup_rules.xml
@@ -0,0 +1,13 @@
+
+
+
+
\ No newline at end of file
diff --git a/examples/android/app/src/main/res/xml/data_extraction_rules.xml b/examples/android/app/src/main/res/xml/data_extraction_rules.xml
new file mode 100644
index 00000000..9ee9997b
--- /dev/null
+++ b/examples/android/app/src/main/res/xml/data_extraction_rules.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/android/app/src/test/java/com/example/wallet_kit_sample/ExampleUnitTest.kt b/examples/android/app/src/test/java/com/example/wallet_kit_sample/ExampleUnitTest.kt
new file mode 100644
index 00000000..58c6c1be
--- /dev/null
+++ b/examples/android/app/src/test/java/com/example/wallet_kit_sample/ExampleUnitTest.kt
@@ -0,0 +1,17 @@
+package com.example.wallet_kit_sample
+
+import org.junit.Test
+
+import org.junit.Assert.*
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+class ExampleUnitTest {
+ @Test
+ fun addition_isCorrect() {
+ assertEquals(4, 2 + 2)
+ }
+}
\ No newline at end of file
diff --git a/examples/android/build.gradle.kts b/examples/android/build.gradle.kts
new file mode 100644
index 00000000..c6e2c8aa
--- /dev/null
+++ b/examples/android/build.gradle.kts
@@ -0,0 +1,6 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+plugins {
+ id("com.android.application") version "8.1.2" apply false
+ id("org.jetbrains.kotlin.android") version "1.8.10" apply false
+}
+
diff --git a/examples/android/gradle.properties b/examples/android/gradle.properties
new file mode 100644
index 00000000..3c5031eb
--- /dev/null
+++ b/examples/android/gradle.properties
@@ -0,0 +1,23 @@
+# Project-wide Gradle settings.
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
+# AndroidX package structure to make it clearer which packages are bundled with the
+# Android operating system, and which are packaged with your app's APK
+# https://developer.android.com/topic/libraries/support-library/androidx-rn
+android.useAndroidX=true
+# Kotlin code style for this project: "official" or "obsolete":
+kotlin.code.style=official
+# Enables namespacing of each library's R class so that its R class includes only the
+# resources declared in the library itself and none from the library's dependencies,
+# thereby reducing the size of the R class for that library
+android.nonTransitiveRClass=true
\ No newline at end of file
diff --git a/examples/android/gradle/libs.versions.toml b/examples/android/gradle/libs.versions.toml
new file mode 100644
index 00000000..e69de29b
diff --git a/examples/android/gradle/wrapper/gradle-wrapper.jar b/examples/android/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 00000000..e708b1c0
Binary files /dev/null and b/examples/android/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/examples/android/gradle/wrapper/gradle-wrapper.properties b/examples/android/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 00000000..43601e78
--- /dev/null
+++ b/examples/android/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Mon Oct 09 18:47:32 PDT 2023
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/examples/android/gradlew b/examples/android/gradlew
new file mode 100755
index 00000000..4f906e0c
--- /dev/null
+++ b/examples/android/gradlew
@@ -0,0 +1,185 @@
+#!/usr/bin/env sh
+
+#
+# Copyright 2015 the original author or authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+ echo "$*"
+}
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+ NONSTOP* )
+ nonstop=true
+ ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=`expr $i + 1`
+ done
+ case $i in
+ 0) set -- ;;
+ 1) set -- "$args0" ;;
+ 2) set -- "$args0" "$args1" ;;
+ 3) set -- "$args0" "$args1" "$args2" ;;
+ 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Escape application args
+save () {
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+ echo " "
+}
+APP_ARGS=`save "$@"`
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+exec "$JAVACMD" "$@"
diff --git a/examples/android/gradlew.bat b/examples/android/gradlew.bat
new file mode 100644
index 00000000..ac1b06f9
--- /dev/null
+++ b/examples/android/gradlew.bat
@@ -0,0 +1,89 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/examples/android/settings.gradle.kts b/examples/android/settings.gradle.kts
new file mode 100644
index 00000000..cd442555
--- /dev/null
+++ b/examples/android/settings.gradle.kts
@@ -0,0 +1,27 @@
+pluginManagement {
+ repositories {
+ google()
+ mavenCentral()
+ gradlePluginPortal()
+ }
+}
+dependencyResolutionManagement {
+ repositories {
+ google()
+ mavenCentral()
+ maven {
+ url = uri("https://maven.pkg.github.com/worldcoin/walletkit")
+ credentials {
+ username = "lukejmann"
+ password = "..."
+ }
+ metadataSources {
+ gradleMetadata()
+ artifact()
+ }
+ }
+ }
+}
+
+rootProject.name = "walletkit-sample"
+include(":app")
diff --git a/examples/ios/iOSSample.xcodeproj/project.pbxproj b/examples/ios/iOSSample.xcodeproj/project.pbxproj
new file mode 100644
index 00000000..256a7a3f
--- /dev/null
+++ b/examples/ios/iOSSample.xcodeproj/project.pbxproj
@@ -0,0 +1,638 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 60;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 2F4FF19E2AD5462C0058B9F5 /* iOSSampleApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F4FF19D2AD5462C0058B9F5 /* iOSSampleApp.swift */; };
+ 2F4FF1A02AD5462C0058B9F5 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F4FF19F2AD5462C0058B9F5 /* ContentView.swift */; };
+ 2F4FF1A42AD5462D0058B9F5 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2F4FF1A32AD5462D0058B9F5 /* Assets.xcassets */; };
+ 2F4FF1A82AD5462D0058B9F5 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2F4FF1A72AD5462D0058B9F5 /* Preview Assets.xcassets */; };
+ 2F4FF1B22AD5462D0058B9F5 /* iOSSampleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F4FF1B12AD5462D0058B9F5 /* iOSSampleTests.swift */; };
+ 2F4FF1BC2AD5462D0058B9F5 /* iOSSampleUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F4FF1BB2AD5462D0058B9F5 /* iOSSampleUITests.swift */; };
+ 2F4FF1BE2AD5462D0058B9F5 /* iOSSampleUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F4FF1BD2AD5462D0058B9F5 /* iOSSampleUITestsLaunchTests.swift */; };
+ 2F5D01362AD5494100DC9903 /* WalletKit in Frameworks */ = {isa = PBXBuildFile; productRef = 2F5D01352AD5494100DC9903 /* WalletKit */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 2F4FF1AE2AD5462D0058B9F5 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 2F4FF1922AD5462C0058B9F5 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 2F4FF1992AD5462C0058B9F5;
+ remoteInfo = iOSSample;
+ };
+ 2F4FF1B82AD5462D0058B9F5 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 2F4FF1922AD5462C0058B9F5 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 2F4FF1992AD5462C0058B9F5;
+ remoteInfo = iOSSample;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXFileReference section */
+ 2F4FF19A2AD5462C0058B9F5 /* iOSSample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iOSSample.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 2F4FF19D2AD5462C0058B9F5 /* iOSSampleApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = iOSSampleApp.swift; sourceTree = ""; };
+ 2F4FF19F2AD5462C0058B9F5 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; };
+ 2F4FF1A32AD5462D0058B9F5 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
+ 2F4FF1A52AD5462D0058B9F5 /* iOSSample.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = iOSSample.entitlements; sourceTree = ""; };
+ 2F4FF1A72AD5462D0058B9F5 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; };
+ 2F4FF1AD2AD5462D0058B9F5 /* iOSSampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = iOSSampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+ 2F4FF1B12AD5462D0058B9F5 /* iOSSampleTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = iOSSampleTests.swift; sourceTree = ""; };
+ 2F4FF1B72AD5462D0058B9F5 /* iOSSampleUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = iOSSampleUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+ 2F4FF1BB2AD5462D0058B9F5 /* iOSSampleUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = iOSSampleUITests.swift; sourceTree = ""; };
+ 2F4FF1BD2AD5462D0058B9F5 /* iOSSampleUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = iOSSampleUITestsLaunchTests.swift; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 2F4FF1972AD5462C0058B9F5 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 2F5D01362AD5494100DC9903 /* WalletKit in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 2F4FF1AA2AD5462D0058B9F5 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 2F4FF1B42AD5462D0058B9F5 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 2F4FF1912AD5462C0058B9F5 = {
+ isa = PBXGroup;
+ children = (
+ 2F4FF19C2AD5462C0058B9F5 /* iOSSample */,
+ 2F4FF1B02AD5462D0058B9F5 /* iOSSampleTests */,
+ 2F4FF1BA2AD5462D0058B9F5 /* iOSSampleUITests */,
+ 2F4FF19B2AD5462C0058B9F5 /* Products */,
+ );
+ sourceTree = "";
+ };
+ 2F4FF19B2AD5462C0058B9F5 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 2F4FF19A2AD5462C0058B9F5 /* iOSSample.app */,
+ 2F4FF1AD2AD5462D0058B9F5 /* iOSSampleTests.xctest */,
+ 2F4FF1B72AD5462D0058B9F5 /* iOSSampleUITests.xctest */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 2F4FF19C2AD5462C0058B9F5 /* iOSSample */ = {
+ isa = PBXGroup;
+ children = (
+ 2F4FF19D2AD5462C0058B9F5 /* iOSSampleApp.swift */,
+ 2F4FF19F2AD5462C0058B9F5 /* ContentView.swift */,
+ 2F4FF1A32AD5462D0058B9F5 /* Assets.xcassets */,
+ 2F4FF1A52AD5462D0058B9F5 /* iOSSample.entitlements */,
+ 2F4FF1A62AD5462D0058B9F5 /* Preview Content */,
+ );
+ path = iOSSample;
+ sourceTree = "";
+ };
+ 2F4FF1A62AD5462D0058B9F5 /* Preview Content */ = {
+ isa = PBXGroup;
+ children = (
+ 2F4FF1A72AD5462D0058B9F5 /* Preview Assets.xcassets */,
+ );
+ path = "Preview Content";
+ sourceTree = "";
+ };
+ 2F4FF1B02AD5462D0058B9F5 /* iOSSampleTests */ = {
+ isa = PBXGroup;
+ children = (
+ 2F4FF1B12AD5462D0058B9F5 /* iOSSampleTests.swift */,
+ );
+ path = iOSSampleTests;
+ sourceTree = "";
+ };
+ 2F4FF1BA2AD5462D0058B9F5 /* iOSSampleUITests */ = {
+ isa = PBXGroup;
+ children = (
+ 2F4FF1BB2AD5462D0058B9F5 /* iOSSampleUITests.swift */,
+ 2F4FF1BD2AD5462D0058B9F5 /* iOSSampleUITestsLaunchTests.swift */,
+ );
+ path = iOSSampleUITests;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 2F4FF1992AD5462C0058B9F5 /* iOSSample */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 2F4FF1C12AD5462D0058B9F5 /* Build configuration list for PBXNativeTarget "iOSSample" */;
+ buildPhases = (
+ 2F4FF1962AD5462C0058B9F5 /* Sources */,
+ 2F4FF1972AD5462C0058B9F5 /* Frameworks */,
+ 2F4FF1982AD5462C0058B9F5 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = iOSSample;
+ packageProductDependencies = (
+ 2F5D01352AD5494100DC9903 /* WalletKit */,
+ );
+ productName = iOSSample;
+ productReference = 2F4FF19A2AD5462C0058B9F5 /* iOSSample.app */;
+ productType = "com.apple.product-type.application";
+ };
+ 2F4FF1AC2AD5462D0058B9F5 /* iOSSampleTests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 2F4FF1C42AD5462D0058B9F5 /* Build configuration list for PBXNativeTarget "iOSSampleTests" */;
+ buildPhases = (
+ 2F4FF1A92AD5462D0058B9F5 /* Sources */,
+ 2F4FF1AA2AD5462D0058B9F5 /* Frameworks */,
+ 2F4FF1AB2AD5462D0058B9F5 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 2F4FF1AF2AD5462D0058B9F5 /* PBXTargetDependency */,
+ );
+ name = iOSSampleTests;
+ productName = iOSSampleTests;
+ productReference = 2F4FF1AD2AD5462D0058B9F5 /* iOSSampleTests.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
+ 2F4FF1B62AD5462D0058B9F5 /* iOSSampleUITests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 2F4FF1C72AD5462D0058B9F5 /* Build configuration list for PBXNativeTarget "iOSSampleUITests" */;
+ buildPhases = (
+ 2F4FF1B32AD5462D0058B9F5 /* Sources */,
+ 2F4FF1B42AD5462D0058B9F5 /* Frameworks */,
+ 2F4FF1B52AD5462D0058B9F5 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 2F4FF1B92AD5462D0058B9F5 /* PBXTargetDependency */,
+ );
+ name = iOSSampleUITests;
+ productName = iOSSampleUITests;
+ productReference = 2F4FF1B72AD5462D0058B9F5 /* iOSSampleUITests.xctest */;
+ productType = "com.apple.product-type.bundle.ui-testing";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 2F4FF1922AD5462C0058B9F5 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ BuildIndependentTargetsInParallel = 1;
+ LastSwiftUpdateCheck = 1500;
+ LastUpgradeCheck = 1500;
+ TargetAttributes = {
+ 2F4FF1992AD5462C0058B9F5 = {
+ CreatedOnToolsVersion = 15.0;
+ };
+ 2F4FF1AC2AD5462D0058B9F5 = {
+ CreatedOnToolsVersion = 15.0;
+ TestTargetID = 2F4FF1992AD5462C0058B9F5;
+ };
+ 2F4FF1B62AD5462D0058B9F5 = {
+ CreatedOnToolsVersion = 15.0;
+ TestTargetID = 2F4FF1992AD5462C0058B9F5;
+ };
+ };
+ };
+ buildConfigurationList = 2F4FF1952AD5462C0058B9F5 /* Build configuration list for PBXProject "iOSSample" */;
+ compatibilityVersion = "Xcode 14.0";
+ developmentRegion = en;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ Base,
+ );
+ mainGroup = 2F4FF1912AD5462C0058B9F5;
+ packageReferences = (
+ 2F5D01342AD5494100DC9903 /* XCLocalSwiftPackageReference "../../" */,
+ );
+ productRefGroup = 2F4FF19B2AD5462C0058B9F5 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 2F4FF1992AD5462C0058B9F5 /* iOSSample */,
+ 2F4FF1AC2AD5462D0058B9F5 /* iOSSampleTests */,
+ 2F4FF1B62AD5462D0058B9F5 /* iOSSampleUITests */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 2F4FF1982AD5462C0058B9F5 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 2F4FF1A82AD5462D0058B9F5 /* Preview Assets.xcassets in Resources */,
+ 2F4FF1A42AD5462D0058B9F5 /* Assets.xcassets in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 2F4FF1AB2AD5462D0058B9F5 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 2F4FF1B52AD5462D0058B9F5 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 2F4FF1962AD5462C0058B9F5 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 2F4FF1A02AD5462C0058B9F5 /* ContentView.swift in Sources */,
+ 2F4FF19E2AD5462C0058B9F5 /* iOSSampleApp.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 2F4FF1A92AD5462D0058B9F5 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 2F4FF1B22AD5462D0058B9F5 /* iOSSampleTests.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 2F4FF1B32AD5462D0058B9F5 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 2F4FF1BE2AD5462D0058B9F5 /* iOSSampleUITestsLaunchTests.swift in Sources */,
+ 2F4FF1BC2AD5462D0058B9F5 /* iOSSampleUITests.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ 2F4FF1AF2AD5462D0058B9F5 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 2F4FF1992AD5462C0058B9F5 /* iOSSample */;
+ targetProxy = 2F4FF1AE2AD5462D0058B9F5 /* PBXContainerItemProxy */;
+ };
+ 2F4FF1B92AD5462D0058B9F5 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 2F4FF1992AD5462C0058B9F5 /* iOSSample */;
+ targetProxy = 2F4FF1B82AD5462D0058B9F5 /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin XCBuildConfiguration section */
+ 2F4FF1BF2AD5462D0058B9F5 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ ENABLE_USER_SCRIPT_SANDBOXING = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu17;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
+ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
+ MTL_FAST_MATH = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ };
+ name = Debug;
+ };
+ 2F4FF1C02AD5462D0058B9F5 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_USER_SCRIPT_SANDBOXING = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu17;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ MTL_FAST_MATH = YES;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ };
+ name = Release;
+ };
+ 2F4FF1C22AD5462D0058B9F5 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+ CODE_SIGN_ENTITLEMENTS = iOSSample/iOSSample.entitlements;
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_ASSET_PATHS = "\"iOSSample/Preview Content\"";
+ ENABLE_PREVIEWS = YES;
+ GENERATE_INFOPLIST_FILE = YES;
+ "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES;
+ "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES;
+ "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES;
+ "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphonesimulator*]" = YES;
+ "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphoneos*]" = YES;
+ "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphonesimulator*]" = YES;
+ "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphoneos*]" = UIStatusBarStyleDefault;
+ "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]" = UIStatusBarStyleDefault;
+ INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
+ INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks";
+ "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks";
+ MACOSX_DEPLOYMENT_TARGET = 14.0;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = xyz.mann.iOSSample;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = auto;
+ SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
+ SUPPORTS_MACCATALYST = NO;
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ 2F4FF1C32AD5462D0058B9F5 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+ CODE_SIGN_ENTITLEMENTS = iOSSample/iOSSample.entitlements;
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_ASSET_PATHS = "\"iOSSample/Preview Content\"";
+ ENABLE_PREVIEWS = YES;
+ GENERATE_INFOPLIST_FILE = YES;
+ "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES;
+ "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES;
+ "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES;
+ "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphonesimulator*]" = YES;
+ "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphoneos*]" = YES;
+ "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphonesimulator*]" = YES;
+ "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphoneos*]" = UIStatusBarStyleDefault;
+ "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]" = UIStatusBarStyleDefault;
+ INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
+ INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks";
+ "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks";
+ MACOSX_DEPLOYMENT_TARGET = 14.0;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = xyz.mann.iOSSample;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = auto;
+ SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
+ SUPPORTS_MACCATALYST = NO;
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Release;
+ };
+ 2F4FF1C52AD5462D0058B9F5 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ GENERATE_INFOPLIST_FILE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ MACOSX_DEPLOYMENT_TARGET = 13.5;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = xyz.mann.iOSSampleTests;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = auto;
+ SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx";
+ SWIFT_EMIT_LOC_STRINGS = NO;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/iOSSample.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/iOSSample";
+ };
+ name = Debug;
+ };
+ 2F4FF1C62AD5462D0058B9F5 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ GENERATE_INFOPLIST_FILE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ MACOSX_DEPLOYMENT_TARGET = 13.5;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = xyz.mann.iOSSampleTests;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = auto;
+ SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx";
+ SWIFT_EMIT_LOC_STRINGS = NO;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/iOSSample.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/iOSSample";
+ };
+ name = Release;
+ };
+ 2F4FF1C82AD5462D0058B9F5 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ GENERATE_INFOPLIST_FILE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ MACOSX_DEPLOYMENT_TARGET = 13.5;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = xyz.mann.iOSSampleUITests;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = auto;
+ SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx";
+ SWIFT_EMIT_LOC_STRINGS = NO;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ TEST_TARGET_NAME = iOSSample;
+ };
+ name = Debug;
+ };
+ 2F4FF1C92AD5462D0058B9F5 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ GENERATE_INFOPLIST_FILE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ MACOSX_DEPLOYMENT_TARGET = 13.5;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = xyz.mann.iOSSampleUITests;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = auto;
+ SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx";
+ SWIFT_EMIT_LOC_STRINGS = NO;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ TEST_TARGET_NAME = iOSSample;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 2F4FF1952AD5462C0058B9F5 /* Build configuration list for PBXProject "iOSSample" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 2F4FF1BF2AD5462D0058B9F5 /* Debug */,
+ 2F4FF1C02AD5462D0058B9F5 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 2F4FF1C12AD5462D0058B9F5 /* Build configuration list for PBXNativeTarget "iOSSample" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 2F4FF1C22AD5462D0058B9F5 /* Debug */,
+ 2F4FF1C32AD5462D0058B9F5 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 2F4FF1C42AD5462D0058B9F5 /* Build configuration list for PBXNativeTarget "iOSSampleTests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 2F4FF1C52AD5462D0058B9F5 /* Debug */,
+ 2F4FF1C62AD5462D0058B9F5 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 2F4FF1C72AD5462D0058B9F5 /* Build configuration list for PBXNativeTarget "iOSSampleUITests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 2F4FF1C82AD5462D0058B9F5 /* Debug */,
+ 2F4FF1C92AD5462D0058B9F5 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+
+/* Begin XCLocalSwiftPackageReference section */
+ 2F5D01342AD5494100DC9903 /* XCLocalSwiftPackageReference "../../" */ = {
+ isa = XCLocalSwiftPackageReference;
+ relativePath = ../../;
+ };
+/* End XCLocalSwiftPackageReference section */
+
+/* Begin XCSwiftPackageProductDependency section */
+ 2F5D01352AD5494100DC9903 /* WalletKit */ = {
+ isa = XCSwiftPackageProductDependency;
+ productName = WalletKit;
+ };
+/* End XCSwiftPackageProductDependency section */
+ };
+ rootObject = 2F4FF1922AD5462C0058B9F5 /* Project object */;
+}
diff --git a/examples/ios/iOSSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/examples/ios/iOSSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 00000000..919434a6
--- /dev/null
+++ b/examples/ios/iOSSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/examples/ios/iOSSample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/ios/iOSSample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 00000000..18d98100
--- /dev/null
+++ b/examples/ios/iOSSample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/examples/ios/iOSSample/Assets.xcassets/AccentColor.colorset/Contents.json b/examples/ios/iOSSample/Assets.xcassets/AccentColor.colorset/Contents.json
new file mode 100644
index 00000000..eb878970
--- /dev/null
+++ b/examples/ios/iOSSample/Assets.xcassets/AccentColor.colorset/Contents.json
@@ -0,0 +1,11 @@
+{
+ "colors" : [
+ {
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/examples/ios/iOSSample/Assets.xcassets/AppIcon.appiconset/Contents.json b/examples/ios/iOSSample/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 00000000..532cd729
--- /dev/null
+++ b/examples/ios/iOSSample/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,63 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "platform" : "ios",
+ "size" : "1024x1024"
+ },
+ {
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "16x16"
+ },
+ {
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "16x16"
+ },
+ {
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "32x32"
+ },
+ {
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "32x32"
+ },
+ {
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "128x128"
+ },
+ {
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "128x128"
+ },
+ {
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "256x256"
+ },
+ {
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "256x256"
+ },
+ {
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "512x512"
+ },
+ {
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "512x512"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/examples/ios/iOSSample/Assets.xcassets/Contents.json b/examples/ios/iOSSample/Assets.xcassets/Contents.json
new file mode 100644
index 00000000..73c00596
--- /dev/null
+++ b/examples/ios/iOSSample/Assets.xcassets/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/examples/ios/iOSSample/ContentView.swift b/examples/ios/iOSSample/ContentView.swift
new file mode 100644
index 00000000..50fdda83
--- /dev/null
+++ b/examples/ios/iOSSample/ContentView.swift
@@ -0,0 +1,34 @@
+import SwiftUI
+import SwiftData
+import WalletKit
+
+struct ContentView: View {
+ @State var qr: String?
+
+ var body: some View {
+ VStack {
+ if let qr = qr {
+ Text("QR:\(qr)")
+ }
+ Button("Generate qr code") {
+ generateQRCode()
+ }
+ }
+ }
+
+ func generateQRCode() {
+ Task {
+ let generator = QrGenerator()
+ let pubKey = try SelfCustodyKeypair()
+ let qr = try await generator.generateAsync(
+ apiBaseUrl: "https://app.stage.orb.worldcoin.org",
+ jwt: "eyJ0eXAiOiJKV1QiLCJhbGciOiJSU0FTU0FfUEtDUzFfVjFfNV9TSEFfMjU2Iiwic2lnbmluZ0tleUlkIjoiYTRmY2NlMDktYTZjZi00ZTFmLWExZDEtMTkyODQxOGE0OGUxIiwiZW5jcnlwdGlvbktleUlkIjoiZGI2M2Q2OTMtODY1NC00NGEzLWI0ZjYtYjhlMmQ4MWIwOTJiIn0.eyJ1c2VySWQiOiJBUUlDQUhpS1hxXzJhd1JLenZMd1piX2pHRHNOV1loMWxKaFRDb3dKZG8zTTV0UG5xZ0dGWXRmZjZndENIbURFcmxTZ3J1UkdBQUFBZ3pDQmdBWUpLb1pJaHZjTkFRY0dvSE13Y1FJQkFEQnNCZ2txaGtpRzl3MEJCd0V3SGdZSllJWklBV1VEQkFFdU1CRUVESzV0Y1Q2T09vTC1yOWs0UmdJQkVJQV9IMkVYalNDd1dLdzhHV2xUOFdsdVNYNVYweTlrRk9mbHA5QWJZM2pWMkZkSWEtdnlRcEg1clNnZkN6U2FlSURncE54d2VZY0pGN1E1cm9OOE9PYVMiLCJpYXQiOjE2OTk1MjYyOTgsImV4cCI6MTY5OTYxMjY5OH0.ERaAYL0h9cNXdBIrSKW4Jq-3HHFHTOMAnBVn4gW-e3DF6hoH4zguR1KgJMcUOKt9L2Vu1XRcaqPUasE8-x6SVCoOxbEWEElhdqUm_swiXhL40KsskjPhMKdXA_admta96tQnpfdYFMxEGFerwPgyckl4lC6QIorTdPxkAQhz4QjgObrv9B05s8O30Og2QzbntgVBG96hvrF8XWfgkvFlFuTTCBY2zN1vOxxUY5ps_fe7EwMIfFn_KNAVEEmlUB6cSuHsC4TF1KEx6ES6bpP-aLBTGYQBoXICNVzjz9QjOTLQ2yTShbx4TuJURbwaVrctu2q2r2sEfDJ1MZZTH4OUQg",
+ idComm: "0x0bbedd3798299b0328a4d3d4c4c9be68935b3b3cbbc63273820cc99f1047bd63",
+ selfCustodyPubkey: pubKey.pkAsPem(),
+ fullDataOptIn: true
+ )
+
+ self.qr = qr.qrCode
+ }
+ }
+}
diff --git a/examples/ios/iOSSample/Preview Content/Preview Assets.xcassets/Contents.json b/examples/ios/iOSSample/Preview Content/Preview Assets.xcassets/Contents.json
new file mode 100644
index 00000000..73c00596
--- /dev/null
+++ b/examples/ios/iOSSample/Preview Content/Preview Assets.xcassets/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/examples/ios/iOSSample/iOSSample.entitlements b/examples/ios/iOSSample/iOSSample.entitlements
new file mode 100644
index 00000000..f2ef3ae0
--- /dev/null
+++ b/examples/ios/iOSSample/iOSSample.entitlements
@@ -0,0 +1,10 @@
+
+
+
+
+ com.apple.security.app-sandbox
+
+ com.apple.security.files.user-selected.read-only
+
+
+
diff --git a/examples/ios/iOSSample/iOSSampleApp.swift b/examples/ios/iOSSample/iOSSampleApp.swift
new file mode 100644
index 00000000..faac28d1
--- /dev/null
+++ b/examples/ios/iOSSample/iOSSampleApp.swift
@@ -0,0 +1,19 @@
+//
+// iOSSampleApp.swift
+// iOSSample
+//
+// Created by Luke Mann on 10.10.23.
+//
+
+import SwiftUI
+import SwiftData
+import WalletKit
+
+@main
+struct iOSSampleApp: App {
+ var body: some Scene {
+ WindowGroup {
+ ContentView()
+ }
+ }
+}
diff --git a/examples/ios/iOSSampleTests/iOSSampleTests.swift b/examples/ios/iOSSampleTests/iOSSampleTests.swift
new file mode 100644
index 00000000..0047191f
--- /dev/null
+++ b/examples/ios/iOSSampleTests/iOSSampleTests.swift
@@ -0,0 +1,35 @@
+//
+// iOSSampleTests.swift
+// iOSSampleTests
+//
+// Created by Luke Mann on 10.10.23.
+//
+
+import XCTest
+
+final class iOSSampleTests: XCTestCase {
+
+ override func setUpWithError() throws {
+ // Put setup code here. This method is called before the invocation of each test method in the class.
+ }
+
+ override func tearDownWithError() throws {
+ // Put teardown code here. This method is called after the invocation of each test method in the class.
+ }
+
+ func testExample() throws {
+ // This is an example of a functional test case.
+ // Use XCTAssert and related functions to verify your tests produce the correct results.
+ // Any test you write for XCTest can be annotated as throws and async.
+ // Mark your test throws to produce an unexpected failure when your test encounters an uncaught error.
+ // Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards.
+ }
+
+ func testPerformanceExample() throws {
+ // This is an example of a performance test case.
+ measure {
+ // Put the code you want to measure the time of here.
+ }
+ }
+
+}
diff --git a/examples/ios/iOSSampleUITests/iOSSampleUITests.swift b/examples/ios/iOSSampleUITests/iOSSampleUITests.swift
new file mode 100644
index 00000000..0c6d50e8
--- /dev/null
+++ b/examples/ios/iOSSampleUITests/iOSSampleUITests.swift
@@ -0,0 +1,41 @@
+//
+// iOSSampleUITests.swift
+// iOSSampleUITests
+//
+// Created by Luke Mann on 10.10.23.
+//
+
+import XCTest
+
+final class iOSSampleUITests: XCTestCase {
+
+ override func setUpWithError() throws {
+ // Put setup code here. This method is called before the invocation of each test method in the class.
+
+ // In UI tests it is usually best to stop immediately when a failure occurs.
+ continueAfterFailure = false
+
+ // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.
+ }
+
+ override func tearDownWithError() throws {
+ // Put teardown code here. This method is called after the invocation of each test method in the class.
+ }
+
+ func testExample() throws {
+ // UI tests must launch the application that they test.
+ let app = XCUIApplication()
+ app.launch()
+
+ // Use XCTAssert and related functions to verify your tests produce the correct results.
+ }
+
+ func testLaunchPerformance() throws {
+ if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 7.0, *) {
+ // This measures how long it takes to launch your application.
+ measure(metrics: [XCTApplicationLaunchMetric()]) {
+ XCUIApplication().launch()
+ }
+ }
+ }
+}
diff --git a/examples/ios/iOSSampleUITests/iOSSampleUITestsLaunchTests.swift b/examples/ios/iOSSampleUITests/iOSSampleUITestsLaunchTests.swift
new file mode 100644
index 00000000..216de8a4
--- /dev/null
+++ b/examples/ios/iOSSampleUITests/iOSSampleUITestsLaunchTests.swift
@@ -0,0 +1,32 @@
+//
+// iOSSampleUITestsLaunchTests.swift
+// iOSSampleUITests
+//
+// Created by Luke Mann on 10.10.23.
+//
+
+import XCTest
+
+final class iOSSampleUITestsLaunchTests: XCTestCase {
+
+ override class var runsForEachTargetApplicationUIConfiguration: Bool {
+ true
+ }
+
+ override func setUpWithError() throws {
+ continueAfterFailure = false
+ }
+
+ func testLaunch() throws {
+ let app = XCUIApplication()
+ app.launch()
+
+ // Insert steps here to perform after app launch but before taking a screenshot,
+ // such as logging into a test account or navigating somewhere in the app
+
+ let attachment = XCTAttachment(screenshot: app.screenshot())
+ attachment.name = "Launch Screen"
+ attachment.lifetime = .keepAlways
+ add(attachment)
+ }
+}
diff --git a/index.d.ts b/index.d.ts
new file mode 100644
index 00000000..501f590a
--- /dev/null
+++ b/index.d.ts
@@ -0,0 +1,11 @@
+/* tslint:disable */
+/* eslint-disable */
+
+/* auto-generated by NAPI-RS */
+
+export type JsHello = Hello
+export class Hello {
+ constructor()
+ echo(query: string): Promise
+ sayHello(): string
+}
diff --git a/index.js b/index.js
new file mode 100644
index 00000000..59635211
--- /dev/null
+++ b/index.js
@@ -0,0 +1,300 @@
+/* tslint:disable */
+/* eslint-disable */
+/* prettier-ignore */
+
+/* auto-generated by NAPI-RS */
+
+const { existsSync, readFileSync } = require('fs')
+const { join } = require('path')
+
+const { platform, arch } = process
+
+let nativeBinding = null
+let localFileExisted = false
+let loadError = null
+
+function isMusl() {
+ // For Node 10
+ if (!process.report || typeof process.report.getReport !== 'function') {
+ try {
+ const lddPath = require('child_process').execSync('which ldd').toString().trim()
+ return readFileSync(lddPath, 'utf8').includes('musl')
+ } catch (e) {
+ return true
+ }
+ } else {
+ const { glibcVersionRuntime } = process.report.getReport().header
+ return !glibcVersionRuntime
+ }
+}
+
+switch (platform) {
+ case 'android':
+ switch (arch) {
+ case 'arm64':
+ localFileExisted = existsSync(join(__dirname, 'walletkit.android-arm64.node'))
+ try {
+ if (localFileExisted) {
+ nativeBinding = require('./walletkit.android-arm64.node')
+ } else {
+ nativeBinding = require('@worldcoin/walletkit-android-arm64')
+ }
+ } catch (e) {
+ loadError = e
+ }
+ break
+ case 'arm':
+ localFileExisted = existsSync(join(__dirname, 'walletkit.android-arm-eabi.node'))
+ try {
+ if (localFileExisted) {
+ nativeBinding = require('./walletkit.android-arm-eabi.node')
+ } else {
+ nativeBinding = require('@worldcoin/walletkit-android-arm-eabi')
+ }
+ } catch (e) {
+ loadError = e
+ }
+ break
+ default:
+ throw new Error(`Unsupported architecture on Android ${arch}`)
+ }
+ break
+ case 'win32':
+ switch (arch) {
+ case 'x64':
+ localFileExisted = existsSync(
+ join(__dirname, 'walletkit.win32-x64-msvc.node')
+ )
+ try {
+ if (localFileExisted) {
+ nativeBinding = require('./walletkit.win32-x64-msvc.node')
+ } else {
+ nativeBinding = require('@worldcoin/walletkit-win32-x64-msvc')
+ }
+ } catch (e) {
+ loadError = e
+ }
+ break
+ case 'ia32':
+ localFileExisted = existsSync(
+ join(__dirname, 'walletkit.win32-ia32-msvc.node')
+ )
+ try {
+ if (localFileExisted) {
+ nativeBinding = require('./walletkit.win32-ia32-msvc.node')
+ } else {
+ nativeBinding = require('@worldcoin/walletkit-win32-ia32-msvc')
+ }
+ } catch (e) {
+ loadError = e
+ }
+ break
+ case 'arm64':
+ localFileExisted = existsSync(
+ join(__dirname, 'walletkit.win32-arm64-msvc.node')
+ )
+ try {
+ if (localFileExisted) {
+ nativeBinding = require('./walletkit.win32-arm64-msvc.node')
+ } else {
+ nativeBinding = require('@worldcoin/walletkit-win32-arm64-msvc')
+ }
+ } catch (e) {
+ loadError = e
+ }
+ break
+ default:
+ throw new Error(`Unsupported architecture on Windows: ${arch}`)
+ }
+ break
+ case 'darwin':
+ localFileExisted = existsSync(join(__dirname, 'walletkit.darwin-universal.node'))
+ try {
+ if (localFileExisted) {
+ nativeBinding = require('./walletkit.darwin-universal.node')
+ } else {
+ nativeBinding = require('@worldcoin/walletkit-darwin-universal')
+ }
+ break
+ } catch {}
+ switch (arch) {
+ case 'x64':
+ localFileExisted = existsSync(join(__dirname, 'walletkit.darwin-x64.node'))
+ try {
+ if (localFileExisted) {
+ nativeBinding = require('./walletkit.darwin-x64.node')
+ } else {
+ nativeBinding = require('@worldcoin/walletkit-darwin-x64')
+ }
+ } catch (e) {
+ loadError = e
+ }
+ break
+ case 'arm64':
+ localFileExisted = existsSync(
+ join(__dirname, 'walletkit.darwin-arm64.node')
+ )
+ try {
+ if (localFileExisted) {
+ nativeBinding = require('./walletkit.darwin-arm64.node')
+ } else {
+ nativeBinding = require('@worldcoin/walletkit-darwin-arm64')
+ }
+ } catch (e) {
+ loadError = e
+ }
+ break
+ default:
+ throw new Error(`Unsupported architecture on macOS: ${arch}`)
+ }
+ break
+ case 'freebsd':
+ if (arch !== 'x64') {
+ throw new Error(`Unsupported architecture on FreeBSD: ${arch}`)
+ }
+ localFileExisted = existsSync(join(__dirname, 'walletkit.freebsd-x64.node'))
+ try {
+ if (localFileExisted) {
+ nativeBinding = require('./walletkit.freebsd-x64.node')
+ } else {
+ nativeBinding = require('@worldcoin/walletkit-freebsd-x64')
+ }
+ } catch (e) {
+ loadError = e
+ }
+ break
+ case 'linux':
+ switch (arch) {
+ case 'x64':
+ if (isMusl()) {
+ localFileExisted = existsSync(
+ join(__dirname, 'walletkit.linux-x64-musl.node')
+ )
+ try {
+ if (localFileExisted) {
+ nativeBinding = require('./walletkit.linux-x64-musl.node')
+ } else {
+ nativeBinding = require('@worldcoin/walletkit-linux-x64-musl')
+ }
+ } catch (e) {
+ loadError = e
+ }
+ } else {
+ localFileExisted = existsSync(
+ join(__dirname, 'walletkit.linux-x64-gnu.node')
+ )
+ try {
+ if (localFileExisted) {
+ nativeBinding = require('./walletkit.linux-x64-gnu.node')
+ } else {
+ nativeBinding = require('@worldcoin/walletkit-linux-x64-gnu')
+ }
+ } catch (e) {
+ loadError = e
+ }
+ }
+ break
+ case 'arm64':
+ if (isMusl()) {
+ localFileExisted = existsSync(
+ join(__dirname, 'walletkit.linux-arm64-musl.node')
+ )
+ try {
+ if (localFileExisted) {
+ nativeBinding = require('./walletkit.linux-arm64-musl.node')
+ } else {
+ nativeBinding = require('@worldcoin/walletkit-linux-arm64-musl')
+ }
+ } catch (e) {
+ loadError = e
+ }
+ } else {
+ localFileExisted = existsSync(
+ join(__dirname, 'walletkit.linux-arm64-gnu.node')
+ )
+ try {
+ if (localFileExisted) {
+ nativeBinding = require('./walletkit.linux-arm64-gnu.node')
+ } else {
+ nativeBinding = require('@worldcoin/walletkit-linux-arm64-gnu')
+ }
+ } catch (e) {
+ loadError = e
+ }
+ }
+ break
+ case 'arm':
+ localFileExisted = existsSync(
+ join(__dirname, 'walletkit.linux-arm-gnueabihf.node')
+ )
+ try {
+ if (localFileExisted) {
+ nativeBinding = require('./walletkit.linux-arm-gnueabihf.node')
+ } else {
+ nativeBinding = require('@worldcoin/walletkit-linux-arm-gnueabihf')
+ }
+ } catch (e) {
+ loadError = e
+ }
+ break
+ case 'riscv64':
+ if (isMusl()) {
+ localFileExisted = existsSync(
+ join(__dirname, 'walletkit.linux-riscv64-musl.node')
+ )
+ try {
+ if (localFileExisted) {
+ nativeBinding = require('./walletkit.linux-riscv64-musl.node')
+ } else {
+ nativeBinding = require('@worldcoin/walletkit-linux-riscv64-musl')
+ }
+ } catch (e) {
+ loadError = e
+ }
+ } else {
+ localFileExisted = existsSync(
+ join(__dirname, 'walletkit.linux-riscv64-gnu.node')
+ )
+ try {
+ if (localFileExisted) {
+ nativeBinding = require('./walletkit.linux-riscv64-gnu.node')
+ } else {
+ nativeBinding = require('@worldcoin/walletkit-linux-riscv64-gnu')
+ }
+ } catch (e) {
+ loadError = e
+ }
+ }
+ break
+ case 's390x':
+ localFileExisted = existsSync(
+ join(__dirname, 'walletkit.linux-s390x-gnu.node')
+ )
+ try {
+ if (localFileExisted) {
+ nativeBinding = require('./walletkit.linux-s390x-gnu.node')
+ } else {
+ nativeBinding = require('@worldcoin/walletkit-linux-s390x-gnu')
+ }
+ } catch (e) {
+ loadError = e
+ }
+ break
+ default:
+ throw new Error(`Unsupported architecture on Linux: ${arch}`)
+ }
+ break
+ default:
+ throw new Error(`Unsupported OS: ${platform}, architecture: ${arch}`)
+}
+
+if (!nativeBinding) {
+ if (loadError) {
+ throw loadError
+ }
+ throw new Error(`Failed to load native binding`)
+}
+
+const { Hello } = nativeBinding
+
+module.exports.Hello = Hello
diff --git a/kotlin/.gitignore b/kotlin/.gitignore
new file mode 100644
index 00000000..aa724b77
--- /dev/null
+++ b/kotlin/.gitignore
@@ -0,0 +1,15 @@
+*.iml
+.gradle
+/local.properties
+/.idea/caches
+/.idea/libraries
+/.idea/modules.xml
+/.idea/workspace.xml
+/.idea/navEditor.xml
+/.idea/assetWizardSettings.xml
+.DS_Store
+/build
+/captures
+.externalNativeBuild
+.cxx
+local.properties
diff --git a/kotlin/build.gradle b/kotlin/build.gradle
new file mode 100644
index 00000000..b682040f
--- /dev/null
+++ b/kotlin/build.gradle
@@ -0,0 +1,7 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+plugins {
+ id 'com.android.application' version '8.1.0' apply false
+ id 'com.android.library' version '8.1.0' apply false
+ id 'org.jetbrains.kotlin.android' version '1.8.22' apply false
+ id 'org.jetbrains.kotlin.plugin.serialization' version '1.8.22' apply false
+}
diff --git a/kotlin/build.sh b/kotlin/build.sh
new file mode 100755
index 00000000..ae9c53aa
--- /dev/null
+++ b/kotlin/build.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+mkdir -p ./sdk/src/main/jniLibs/{arm64-v8a,armeabi-v7a,x86_64,x86}
+
+cross build -p walletkit --release --target=aarch64-linux-android
+
+mv ../target/aarch64-linux-android/release/libwalletkit.so ./sdk/src/main/jniLibs/arm64-v8a/libwalletkit.so
+
+cross build -p walletkit --release --target=armv7-linux-androideabi
+
+mv ../target/armv7-linux-androideabi/release/libwalletkit.so ./sdk/src/main/jniLibs/armeabi-v7a/libwalletkit.so
+
+cross build -p walletkit --release --target=x86_64-linux-android
+
+mv ../target/x86_64-linux-android/release/libwalletkit.so ./sdk/src/main/jniLibs/x86_64/libwalletkit.so
+
+cross build -p walletkit --release --target=i686-linux-android
+
+mv ../target/i686-linux-android/release/libwalletkit.so ./sdk/src/main/jniLibs/x86/libwalletkit.so
+
+cargo run -p uniffi-bindgen generate \
+ ./sdk/src/main/jniLibs/arm64-v8a/libwalletkit.so \
+ --library \
+ --language kotlin \
+ --no-format \
+ --out-dir sdk/src/main/java
\ No newline at end of file
diff --git a/kotlin/gradle.properties b/kotlin/gradle.properties
new file mode 100644
index 00000000..2cbd6d19
--- /dev/null
+++ b/kotlin/gradle.properties
@@ -0,0 +1,23 @@
+# Project-wide Gradle settings.
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
+# AndroidX package structure to make it clearer which packages are bundled with the
+# Android operating system, and which are packaged with your app's APK
+# https://developer.android.com/topic/libraries/support-library/androidx-rn
+android.useAndroidX=true
+# Kotlin code style for this project: "official" or "obsolete":
+kotlin.code.style=official
+# Enables namespacing of each library's R class so that its R class includes only the
+# resources declared in the library itself and none from the library's dependencies,
+# thereby reducing the size of the R class for that library
+android.nonTransitiveRClass=true
diff --git a/kotlin/gradle/wrapper/gradle-wrapper.jar b/kotlin/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 00000000..e708b1c0
Binary files /dev/null and b/kotlin/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/kotlin/gradle/wrapper/gradle-wrapper.properties b/kotlin/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 00000000..21f3b100
--- /dev/null
+++ b/kotlin/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Mon Jul 24 14:16:42 CEST 2023
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/kotlin/gradlew b/kotlin/gradlew
new file mode 100755
index 00000000..4f906e0c
--- /dev/null
+++ b/kotlin/gradlew
@@ -0,0 +1,185 @@
+#!/usr/bin/env sh
+
+#
+# Copyright 2015 the original author or authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+ echo "$*"
+}
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+ NONSTOP* )
+ nonstop=true
+ ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=`expr $i + 1`
+ done
+ case $i in
+ 0) set -- ;;
+ 1) set -- "$args0" ;;
+ 2) set -- "$args0" "$args1" ;;
+ 3) set -- "$args0" "$args1" "$args2" ;;
+ 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Escape application args
+save () {
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+ echo " "
+}
+APP_ARGS=`save "$@"`
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+exec "$JAVACMD" "$@"
diff --git a/kotlin/gradlew.bat b/kotlin/gradlew.bat
new file mode 100644
index 00000000..ac1b06f9
--- /dev/null
+++ b/kotlin/gradlew.bat
@@ -0,0 +1,89 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/kotlin/sdk/.gitignore b/kotlin/sdk/.gitignore
new file mode 100644
index 00000000..796b96d1
--- /dev/null
+++ b/kotlin/sdk/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/kotlin/sdk/build.gradle b/kotlin/sdk/build.gradle
new file mode 100644
index 00000000..7caa02fb
--- /dev/null
+++ b/kotlin/sdk/build.gradle
@@ -0,0 +1,87 @@
+plugins {
+ id 'com.android.library'
+ id 'org.jetbrains.kotlin.android'
+ id 'maven-publish'
+}
+
+android {
+ namespace 'com.worldcoin.wallet_kit'
+ compileSdk 33
+
+ defaultConfig {
+ minSdk 23
+ targetSdk 33
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ consumerProguardFiles "consumer-rules.pro"
+ }
+
+ // buildTypes {
+ // release {
+ // minifyEnabled false
+ // proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ // }
+ // }
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+ kotlinOptions {
+ jvmTarget = '1.8'
+ }
+
+ publishing {
+ singleVariant('release') {
+ withSourcesJar()
+ }
+ }
+}
+
+publishing {
+ publications {
+ maven(MavenPublication) {
+ groupId = 'com.worldcoin'
+ artifactId = 'walletkit-android'
+
+ def getLatestTag = { ->
+ def stdout = new ByteArrayOutputStream()
+ exec {
+ commandLine 'curl', '-s', '-H', 'Authorization: token ' + System.getenv('GITHUB_TOKEN'), 'https://api.github.com/repos/worldcoin/walletkit/releases/latest'
+ standardOutput = stdout
+ }
+ def jsonSlurper = new groovy.json.JsonSlurper()
+ def object = jsonSlurper.parseText(stdout.toString())
+ return object.tag_name + "-SNAPSHOT"
+ }
+
+ version = getLatestTag()
+
+ afterEvaluate {
+ from components.release
+ }
+ }
+ }
+ repositories {
+ maven {
+ name = "GitHubPackages"
+ url = "https://maven.pkg.github.com/worldcoin/walletkit"
+ credentials {
+ username = System.getenv("GITHUB_ACTOR")
+ password = System.getenv("GITHUB_TOKEN")
+ }
+ }
+ }
+}
+
+dependencies {
+ implementation 'net.java.dev.jna:jna:5.13.0@aar'
+
+ implementation 'androidx.core:core-ktx:1.8.0'
+ implementation 'androidx.appcompat:appcompat:1.4.1'
+ implementation 'com.google.android.material:material:1.5.0'
+ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3'
+
+ testImplementation 'junit:junit:4.13.2'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.5'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
+}
diff --git a/kotlin/sdk/consumer-rules.pro b/kotlin/sdk/consumer-rules.pro
new file mode 100644
index 00000000..e69de29b
diff --git a/kotlin/sdk/proguard-rules.pro b/kotlin/sdk/proguard-rules.pro
new file mode 100644
index 00000000..f1b42451
--- /dev/null
+++ b/kotlin/sdk/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
diff --git a/kotlin/sdk/src/main/AndroidManifest.xml b/kotlin/sdk/src/main/AndroidManifest.xml
new file mode 100644
index 00000000..a5918e68
--- /dev/null
+++ b/kotlin/sdk/src/main/AndroidManifest.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/kotlin/sdk/src/main/jniLibs/.gitignore b/kotlin/sdk/src/main/jniLibs/.gitignore
new file mode 100644
index 00000000..d6b7ef32
--- /dev/null
+++ b/kotlin/sdk/src/main/jniLibs/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
diff --git a/kotlin/settings.gradle b/kotlin/settings.gradle
new file mode 100644
index 00000000..fd45e314
--- /dev/null
+++ b/kotlin/settings.gradle
@@ -0,0 +1,17 @@
+pluginManagement {
+ repositories {
+ google()
+ mavenCentral()
+ gradlePluginPortal()
+ }
+}
+dependencyResolutionManagement {
+ repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
+ repositories {
+ google()
+ mavenCentral()
+ }
+}
+rootProject.name = "My Application"
+include ':app'
+include ':sdk'
diff --git a/npm/android-arm-eabi/README.md b/npm/android-arm-eabi/README.md
new file mode 100644
index 00000000..0550de06
--- /dev/null
+++ b/npm/android-arm-eabi/README.md
@@ -0,0 +1,3 @@
+# `@worldcoin/walletkit-android-arm-eabi`
+
+This is the **armv7-linux-androideabi** binary for `@worldcoin/walletkit`
diff --git a/npm/android-arm-eabi/package.json b/npm/android-arm-eabi/package.json
new file mode 100644
index 00000000..d3cf1148
--- /dev/null
+++ b/npm/android-arm-eabi/package.json
@@ -0,0 +1,18 @@
+{
+ "name": "@worldcoin/walletkit-android-arm-eabi",
+ "version": "0.0.0",
+ "os": [
+ "android"
+ ],
+ "cpu": [
+ "arm"
+ ],
+ "main": "walletkit.android-arm-eabi.node",
+ "files": [
+ "walletkit.android-arm-eabi.node"
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ }
+}
\ No newline at end of file
diff --git a/npm/android-arm64/README.md b/npm/android-arm64/README.md
new file mode 100644
index 00000000..5735d171
--- /dev/null
+++ b/npm/android-arm64/README.md
@@ -0,0 +1,3 @@
+# `@worldcoin/walletkit-android-arm64`
+
+This is the **aarch64-linux-android** binary for `@worldcoin/walletkit`
diff --git a/npm/android-arm64/package.json b/npm/android-arm64/package.json
new file mode 100644
index 00000000..de15e68f
--- /dev/null
+++ b/npm/android-arm64/package.json
@@ -0,0 +1,18 @@
+{
+ "name": "@worldcoin/walletkit-android-arm64",
+ "version": "0.0.0",
+ "os": [
+ "android"
+ ],
+ "cpu": [
+ "arm64"
+ ],
+ "main": "walletkit.android-arm64.node",
+ "files": [
+ "walletkit.android-arm64.node"
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ }
+}
\ No newline at end of file
diff --git a/npm/darwin-arm64/README.md b/npm/darwin-arm64/README.md
new file mode 100644
index 00000000..438ffe49
--- /dev/null
+++ b/npm/darwin-arm64/README.md
@@ -0,0 +1,3 @@
+# `@worldcoin/walletkit-darwin-arm64`
+
+This is the **aarch64-apple-darwin** binary for `@worldcoin/walletkit`
diff --git a/npm/darwin-arm64/package.json b/npm/darwin-arm64/package.json
new file mode 100644
index 00000000..d2c7c51e
--- /dev/null
+++ b/npm/darwin-arm64/package.json
@@ -0,0 +1,18 @@
+{
+ "name": "@worldcoin/walletkit-darwin-arm64",
+ "version": "0.0.0",
+ "os": [
+ "darwin"
+ ],
+ "cpu": [
+ "arm64"
+ ],
+ "main": "walletkit.darwin-arm64.node",
+ "files": [
+ "walletkit.darwin-arm64.node"
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ }
+}
\ No newline at end of file
diff --git a/npm/darwin-universal/README.md b/npm/darwin-universal/README.md
new file mode 100644
index 00000000..2e94d99f
--- /dev/null
+++ b/npm/darwin-universal/README.md
@@ -0,0 +1,3 @@
+# `@worldcoin/walletkit-darwin-universal`
+
+This is the **universal-apple-darwin** binary for `@worldcoin/walletkit`
diff --git a/npm/darwin-universal/package.json b/npm/darwin-universal/package.json
new file mode 100644
index 00000000..2ee7c793
--- /dev/null
+++ b/npm/darwin-universal/package.json
@@ -0,0 +1,15 @@
+{
+ "name": "@worldcoin/walletkit-darwin-universal",
+ "version": "0.0.0",
+ "os": [
+ "darwin"
+ ],
+ "main": "walletkit.darwin-universal.node",
+ "files": [
+ "walletkit.darwin-universal.node"
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ }
+}
\ No newline at end of file
diff --git a/npm/darwin-x64/README.md b/npm/darwin-x64/README.md
new file mode 100644
index 00000000..bbfc14cf
--- /dev/null
+++ b/npm/darwin-x64/README.md
@@ -0,0 +1,3 @@
+# `@worldcoin/walletkit-darwin-x64`
+
+This is the **x86_64-apple-darwin** binary for `@worldcoin/walletkit`
diff --git a/npm/darwin-x64/package.json b/npm/darwin-x64/package.json
new file mode 100644
index 00000000..8db6e246
--- /dev/null
+++ b/npm/darwin-x64/package.json
@@ -0,0 +1,18 @@
+{
+ "name": "@worldcoin/walletkit-darwin-x64",
+ "version": "0.0.0",
+ "os": [
+ "darwin"
+ ],
+ "cpu": [
+ "x64"
+ ],
+ "main": "walletkit.darwin-x64.node",
+ "files": [
+ "walletkit.darwin-x64.node"
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ }
+}
\ No newline at end of file
diff --git a/npm/linux-arm-gnueabihf/README.md b/npm/linux-arm-gnueabihf/README.md
new file mode 100644
index 00000000..5f46794f
--- /dev/null
+++ b/npm/linux-arm-gnueabihf/README.md
@@ -0,0 +1,3 @@
+# `@worldcoin/walletkit-linux-arm-gnueabihf`
+
+This is the **armv7-unknown-linux-gnueabihf** binary for `@worldcoin/walletkit`
diff --git a/npm/linux-arm-gnueabihf/package.json b/npm/linux-arm-gnueabihf/package.json
new file mode 100644
index 00000000..a4eb2228
--- /dev/null
+++ b/npm/linux-arm-gnueabihf/package.json
@@ -0,0 +1,18 @@
+{
+ "name": "@worldcoin/walletkit-linux-arm-gnueabihf",
+ "version": "0.0.0",
+ "os": [
+ "linux"
+ ],
+ "cpu": [
+ "arm"
+ ],
+ "main": "walletkit.linux-arm-gnueabihf.node",
+ "files": [
+ "walletkit.linux-arm-gnueabihf.node"
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ }
+}
\ No newline at end of file
diff --git a/npm/linux-arm64-gnu/README.md b/npm/linux-arm64-gnu/README.md
new file mode 100644
index 00000000..1160d2bd
--- /dev/null
+++ b/npm/linux-arm64-gnu/README.md
@@ -0,0 +1,3 @@
+# `@worldcoin/walletkit-linux-arm64-gnu`
+
+This is the **aarch64-unknown-linux-gnu** binary for `@worldcoin/walletkit`
diff --git a/npm/linux-arm64-gnu/package.json b/npm/linux-arm64-gnu/package.json
new file mode 100644
index 00000000..c7cc73d6
--- /dev/null
+++ b/npm/linux-arm64-gnu/package.json
@@ -0,0 +1,21 @@
+{
+ "name": "@worldcoin/walletkit-linux-arm64-gnu",
+ "version": "0.0.0",
+ "os": [
+ "linux"
+ ],
+ "cpu": [
+ "arm64"
+ ],
+ "main": "walletkit.linux-arm64-gnu.node",
+ "files": [
+ "walletkit.linux-arm64-gnu.node"
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ },
+ "libc": [
+ "glibc"
+ ]
+}
\ No newline at end of file
diff --git a/npm/linux-arm64-musl/README.md b/npm/linux-arm64-musl/README.md
new file mode 100644
index 00000000..6f355517
--- /dev/null
+++ b/npm/linux-arm64-musl/README.md
@@ -0,0 +1,3 @@
+# `@worldcoin/walletkit-linux-arm64-musl`
+
+This is the **aarch64-unknown-linux-musl** binary for `@worldcoin/walletkit`
diff --git a/npm/linux-arm64-musl/package.json b/npm/linux-arm64-musl/package.json
new file mode 100644
index 00000000..bea1699f
--- /dev/null
+++ b/npm/linux-arm64-musl/package.json
@@ -0,0 +1,21 @@
+{
+ "name": "@worldcoin/walletkit-linux-arm64-musl",
+ "version": "0.0.0",
+ "os": [
+ "linux"
+ ],
+ "cpu": [
+ "arm64"
+ ],
+ "main": "walletkit.linux-arm64-musl.node",
+ "files": [
+ "walletkit.linux-arm64-musl.node"
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ },
+ "libc": [
+ "musl"
+ ]
+}
\ No newline at end of file
diff --git a/npm/linux-riscv64-gnu/README.md b/npm/linux-riscv64-gnu/README.md
new file mode 100644
index 00000000..88a13425
--- /dev/null
+++ b/npm/linux-riscv64-gnu/README.md
@@ -0,0 +1,3 @@
+# `@worldcoin/walletkit-linux-riscv64-gnu`
+
+This is the **riscv64gc-unknown-linux-gnu** binary for `@worldcoin/walletkit`
diff --git a/npm/linux-riscv64-gnu/package.json b/npm/linux-riscv64-gnu/package.json
new file mode 100644
index 00000000..b5902838
--- /dev/null
+++ b/npm/linux-riscv64-gnu/package.json
@@ -0,0 +1,21 @@
+{
+ "name": "@worldcoin/walletkit-linux-riscv64-gnu",
+ "version": "0.0.0",
+ "os": [
+ "linux"
+ ],
+ "cpu": [
+ "riscv64"
+ ],
+ "main": "walletkit.linux-riscv64-gnu.node",
+ "files": [
+ "walletkit.linux-riscv64-gnu.node"
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ },
+ "libc": [
+ "glibc"
+ ]
+}
\ No newline at end of file
diff --git a/npm/linux-x64-gnu/README.md b/npm/linux-x64-gnu/README.md
new file mode 100644
index 00000000..01a00a03
--- /dev/null
+++ b/npm/linux-x64-gnu/README.md
@@ -0,0 +1,3 @@
+# `@worldcoin/walletkit-linux-x64-gnu`
+
+This is the **x86_64-unknown-linux-gnu** binary for `@worldcoin/walletkit`
diff --git a/npm/linux-x64-gnu/package.json b/npm/linux-x64-gnu/package.json
new file mode 100644
index 00000000..532deda2
--- /dev/null
+++ b/npm/linux-x64-gnu/package.json
@@ -0,0 +1,21 @@
+{
+ "name": "@worldcoin/walletkit-linux-x64-gnu",
+ "version": "0.0.0",
+ "os": [
+ "linux"
+ ],
+ "cpu": [
+ "x64"
+ ],
+ "main": "walletkit.linux-x64-gnu.node",
+ "files": [
+ "walletkit.linux-x64-gnu.node"
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ },
+ "libc": [
+ "glibc"
+ ]
+}
\ No newline at end of file
diff --git a/npm/linux-x64-musl/README.md b/npm/linux-x64-musl/README.md
new file mode 100644
index 00000000..4d5d3193
--- /dev/null
+++ b/npm/linux-x64-musl/README.md
@@ -0,0 +1,3 @@
+# `@worldcoin/walletkit-linux-x64-musl`
+
+This is the **x86_64-unknown-linux-musl** binary for `@worldcoin/walletkit`
diff --git a/npm/linux-x64-musl/package.json b/npm/linux-x64-musl/package.json
new file mode 100644
index 00000000..c30e90cd
--- /dev/null
+++ b/npm/linux-x64-musl/package.json
@@ -0,0 +1,21 @@
+{
+ "name": "@worldcoin/walletkit-linux-x64-musl",
+ "version": "0.0.0",
+ "os": [
+ "linux"
+ ],
+ "cpu": [
+ "x64"
+ ],
+ "main": "walletkit.linux-x64-musl.node",
+ "files": [
+ "walletkit.linux-x64-musl.node"
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ },
+ "libc": [
+ "musl"
+ ]
+}
\ No newline at end of file
diff --git a/npm/win32-arm64-msvc/README.md b/npm/win32-arm64-msvc/README.md
new file mode 100644
index 00000000..5e258a3a
--- /dev/null
+++ b/npm/win32-arm64-msvc/README.md
@@ -0,0 +1,3 @@
+# `@worldcoin/walletkit-win32-arm64-msvc`
+
+This is the **aarch64-pc-windows-msvc** binary for `@worldcoin/walletkit`
diff --git a/npm/win32-arm64-msvc/package.json b/npm/win32-arm64-msvc/package.json
new file mode 100644
index 00000000..c123eb56
--- /dev/null
+++ b/npm/win32-arm64-msvc/package.json
@@ -0,0 +1,18 @@
+{
+ "name": "@worldcoin/walletkit-win32-arm64-msvc",
+ "version": "0.0.0",
+ "os": [
+ "win32"
+ ],
+ "cpu": [
+ "arm64"
+ ],
+ "main": "walletkit.win32-arm64-msvc.node",
+ "files": [
+ "walletkit.win32-arm64-msvc.node"
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ }
+}
\ No newline at end of file
diff --git a/npm/win32-ia32-msvc/README.md b/npm/win32-ia32-msvc/README.md
new file mode 100644
index 00000000..55ad1cc4
--- /dev/null
+++ b/npm/win32-ia32-msvc/README.md
@@ -0,0 +1,3 @@
+# `@worldcoin/walletkit-win32-ia32-msvc`
+
+This is the **i686-pc-windows-msvc** binary for `@worldcoin/walletkit`
diff --git a/npm/win32-ia32-msvc/package.json b/npm/win32-ia32-msvc/package.json
new file mode 100644
index 00000000..a061e332
--- /dev/null
+++ b/npm/win32-ia32-msvc/package.json
@@ -0,0 +1,18 @@
+{
+ "name": "@worldcoin/walletkit-win32-ia32-msvc",
+ "version": "0.0.0",
+ "os": [
+ "win32"
+ ],
+ "cpu": [
+ "ia32"
+ ],
+ "main": "walletkit.win32-ia32-msvc.node",
+ "files": [
+ "walletkit.win32-ia32-msvc.node"
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ }
+}
\ No newline at end of file
diff --git a/npm/win32-x64-msvc/README.md b/npm/win32-x64-msvc/README.md
new file mode 100644
index 00000000..48bee61f
--- /dev/null
+++ b/npm/win32-x64-msvc/README.md
@@ -0,0 +1,3 @@
+# `@worldcoin/walletkit-win32-x64-msvc`
+
+This is the **x86_64-pc-windows-msvc** binary for `@worldcoin/walletkit`
diff --git a/npm/win32-x64-msvc/package.json b/npm/win32-x64-msvc/package.json
new file mode 100644
index 00000000..0564465d
--- /dev/null
+++ b/npm/win32-x64-msvc/package.json
@@ -0,0 +1,18 @@
+{
+ "name": "@worldcoin/walletkit-win32-x64-msvc",
+ "version": "0.0.0",
+ "os": [
+ "win32"
+ ],
+ "cpu": [
+ "x64"
+ ],
+ "main": "walletkit.win32-x64-msvc.node",
+ "files": [
+ "walletkit.win32-x64-msvc.node"
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ }
+}
\ No newline at end of file
diff --git a/package.json b/package.json
new file mode 100644
index 00000000..b4da566a
--- /dev/null
+++ b/package.json
@@ -0,0 +1,45 @@
+{
+ "name": "@worldcoin/walletkit",
+ "version": "0.0.1",
+ "main": "index.js",
+ "types": "index.d.ts",
+ "napi": {
+ "name": "walletkit",
+ "triples": {
+ "additional": [
+ "aarch64-apple-darwin",
+ "aarch64-linux-android",
+ "aarch64-unknown-linux-gnu",
+ "aarch64-unknown-linux-musl",
+ "aarch64-pc-windows-msvc",
+ "armv7-unknown-linux-gnueabihf",
+ "x86_64-unknown-linux-musl",
+ "x86_64-unknown-freebsd",
+ "i686-pc-windows-msvc",
+ "armv7-linux-androideabi",
+ "universal-apple-darwin",
+ "riscv64gc-unknown-linux-gnu"
+ ]
+ }
+ },
+ "license": "MIT",
+ "devDependencies": {
+ "@napi-rs/cli": "^2.18.0",
+ "ava": "^6.0.1"
+ },
+ "ava": {
+ "timeout": "3m"
+ },
+ "engines": {
+ "node": ">= 10"
+ },
+ "scripts": {
+ "artifacts": "napi artifacts",
+ "build": "napi build --platform --release",
+ "build:debug": "napi build --platform",
+ "prepublishOnly": "napi prepublish -t npm",
+ "test": "ava",
+ "universal": "napi universal",
+ "version": "napi version"
+ }
+}
\ No newline at end of file
diff --git a/uniffi-bindgen/Cargo.toml b/uniffi-bindgen/Cargo.toml
new file mode 100644
index 00000000..42d4331d
--- /dev/null
+++ b/uniffi-bindgen/Cargo.toml
@@ -0,0 +1,11 @@
+[package]
+name = "uniffi-bindgen"
+version = "0.0.1"
+edition = "2021"
+
+[[bin]]
+name = "uniffi-bindgen"
+path = "./src/uniffi_bindgen.rs"
+
+[dependencies]
+uniffi = { workspace = true, features = ["cli"] }
diff --git a/uniffi-bindgen/src/uniffi_bindgen.rs b/uniffi-bindgen/src/uniffi_bindgen.rs
new file mode 100644
index 00000000..a01b5470
--- /dev/null
+++ b/uniffi-bindgen/src/uniffi_bindgen.rs
@@ -0,0 +1,3 @@
+fn main() {
+ uniffi::uniffi_bindgen_main();
+}
diff --git a/walletkit-napi/.gitignore b/walletkit-napi/.gitignore
new file mode 100644
index 00000000..a2b5be15
--- /dev/null
+++ b/walletkit-napi/.gitignore
@@ -0,0 +1,197 @@
+# Created by https://www.toptal.com/developers/gitignore/api/node
+# Edit at https://www.toptal.com/developers/gitignore?templates=node
+
+### Node ###
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+lerna-debug.log*
+
+# Diagnostic reports (https://nodejs.org/api/report.html)
+report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
+
+# Runtime data
+pids
+*.pid
+*.seed
+*.pid.lock
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+*.lcov
+
+# nyc test coverage
+.nyc_output
+
+# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# Bower dependency directory (https://bower.io/)
+bower_components
+
+# node-waf configuration
+.lock-wscript
+
+# Compiled binary addons (https://nodejs.org/api/addons.html)
+build/Release
+
+# Dependency directories
+node_modules/
+jspm_packages/
+
+# TypeScript v1 declaration files
+typings/
+
+# TypeScript cache
+*.tsbuildinfo
+
+# Optional npm cache directory
+.npm
+
+# Optional eslint cache
+.eslintcache
+
+# Microbundle cache
+.rpt2_cache/
+.rts2_cache_cjs/
+.rts2_cache_es/
+.rts2_cache_umd/
+
+# Optional REPL history
+.node_repl_history
+
+# Output of 'npm pack'
+*.tgz
+
+# Yarn Integrity file
+.yarn-integrity
+
+# dotenv environment variables file
+.env
+.env.test
+
+# parcel-bundler cache (https://parceljs.org/)
+.cache
+
+# Next.js build output
+.next
+
+# Nuxt.js build / generate output
+.nuxt
+dist
+
+# Gatsby files
+.cache/
+# Comment in the public line in if your project uses Gatsby and not Next.js
+# https://nextjs.org/blog/next-9-1#public-directory-support
+# public
+
+# vuepress build output
+.vuepress/dist
+
+# Serverless directories
+.serverless/
+
+# FuseBox cache
+.fusebox/
+
+# DynamoDB Local files
+.dynamodb/
+
+# TernJS port file
+.tern-port
+
+# Stores VSCode versions used for testing VSCode extensions
+.vscode-test
+
+# End of https://www.toptal.com/developers/gitignore/api/node
+
+# Created by https://www.toptal.com/developers/gitignore/api/macos
+# Edit at https://www.toptal.com/developers/gitignore?templates=macos
+
+### macOS ###
+# General
+.DS_Store
+.AppleDouble
+.LSOverride
+
+# Icon must end with two
+Icon
+
+
+# Thumbnails
+._*
+
+# Files that might appear in the root of a volume
+.DocumentRevisions-V100
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+.VolumeIcon.icns
+.com.apple.timemachine.donotpresent
+
+# Directories potentially created on remote AFP share
+.AppleDB
+.AppleDesktop
+Network Trash Folder
+Temporary Items
+.apdisk
+
+### macOS Patch ###
+# iCloud generated files
+*.icloud
+
+# End of https://www.toptal.com/developers/gitignore/api/macos
+
+# Created by https://www.toptal.com/developers/gitignore/api/windows
+# Edit at https://www.toptal.com/developers/gitignore?templates=windows
+
+### Windows ###
+# Windows thumbnail cache files
+Thumbs.db
+Thumbs.db:encryptable
+ehthumbs.db
+ehthumbs_vista.db
+
+# Dump file
+*.stackdump
+
+# Folder config file
+[Dd]esktop.ini
+
+# Recycle Bin used on file shares
+$RECYCLE.BIN/
+
+# Windows Installer files
+*.cab
+*.msi
+*.msix
+*.msm
+*.msp
+
+# Windows shortcuts
+*.lnk
+
+# End of https://www.toptal.com/developers/gitignore/api/windows
+
+#Added by cargo
+
+/target
+Cargo.lock
+
+.pnp.*
+.yarn/*
+!.yarn/patches
+!.yarn/plugins
+!.yarn/releases
+!.yarn/sdks
+!.yarn/versions
+
+*.node
diff --git a/walletkit-napi/.npmignore b/walletkit-napi/.npmignore
new file mode 100644
index 00000000..ec144db2
--- /dev/null
+++ b/walletkit-napi/.npmignore
@@ -0,0 +1,13 @@
+target
+Cargo.lock
+.cargo
+.github
+npm
+.eslintrc
+.prettierignore
+rustfmt.toml
+yarn.lock
+*.node
+.yarn
+__test__
+renovate.json
diff --git a/walletkit-napi/Cargo.toml b/walletkit-napi/Cargo.toml
new file mode 100644
index 00000000..81cae835
--- /dev/null
+++ b/walletkit-napi/Cargo.toml
@@ -0,0 +1,23 @@
+[package]
+edition = "2021"
+name = "walletkit-napi"
+version = "0.0.1"
+
+[lib]
+crate-type = ["cdylib"]
+
+[dependencies]
+# Default enable napi4 feature, see https://nodejs.org/api/n-api.html#node-api-version-matrix
+napi = { version = "2.12.2", default-features = false, features = [
+ "napi4",
+ "async",
+] }
+napi-derive = "2.12.2"
+walletkit = { path = "../walletkit" }
+
+[build-dependencies]
+napi-build = "2.0.1"
+
+[profile.release]
+lto = true
+strip = "symbols"
diff --git a/walletkit-napi/build.rs b/walletkit-napi/build.rs
new file mode 100644
index 00000000..1f866b6a
--- /dev/null
+++ b/walletkit-napi/build.rs
@@ -0,0 +1,5 @@
+extern crate napi_build;
+
+fn main() {
+ napi_build::setup();
+}
diff --git a/walletkit-napi/rustfmt.toml b/walletkit-napi/rustfmt.toml
new file mode 100644
index 00000000..cab5731e
--- /dev/null
+++ b/walletkit-napi/rustfmt.toml
@@ -0,0 +1,2 @@
+tab_spaces = 2
+edition = "2021"
diff --git a/walletkit-napi/src/lib.rs b/walletkit-napi/src/lib.rs
new file mode 100644
index 00000000..dd26132d
--- /dev/null
+++ b/walletkit-napi/src/lib.rs
@@ -0,0 +1,29 @@
+use walletkit::Hello;
+
+#[macro_use]
+extern crate napi_derive;
+
+// best practice to wrap complex structs see: https://napi.rs/docs/concepts/class
+#[napi(js_name = "Hello")]
+pub struct JsHello {
+ hello: Hello,
+}
+
+#[napi]
+impl JsHello {
+ #[napi(constructor)]
+ pub fn new() -> Self {
+ JsHello {
+ hello: Hello::new(),
+ }
+ }
+ #[napi]
+ pub async fn echo(&self, query: String) -> String {
+ self.hello.echo(query).await
+ }
+
+ #[napi]
+ pub fn say_hello(&self) -> String {
+ self.hello.say_hello().unwrap()
+ }
+}
diff --git a/walletkit-uniffi/Cargo.toml b/walletkit-uniffi/Cargo.toml
new file mode 100644
index 00000000..6c4bebbe
--- /dev/null
+++ b/walletkit-uniffi/Cargo.toml
@@ -0,0 +1,22 @@
+[package]
+name = "walletkit-uniffi"
+version = "0.0.1"
+edition = "2021"
+
+[lib]
+crate-type = ["lib", "staticlib", "cdylib"]
+name = "walletkit"
+
+
+[dependencies]
+thiserror = "1.0.38"
+walletkit = { path = "../walletkit" }
+uniffi = { workspace = true, features = ["build"] }
+napi = { version = "2.12.2", default-features = false, features = ["napi4"] }
+napi-derive = "2.12.2"
+
+[dev-dependencies]
+uniffi = { workspace = true, features = ["bindgen-tests"] }
+
+[profile.release]
+opt-level = "z"
diff --git a/walletkit-uniffi/src/error.rs b/walletkit-uniffi/src/error.rs
new file mode 100644
index 00000000..4c01fa1b
--- /dev/null
+++ b/walletkit-uniffi/src/error.rs
@@ -0,0 +1,29 @@
+use std::fmt::{Display, Formatter};
+
+#[derive(uniffi::Error, Debug)]
+#[uniffi(flat_error)]
+pub enum WalletKitError {
+ E(walletkit::error::WalletKitError),
+}
+
+impl From for WalletKitError {
+ fn from(e: walletkit::error::WalletKitError) -> Self {
+ Self::E(e)
+ }
+}
+
+impl Display for WalletKitError {
+ fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
+ match self {
+ Self::E(e) => Display::fmt(e, f),
+ }
+ }
+}
+
+impl std::error::Error for WalletKitError {
+ fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
+ match self {
+ WalletKitError::E(e) => Some(e),
+ }
+ }
+}
diff --git a/walletkit-uniffi/src/hello/mod.rs b/walletkit-uniffi/src/hello/mod.rs
new file mode 100644
index 00000000..d61c7f24
--- /dev/null
+++ b/walletkit-uniffi/src/hello/mod.rs
@@ -0,0 +1,12 @@
+use std::sync::{Arc, RwLock};
+
+#[derive(uniffi::Object)]
+pub struct Hello(RwLock);
+
+#[uniffi::export]
+impl Hello {
+ #[uniffi::constructor]
+ pub fn new() -> Arc {
+ Arc::new(Self(RwLock::new(walletkit::Hello::new())))
+ }
+}
diff --git a/walletkit-uniffi/src/lib.rs b/walletkit-uniffi/src/lib.rs
new file mode 100644
index 00000000..53f153d6
--- /dev/null
+++ b/walletkit-uniffi/src/lib.rs
@@ -0,0 +1,9 @@
+mod hello;
+pub use self::hello::*;
+
+mod error;
+pub use error::*;
+
+pub type WalletKitResult = std::result::Result;
+
+uniffi::setup_scaffolding!("walletkit");
diff --git a/walletkit-uniffi/uniffi.toml b/walletkit-uniffi/uniffi.toml
new file mode 100644
index 00000000..5b98a434
--- /dev/null
+++ b/walletkit-uniffi/uniffi.toml
@@ -0,0 +1,7 @@
+[bindings.swift]
+
+
+[bindings.kotlin]
+
+# [bindings]
+# doc_comments = true
diff --git a/walletkit/Cargo.toml b/walletkit/Cargo.toml
new file mode 100644
index 00000000..618fb6b2
--- /dev/null
+++ b/walletkit/Cargo.toml
@@ -0,0 +1,21 @@
+[package]
+edition = "2021"
+name = "walletkit"
+version = "0.0.0"
+
+
+[dependencies]
+thiserror = "1.0.56"
+tokio = { version = "1.35.1", features = ["full"] }
+napi = { version = "2.12.2", default-features = false, features = [
+ "napi4",
+ "async",
+] }
+napi-derive = "2.12.2"
+
+[build-dependencies]
+napi-build = "2.1.0"
+
+[profile.release]
+lto = true
+strip = "symbols"
diff --git a/walletkit/src/error.rs b/walletkit/src/error.rs
new file mode 100644
index 00000000..eeead74b
--- /dev/null
+++ b/walletkit/src/error.rs
@@ -0,0 +1,7 @@
+use thiserror::Error;
+
+#[derive(Debug, Error)]
+pub enum WalletKitError {
+ #[error("hello error")]
+ Hello,
+}
diff --git a/walletkit/src/hello/mod.rs b/walletkit/src/hello/mod.rs
new file mode 100644
index 00000000..7fc70d61
--- /dev/null
+++ b/walletkit/src/hello/mod.rs
@@ -0,0 +1,19 @@
+use crate::WalletKitResult;
+
+pub struct Hello {}
+
+impl Hello {
+ pub fn new() -> Self {
+ Self {}
+ }
+}
+
+impl Hello {
+ pub async fn echo(&self, input: String) -> String {
+ tokio::time::sleep(tokio::time::Duration::from_secs(1)).await;
+ input
+ }
+ pub fn say_hello(&self) -> WalletKitResult {
+ Ok("Hello, World!".to_string())
+ }
+}
diff --git a/walletkit/src/lib.rs b/walletkit/src/lib.rs
new file mode 100644
index 00000000..28b5ea75
--- /dev/null
+++ b/walletkit/src/lib.rs
@@ -0,0 +1,7 @@
+pub mod hello;
+pub use self::hello::*;
+
+pub mod error;
+pub use error::*;
+
+pub type WalletKitResult = std::result::Result;
diff --git a/walletkit/uniffi.toml b/walletkit/uniffi.toml
new file mode 100644
index 00000000..5b98a434
--- /dev/null
+++ b/walletkit/uniffi.toml
@@ -0,0 +1,7 @@
+[bindings.swift]
+
+
+[bindings.kotlin]
+
+# [bindings]
+# doc_comments = true
diff --git a/yarn.lock b/yarn.lock
new file mode 100644
index 00000000..e146e18b
--- /dev/null
+++ b/yarn.lock
@@ -0,0 +1,1552 @@
+# This file is generated by running "yarn install" inside your project.
+# Manual changes might be lost - proceed with caution!
+
+__metadata:
+ version: 8
+ cacheKey: 10c0
+
+"@mapbox/node-pre-gyp@npm:^1.0.5":
+ version: 1.0.11
+ resolution: "@mapbox/node-pre-gyp@npm:1.0.11"
+ dependencies:
+ detect-libc: "npm:^2.0.0"
+ https-proxy-agent: "npm:^5.0.0"
+ make-dir: "npm:^3.1.0"
+ node-fetch: "npm:^2.6.7"
+ nopt: "npm:^5.0.0"
+ npmlog: "npm:^5.0.1"
+ rimraf: "npm:^3.0.2"
+ semver: "npm:^7.3.5"
+ tar: "npm:^6.1.11"
+ bin:
+ node-pre-gyp: bin/node-pre-gyp
+ checksum: 10c0/2b24b93c31beca1c91336fa3b3769fda98e202fb7f9771f0f4062588d36dcc30fcf8118c36aa747fa7f7610d8cf601872bdaaf62ce7822bb08b545d1bbe086cc
+ languageName: node
+ linkType: hard
+
+"@napi-rs/cli@npm:^2.18.0":
+ version: 2.18.0
+ resolution: "@napi-rs/cli@npm:2.18.0"
+ bin:
+ napi: scripts/index.js
+ checksum: 10c0/db00a70212511bf19a5165bb5397af40b8ee8be26345fa0c7fe3f35803216603f6f757dec99bf385e6db377b8eb82d69956e073c315e3e1f8e0452af04a7ce7f
+ languageName: node
+ linkType: hard
+
+"@nodelib/fs.scandir@npm:2.1.5":
+ version: 2.1.5
+ resolution: "@nodelib/fs.scandir@npm:2.1.5"
+ dependencies:
+ "@nodelib/fs.stat": "npm:2.0.5"
+ run-parallel: "npm:^1.1.9"
+ checksum: 10c0/732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb
+ languageName: node
+ linkType: hard
+
+"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2":
+ version: 2.0.5
+ resolution: "@nodelib/fs.stat@npm:2.0.5"
+ checksum: 10c0/88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d
+ languageName: node
+ linkType: hard
+
+"@nodelib/fs.walk@npm:^1.2.3":
+ version: 1.2.8
+ resolution: "@nodelib/fs.walk@npm:1.2.8"
+ dependencies:
+ "@nodelib/fs.scandir": "npm:2.1.5"
+ fastq: "npm:^1.6.0"
+ checksum: 10c0/db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1
+ languageName: node
+ linkType: hard
+
+"@rollup/pluginutils@npm:^4.0.0":
+ version: 4.2.1
+ resolution: "@rollup/pluginutils@npm:4.2.1"
+ dependencies:
+ estree-walker: "npm:^2.0.1"
+ picomatch: "npm:^2.2.2"
+ checksum: 10c0/3ee56b2c8f1ed8dfd0a92631da1af3a2dfdd0321948f089b3752b4de1b54dc5076701eadd0e5fc18bd191b77af594ac1db6279e83951238ba16bf8a414c64c48
+ languageName: node
+ linkType: hard
+
+"@sindresorhus/merge-streams@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "@sindresorhus/merge-streams@npm:1.0.0"
+ checksum: 10c0/43d077170845dc621002e9730aea567e6e126e84b3bbff01b8575266efdb2c81d223939d3bec24020e53960c154b4640bef7746aeb245abd94c5d32972dd6854
+ languageName: node
+ linkType: hard
+
+"@vercel/nft@npm:^0.26.2":
+ version: 0.26.2
+ resolution: "@vercel/nft@npm:0.26.2"
+ dependencies:
+ "@mapbox/node-pre-gyp": "npm:^1.0.5"
+ "@rollup/pluginutils": "npm:^4.0.0"
+ acorn: "npm:^8.6.0"
+ acorn-import-attributes: "npm:^1.9.2"
+ async-sema: "npm:^3.1.1"
+ bindings: "npm:^1.4.0"
+ estree-walker: "npm:2.0.2"
+ glob: "npm:^7.1.3"
+ graceful-fs: "npm:^4.2.9"
+ micromatch: "npm:^4.0.2"
+ node-gyp-build: "npm:^4.2.2"
+ resolve-from: "npm:^5.0.0"
+ bin:
+ nft: out/cli.js
+ checksum: 10c0/e169d7bbcf9079d4c2c734638f491451013bfff1d149f986421674aaf2c0bca27938978161fe84779ef2d8ff6130e673950ca9ba0ca8a1715c76039ab0544e94
+ languageName: node
+ linkType: hard
+
+"@worldcoin/walletkit@workspace:.":
+ version: 0.0.0-use.local
+ resolution: "@worldcoin/walletkit@workspace:."
+ dependencies:
+ "@napi-rs/cli": "npm:^2.18.0"
+ ava: "npm:^6.0.1"
+ languageName: unknown
+ linkType: soft
+
+"abbrev@npm:1":
+ version: 1.1.1
+ resolution: "abbrev@npm:1.1.1"
+ checksum: 10c0/3f762677702acb24f65e813070e306c61fafe25d4b2583f9dfc935131f774863f3addd5741572ed576bd69cabe473c5af18e1e108b829cb7b6b4747884f726e6
+ languageName: node
+ linkType: hard
+
+"acorn-import-attributes@npm:^1.9.2":
+ version: 1.9.2
+ resolution: "acorn-import-attributes@npm:1.9.2"
+ peerDependencies:
+ acorn: ^8
+ checksum: 10c0/adbe756dcd3479368e4aa2100d03d5a836958635a4a6ca33e0916c45a4f1ea11aaec33564cdedc11fa3037bd46c3cdda91f703c79f1413a874af6b18a87753aa
+ languageName: node
+ linkType: hard
+
+"acorn-walk@npm:^8.3.2":
+ version: 8.3.2
+ resolution: "acorn-walk@npm:8.3.2"
+ checksum: 10c0/7e2a8dad5480df7f872569b9dccff2f3da7e65f5353686b1d6032ab9f4ddf6e3a2cb83a9b52cf50b1497fd522154dda92f0abf7153290cc79cd14721ff121e52
+ languageName: node
+ linkType: hard
+
+"acorn@npm:^8.11.3, acorn@npm:^8.6.0":
+ version: 8.11.3
+ resolution: "acorn@npm:8.11.3"
+ bin:
+ acorn: bin/acorn
+ checksum: 10c0/3ff155f8812e4a746fee8ecff1f227d527c4c45655bb1fad6347c3cb58e46190598217551b1500f18542d2bbe5c87120cb6927f5a074a59166fbdd9468f0a299
+ languageName: node
+ linkType: hard
+
+"agent-base@npm:6":
+ version: 6.0.2
+ resolution: "agent-base@npm:6.0.2"
+ dependencies:
+ debug: "npm:4"
+ checksum: 10c0/dc4f757e40b5f3e3d674bc9beb4f1048f4ee83af189bae39be99f57bf1f48dde166a8b0a5342a84b5944ee8e6ed1e5a9d801858f4ad44764e84957122fe46261
+ languageName: node
+ linkType: hard
+
+"ansi-regex@npm:^5.0.1":
+ version: 5.0.1
+ resolution: "ansi-regex@npm:5.0.1"
+ checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737
+ languageName: node
+ linkType: hard
+
+"ansi-regex@npm:^6.0.1":
+ version: 6.0.1
+ resolution: "ansi-regex@npm:6.0.1"
+ checksum: 10c0/cbe16dbd2c6b2735d1df7976a7070dd277326434f0212f43abf6d87674095d247968209babdaad31bb00882fa68807256ba9be340eec2f1004de14ca75f52a08
+ languageName: node
+ linkType: hard
+
+"ansi-styles@npm:^4.0.0":
+ version: 4.3.0
+ resolution: "ansi-styles@npm:4.3.0"
+ dependencies:
+ color-convert: "npm:^2.0.1"
+ checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041
+ languageName: node
+ linkType: hard
+
+"ansi-styles@npm:^6.0.0, ansi-styles@npm:^6.2.1":
+ version: 6.2.1
+ resolution: "ansi-styles@npm:6.2.1"
+ checksum: 10c0/5d1ec38c123984bcedd996eac680d548f31828bd679a66db2bdf11844634dde55fec3efa9c6bb1d89056a5e79c1ac540c4c784d592ea1d25028a92227d2f2d5c
+ languageName: node
+ linkType: hard
+
+"aproba@npm:^1.0.3 || ^2.0.0":
+ version: 2.0.0
+ resolution: "aproba@npm:2.0.0"
+ checksum: 10c0/d06e26384a8f6245d8c8896e138c0388824e259a329e0c9f196b4fa533c82502a6fd449586e3604950a0c42921832a458bb3aa0aa9f0ba449cfd4f50fd0d09b5
+ languageName: node
+ linkType: hard
+
+"are-we-there-yet@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "are-we-there-yet@npm:2.0.0"
+ dependencies:
+ delegates: "npm:^1.0.0"
+ readable-stream: "npm:^3.6.0"
+ checksum: 10c0/375f753c10329153c8d66dc95e8f8b6c7cc2aa66e05cb0960bd69092b10dae22900cacc7d653ad11d26b3ecbdbfe1e8bfb6ccf0265ba8077a7d979970f16b99c
+ languageName: node
+ linkType: hard
+
+"argparse@npm:^1.0.7":
+ version: 1.0.10
+ resolution: "argparse@npm:1.0.10"
+ dependencies:
+ sprintf-js: "npm:~1.0.2"
+ checksum: 10c0/b2972c5c23c63df66bca144dbc65d180efa74f25f8fd9b7d9a0a6c88ae839db32df3d54770dcb6460cf840d232b60695d1a6b1053f599d84e73f7437087712de
+ languageName: node
+ linkType: hard
+
+"array-find-index@npm:^1.0.1":
+ version: 1.0.2
+ resolution: "array-find-index@npm:1.0.2"
+ checksum: 10c0/86b9485c74ddd324feab807e10a6de3f9c1683856267236fac4bb4d4667ada6463e106db3f6c540ae6b720e0442b590ec701d13676df4c6af30ebf4da09b4f57
+ languageName: node
+ linkType: hard
+
+"arrgv@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "arrgv@npm:1.0.2"
+ checksum: 10c0/7e6e782e6b749923ac7cbc4048ef6fe0844c4a59bfc8932fcd4c44566ba25eed46501f94dd7cf3c7297da88f3f599ca056bfb77d0c2484aebc92f04239f69124
+ languageName: node
+ linkType: hard
+
+"arrify@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "arrify@npm:3.0.0"
+ checksum: 10c0/2e26601b8486f29780f1f70f7ac05a226755814c2a3ab42e196748f650af1dc310cd575a11dd4b9841c70fd7460b2dd2b8fe6fb7a3375878e2660706efafa58e
+ languageName: node
+ linkType: hard
+
+"async-sema@npm:^3.1.1":
+ version: 3.1.1
+ resolution: "async-sema@npm:3.1.1"
+ checksum: 10c0/a16da9f7f2dbdd00a969bf264b7ad331b59df3eac2b38f529b881c5cc8662594e68ed096d927ec2aabdc13454379cdc6d677bcdb0a3d2db338fb4be17957832b
+ languageName: node
+ linkType: hard
+
+"ava@npm:^6.0.1":
+ version: 6.1.1
+ resolution: "ava@npm:6.1.1"
+ dependencies:
+ "@vercel/nft": "npm:^0.26.2"
+ acorn: "npm:^8.11.3"
+ acorn-walk: "npm:^8.3.2"
+ ansi-styles: "npm:^6.2.1"
+ arrgv: "npm:^1.0.2"
+ arrify: "npm:^3.0.0"
+ callsites: "npm:^4.1.0"
+ cbor: "npm:^9.0.1"
+ chalk: "npm:^5.3.0"
+ chunkd: "npm:^2.0.1"
+ ci-info: "npm:^4.0.0"
+ ci-parallel-vars: "npm:^1.0.1"
+ cli-truncate: "npm:^4.0.0"
+ code-excerpt: "npm:^4.0.0"
+ common-path-prefix: "npm:^3.0.0"
+ concordance: "npm:^5.0.4"
+ currently-unhandled: "npm:^0.4.1"
+ debug: "npm:^4.3.4"
+ emittery: "npm:^1.0.1"
+ figures: "npm:^6.0.1"
+ globby: "npm:^14.0.0"
+ ignore-by-default: "npm:^2.1.0"
+ indent-string: "npm:^5.0.0"
+ is-plain-object: "npm:^5.0.0"
+ is-promise: "npm:^4.0.0"
+ matcher: "npm:^5.0.0"
+ memoize: "npm:^10.0.0"
+ ms: "npm:^2.1.3"
+ p-map: "npm:^7.0.1"
+ package-config: "npm:^5.0.0"
+ picomatch: "npm:^3.0.1"
+ plur: "npm:^5.1.0"
+ pretty-ms: "npm:^9.0.0"
+ resolve-cwd: "npm:^3.0.0"
+ stack-utils: "npm:^2.0.6"
+ strip-ansi: "npm:^7.1.0"
+ supertap: "npm:^3.0.1"
+ temp-dir: "npm:^3.0.0"
+ write-file-atomic: "npm:^5.0.1"
+ yargs: "npm:^17.7.2"
+ peerDependencies:
+ "@ava/typescript": "*"
+ peerDependenciesMeta:
+ "@ava/typescript":
+ optional: true
+ bin:
+ ava: entrypoints/cli.mjs
+ checksum: 10c0/cd4d9037d985639eb31411d10adf6a827652cb305525a5389cb0659e83c784d63734211c3d0cedd964ee0f971291187e4a53e196bee46dfa0910cf8be8eda2f7
+ languageName: node
+ linkType: hard
+
+"balanced-match@npm:^1.0.0":
+ version: 1.0.2
+ resolution: "balanced-match@npm:1.0.2"
+ checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee
+ languageName: node
+ linkType: hard
+
+"bindings@npm:^1.4.0":
+ version: 1.5.0
+ resolution: "bindings@npm:1.5.0"
+ dependencies:
+ file-uri-to-path: "npm:1.0.0"
+ checksum: 10c0/3dab2491b4bb24124252a91e656803eac24292473e56554e35bbfe3cc1875332cfa77600c3bac7564049dc95075bf6fcc63a4609920ff2d64d0fe405fcf0d4ba
+ languageName: node
+ linkType: hard
+
+"blueimp-md5@npm:^2.10.0":
+ version: 2.19.0
+ resolution: "blueimp-md5@npm:2.19.0"
+ checksum: 10c0/85d04343537dd99a288c62450341dcce7380d3454c81f8e5a971ddd80307d6f9ef51b5b92ad7d48aaaa92fd6d3a1f6b2f4fada068faae646887f7bfabc17a346
+ languageName: node
+ linkType: hard
+
+"brace-expansion@npm:^1.1.7":
+ version: 1.1.11
+ resolution: "brace-expansion@npm:1.1.11"
+ dependencies:
+ balanced-match: "npm:^1.0.0"
+ concat-map: "npm:0.0.1"
+ checksum: 10c0/695a56cd058096a7cb71fb09d9d6a7070113c7be516699ed361317aca2ec169f618e28b8af352e02ab4233fb54eb0168460a40dc320bab0034b36ab59aaad668
+ languageName: node
+ linkType: hard
+
+"braces@npm:^3.0.2":
+ version: 3.0.2
+ resolution: "braces@npm:3.0.2"
+ dependencies:
+ fill-range: "npm:^7.0.1"
+ checksum: 10c0/321b4d675791479293264019156ca322163f02dc06e3c4cab33bb15cd43d80b51efef69b0930cfde3acd63d126ebca24cd0544fa6f261e093a0fb41ab9dda381
+ languageName: node
+ linkType: hard
+
+"callsites@npm:^4.1.0":
+ version: 4.1.0
+ resolution: "callsites@npm:4.1.0"
+ checksum: 10c0/91700844127a6dcd4792d231a12dd8e9ec10525eb9962180a8558417d7e3f443e52a4f14746ad2838eaf14f79431ee1539d13bd188da280f720a06a91bd1157a
+ languageName: node
+ linkType: hard
+
+"cbor@npm:^9.0.1":
+ version: 9.0.2
+ resolution: "cbor@npm:9.0.2"
+ dependencies:
+ nofilter: "npm:^3.1.0"
+ checksum: 10c0/709d4378067e663107b3d63a02d123a7b33e28946b4c5cc40c102f2f0ba13b072a79adc4369bb87a4e743399fce45deec30463fc84d363ab7cb39192d0fe5f30
+ languageName: node
+ linkType: hard
+
+"chalk@npm:^5.3.0":
+ version: 5.3.0
+ resolution: "chalk@npm:5.3.0"
+ checksum: 10c0/8297d436b2c0f95801103ff2ef67268d362021b8210daf8ddbe349695333eb3610a71122172ff3b0272f1ef2cf7cc2c41fdaa4715f52e49ffe04c56340feed09
+ languageName: node
+ linkType: hard
+
+"chownr@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "chownr@npm:2.0.0"
+ checksum: 10c0/594754e1303672171cc04e50f6c398ae16128eb134a88f801bf5354fd96f205320f23536a045d9abd8b51024a149696e51231565891d4efdab8846021ecf88e6
+ languageName: node
+ linkType: hard
+
+"chunkd@npm:^2.0.1":
+ version: 2.0.1
+ resolution: "chunkd@npm:2.0.1"
+ checksum: 10c0/4e0c5aac6048ecedfa4cd0a5f6c4f010c70a7b7645aeca7bfeb47cb0733c3463054f0ced3f2667b2e0e67edd75d68a8e05481b01115ba3f8a952a93026254504
+ languageName: node
+ linkType: hard
+
+"ci-info@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "ci-info@npm:4.0.0"
+ checksum: 10c0/ecc003e5b60580bd081d83dd61d398ddb8607537f916313e40af4667f9c92a1243bd8e8a591a5aa78e418afec245dbe8e90a0e26e39ca0825129a99b978dd3f9
+ languageName: node
+ linkType: hard
+
+"ci-parallel-vars@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "ci-parallel-vars@npm:1.0.1"
+ checksum: 10c0/80952f699cbbc146092b077b4f3e28d085620eb4e6be37f069b4dbb3db0ee70e8eec3beef4ebe70ff60631e9fc743b9d0869678489f167442cac08b260e5ac08
+ languageName: node
+ linkType: hard
+
+"cli-truncate@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "cli-truncate@npm:4.0.0"
+ dependencies:
+ slice-ansi: "npm:^5.0.0"
+ string-width: "npm:^7.0.0"
+ checksum: 10c0/d7f0b73e3d9b88cb496e6c086df7410b541b56a43d18ade6a573c9c18bd001b1c3fba1ad578f741a4218fdc794d042385f8ac02c25e1c295a2d8b9f3cb86eb4c
+ languageName: node
+ linkType: hard
+
+"cliui@npm:^8.0.1":
+ version: 8.0.1
+ resolution: "cliui@npm:8.0.1"
+ dependencies:
+ string-width: "npm:^4.2.0"
+ strip-ansi: "npm:^6.0.1"
+ wrap-ansi: "npm:^7.0.0"
+ checksum: 10c0/4bda0f09c340cbb6dfdc1ed508b3ca080f12992c18d68c6be4d9cf51756033d5266e61ec57529e610dacbf4da1c634423b0c1b11037709cc6b09045cbd815df5
+ languageName: node
+ linkType: hard
+
+"code-excerpt@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "code-excerpt@npm:4.0.0"
+ dependencies:
+ convert-to-spaces: "npm:^2.0.1"
+ checksum: 10c0/b6c5a06e039cecd2ab6a0e10ee0831de8362107d1f298ca3558b5f9004cb8e0260b02dd6c07f57b9a0e346c76864d2873311ee1989809fdeb05bd5fbbadde773
+ languageName: node
+ linkType: hard
+
+"color-convert@npm:^2.0.1":
+ version: 2.0.1
+ resolution: "color-convert@npm:2.0.1"
+ dependencies:
+ color-name: "npm:~1.1.4"
+ checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7
+ languageName: node
+ linkType: hard
+
+"color-name@npm:~1.1.4":
+ version: 1.1.4
+ resolution: "color-name@npm:1.1.4"
+ checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95
+ languageName: node
+ linkType: hard
+
+"color-support@npm:^1.1.2":
+ version: 1.1.3
+ resolution: "color-support@npm:1.1.3"
+ bin:
+ color-support: bin.js
+ checksum: 10c0/8ffeaa270a784dc382f62d9be0a98581db43e11eee301af14734a6d089bd456478b1a8b3e7db7ca7dc5b18a75f828f775c44074020b51c05fc00e6d0992b1cc6
+ languageName: node
+ linkType: hard
+
+"common-path-prefix@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "common-path-prefix@npm:3.0.0"
+ checksum: 10c0/c4a74294e1b1570f4a8ab435285d185a03976c323caa16359053e749db4fde44e3e6586c29cd051100335e11895767cbbd27ea389108e327d62f38daf4548fdb
+ languageName: node
+ linkType: hard
+
+"concat-map@npm:0.0.1":
+ version: 0.0.1
+ resolution: "concat-map@npm:0.0.1"
+ checksum: 10c0/c996b1cfdf95b6c90fee4dae37e332c8b6eb7d106430c17d538034c0ad9a1630cb194d2ab37293b1bdd4d779494beee7786d586a50bd9376fd6f7bcc2bd4c98f
+ languageName: node
+ linkType: hard
+
+"concordance@npm:^5.0.4":
+ version: 5.0.4
+ resolution: "concordance@npm:5.0.4"
+ dependencies:
+ date-time: "npm:^3.1.0"
+ esutils: "npm:^2.0.3"
+ fast-diff: "npm:^1.2.0"
+ js-string-escape: "npm:^1.0.1"
+ lodash: "npm:^4.17.15"
+ md5-hex: "npm:^3.0.1"
+ semver: "npm:^7.3.2"
+ well-known-symbols: "npm:^2.0.0"
+ checksum: 10c0/59b440f330df3a7c9aa148ba588b3e99aed86acab225b4f01ffcea34ace4cf11f817e31153254e8f38ed48508998dad40b9106951a743c334d751f7ab21afb8a
+ languageName: node
+ linkType: hard
+
+"console-control-strings@npm:^1.0.0, console-control-strings@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "console-control-strings@npm:1.1.0"
+ checksum: 10c0/7ab51d30b52d461412cd467721bb82afe695da78fff8f29fe6f6b9cbaac9a2328e27a22a966014df9532100f6dd85370460be8130b9c677891ba36d96a343f50
+ languageName: node
+ linkType: hard
+
+"convert-to-spaces@npm:^2.0.1":
+ version: 2.0.1
+ resolution: "convert-to-spaces@npm:2.0.1"
+ checksum: 10c0/d90aa0e3b6a27f9d5265a8d32def3c5c855b3e823a9db1f26d772f8146d6b91020a2fdfd905ce8048a73fad3aaf836fef8188c67602c374405e2ae8396c4ac46
+ languageName: node
+ linkType: hard
+
+"currently-unhandled@npm:^0.4.1":
+ version: 0.4.1
+ resolution: "currently-unhandled@npm:0.4.1"
+ dependencies:
+ array-find-index: "npm:^1.0.1"
+ checksum: 10c0/32d197689ec32f035910202c1abb0dc6424dce01d7b51779c685119b380d98535c110ffff67a262fc7e367612a7dfd30d3d3055f9a6634b5a9dd1302de7ef11c
+ languageName: node
+ linkType: hard
+
+"date-time@npm:^3.1.0":
+ version: 3.1.0
+ resolution: "date-time@npm:3.1.0"
+ dependencies:
+ time-zone: "npm:^1.0.0"
+ checksum: 10c0/aa3e2e930d74b0b9e90f69de7a16d3376e30f21f1f4ce9a2311d8fec32d760e776efea752dafad0ce188187265235229013036202be053fc2d7979813bfb6ded
+ languageName: node
+ linkType: hard
+
+"debug@npm:4, debug@npm:^4.3.4":
+ version: 4.3.4
+ resolution: "debug@npm:4.3.4"
+ dependencies:
+ ms: "npm:2.1.2"
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ checksum: 10c0/cedbec45298dd5c501d01b92b119cd3faebe5438c3917ff11ae1bff86a6c722930ac9c8659792824013168ba6db7c4668225d845c633fbdafbbf902a6389f736
+ languageName: node
+ linkType: hard
+
+"delegates@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "delegates@npm:1.0.0"
+ checksum: 10c0/ba05874b91148e1db4bf254750c042bf2215febd23a6d3cda2e64896aef79745fbd4b9996488bd3cafb39ce19dbce0fd6e3b6665275638befffe1c9b312b91b5
+ languageName: node
+ linkType: hard
+
+"detect-libc@npm:^2.0.0":
+ version: 2.0.2
+ resolution: "detect-libc@npm:2.0.2"
+ checksum: 10c0/a9f4ffcd2701525c589617d98afe5a5d0676c8ea82bcc4ed6f3747241b79f781d36437c59a5e855254c864d36a3e9f8276568b6b531c28d6e53b093a15703f11
+ languageName: node
+ linkType: hard
+
+"emittery@npm:^1.0.1":
+ version: 1.0.2
+ resolution: "emittery@npm:1.0.2"
+ checksum: 10c0/7f26cdb3044dc25689b44e81d4486b404dcec93faaec71f09b8ead8bd0e089a58a26e4605bac2894c8985d5cc48c0f359f943da098944e9fdc3a04bb6bec6299
+ languageName: node
+ linkType: hard
+
+"emoji-regex@npm:^10.3.0":
+ version: 10.3.0
+ resolution: "emoji-regex@npm:10.3.0"
+ checksum: 10c0/b4838e8dcdceb44cf47f59abe352c25ff4fe7857acaf5fb51097c427f6f75b44d052eb907a7a3b86f86bc4eae3a93f5c2b7460abe79c407307e6212d65c91163
+ languageName: node
+ linkType: hard
+
+"emoji-regex@npm:^8.0.0":
+ version: 8.0.0
+ resolution: "emoji-regex@npm:8.0.0"
+ checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010
+ languageName: node
+ linkType: hard
+
+"escalade@npm:^3.1.1":
+ version: 3.1.1
+ resolution: "escalade@npm:3.1.1"
+ checksum: 10c0/afd02e6ca91ffa813e1108b5e7756566173d6bc0d1eb951cb44d6b21702ec17c1cf116cfe75d4a2b02e05acb0b808a7a9387d0d1ca5cf9c04ad03a8445c3e46d
+ languageName: node
+ linkType: hard
+
+"escape-string-regexp@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "escape-string-regexp@npm:2.0.0"
+ checksum: 10c0/2530479fe8db57eace5e8646c9c2a9c80fa279614986d16dcc6bcaceb63ae77f05a851ba6c43756d816c61d7f4534baf56e3c705e3e0d884818a46808811c507
+ languageName: node
+ linkType: hard
+
+"escape-string-regexp@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "escape-string-regexp@npm:5.0.0"
+ checksum: 10c0/6366f474c6f37a802800a435232395e04e9885919873e382b157ab7e8f0feb8fed71497f84a6f6a81a49aab41815522f5839112bd38026d203aea0c91622df95
+ languageName: node
+ linkType: hard
+
+"esprima@npm:^4.0.0":
+ version: 4.0.1
+ resolution: "esprima@npm:4.0.1"
+ bin:
+ esparse: ./bin/esparse.js
+ esvalidate: ./bin/esvalidate.js
+ checksum: 10c0/ad4bab9ead0808cf56501750fd9d3fb276f6b105f987707d059005d57e182d18a7c9ec7f3a01794ebddcca676773e42ca48a32d67a250c9d35e009ca613caba3
+ languageName: node
+ linkType: hard
+
+"estree-walker@npm:2.0.2, estree-walker@npm:^2.0.1":
+ version: 2.0.2
+ resolution: "estree-walker@npm:2.0.2"
+ checksum: 10c0/53a6c54e2019b8c914dc395890153ffdc2322781acf4bd7d1a32d7aedc1710807bdcd866ac133903d5629ec601fbb50abe8c2e5553c7f5a0afdd9b6af6c945af
+ languageName: node
+ linkType: hard
+
+"esutils@npm:^2.0.3":
+ version: 2.0.3
+ resolution: "esutils@npm:2.0.3"
+ checksum: 10c0/9a2fe69a41bfdade834ba7c42de4723c97ec776e40656919c62cbd13607c45e127a003f05f724a1ea55e5029a4cf2de444b13009f2af71271e42d93a637137c7
+ languageName: node
+ linkType: hard
+
+"fast-diff@npm:^1.2.0":
+ version: 1.3.0
+ resolution: "fast-diff@npm:1.3.0"
+ checksum: 10c0/5c19af237edb5d5effda008c891a18a585f74bf12953be57923f17a3a4d0979565fc64dbc73b9e20926b9d895f5b690c618cbb969af0cf022e3222471220ad29
+ languageName: node
+ linkType: hard
+
+"fast-glob@npm:^3.3.2":
+ version: 3.3.2
+ resolution: "fast-glob@npm:3.3.2"
+ dependencies:
+ "@nodelib/fs.stat": "npm:^2.0.2"
+ "@nodelib/fs.walk": "npm:^1.2.3"
+ glob-parent: "npm:^5.1.2"
+ merge2: "npm:^1.3.0"
+ micromatch: "npm:^4.0.4"
+ checksum: 10c0/42baad7b9cd40b63e42039132bde27ca2cb3a4950d0a0f9abe4639ea1aa9d3e3b40f98b1fe31cbc0cc17b664c9ea7447d911a152fa34ec5b72977b125a6fc845
+ languageName: node
+ linkType: hard
+
+"fastq@npm:^1.6.0":
+ version: 1.17.0
+ resolution: "fastq@npm:1.17.0"
+ dependencies:
+ reusify: "npm:^1.0.4"
+ checksum: 10c0/0a90ed46ccd6a858a32e297bd35f4249ba6544899b905d08f33a6ba36459041639161fa15bc85a38afa98dd44fb2fa2969419a879721a1395d3e24668a7732c7
+ languageName: node
+ linkType: hard
+
+"figures@npm:^6.0.1":
+ version: 6.0.1
+ resolution: "figures@npm:6.0.1"
+ dependencies:
+ is-unicode-supported: "npm:^2.0.0"
+ checksum: 10c0/1bd53404e49b16dc4c930f8b01d0b97233e2f9e217365e7b7d15db1097d219a3db6739c17853affec034ef6461751b0e426f9fa82e2199b9340358e13eadca93
+ languageName: node
+ linkType: hard
+
+"file-uri-to-path@npm:1.0.0":
+ version: 1.0.0
+ resolution: "file-uri-to-path@npm:1.0.0"
+ checksum: 10c0/3b545e3a341d322d368e880e1c204ef55f1d45cdea65f7efc6c6ce9e0c4d22d802d5629320eb779d006fe59624ac17b0e848d83cc5af7cd101f206cb704f5519
+ languageName: node
+ linkType: hard
+
+"fill-range@npm:^7.0.1":
+ version: 7.0.1
+ resolution: "fill-range@npm:7.0.1"
+ dependencies:
+ to-regex-range: "npm:^5.0.1"
+ checksum: 10c0/7cdad7d426ffbaadf45aeb5d15ec675bbd77f7597ad5399e3d2766987ed20bda24d5fac64b3ee79d93276f5865608bb22344a26b9b1ae6c4d00bd94bf611623f
+ languageName: node
+ linkType: hard
+
+"find-up-simple@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "find-up-simple@npm:1.0.0"
+ checksum: 10c0/de1ad5e55c8c162f5600fe3297bb55a3da5cd9cb8c6755e463ec1d52c4c15a84e312a68397fb5962d13263b3dbd4ea294668c465ccacc41291d7cc97588769f9
+ languageName: node
+ linkType: hard
+
+"fs-minipass@npm:^2.0.0":
+ version: 2.1.0
+ resolution: "fs-minipass@npm:2.1.0"
+ dependencies:
+ minipass: "npm:^3.0.0"
+ checksum: 10c0/703d16522b8282d7299337539c3ed6edddd1afe82435e4f5b76e34a79cd74e488a8a0e26a636afc2440e1a23b03878e2122e3a2cfe375a5cf63c37d92b86a004
+ languageName: node
+ linkType: hard
+
+"fs.realpath@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "fs.realpath@npm:1.0.0"
+ checksum: 10c0/444cf1291d997165dfd4c0d58b69f0e4782bfd9149fd72faa4fe299e68e0e93d6db941660b37dd29153bf7186672ececa3b50b7e7249477b03fdf850f287c948
+ languageName: node
+ linkType: hard
+
+"gauge@npm:^3.0.0":
+ version: 3.0.2
+ resolution: "gauge@npm:3.0.2"
+ dependencies:
+ aproba: "npm:^1.0.3 || ^2.0.0"
+ color-support: "npm:^1.1.2"
+ console-control-strings: "npm:^1.0.0"
+ has-unicode: "npm:^2.0.1"
+ object-assign: "npm:^4.1.1"
+ signal-exit: "npm:^3.0.0"
+ string-width: "npm:^4.2.3"
+ strip-ansi: "npm:^6.0.1"
+ wide-align: "npm:^1.1.2"
+ checksum: 10c0/75230ccaf216471e31025c7d5fcea1629596ca20792de50c596eb18ffb14d8404f927cd55535aab2eeecd18d1e11bd6f23ec3c2e9878d2dda1dc74bccc34b913
+ languageName: node
+ linkType: hard
+
+"get-caller-file@npm:^2.0.5":
+ version: 2.0.5
+ resolution: "get-caller-file@npm:2.0.5"
+ checksum: 10c0/c6c7b60271931fa752aeb92f2b47e355eac1af3a2673f47c9589e8f8a41adc74d45551c1bc57b5e66a80609f10ffb72b6f575e4370d61cc3f7f3aaff01757cde
+ languageName: node
+ linkType: hard
+
+"get-east-asian-width@npm:^1.0.0":
+ version: 1.2.0
+ resolution: "get-east-asian-width@npm:1.2.0"
+ checksum: 10c0/914b1e217cf38436c24b4c60b4c45289e39a45bf9e65ef9fd343c2815a1a02b8a0215aeec8bf9c07c516089004b6e3826332481f40a09529fcadbf6e579f286b
+ languageName: node
+ linkType: hard
+
+"glob-parent@npm:^5.1.2":
+ version: 5.1.2
+ resolution: "glob-parent@npm:5.1.2"
+ dependencies:
+ is-glob: "npm:^4.0.1"
+ checksum: 10c0/cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee
+ languageName: node
+ linkType: hard
+
+"glob@npm:^7.1.3":
+ version: 7.2.3
+ resolution: "glob@npm:7.2.3"
+ dependencies:
+ fs.realpath: "npm:^1.0.0"
+ inflight: "npm:^1.0.4"
+ inherits: "npm:2"
+ minimatch: "npm:^3.1.1"
+ once: "npm:^1.3.0"
+ path-is-absolute: "npm:^1.0.0"
+ checksum: 10c0/65676153e2b0c9095100fe7f25a778bf45608eeb32c6048cf307f579649bcc30353277b3b898a3792602c65764e5baa4f643714dfbdfd64ea271d210c7a425fe
+ languageName: node
+ linkType: hard
+
+"globby@npm:^14.0.0":
+ version: 14.0.0
+ resolution: "globby@npm:14.0.0"
+ dependencies:
+ "@sindresorhus/merge-streams": "npm:^1.0.0"
+ fast-glob: "npm:^3.3.2"
+ ignore: "npm:^5.2.4"
+ path-type: "npm:^5.0.0"
+ slash: "npm:^5.1.0"
+ unicorn-magic: "npm:^0.1.0"
+ checksum: 10c0/6d98738a419f948ef23da019275b15ca5c65bb7e354ecea52a3015f4dae6b28a713fcf73bf3aab1c04039f4f62da71cff191a7ececc37c0e4c9b4320a047505f
+ languageName: node
+ linkType: hard
+
+"graceful-fs@npm:^4.2.9":
+ version: 4.2.11
+ resolution: "graceful-fs@npm:4.2.11"
+ checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2
+ languageName: node
+ linkType: hard
+
+"has-unicode@npm:^2.0.1":
+ version: 2.0.1
+ resolution: "has-unicode@npm:2.0.1"
+ checksum: 10c0/ebdb2f4895c26bb08a8a100b62d362e49b2190bcfd84b76bc4be1a3bd4d254ec52d0dd9f2fbcc093fc5eb878b20c52146f9dfd33e2686ed28982187be593b47c
+ languageName: node
+ linkType: hard
+
+"https-proxy-agent@npm:^5.0.0":
+ version: 5.0.1
+ resolution: "https-proxy-agent@npm:5.0.1"
+ dependencies:
+ agent-base: "npm:6"
+ debug: "npm:4"
+ checksum: 10c0/6dd639f03434003577c62b27cafdb864784ef19b2de430d8ae2a1d45e31c4fd60719e5637b44db1a88a046934307da7089e03d6089ec3ddacc1189d8de8897d1
+ languageName: node
+ linkType: hard
+
+"ignore-by-default@npm:^2.1.0":
+ version: 2.1.0
+ resolution: "ignore-by-default@npm:2.1.0"
+ checksum: 10c0/3a6040dac25ed9da39dee73bf1634fdd1e15b0eb7cf52a6bdec81c310565782d8811c104ce40acb3d690d61c5fc38a91c78e6baee830a8a2232424dbc6b66981
+ languageName: node
+ linkType: hard
+
+"ignore@npm:^5.2.4":
+ version: 5.3.0
+ resolution: "ignore@npm:5.3.0"
+ checksum: 10c0/dc06bea5c23aae65d0725a957a0638b57e235ae4568dda51ca142053ed2c352de7e3bc93a69b2b32ac31966a1952e9a93c5ef2e2ab7c6b06aef9808f6b55b571
+ languageName: node
+ linkType: hard
+
+"imurmurhash@npm:^0.1.4":
+ version: 0.1.4
+ resolution: "imurmurhash@npm:0.1.4"
+ checksum: 10c0/8b51313850dd33605c6c9d3fd9638b714f4c4c40250cff658209f30d40da60f78992fb2df5dabee4acf589a6a82bbc79ad5486550754bd9ec4e3fc0d4a57d6a6
+ languageName: node
+ linkType: hard
+
+"indent-string@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "indent-string@npm:5.0.0"
+ checksum: 10c0/8ee77b57d92e71745e133f6f444d6fa3ed503ad0e1bcd7e80c8da08b42375c07117128d670589725ed07b1978065803fa86318c309ba45415b7fe13e7f170220
+ languageName: node
+ linkType: hard
+
+"inflight@npm:^1.0.4":
+ version: 1.0.6
+ resolution: "inflight@npm:1.0.6"
+ dependencies:
+ once: "npm:^1.3.0"
+ wrappy: "npm:1"
+ checksum: 10c0/7faca22584600a9dc5b9fca2cd5feb7135ac8c935449837b315676b4c90aa4f391ec4f42240178244b5a34e8bede1948627fda392ca3191522fc46b34e985ab2
+ languageName: node
+ linkType: hard
+
+"inherits@npm:2, inherits@npm:^2.0.3":
+ version: 2.0.4
+ resolution: "inherits@npm:2.0.4"
+ checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2
+ languageName: node
+ linkType: hard
+
+"irregular-plurals@npm:^3.3.0":
+ version: 3.5.0
+ resolution: "irregular-plurals@npm:3.5.0"
+ checksum: 10c0/7c033bbe7325e5a6e0a26949cc6863b6ce273403d4cd5b93bd99b33fecb6605b0884097c4259c23ed0c52c2133bf7d1cdcdd7a0630e8c325161fe269b3447918
+ languageName: node
+ linkType: hard
+
+"is-extglob@npm:^2.1.1":
+ version: 2.1.1
+ resolution: "is-extglob@npm:2.1.1"
+ checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912
+ languageName: node
+ linkType: hard
+
+"is-fullwidth-code-point@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "is-fullwidth-code-point@npm:3.0.0"
+ checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc
+ languageName: node
+ linkType: hard
+
+"is-fullwidth-code-point@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "is-fullwidth-code-point@npm:4.0.0"
+ checksum: 10c0/df2a717e813567db0f659c306d61f2f804d480752526886954a2a3e2246c7745fd07a52b5fecf2b68caf0a6c79dcdace6166fdf29cc76ed9975cc334f0a018b8
+ languageName: node
+ linkType: hard
+
+"is-glob@npm:^4.0.1":
+ version: 4.0.3
+ resolution: "is-glob@npm:4.0.3"
+ dependencies:
+ is-extglob: "npm:^2.1.1"
+ checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a
+ languageName: node
+ linkType: hard
+
+"is-number@npm:^7.0.0":
+ version: 7.0.0
+ resolution: "is-number@npm:7.0.0"
+ checksum: 10c0/b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811
+ languageName: node
+ linkType: hard
+
+"is-plain-object@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "is-plain-object@npm:5.0.0"
+ checksum: 10c0/893e42bad832aae3511c71fd61c0bf61aa3a6d853061c62a307261842727d0d25f761ce9379f7ba7226d6179db2a3157efa918e7fe26360f3bf0842d9f28942c
+ languageName: node
+ linkType: hard
+
+"is-promise@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "is-promise@npm:4.0.0"
+ checksum: 10c0/ebd5c672d73db781ab33ccb155fb9969d6028e37414d609b115cc534654c91ccd061821d5b987eefaa97cf4c62f0b909bb2f04db88306de26e91bfe8ddc01503
+ languageName: node
+ linkType: hard
+
+"is-unicode-supported@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "is-unicode-supported@npm:2.0.0"
+ checksum: 10c0/3013dfb8265fe9f9a0d1e9433fc4e766595631a8d85d60876c457b4bedc066768dab1477c553d02e2f626d88a4e019162706e04263c94d74994ef636a33b5f94
+ languageName: node
+ linkType: hard
+
+"js-string-escape@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "js-string-escape@npm:1.0.1"
+ checksum: 10c0/2c33b9ff1ba6b84681c51ca0997e7d5a1639813c95d5b61cb7ad47e55cc28fa4a0b1935c3d218710d8e6bcee5d0cd8c44755231e3a4e45fc604534d9595a3628
+ languageName: node
+ linkType: hard
+
+"js-yaml@npm:^3.14.1":
+ version: 3.14.1
+ resolution: "js-yaml@npm:3.14.1"
+ dependencies:
+ argparse: "npm:^1.0.7"
+ esprima: "npm:^4.0.0"
+ bin:
+ js-yaml: bin/js-yaml.js
+ checksum: 10c0/6746baaaeac312c4db8e75fa22331d9a04cccb7792d126ed8ce6a0bbcfef0cedaddd0c5098fade53db067c09fe00aa1c957674b4765610a8b06a5a189e46433b
+ languageName: node
+ linkType: hard
+
+"load-json-file@npm:^7.0.1":
+ version: 7.0.1
+ resolution: "load-json-file@npm:7.0.1"
+ checksum: 10c0/7117459608a0b6329c7f78e6e1f541b3162dd901c29dd5af721fec8b270177d2e3d7999c971f344fff04daac368d052732e2c7146014bc84d15e0b636975e19a
+ languageName: node
+ linkType: hard
+
+"lodash@npm:^4.17.15":
+ version: 4.17.21
+ resolution: "lodash@npm:4.17.21"
+ checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c
+ languageName: node
+ linkType: hard
+
+"lru-cache@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "lru-cache@npm:6.0.0"
+ dependencies:
+ yallist: "npm:^4.0.0"
+ checksum: 10c0/cb53e582785c48187d7a188d3379c181b5ca2a9c78d2bce3e7dee36f32761d1c42983da3fe12b55cb74e1779fa94cdc2e5367c028a9b35317184ede0c07a30a9
+ languageName: node
+ linkType: hard
+
+"make-dir@npm:^3.1.0":
+ version: 3.1.0
+ resolution: "make-dir@npm:3.1.0"
+ dependencies:
+ semver: "npm:^6.0.0"
+ checksum: 10c0/56aaafefc49c2dfef02c5c95f9b196c4eb6988040cf2c712185c7fe5c99b4091591a7fc4d4eafaaefa70ff763a26f6ab8c3ff60b9e75ea19876f49b18667ecaa
+ languageName: node
+ linkType: hard
+
+"matcher@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "matcher@npm:5.0.0"
+ dependencies:
+ escape-string-regexp: "npm:^5.0.0"
+ checksum: 10c0/eda5471fc9d5b7264d63c81727824adc3585ddb5cfdc5fce5a9b7c86f946ff181610735d330b1c37a84811df872d1290bf4e9401d2be2a414204343701144b18
+ languageName: node
+ linkType: hard
+
+"md5-hex@npm:^3.0.1":
+ version: 3.0.1
+ resolution: "md5-hex@npm:3.0.1"
+ dependencies:
+ blueimp-md5: "npm:^2.10.0"
+ checksum: 10c0/ee2b4d8da16b527b3a3fe4d7a96720f43afd07b46a82d49421208b5a126235fb75cfb30b80d4029514772c8844273f940bddfbf4155c787f968f3be4060d01e4
+ languageName: node
+ linkType: hard
+
+"memoize@npm:^10.0.0":
+ version: 10.0.0
+ resolution: "memoize@npm:10.0.0"
+ dependencies:
+ mimic-function: "npm:^5.0.0"
+ checksum: 10c0/1584351834564be66b21d47b7afe495851f622669ad49e2f4fa4f35d5633471b93176cf602130a95f71fa0aee65a20179817ffac2dd11fa354aa19a8109a14e8
+ languageName: node
+ linkType: hard
+
+"merge2@npm:^1.3.0":
+ version: 1.4.1
+ resolution: "merge2@npm:1.4.1"
+ checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb
+ languageName: node
+ linkType: hard
+
+"micromatch@npm:^4.0.2, micromatch@npm:^4.0.4":
+ version: 4.0.5
+ resolution: "micromatch@npm:4.0.5"
+ dependencies:
+ braces: "npm:^3.0.2"
+ picomatch: "npm:^2.3.1"
+ checksum: 10c0/3d6505b20f9fa804af5d8c596cb1c5e475b9b0cd05f652c5b56141cf941bd72adaeb7a436fda344235cef93a7f29b7472efc779fcdb83b478eab0867b95cdeff
+ languageName: node
+ linkType: hard
+
+"mimic-function@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "mimic-function@npm:5.0.0"
+ checksum: 10c0/d822af182e4f71e8659efdbc2a40f63425413b96c3ebad1b5c082bbc2a39171203b9db8e31fb00e30e6b413eb4f42defef3bf379c5d4f24b147659e9b6ec1200
+ languageName: node
+ linkType: hard
+
+"minimatch@npm:^3.1.1":
+ version: 3.1.2
+ resolution: "minimatch@npm:3.1.2"
+ dependencies:
+ brace-expansion: "npm:^1.1.7"
+ checksum: 10c0/0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311
+ languageName: node
+ linkType: hard
+
+"minipass@npm:^3.0.0":
+ version: 3.3.6
+ resolution: "minipass@npm:3.3.6"
+ dependencies:
+ yallist: "npm:^4.0.0"
+ checksum: 10c0/a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c
+ languageName: node
+ linkType: hard
+
+"minipass@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "minipass@npm:5.0.0"
+ checksum: 10c0/a91d8043f691796a8ac88df039da19933ef0f633e3d7f0d35dcd5373af49131cf2399bfc355f41515dc495e3990369c3858cd319e5c2722b4753c90bf3152462
+ languageName: node
+ linkType: hard
+
+"minizlib@npm:^2.1.1":
+ version: 2.1.2
+ resolution: "minizlib@npm:2.1.2"
+ dependencies:
+ minipass: "npm:^3.0.0"
+ yallist: "npm:^4.0.0"
+ checksum: 10c0/64fae024e1a7d0346a1102bb670085b17b7f95bf6cfdf5b128772ec8faf9ea211464ea4add406a3a6384a7d87a0cd1a96263692134323477b4fb43659a6cab78
+ languageName: node
+ linkType: hard
+
+"mkdirp@npm:^1.0.3":
+ version: 1.0.4
+ resolution: "mkdirp@npm:1.0.4"
+ bin:
+ mkdirp: bin/cmd.js
+ checksum: 10c0/46ea0f3ffa8bc6a5bc0c7081ffc3907777f0ed6516888d40a518c5111f8366d97d2678911ad1a6882bf592fa9de6c784fea32e1687bb94e1f4944170af48a5cf
+ languageName: node
+ linkType: hard
+
+"ms@npm:2.1.2":
+ version: 2.1.2
+ resolution: "ms@npm:2.1.2"
+ checksum: 10c0/a437714e2f90dbf881b5191d35a6db792efbca5badf112f87b9e1c712aace4b4b9b742dd6537f3edf90fd6f684de897cec230abde57e87883766712ddda297cc
+ languageName: node
+ linkType: hard
+
+"ms@npm:^2.1.3":
+ version: 2.1.3
+ resolution: "ms@npm:2.1.3"
+ checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48
+ languageName: node
+ linkType: hard
+
+"node-fetch@npm:^2.6.7":
+ version: 2.7.0
+ resolution: "node-fetch@npm:2.7.0"
+ dependencies:
+ whatwg-url: "npm:^5.0.0"
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+ checksum: 10c0/b55786b6028208e6fbe594ccccc213cab67a72899c9234eb59dba51062a299ea853210fcf526998eaa2867b0963ad72338824450905679ff0fa304b8c5093ae8
+ languageName: node
+ linkType: hard
+
+"node-gyp-build@npm:^4.2.2":
+ version: 4.8.0
+ resolution: "node-gyp-build@npm:4.8.0"
+ bin:
+ node-gyp-build: bin.js
+ node-gyp-build-optional: optional.js
+ node-gyp-build-test: build-test.js
+ checksum: 10c0/85324be16f81f0235cbbc42e3eceaeb1b5ab94c8d8f5236755e1435b4908338c65a4e75f66ee343cbcb44ddf9b52a428755bec16dcd983295be4458d95c8e1ad
+ languageName: node
+ linkType: hard
+
+"nofilter@npm:^3.1.0":
+ version: 3.1.0
+ resolution: "nofilter@npm:3.1.0"
+ checksum: 10c0/92459f3864a067b347032263f0b536223cbfc98153913b5dce350cb39c8470bc1813366e41993f22c33cc6400c0f392aa324a4b51e24c22040635c1cdb046499
+ languageName: node
+ linkType: hard
+
+"nopt@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "nopt@npm:5.0.0"
+ dependencies:
+ abbrev: "npm:1"
+ bin:
+ nopt: bin/nopt.js
+ checksum: 10c0/fc5c4f07155cb455bf5fc3dd149fac421c1a40fd83c6bfe83aa82b52f02c17c5e88301321318adaa27611c8a6811423d51d29deaceab5fa158b585a61a551061
+ languageName: node
+ linkType: hard
+
+"npmlog@npm:^5.0.1":
+ version: 5.0.1
+ resolution: "npmlog@npm:5.0.1"
+ dependencies:
+ are-we-there-yet: "npm:^2.0.0"
+ console-control-strings: "npm:^1.1.0"
+ gauge: "npm:^3.0.0"
+ set-blocking: "npm:^2.0.0"
+ checksum: 10c0/489ba519031013001135c463406f55491a17fc7da295c18a04937fe3a4d523fd65e88dd418a28b967ab743d913fdeba1e29838ce0ad8c75557057c481f7d49fa
+ languageName: node
+ linkType: hard
+
+"object-assign@npm:^4.1.1":
+ version: 4.1.1
+ resolution: "object-assign@npm:4.1.1"
+ checksum: 10c0/1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414
+ languageName: node
+ linkType: hard
+
+"once@npm:^1.3.0":
+ version: 1.4.0
+ resolution: "once@npm:1.4.0"
+ dependencies:
+ wrappy: "npm:1"
+ checksum: 10c0/5d48aca287dfefabd756621c5dfce5c91a549a93e9fdb7b8246bc4c4790aa2ec17b34a260530474635147aeb631a2dcc8b32c613df0675f96041cbb8244517d0
+ languageName: node
+ linkType: hard
+
+"p-map@npm:^7.0.1":
+ version: 7.0.1
+ resolution: "p-map@npm:7.0.1"
+ checksum: 10c0/c8ffa481d52e38a8d3e48c0628a63afd1fe8510d8d3feb0f0693351a52338c750e105bf74ff171dd7e6aed1ad26c2dd03aa1f8cfd86552cb5cbbc5054d311d74
+ languageName: node
+ linkType: hard
+
+"package-config@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "package-config@npm:5.0.0"
+ dependencies:
+ find-up-simple: "npm:^1.0.0"
+ load-json-file: "npm:^7.0.1"
+ checksum: 10c0/f6c48930700b73a41d839bf2898b628d23665827488a4f34aed2d05e4a99d7a70a70ada115c3546765947fbc8accff94c0779da21ea084b25df47cb774531eeb
+ languageName: node
+ linkType: hard
+
+"parse-ms@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "parse-ms@npm:4.0.0"
+ checksum: 10c0/a7900f4f1ebac24cbf5e9708c16fb2fd482517fad353aecd7aefb8c2ba2f85ce017913ccb8925d231770404780df46244ea6fec598b3bde6490882358b4d2d16
+ languageName: node
+ linkType: hard
+
+"path-is-absolute@npm:^1.0.0":
+ version: 1.0.1
+ resolution: "path-is-absolute@npm:1.0.1"
+ checksum: 10c0/127da03c82172a2a50099cddbf02510c1791fc2cc5f7713ddb613a56838db1e8168b121a920079d052e0936c23005562059756d653b7c544c53185efe53be078
+ languageName: node
+ linkType: hard
+
+"path-type@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "path-type@npm:5.0.0"
+ checksum: 10c0/e8f4b15111bf483900c75609e5e74e3fcb79f2ddb73e41470028fcd3e4b5162ec65da9907be077ee5012c18801ff7fffb35f9f37a077f3f81d85a0b7d6578efd
+ languageName: node
+ linkType: hard
+
+"picomatch@npm:^2.2.2, picomatch@npm:^2.3.1":
+ version: 2.3.1
+ resolution: "picomatch@npm:2.3.1"
+ checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be
+ languageName: node
+ linkType: hard
+
+"picomatch@npm:^3.0.1":
+ version: 3.0.1
+ resolution: "picomatch@npm:3.0.1"
+ checksum: 10c0/70ec738569f1864658378b7abdab8939d15dae0718c1df994eae3346fd33daf6a3c1ff4e0c1a0cd1e2c0319130985b63a2cff34d192f2f2acbb78aca76111736
+ languageName: node
+ linkType: hard
+
+"plur@npm:^5.1.0":
+ version: 5.1.0
+ resolution: "plur@npm:5.1.0"
+ dependencies:
+ irregular-plurals: "npm:^3.3.0"
+ checksum: 10c0/26bb622b8545fcfd47bbf56fbcca66c08693708a232e403fa3589e00003c56c14231ac57c7588ca5db83ef4be1f61383402c4ea954000768f779f8aef6eb6da8
+ languageName: node
+ linkType: hard
+
+"pretty-ms@npm:^9.0.0":
+ version: 9.0.0
+ resolution: "pretty-ms@npm:9.0.0"
+ dependencies:
+ parse-ms: "npm:^4.0.0"
+ checksum: 10c0/ba4a2acd1fe92a1c629e5cdeb555d7fa344ae9920e20fa00e8ac1db61b8d3dff8638ffc70c7569f681e375df68c9f31291c2c1912cefd02ef1b1bdd0861a4aed
+ languageName: node
+ linkType: hard
+
+"queue-microtask@npm:^1.2.2":
+ version: 1.2.3
+ resolution: "queue-microtask@npm:1.2.3"
+ checksum: 10c0/900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102
+ languageName: node
+ linkType: hard
+
+"readable-stream@npm:^3.6.0":
+ version: 3.6.2
+ resolution: "readable-stream@npm:3.6.2"
+ dependencies:
+ inherits: "npm:^2.0.3"
+ string_decoder: "npm:^1.1.1"
+ util-deprecate: "npm:^1.0.1"
+ checksum: 10c0/e37be5c79c376fdd088a45fa31ea2e423e5d48854be7a22a58869b4e84d25047b193f6acb54f1012331e1bcd667ffb569c01b99d36b0bd59658fb33f513511b7
+ languageName: node
+ linkType: hard
+
+"require-directory@npm:^2.1.1":
+ version: 2.1.1
+ resolution: "require-directory@npm:2.1.1"
+ checksum: 10c0/83aa76a7bc1531f68d92c75a2ca2f54f1b01463cb566cf3fbc787d0de8be30c9dbc211d1d46be3497dac5785fe296f2dd11d531945ac29730643357978966e99
+ languageName: node
+ linkType: hard
+
+"resolve-cwd@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "resolve-cwd@npm:3.0.0"
+ dependencies:
+ resolve-from: "npm:^5.0.0"
+ checksum: 10c0/e608a3ebd15356264653c32d7ecbc8fd702f94c6703ea4ac2fb81d9c359180cba0ae2e6b71faa446631ed6145454d5a56b227efc33a2d40638ac13f8beb20ee4
+ languageName: node
+ linkType: hard
+
+"resolve-from@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "resolve-from@npm:5.0.0"
+ checksum: 10c0/b21cb7f1fb746de8107b9febab60095187781137fd803e6a59a76d421444b1531b641bba5857f5dc011974d8a5c635d61cec49e6bd3b7fc20e01f0fafc4efbf2
+ languageName: node
+ linkType: hard
+
+"reusify@npm:^1.0.4":
+ version: 1.0.4
+ resolution: "reusify@npm:1.0.4"
+ checksum: 10c0/c19ef26e4e188f408922c46f7ff480d38e8dfc55d448310dfb518736b23ed2c4f547fb64a6ed5bdba92cd7e7ddc889d36ff78f794816d5e71498d645ef476107
+ languageName: node
+ linkType: hard
+
+"rimraf@npm:^3.0.2":
+ version: 3.0.2
+ resolution: "rimraf@npm:3.0.2"
+ dependencies:
+ glob: "npm:^7.1.3"
+ bin:
+ rimraf: bin.js
+ checksum: 10c0/9cb7757acb489bd83757ba1a274ab545eafd75598a9d817e0c3f8b164238dd90eba50d6b848bd4dcc5f3040912e882dc7ba71653e35af660d77b25c381d402e8
+ languageName: node
+ linkType: hard
+
+"run-parallel@npm:^1.1.9":
+ version: 1.2.0
+ resolution: "run-parallel@npm:1.2.0"
+ dependencies:
+ queue-microtask: "npm:^1.2.2"
+ checksum: 10c0/200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39
+ languageName: node
+ linkType: hard
+
+"safe-buffer@npm:~5.2.0":
+ version: 5.2.1
+ resolution: "safe-buffer@npm:5.2.1"
+ checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3
+ languageName: node
+ linkType: hard
+
+"semver@npm:^6.0.0":
+ version: 6.3.1
+ resolution: "semver@npm:6.3.1"
+ bin:
+ semver: bin/semver.js
+ checksum: 10c0/e3d79b609071caa78bcb6ce2ad81c7966a46a7431d9d58b8800cfa9cb6a63699b3899a0e4bcce36167a284578212d9ae6942b6929ba4aa5015c079a67751d42d
+ languageName: node
+ linkType: hard
+
+"semver@npm:^7.3.2, semver@npm:^7.3.5":
+ version: 7.5.4
+ resolution: "semver@npm:7.5.4"
+ dependencies:
+ lru-cache: "npm:^6.0.0"
+ bin:
+ semver: bin/semver.js
+ checksum: 10c0/5160b06975a38b11c1ab55950cb5b8a23db78df88275d3d8a42ccf1f29e55112ac995b3a26a522c36e3b5f76b0445f1eef70d696b8c7862a2b4303d7b0e7609e
+ languageName: node
+ linkType: hard
+
+"serialize-error@npm:^7.0.1":
+ version: 7.0.1
+ resolution: "serialize-error@npm:7.0.1"
+ dependencies:
+ type-fest: "npm:^0.13.1"
+ checksum: 10c0/7982937d578cd901276c8ab3e2c6ed8a4c174137730f1fb0402d005af209a0e84d04acc874e317c936724c7b5b26c7a96ff7e4b8d11a469f4924a4b0ea814c05
+ languageName: node
+ linkType: hard
+
+"set-blocking@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "set-blocking@npm:2.0.0"
+ checksum: 10c0/9f8c1b2d800800d0b589de1477c753492de5c1548d4ade52f57f1d1f5e04af5481554d75ce5e5c43d4004b80a3eb714398d6907027dc0534177b7539119f4454
+ languageName: node
+ linkType: hard
+
+"signal-exit@npm:^3.0.0":
+ version: 3.0.7
+ resolution: "signal-exit@npm:3.0.7"
+ checksum: 10c0/25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912
+ languageName: node
+ linkType: hard
+
+"signal-exit@npm:^4.0.1":
+ version: 4.1.0
+ resolution: "signal-exit@npm:4.1.0"
+ checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83
+ languageName: node
+ linkType: hard
+
+"slash@npm:^5.1.0":
+ version: 5.1.0
+ resolution: "slash@npm:5.1.0"
+ checksum: 10c0/eb48b815caf0bdc390d0519d41b9e0556a14380f6799c72ba35caf03544d501d18befdeeef074bc9c052acf69654bc9e0d79d7f1de0866284137a40805299eb3
+ languageName: node
+ linkType: hard
+
+"slice-ansi@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "slice-ansi@npm:5.0.0"
+ dependencies:
+ ansi-styles: "npm:^6.0.0"
+ is-fullwidth-code-point: "npm:^4.0.0"
+ checksum: 10c0/2d4d40b2a9d5cf4e8caae3f698fe24ae31a4d778701724f578e984dcb485ec8c49f0c04dab59c401821e80fcdfe89cace9c66693b0244e40ec485d72e543914f
+ languageName: node
+ linkType: hard
+
+"sprintf-js@npm:~1.0.2":
+ version: 1.0.3
+ resolution: "sprintf-js@npm:1.0.3"
+ checksum: 10c0/ecadcfe4c771890140da5023d43e190b7566d9cf8b2d238600f31bec0fc653f328da4450eb04bd59a431771a8e9cc0e118f0aa3974b683a4981b4e07abc2a5bb
+ languageName: node
+ linkType: hard
+
+"stack-utils@npm:^2.0.6":
+ version: 2.0.6
+ resolution: "stack-utils@npm:2.0.6"
+ dependencies:
+ escape-string-regexp: "npm:^2.0.0"
+ checksum: 10c0/651c9f87667e077584bbe848acaecc6049bc71979f1e9a46c7b920cad4431c388df0f51b8ad7cfd6eed3db97a2878d0fc8b3122979439ea8bac29c61c95eec8a
+ languageName: node
+ linkType: hard
+
+"string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3":
+ version: 4.2.3
+ resolution: "string-width@npm:4.2.3"
+ dependencies:
+ emoji-regex: "npm:^8.0.0"
+ is-fullwidth-code-point: "npm:^3.0.0"
+ strip-ansi: "npm:^6.0.1"
+ checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b
+ languageName: node
+ linkType: hard
+
+"string-width@npm:^7.0.0":
+ version: 7.1.0
+ resolution: "string-width@npm:7.1.0"
+ dependencies:
+ emoji-regex: "npm:^10.3.0"
+ get-east-asian-width: "npm:^1.0.0"
+ strip-ansi: "npm:^7.1.0"
+ checksum: 10c0/68a99fbc3bd3d8eb42886ff38dce819767dee55f606f74dfa4687a07dfd21262745d9683df0aa53bf81a5dd47c13da921a501925b974bec66a7ddd634fef0634
+ languageName: node
+ linkType: hard
+
+"string_decoder@npm:^1.1.1":
+ version: 1.3.0
+ resolution: "string_decoder@npm:1.3.0"
+ dependencies:
+ safe-buffer: "npm:~5.2.0"
+ checksum: 10c0/810614ddb030e271cd591935dcd5956b2410dd079d64ff92a1844d6b7588bf992b3e1b69b0f4d34a3e06e0bd73046ac646b5264c1987b20d0601f81ef35d731d
+ languageName: node
+ linkType: hard
+
+"strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1":
+ version: 6.0.1
+ resolution: "strip-ansi@npm:6.0.1"
+ dependencies:
+ ansi-regex: "npm:^5.0.1"
+ checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952
+ languageName: node
+ linkType: hard
+
+"strip-ansi@npm:^7.0.1, strip-ansi@npm:^7.1.0":
+ version: 7.1.0
+ resolution: "strip-ansi@npm:7.1.0"
+ dependencies:
+ ansi-regex: "npm:^6.0.1"
+ checksum: 10c0/a198c3762e8832505328cbf9e8c8381de14a4fa50a4f9b2160138158ea88c0f5549fb50cb13c651c3088f47e63a108b34622ec18c0499b6c8c3a5ddf6b305ac4
+ languageName: node
+ linkType: hard
+
+"supertap@npm:^3.0.1":
+ version: 3.0.1
+ resolution: "supertap@npm:3.0.1"
+ dependencies:
+ indent-string: "npm:^5.0.0"
+ js-yaml: "npm:^3.14.1"
+ serialize-error: "npm:^7.0.1"
+ strip-ansi: "npm:^7.0.1"
+ checksum: 10c0/8164674f2e280cab875f0fef5bb36c15553c13e29697ff92f4e0d6bc62149f0303a89eee47535413ed145ea72e14a24d065bab233059d48a499ec5ebb4566b0f
+ languageName: node
+ linkType: hard
+
+"tar@npm:^6.1.11":
+ version: 6.2.0
+ resolution: "tar@npm:6.2.0"
+ dependencies:
+ chownr: "npm:^2.0.0"
+ fs-minipass: "npm:^2.0.0"
+ minipass: "npm:^5.0.0"
+ minizlib: "npm:^2.1.1"
+ mkdirp: "npm:^1.0.3"
+ yallist: "npm:^4.0.0"
+ checksum: 10c0/02ca064a1a6b4521fef88c07d389ac0936730091f8c02d30ea60d472e0378768e870769ab9e986d87807bfee5654359cf29ff4372746cc65e30cbddc352660d8
+ languageName: node
+ linkType: hard
+
+"temp-dir@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "temp-dir@npm:3.0.0"
+ checksum: 10c0/a86978a400984cd5f315b77ebf3fe53bb58c61f192278cafcb1f3fb32d584a21dc8e08b93171d7874b7cc972234d3455c467306cc1bfc4524b622e5ad3bfd671
+ languageName: node
+ linkType: hard
+
+"time-zone@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "time-zone@npm:1.0.0"
+ checksum: 10c0/d00ebd885039109011b6e2423ebbf225160927333c2ade6d833e9cc4676db20759f1f3855fafde00d1bd668c243a6aa68938ce71fe58aab0d514e820d59c1d81
+ languageName: node
+ linkType: hard
+
+"to-regex-range@npm:^5.0.1":
+ version: 5.0.1
+ resolution: "to-regex-range@npm:5.0.1"
+ dependencies:
+ is-number: "npm:^7.0.0"
+ checksum: 10c0/487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892
+ languageName: node
+ linkType: hard
+
+"tr46@npm:~0.0.3":
+ version: 0.0.3
+ resolution: "tr46@npm:0.0.3"
+ checksum: 10c0/047cb209a6b60c742f05c9d3ace8fa510bff609995c129a37ace03476a9b12db4dbf975e74600830ef0796e18882b2381fb5fb1f6b4f96b832c374de3ab91a11
+ languageName: node
+ linkType: hard
+
+"type-fest@npm:^0.13.1":
+ version: 0.13.1
+ resolution: "type-fest@npm:0.13.1"
+ checksum: 10c0/0c0fa07ae53d4e776cf4dac30d25ad799443e9eef9226f9fddbb69242db86b08584084a99885cfa5a9dfe4c063ebdc9aa7b69da348e735baede8d43f1aeae93b
+ languageName: node
+ linkType: hard
+
+"unicorn-magic@npm:^0.1.0":
+ version: 0.1.0
+ resolution: "unicorn-magic@npm:0.1.0"
+ checksum: 10c0/e4ed0de05b0a05e735c7d8a2930881e5efcfc3ec897204d5d33e7e6247f4c31eac92e383a15d9a6bccb7319b4271ee4bea946e211bf14951fec6ff2cbbb66a92
+ languageName: node
+ linkType: hard
+
+"util-deprecate@npm:^1.0.1":
+ version: 1.0.2
+ resolution: "util-deprecate@npm:1.0.2"
+ checksum: 10c0/41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942
+ languageName: node
+ linkType: hard
+
+"webidl-conversions@npm:^3.0.0":
+ version: 3.0.1
+ resolution: "webidl-conversions@npm:3.0.1"
+ checksum: 10c0/5612d5f3e54760a797052eb4927f0ddc01383550f542ccd33d5238cfd65aeed392a45ad38364970d0a0f4fea32e1f4d231b3d8dac4a3bdd385e5cf802ae097db
+ languageName: node
+ linkType: hard
+
+"well-known-symbols@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "well-known-symbols@npm:2.0.0"
+ checksum: 10c0/cb6c12e98877e8952ec28d13ae6f4fdb54ae1cb49b16a728720276dadd76c930e6cb0e174af3a4620054dd2752546f842540122920c6e31410208abd4958ee6b
+ languageName: node
+ linkType: hard
+
+"whatwg-url@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "whatwg-url@npm:5.0.0"
+ dependencies:
+ tr46: "npm:~0.0.3"
+ webidl-conversions: "npm:^3.0.0"
+ checksum: 10c0/1588bed84d10b72d5eec1d0faa0722ba1962f1821e7539c535558fb5398d223b0c50d8acab950b8c488b4ba69043fd833cc2697056b167d8ad46fac3995a55d5
+ languageName: node
+ linkType: hard
+
+"wide-align@npm:^1.1.2":
+ version: 1.1.5
+ resolution: "wide-align@npm:1.1.5"
+ dependencies:
+ string-width: "npm:^1.0.2 || 2 || 3 || 4"
+ checksum: 10c0/1d9c2a3e36dfb09832f38e2e699c367ef190f96b82c71f809bc0822c306f5379df87bab47bed27ea99106d86447e50eb972d3c516c2f95782807a9d082fbea95
+ languageName: node
+ linkType: hard
+
+"wrap-ansi@npm:^7.0.0":
+ version: 7.0.0
+ resolution: "wrap-ansi@npm:7.0.0"
+ dependencies:
+ ansi-styles: "npm:^4.0.0"
+ string-width: "npm:^4.1.0"
+ strip-ansi: "npm:^6.0.0"
+ checksum: 10c0/d15fc12c11e4cbc4044a552129ebc75ee3f57aa9c1958373a4db0292d72282f54373b536103987a4a7594db1ef6a4f10acf92978f79b98c49306a4b58c77d4da
+ languageName: node
+ linkType: hard
+
+"wrappy@npm:1":
+ version: 1.0.2
+ resolution: "wrappy@npm:1.0.2"
+ checksum: 10c0/56fece1a4018c6a6c8e28fbc88c87e0fbf4ea8fd64fc6c63b18f4acc4bd13e0ad2515189786dd2c30d3eec9663d70f4ecf699330002f8ccb547e4a18231fc9f0
+ languageName: node
+ linkType: hard
+
+"write-file-atomic@npm:^5.0.1":
+ version: 5.0.1
+ resolution: "write-file-atomic@npm:5.0.1"
+ dependencies:
+ imurmurhash: "npm:^0.1.4"
+ signal-exit: "npm:^4.0.1"
+ checksum: 10c0/e8c850a8e3e74eeadadb8ad23c9d9d63e4e792bd10f4836ed74189ef6e996763959f1249c5650e232f3c77c11169d239cbfc8342fc70f3fe401407d23810505d
+ languageName: node
+ linkType: hard
+
+"y18n@npm:^5.0.5":
+ version: 5.0.8
+ resolution: "y18n@npm:5.0.8"
+ checksum: 10c0/4df2842c36e468590c3691c894bc9cdbac41f520566e76e24f59401ba7d8b4811eb1e34524d57e54bc6d864bcb66baab7ffd9ca42bf1eda596618f9162b91249
+ languageName: node
+ linkType: hard
+
+"yallist@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "yallist@npm:4.0.0"
+ checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a
+ languageName: node
+ linkType: hard
+
+"yargs-parser@npm:^21.1.1":
+ version: 21.1.1
+ resolution: "yargs-parser@npm:21.1.1"
+ checksum: 10c0/f84b5e48169479d2f402239c59f084cfd1c3acc197a05c59b98bab067452e6b3ea46d4dd8ba2985ba7b3d32a343d77df0debd6b343e5dae3da2aab2cdf5886b2
+ languageName: node
+ linkType: hard
+
+"yargs@npm:^17.7.2":
+ version: 17.7.2
+ resolution: "yargs@npm:17.7.2"
+ dependencies:
+ cliui: "npm:^8.0.1"
+ escalade: "npm:^3.1.1"
+ get-caller-file: "npm:^2.0.5"
+ require-directory: "npm:^2.1.1"
+ string-width: "npm:^4.2.3"
+ y18n: "npm:^5.0.5"
+ yargs-parser: "npm:^21.1.1"
+ checksum: 10c0/ccd7e723e61ad5965fffbb791366db689572b80cca80e0f96aad968dfff4156cd7cd1ad18607afe1046d8241e6fb2d6c08bf7fa7bfb5eaec818735d8feac8f05
+ languageName: node
+ linkType: hard