mirror of
https://github.com/aljazceru/cdk.git
synced 2025-12-21 22:54:49 +01:00
improve: nix flakebox fmt
This commit is contained in:
1
.config/flakebox/id
Normal file
1
.config/flakebox/id
Normal file
@@ -0,0 +1 @@
|
|||||||
|
6ed8d7bac0d49950f28394f623607c29d00896bcf1505d366717626babadd81f8f111f93afd1b991b7087d5ce0684b4bcc10124aad93b3876ba1aba600a09cb4
|
||||||
32
.config/flakebox/shellHook.sh
Normal file
32
.config/flakebox/shellHook.sh
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
root="$(git rev-parse --show-toplevel)"
|
||||||
|
dot_git="$(git rev-parse --git-common-dir)"
|
||||||
|
if [[ ! -d "${dot_git}/hooks" ]]; then mkdir -p "${dot_git}/hooks"; fi
|
||||||
|
# fix old bug
|
||||||
|
rm -f "${dot_git}/hooks/comit-msg"
|
||||||
|
rm -f "${dot_git}/hooks/commit-msg"
|
||||||
|
ln -sf "${root}/misc/git-hooks/commit-msg" "${dot_git}/hooks/commit-msg"
|
||||||
|
|
||||||
|
root="$(git rev-parse --show-toplevel)"
|
||||||
|
dot_git="$(git rev-parse --git-common-dir)"
|
||||||
|
if [[ ! -d "${dot_git}/hooks" ]]; then mkdir -p "${dot_git}/hooks"; fi
|
||||||
|
# fix old bug
|
||||||
|
rm -f "${dot_git}/hooks/pre-comit"
|
||||||
|
rm -f "${dot_git}/hooks/pre-commit"
|
||||||
|
ln -sf "${root}/misc/git-hooks/pre-commit" "${dot_git}/hooks/pre-commit"
|
||||||
|
|
||||||
|
# set template
|
||||||
|
git config commit.template misc/git-hooks/commit-template.txt
|
||||||
|
|
||||||
|
if ! flakebox lint --silent; then
|
||||||
|
>&2 echo "ℹ️ Project recommendations detected. Run 'flakebox lint' for more info."
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "${DIRENV_IN_ENVRC:-}" ]; then
|
||||||
|
# and not set DIRENV_LOG_FORMAT
|
||||||
|
if [ -n "${DIRENV_LOG_FORMAT:-}" ]; then
|
||||||
|
>&2 echo "💡 Set 'DIRENV_LOG_FORMAT=\"\"' in your shell environment variables for a cleaner output of direnv"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
>&2 echo "💡 Run 'just' for a list of available 'just ...' helper recipes"
|
||||||
78
.github/workflows/flakebox-ci.yml
vendored
Normal file
78
.github/workflows/flakebox-ci.yml
vendored
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
# THIS FILE IS AUTOGENERATED FROM FLAKEBOX CONFIGURATION
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: Build
|
||||||
|
runs-on: ${{ matrix.runs-on }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Install Nix
|
||||||
|
uses: DeterminateSystems/nix-installer-action@v4
|
||||||
|
- name: Magic Nix Cache
|
||||||
|
uses: DeterminateSystems/magic-nix-cache-action@v2
|
||||||
|
- name: Build on ${{ matrix.host }}
|
||||||
|
run: 'nix flake check -L .#
|
||||||
|
|
||||||
|
'
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
host:
|
||||||
|
- macos
|
||||||
|
- linux
|
||||||
|
include:
|
||||||
|
- host: linux
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
timeout: 60
|
||||||
|
- host: macos
|
||||||
|
runs-on: macos-12
|
||||||
|
timeout: 60
|
||||||
|
timeout-minutes: ${{ matrix.timeout }}
|
||||||
|
flake:
|
||||||
|
name: Flake self-check
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Check Nix flake inputs
|
||||||
|
uses: DeterminateSystems/flake-checker-action@v5
|
||||||
|
with:
|
||||||
|
fail-mode: true
|
||||||
|
lint:
|
||||||
|
name: Lint
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Install Nix
|
||||||
|
uses: DeterminateSystems/nix-installer-action@v4
|
||||||
|
- name: Magic Nix Cache
|
||||||
|
uses: DeterminateSystems/magic-nix-cache-action@v2
|
||||||
|
- name: Cargo Cache
|
||||||
|
uses: actions/cache@v3
|
||||||
|
with:
|
||||||
|
key: ${{ runner.os }}-${{ hashFiles('Cargo.lock') }}
|
||||||
|
path: ~/.cargo
|
||||||
|
- name: Commit Check
|
||||||
|
run: '# run the same check that git `pre-commit` hook does
|
||||||
|
|
||||||
|
nix develop --ignore-environment .#lint --command ./misc/git-hooks/pre-commit
|
||||||
|
|
||||||
|
'
|
||||||
|
name: CI
|
||||||
|
'on':
|
||||||
|
merge_group:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
- main
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
- main
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
- main
|
||||||
|
tags:
|
||||||
|
- v*
|
||||||
|
workflow_dispatch: {}
|
||||||
|
|
||||||
|
|
||||||
|
# THIS FILE IS AUTOGENERATED FROM FLAKEBOX CONFIGURATION
|
||||||
35
.github/workflows/flakebox-flakehub-publish.yml
vendored
Normal file
35
.github/workflows/flakebox-flakehub-publish.yml
vendored
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
# THIS FILE IS AUTOGENERATED FROM FLAKEBOX CONFIGURATION
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
flakehub-publish:
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
id-token: write
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
ref: ${{ (inputs.tag != null) && format('refs/tags/{0}', inputs.tag) || ''
|
||||||
|
}}
|
||||||
|
- name: Install Nix
|
||||||
|
uses: DeterminateSystems/nix-installer-action@v4
|
||||||
|
- name: Flakehub Push
|
||||||
|
uses: DeterminateSystems/flakehub-push@main
|
||||||
|
with:
|
||||||
|
name: ${{ github.repository }}
|
||||||
|
tag: ${{ inputs.tag }}
|
||||||
|
visibility: public
|
||||||
|
name: Publish to Flakehub
|
||||||
|
'on':
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- v?[0-9]+.[0-9]+.[0-9]+*
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
tags:
|
||||||
|
description: The existing tag to publish to FlakeHub
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
|
||||||
|
|
||||||
|
# THIS FILE IS AUTOGENERATED FROM FLAKEBOX CONFIGURATION
|
||||||
4
.rustfmt.toml
Normal file
4
.rustfmt.toml
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
group_imports = "StdExternalCrate"
|
||||||
|
wrap_comments = true
|
||||||
|
format_code_in_doc_comments = true
|
||||||
|
imports_granularity = "Module"
|
||||||
@@ -17,4 +17,4 @@ url = { workspace = true }
|
|||||||
uniffi = { workspace = true }
|
uniffi = { workspace = true }
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
uniffi = { workspace = true, features = ["build"] }
|
uniffi = { workspace = true, features = ["build"] }
|
||||||
|
|||||||
@@ -3,12 +3,15 @@ mod nuts;
|
|||||||
mod types;
|
mod types;
|
||||||
|
|
||||||
mod ffi {
|
mod ffi {
|
||||||
|
pub use cashu::types::InvoiceStatus;
|
||||||
|
|
||||||
pub use crate::error::CashuError;
|
pub use crate::error::CashuError;
|
||||||
pub use crate::nuts::nut00::blinded_message::BlindedMessage;
|
pub use crate::nuts::nut00::blinded_message::BlindedMessage;
|
||||||
pub use crate::nuts::nut00::blinded_messages::BlindedMessages;
|
pub use crate::nuts::nut00::blinded_messages::BlindedMessages;
|
||||||
pub use crate::nuts::nut00::blinded_signature::BlindedSignature;
|
pub use crate::nuts::nut00::blinded_signature::BlindedSignature;
|
||||||
pub use crate::nuts::nut00::mint_proofs::MintProofs;
|
pub use crate::nuts::nut00::mint_proofs::MintProofs;
|
||||||
pub use crate::nuts::nut00::proof::{mint::Proof as MintProof, Proof};
|
pub use crate::nuts::nut00::proof::mint::Proof as MintProof;
|
||||||
|
pub use crate::nuts::nut00::proof::Proof;
|
||||||
pub use crate::nuts::nut00::token::Token;
|
pub use crate::nuts::nut00::token::Token;
|
||||||
pub use crate::nuts::nut01::key_pair::KeyPair;
|
pub use crate::nuts::nut01::key_pair::KeyPair;
|
||||||
pub use crate::nuts::nut01::keys::{Keys, KeysResponse};
|
pub use crate::nuts::nut01::keys::{Keys, KeysResponse};
|
||||||
@@ -26,11 +29,7 @@ mod ffi {
|
|||||||
pub use crate::nuts::nut08::{MeltRequest, MeltResponse};
|
pub use crate::nuts::nut08::{MeltRequest, MeltResponse};
|
||||||
pub use crate::nuts::nut09::{MintInfo, MintVersion};
|
pub use crate::nuts::nut09::{MintInfo, MintVersion};
|
||||||
pub use crate::types::amount::Amount;
|
pub use crate::types::amount::Amount;
|
||||||
pub use crate::types::Bolt11Invoice;
|
pub use crate::types::{Bolt11Invoice, KeySetInfo, Secret};
|
||||||
pub use crate::types::KeySetInfo;
|
|
||||||
pub use crate::types::Secret;
|
|
||||||
|
|
||||||
pub use cashu::types::InvoiceStatus;
|
|
||||||
|
|
||||||
// UDL
|
// UDL
|
||||||
uniffi::include_scaffolding!("cashu");
|
uniffi::include_scaffolding!("cashu");
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
use std::{ops::Deref, sync::Arc};
|
use std::ops::Deref;
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
use cashu::nuts::nut00::wallet::BlindedMessages as BlindedMessagesSdk;
|
use cashu::nuts::nut00::wallet::BlindedMessages as BlindedMessagesSdk;
|
||||||
|
|
||||||
use crate::{error::Result, Amount, BlindedMessage, Secret, SecretKey};
|
use crate::error::Result;
|
||||||
|
use crate::{Amount, BlindedMessage, Secret, SecretKey};
|
||||||
|
|
||||||
pub struct BlindedMessages {
|
pub struct BlindedMessages {
|
||||||
inner: BlindedMessagesSdk,
|
inner: BlindedMessagesSdk,
|
||||||
|
|||||||
@@ -3,9 +3,7 @@ use std::sync::Arc;
|
|||||||
|
|
||||||
use cashu::nuts::nut00::BlindedSignature as BlindedSignatureSdk;
|
use cashu::nuts::nut00::BlindedSignature as BlindedSignatureSdk;
|
||||||
|
|
||||||
use crate::Amount;
|
use crate::{Amount, Id, PublicKey};
|
||||||
use crate::Id;
|
|
||||||
use crate::PublicKey;
|
|
||||||
|
|
||||||
pub struct BlindedSignature {
|
pub struct BlindedSignature {
|
||||||
inner: BlindedSignatureSdk,
|
inner: BlindedSignatureSdk,
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
use std::{ops::Deref, sync::Arc};
|
use std::ops::Deref;
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
use cashu::nuts::nut00::Proof as ProofSdk;
|
use cashu::nuts::nut00::Proof as ProofSdk;
|
||||||
|
|
||||||
use crate::{types::Secret, Amount, Id, PublicKey};
|
use crate::types::Secret;
|
||||||
|
use crate::{Amount, Id, PublicKey};
|
||||||
|
|
||||||
pub struct Proof {
|
pub struct Proof {
|
||||||
inner: ProofSdk,
|
inner: ProofSdk,
|
||||||
@@ -73,9 +75,7 @@ pub mod mint {
|
|||||||
use cashu::nuts::nut00::mint::Proof as ProofSdk;
|
use cashu::nuts::nut00::mint::Proof as ProofSdk;
|
||||||
|
|
||||||
use crate::types::Secret;
|
use crate::types::Secret;
|
||||||
use crate::Amount;
|
use crate::{Amount, Id, PublicKey};
|
||||||
use crate::Id;
|
|
||||||
use crate::PublicKey;
|
|
||||||
|
|
||||||
pub struct Proof {
|
pub struct Proof {
|
||||||
inner: ProofSdk,
|
inner: ProofSdk,
|
||||||
|
|||||||
@@ -5,8 +5,7 @@ use cashu::nuts::nut00::wallet::Token as TokenSdk;
|
|||||||
use cashu::url::UncheckedUrl;
|
use cashu::url::UncheckedUrl;
|
||||||
|
|
||||||
use crate::error::Result;
|
use crate::error::Result;
|
||||||
use crate::MintProofs;
|
use crate::{MintProofs, Proof};
|
||||||
use crate::Proof;
|
|
||||||
|
|
||||||
pub struct Token {
|
pub struct Token {
|
||||||
inner: TokenSdk,
|
inner: TokenSdk,
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
use std::{ops::Deref, sync::Arc};
|
use std::ops::Deref;
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
use cashu::nuts::nut01::mint::KeyPair as KeyPairSdk;
|
||||||
|
|
||||||
use crate::{PublicKey, SecretKey};
|
use crate::{PublicKey, SecretKey};
|
||||||
use cashu::nuts::nut01::mint::KeyPair as KeyPairSdk;
|
|
||||||
|
|
||||||
pub struct KeyPair {
|
pub struct KeyPair {
|
||||||
inner: KeyPairSdk,
|
inner: KeyPairSdk,
|
||||||
|
|||||||
@@ -1,9 +1,12 @@
|
|||||||
use std::{collections::HashMap, ops::Deref, sync::Arc};
|
use std::collections::HashMap;
|
||||||
|
use std::ops::Deref;
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
use crate::{Amount, PublicKey};
|
|
||||||
use cashu::nuts::nut01::{Keys as KeysSdk, Response as KeysResponseSdk};
|
use cashu::nuts::nut01::{Keys as KeysSdk, Response as KeysResponseSdk};
|
||||||
use cashu::Amount as AmountSdk;
|
use cashu::Amount as AmountSdk;
|
||||||
|
|
||||||
|
use crate::{Amount, PublicKey};
|
||||||
|
|
||||||
pub struct Keys {
|
pub struct Keys {
|
||||||
inner: KeysSdk,
|
inner: KeysSdk,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
use std::ops::Deref;
|
use std::ops::Deref;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
use cashu::nuts::nut02::Id as IdSdk;
|
use cashu::nuts::nut02::{Id as IdSdk, KeySet as KeySetSdk, Response};
|
||||||
use cashu::nuts::nut02::KeySet as KeySetSdk;
|
|
||||||
use cashu::nuts::nut02::Response;
|
|
||||||
|
|
||||||
use crate::error::Result;
|
use crate::error::Result;
|
||||||
use crate::nuts::nut01::keys::Keys;
|
use crate::nuts::nut01::keys::Keys;
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
|
|
||||||
use cashu::{nuts::nut03::RequestMintResponse as RequestMintResponseSdk, Bolt11Invoice};
|
use cashu::nuts::nut03::RequestMintResponse as RequestMintResponseSdk;
|
||||||
|
use cashu::Bolt11Invoice;
|
||||||
|
|
||||||
use crate::error::Result;
|
use crate::error::Result;
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
use std::{ops::Deref, sync::Arc};
|
use std::ops::Deref;
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
use cashu::nuts::nut04::{MintRequest as MintRequestSdk, PostMintResponse as PostMintResponseSdk};
|
use cashu::nuts::nut04::{MintRequest as MintRequestSdk, PostMintResponse as PostMintResponseSdk};
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +1,15 @@
|
|||||||
use std::{ops::Deref, str::FromStr, sync::Arc};
|
use std::ops::Deref;
|
||||||
|
use std::str::FromStr;
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
use cashu::{
|
use cashu::nuts::nut05::{
|
||||||
nuts::nut05::{
|
CheckFeesRequest as CheckFeesRequestSdk, CheckFeesResponse as CheckFeesResponseSdk,
|
||||||
CheckFeesRequest as CheckFeesRequestSdk, CheckFeesResponse as CheckFeesResponseSdk,
|
MeltRequest as MeltRequestSdk, MeltResponse as MeltResponseSdk,
|
||||||
MeltRequest as MeltRequestSdk, MeltResponse as MeltResponseSdk,
|
|
||||||
},
|
|
||||||
Bolt11Invoice,
|
|
||||||
};
|
};
|
||||||
|
use cashu::Bolt11Invoice;
|
||||||
|
|
||||||
use crate::{error::Result, Amount, Proof};
|
use crate::error::Result;
|
||||||
|
use crate::{Amount, Proof};
|
||||||
|
|
||||||
pub struct CheckFeesRequest {
|
pub struct CheckFeesRequest {
|
||||||
inner: CheckFeesRequestSdk,
|
inner: CheckFeesRequestSdk,
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
use std::{ops::Deref, sync::Arc};
|
use std::ops::Deref;
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
use cashu::nuts::nut06::{SplitRequest as SplitRequestSdk, SplitResponse as SplitResponseSdk};
|
use cashu::nuts::nut06::{SplitRequest as SplitRequestSdk, SplitResponse as SplitResponseSdk};
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
use std::{ops::Deref, sync::Arc};
|
use std::ops::Deref;
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
use cashu::nuts::nut07::{
|
use cashu::nuts::nut07::{
|
||||||
CheckSpendableRequest as CheckSpendableRequestSdk,
|
CheckSpendableRequest as CheckSpendableRequestSdk,
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
use std::{ops::Deref, sync::Arc};
|
use std::ops::Deref;
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
use cashu::nuts::nut09::{MintInfo as MintInfoSdk, MintVersion as MintVersionSdk};
|
use cashu::nuts::nut09::{MintInfo as MintInfoSdk, MintVersion as MintVersionSdk};
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
use std::{ops::Deref, sync::Arc};
|
use std::ops::Deref;
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
use cashu::Amount as AmountSdk;
|
use cashu::Amount as AmountSdk;
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
use std::{ops::Deref, str::FromStr, sync::Arc};
|
use std::ops::Deref;
|
||||||
|
use std::str::FromStr;
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
use cashu::Bolt11Invoice as Bolt11InvoiceSdk;
|
use cashu::Bolt11Invoice as Bolt11InvoiceSdk;
|
||||||
|
|
||||||
use crate::{error::Result, Amount};
|
use crate::error::Result;
|
||||||
|
use crate::Amount;
|
||||||
|
|
||||||
pub struct Bolt11Invoice {
|
pub struct Bolt11Invoice {
|
||||||
inner: Bolt11InvoiceSdk,
|
inner: Bolt11InvoiceSdk,
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
use std::{ops::Deref, sync::Arc};
|
use std::ops::Deref;
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
use cashu::types::KeysetInfo as KeySetInfoSdk;
|
use cashu::types::KeysetInfo as KeySetInfoSdk;
|
||||||
|
|
||||||
|
|||||||
@@ -9,4 +9,4 @@ function main() {
|
|||||||
console.log(amount.toSat())
|
console.log(amount.toSat())
|
||||||
}
|
}
|
||||||
|
|
||||||
main();
|
main();
|
||||||
|
|||||||
@@ -2,4 +2,4 @@ build:
|
|||||||
wasm-pack build
|
wasm-pack build
|
||||||
|
|
||||||
pack:
|
pack:
|
||||||
npm run package
|
npm run package
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
cd $(dirname "$0")/..
|
cd "$(dirname "$0")"/..
|
||||||
|
|
||||||
WASM_BINDGEN_WEAKREF=1 wasm-pack build --target nodejs --scope rust-cashu --out-dir pkg "${WASM_PACK_ARGS[@]}"
|
WASM_BINDGEN_WEAKREF=1 wasm-pack build --target nodejs --scope rust-cashu --out-dir pkg "${WASM_PACK_ARGS[@]}"
|
||||||
|
|
||||||
@@ -32,4 +32,4 @@ echo "module.exports = \`$(base64 pkg/cashu_js_bg.wasm)\`;" > pkg/cashu_js_bg.wa
|
|||||||
mv pkg/cashu_js.js.new pkg/cashu_js.js
|
mv pkg/cashu_js.js.new pkg/cashu_js.js
|
||||||
|
|
||||||
# also extend the typescript
|
# also extend the typescript
|
||||||
cat scripts/epilogue.d.ts >> pkg/cashu_js.d.ts
|
cat scripts/epilogue.d.ts >> pkg/cashu_js.d.ts
|
||||||
|
|||||||
2
bindings/cashu-js/scripts/epilogue.d.ts
vendored
2
bindings/cashu-js/scripts/epilogue.d.ts
vendored
@@ -7,4 +7,4 @@
|
|||||||
*/
|
*/
|
||||||
export function loadWasmAsync(): Promise<void>;
|
export function loadWasmAsync(): Promise<void>;
|
||||||
|
|
||||||
export function loadWasmSync(): void;
|
export function loadWasmSync(): void;
|
||||||
|
|||||||
@@ -73,4 +73,4 @@ function unbase64(sBase64) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return taBytes;
|
return taBytes;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
use std::ops::Deref;
|
use std::ops::Deref;
|
||||||
|
|
||||||
use wasm_bindgen::prelude::*;
|
|
||||||
|
|
||||||
use cashu::nuts::nut00::wallet::BlindedMessages;
|
use cashu::nuts::nut00::wallet::BlindedMessages;
|
||||||
|
use wasm_bindgen::prelude::*;
|
||||||
|
|
||||||
use crate::error::{into_err, Result};
|
use crate::error::{into_err, Result};
|
||||||
use crate::types::JsAmount;
|
use crate::types::JsAmount;
|
||||||
|
|||||||
@@ -3,7 +3,9 @@ use std::ops::Deref;
|
|||||||
use cashu::nuts::nut00::BlindedSignature;
|
use cashu::nuts::nut00::BlindedSignature;
|
||||||
use wasm_bindgen::prelude::*;
|
use wasm_bindgen::prelude::*;
|
||||||
|
|
||||||
use crate::{nuts::nut01::JsPublicKey, nuts::nut02::JsId, types::JsAmount};
|
use crate::nuts::nut01::JsPublicKey;
|
||||||
|
use crate::nuts::nut02::JsId;
|
||||||
|
use crate::types::JsAmount;
|
||||||
|
|
||||||
#[wasm_bindgen(js_name = BlindedSignature)]
|
#[wasm_bindgen(js_name = BlindedSignature)]
|
||||||
pub struct JsBlindedSignature {
|
pub struct JsBlindedSignature {
|
||||||
|
|||||||
@@ -3,7 +3,9 @@ use std::ops::Deref;
|
|||||||
use cashu::nuts::nut00::Proof;
|
use cashu::nuts::nut00::Proof;
|
||||||
use wasm_bindgen::prelude::*;
|
use wasm_bindgen::prelude::*;
|
||||||
|
|
||||||
use crate::{nuts::nut01::JsPublicKey, nuts::nut02::JsId, types::JsAmount, types::JsSecret};
|
use crate::nuts::nut01::JsPublicKey;
|
||||||
|
use crate::nuts::nut02::JsId;
|
||||||
|
use crate::types::{JsAmount, JsSecret};
|
||||||
|
|
||||||
#[wasm_bindgen(js_name = Proof)]
|
#[wasm_bindgen(js_name = Proof)]
|
||||||
pub struct JsProof {
|
pub struct JsProof {
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
use std::{ops::Deref, str::FromStr};
|
use std::ops::Deref;
|
||||||
|
use std::str::FromStr;
|
||||||
|
|
||||||
use cashu::{nuts::nut00::wallet::Token, url::UncheckedUrl};
|
use cashu::nuts::nut00::wallet::Token;
|
||||||
|
use cashu::url::UncheckedUrl;
|
||||||
use wasm_bindgen::prelude::*;
|
use wasm_bindgen::prelude::*;
|
||||||
|
|
||||||
use crate::error::{into_err, Result};
|
use crate::error::{into_err, Result};
|
||||||
|
|||||||
@@ -3,12 +3,9 @@ use std::ops::Deref;
|
|||||||
use cashu::nuts::nut01::Keys;
|
use cashu::nuts::nut01::Keys;
|
||||||
use wasm_bindgen::prelude::*;
|
use wasm_bindgen::prelude::*;
|
||||||
|
|
||||||
use crate::{
|
|
||||||
error::{into_err, Result},
|
|
||||||
types::JsAmount,
|
|
||||||
};
|
|
||||||
|
|
||||||
use super::JsPublicKey;
|
use super::JsPublicKey;
|
||||||
|
use crate::error::{into_err, Result};
|
||||||
|
use crate::types::JsAmount;
|
||||||
|
|
||||||
#[wasm_bindgen(js_name = Keys)]
|
#[wasm_bindgen(js_name = Keys)]
|
||||||
pub struct JsKeys {
|
pub struct JsKeys {
|
||||||
|
|||||||
@@ -4,10 +4,8 @@ use cashu::nuts::nut01::Response as KeysResponse;
|
|||||||
use cashu::nuts::nut02::{Id, KeySet, Response as KeySetsResponse};
|
use cashu::nuts::nut02::{Id, KeySet, Response as KeySetsResponse};
|
||||||
use wasm_bindgen::prelude::*;
|
use wasm_bindgen::prelude::*;
|
||||||
|
|
||||||
use crate::{
|
use crate::error::{into_err, Result};
|
||||||
error::{into_err, Result},
|
use crate::nuts::nut01::JsKeys;
|
||||||
nuts::nut01::JsKeys,
|
|
||||||
};
|
|
||||||
|
|
||||||
#[wasm_bindgen(js_name = Id)]
|
#[wasm_bindgen(js_name = Id)]
|
||||||
pub struct JsId {
|
pub struct JsId {
|
||||||
|
|||||||
@@ -1,8 +1,5 @@
|
|||||||
mod keyset;
|
mod keyset;
|
||||||
mod mint_keyset;
|
mod mint_keyset;
|
||||||
|
|
||||||
pub use keyset::JsId;
|
pub use keyset::{JsId, JsKeySet, JsKeySetsResponse, JsKeysResponse};
|
||||||
pub use keyset::JsKeySet;
|
|
||||||
pub use keyset::JsKeySetsResponse;
|
|
||||||
pub use keyset::JsKeysResponse;
|
|
||||||
pub use mint_keyset::JsMintKeySet;
|
pub use mint_keyset::JsMintKeySet;
|
||||||
|
|||||||
@@ -3,10 +3,8 @@ use std::ops::Deref;
|
|||||||
use cashu::nuts::nut04::{MintRequest, PostMintResponse};
|
use cashu::nuts::nut04::{MintRequest, PostMintResponse};
|
||||||
use wasm_bindgen::prelude::*;
|
use wasm_bindgen::prelude::*;
|
||||||
|
|
||||||
use crate::{
|
use crate::error::{into_err, Result};
|
||||||
error::{into_err, Result},
|
use crate::types::JsAmount;
|
||||||
types::JsAmount,
|
|
||||||
};
|
|
||||||
|
|
||||||
#[wasm_bindgen(js_name = MintRequest)]
|
#[wasm_bindgen(js_name = MintRequest)]
|
||||||
pub struct JsMintRequest {
|
pub struct JsMintRequest {
|
||||||
|
|||||||
@@ -3,10 +3,8 @@ use std::ops::Deref;
|
|||||||
use cashu::nuts::nut05::{CheckFeesRequest, CheckFeesResponse};
|
use cashu::nuts::nut05::{CheckFeesRequest, CheckFeesResponse};
|
||||||
use wasm_bindgen::prelude::*;
|
use wasm_bindgen::prelude::*;
|
||||||
|
|
||||||
use crate::{
|
use crate::error::Result;
|
||||||
error::Result,
|
use crate::types::{JsAmount, JsBolt11Invoice};
|
||||||
types::{JsAmount, JsBolt11Invoice},
|
|
||||||
};
|
|
||||||
|
|
||||||
#[wasm_bindgen(js_name = CheckFeesRequest)]
|
#[wasm_bindgen(js_name = CheckFeesRequest)]
|
||||||
pub struct JsCheckFeesRequest {
|
pub struct JsCheckFeesRequest {
|
||||||
|
|||||||
@@ -3,10 +3,8 @@ use std::ops::Deref;
|
|||||||
use cashu::nuts::nut06::{SplitRequest, SplitResponse};
|
use cashu::nuts::nut06::{SplitRequest, SplitResponse};
|
||||||
use wasm_bindgen::prelude::*;
|
use wasm_bindgen::prelude::*;
|
||||||
|
|
||||||
use crate::{
|
use crate::error::{into_err, Result};
|
||||||
error::{into_err, Result},
|
use crate::types::JsAmount;
|
||||||
types::JsAmount,
|
|
||||||
};
|
|
||||||
|
|
||||||
#[wasm_bindgen(js_name = SplitRequest)]
|
#[wasm_bindgen(js_name = SplitRequest)]
|
||||||
pub struct JsSplitRequest {
|
pub struct JsSplitRequest {
|
||||||
|
|||||||
@@ -1,15 +1,11 @@
|
|||||||
use std::ops::Deref;
|
use std::ops::Deref;
|
||||||
|
|
||||||
use cashu::nuts::{
|
use cashu::nuts::nut00::{BlindedMessage, BlindedSignature, Proof};
|
||||||
nut00::{BlindedMessage, BlindedSignature, Proof},
|
use cashu::nuts::nut08::{MeltRequest, MeltResponse};
|
||||||
nut08::{MeltRequest, MeltResponse},
|
|
||||||
};
|
|
||||||
use wasm_bindgen::prelude::*;
|
use wasm_bindgen::prelude::*;
|
||||||
|
|
||||||
use crate::{
|
use crate::error::{into_err, Result};
|
||||||
error::{into_err, Result},
|
use crate::types::{JsAmount, JsBolt11Invoice};
|
||||||
types::{JsAmount, JsBolt11Invoice},
|
|
||||||
};
|
|
||||||
|
|
||||||
#[wasm_bindgen(js_name = MeltRequest)]
|
#[wasm_bindgen(js_name = MeltRequest)]
|
||||||
pub struct JsMeltRequest {
|
pub struct JsMeltRequest {
|
||||||
|
|||||||
@@ -3,9 +3,8 @@ use std::ops::Deref;
|
|||||||
use cashu::nuts::nut09::{MintInfo, MintVersion};
|
use cashu::nuts::nut09::{MintInfo, MintVersion};
|
||||||
use wasm_bindgen::prelude::*;
|
use wasm_bindgen::prelude::*;
|
||||||
|
|
||||||
use crate::error::{into_err, Result};
|
|
||||||
|
|
||||||
use super::nut01::JsPublicKey;
|
use super::nut01::JsPublicKey;
|
||||||
|
use crate::error::{into_err, Result};
|
||||||
|
|
||||||
#[wasm_bindgen(js_name = MintVersion)]
|
#[wasm_bindgen(js_name = MintVersion)]
|
||||||
pub struct JsMintVersion {
|
pub struct JsMintVersion {
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
use std::{ops::Deref, str::FromStr};
|
use std::ops::Deref;
|
||||||
|
use std::str::FromStr;
|
||||||
|
|
||||||
use cashu::Bolt11Invoice;
|
use cashu::Bolt11Invoice;
|
||||||
use wasm_bindgen::prelude::*;
|
use wasm_bindgen::prelude::*;
|
||||||
|
|||||||
@@ -352,4 +352,4 @@ interface Mint {
|
|||||||
void verify_melt_request(MeltRequest melt_request);
|
void verify_melt_request(MeltRequest melt_request);
|
||||||
[Throws=CashuSdkError]
|
[Throws=CashuSdkError]
|
||||||
MeltResponse process_melt_request(MeltRequest melt_request, string preimage, Amount totoal_spent);
|
MeltResponse process_melt_request(MeltRequest melt_request, string preimage, Amount totoal_spent);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
use std::{
|
use std::ops::Deref;
|
||||||
ops::Deref,
|
use std::sync::{Arc, RwLock};
|
||||||
sync::{Arc, RwLock},
|
|
||||||
};
|
|
||||||
|
|
||||||
use cashu_ffi::{
|
use cashu_ffi::{
|
||||||
Amount, CheckSpendableRequest, CheckSpendableResponse, Id, KeySet, KeySetInfo, KeySetResponse,
|
Amount, CheckSpendableRequest, CheckSpendableResponse, Id, KeySet, KeySetInfo, KeySetResponse,
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
use std::{ops::Deref, sync::Arc};
|
use std::ops::Deref;
|
||||||
|
use std::sync::Arc;
|
||||||
use cashu_sdk::types::Melted as MeltedSdk;
|
|
||||||
|
|
||||||
use cashu_ffi::Proof;
|
use cashu_ffi::Proof;
|
||||||
|
use cashu_sdk::types::Melted as MeltedSdk;
|
||||||
|
|
||||||
pub struct Melted {
|
pub struct Melted {
|
||||||
inner: MeltedSdk,
|
inner: MeltedSdk,
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
use std::{ops::Deref, sync::Arc};
|
use std::ops::Deref;
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
use cashu_sdk::types::ProofsStatus as ProofsStatusSdk;
|
use cashu_sdk::types::ProofsStatus as ProofsStatusSdk;
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
use std::{ops::Deref, sync::Arc};
|
use std::ops::Deref;
|
||||||
|
use std::sync::Arc;
|
||||||
use cashu_sdk::types::SendProofs as SendProofsSdk;
|
|
||||||
|
|
||||||
use cashu_ffi::Proof;
|
use cashu_ffi::Proof;
|
||||||
|
use cashu_sdk::types::SendProofs as SendProofsSdk;
|
||||||
|
|
||||||
pub struct SendProofs {
|
pub struct SendProofs {
|
||||||
inner: SendProofsSdk,
|
inner: SendProofsSdk,
|
||||||
|
|||||||
@@ -7,12 +7,10 @@ use cashu_ffi::{
|
|||||||
use cashu_sdk::types::ProofsStatus;
|
use cashu_sdk::types::ProofsStatus;
|
||||||
use cashu_sdk::wallet::Wallet as WalletSdk;
|
use cashu_sdk::wallet::Wallet as WalletSdk;
|
||||||
|
|
||||||
use crate::{
|
use crate::client::Client;
|
||||||
client::Client,
|
use crate::error::Result;
|
||||||
error::Result,
|
use crate::types::{Melted, SendProofs};
|
||||||
types::{Melted, SendProofs},
|
use crate::{Amount, Keys, MintProof};
|
||||||
Amount, Keys, MintProof,
|
|
||||||
};
|
|
||||||
|
|
||||||
pub struct Wallet {
|
pub struct Wallet {
|
||||||
inner: WalletSdk,
|
inner: WalletSdk,
|
||||||
|
|||||||
@@ -9,4 +9,4 @@ function main() {
|
|||||||
console.log(amount.toSat())
|
console.log(amount.toSat())
|
||||||
}
|
}
|
||||||
|
|
||||||
main();
|
main();
|
||||||
|
|||||||
@@ -16,4 +16,4 @@ async function main() {
|
|||||||
console.log(pr);
|
console.log(pr);
|
||||||
}
|
}
|
||||||
|
|
||||||
main();
|
main();
|
||||||
|
|||||||
@@ -2,4 +2,4 @@ build:
|
|||||||
wasm-pack build
|
wasm-pack build
|
||||||
|
|
||||||
pack:
|
pack:
|
||||||
npm run package
|
npm run package
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
cd $(dirname "$0")/..
|
cd "$(dirname "$0")"/..
|
||||||
|
|
||||||
WASM_BINDGEN_WEAKREF=1 wasm-pack build --target nodejs --scope rust-cashu --out-dir pkg "${WASM_PACK_ARGS[@]}"
|
WASM_BINDGEN_WEAKREF=1 wasm-pack build --target nodejs --scope rust-cashu --out-dir pkg "${WASM_PACK_ARGS[@]}"
|
||||||
|
|
||||||
@@ -32,4 +32,4 @@ echo "module.exports = \`$(base64 pkg/cashu_sdk_js_bg.wasm)\`;" > pkg/cashu_sdk_
|
|||||||
mv pkg/cashu_sdk_js.js.new pkg/cashu_sdk_js.js
|
mv pkg/cashu_sdk_js.js.new pkg/cashu_sdk_js.js
|
||||||
|
|
||||||
# also extend the typescript
|
# also extend the typescript
|
||||||
cat scripts/epilogue.d.ts >> pkg/cashu_sdk_js.d.ts
|
cat scripts/epilogue.d.ts >> pkg/cashu_sdk_js.d.ts
|
||||||
|
|||||||
2
bindings/cashu-sdk-js/scripts/epilogue.d.ts
vendored
2
bindings/cashu-sdk-js/scripts/epilogue.d.ts
vendored
@@ -7,4 +7,4 @@
|
|||||||
*/
|
*/
|
||||||
export function loadWasmAsync(): Promise<void>;
|
export function loadWasmAsync(): Promise<void>;
|
||||||
|
|
||||||
export function loadWasmSync(): void;
|
export function loadWasmSync(): void;
|
||||||
|
|||||||
@@ -73,4 +73,4 @@ function unbase64(sBase64) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return taBytes;
|
return taBytes;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,16 +1,14 @@
|
|||||||
use std::ops::Deref;
|
use std::ops::Deref;
|
||||||
|
|
||||||
use cashu_js::{
|
use cashu_js::nuts::nut02::{JsId, JsKeySet, JsKeySetsResponse, JsKeysResponse, JsMintKeySet};
|
||||||
nuts::{
|
use cashu_js::nuts::nut04::{JsMintRequest, JsPostMintResponse};
|
||||||
nut02::{JsId, JsKeySet, JsKeySetsResponse, JsKeysResponse, JsMintKeySet},
|
use cashu_js::nuts::nut06::{JsSplitRequest, JsSplitResponse};
|
||||||
nut04::{JsMintRequest, JsPostMintResponse},
|
use cashu_js::nuts::nut07::{JsCheckSpendableRequest, JsCheckSpendableResponse};
|
||||||
nut06::{JsSplitRequest, JsSplitResponse},
|
use cashu_js::nuts::nut08::{JsMeltRequest, JsMeltResponse};
|
||||||
nut07::{JsCheckSpendableRequest, JsCheckSpendableResponse},
|
use cashu_js::JsAmount;
|
||||||
nut08::{JsMeltRequest, JsMeltResponse},
|
use cashu_sdk::mint::Mint;
|
||||||
},
|
use cashu_sdk::nuts::nut01;
|
||||||
JsAmount,
|
use cashu_sdk::nuts::nut02::KeySet;
|
||||||
};
|
|
||||||
use cashu_sdk::{mint::Mint, nuts::nut01, nuts::nut02::KeySet};
|
|
||||||
use wasm_bindgen::prelude::*;
|
use wasm_bindgen::prelude::*;
|
||||||
|
|
||||||
use crate::error::{into_err, Result};
|
use crate::error::{into_err, Result};
|
||||||
|
|||||||
@@ -1,17 +1,15 @@
|
|||||||
use std::ops::Deref;
|
use std::ops::Deref;
|
||||||
|
|
||||||
use cashu_js::nuts::nut00::{JsBlindedMessages, JsToken};
|
use cashu_js::nuts::nut00::{JsBlindedMessages, JsToken};
|
||||||
|
use cashu_js::nuts::nut01::JsKeys;
|
||||||
use cashu_js::nuts::nut03::JsRequestMintResponse;
|
use cashu_js::nuts::nut03::JsRequestMintResponse;
|
||||||
use cashu_js::{nuts::nut01::JsKeys, JsAmount};
|
use cashu_js::{JsAmount, JsBolt11Invoice, JsProofsStatus};
|
||||||
use cashu_js::{JsBolt11Invoice, JsProofsStatus};
|
|
||||||
use cashu_sdk::wallet::Wallet;
|
use cashu_sdk::wallet::Wallet;
|
||||||
use wasm_bindgen::prelude::*;
|
use wasm_bindgen::prelude::*;
|
||||||
|
|
||||||
|
use crate::error::{into_err, Result};
|
||||||
use crate::types::{JsMelted, JsSendProofs};
|
use crate::types::{JsMelted, JsSendProofs};
|
||||||
use crate::{
|
use crate::JsClient;
|
||||||
error::{into_err, Result},
|
|
||||||
JsClient,
|
|
||||||
};
|
|
||||||
|
|
||||||
#[wasm_bindgen(js_name = Wallet)]
|
#[wasm_bindgen(js_name = Wallet)]
|
||||||
pub struct JsWallet {
|
pub struct JsWallet {
|
||||||
|
|||||||
@@ -9,4 +9,4 @@ rust-version.workspace = true
|
|||||||
uniffi = { workspace = true, features = ["cli"] }
|
uniffi = { workspace = true, features = ["cli"] }
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
uniffi = { workspace = true, features = ["build"] }
|
uniffi = { workspace = true, features = ["build"] }
|
||||||
|
|||||||
@@ -1,22 +1,18 @@
|
|||||||
use crate::RUNTIME;
|
use cashu::nuts::nut00::wallet::BlindedMessages;
|
||||||
|
use cashu::nuts::nut00::{self, BlindedMessage, Proof};
|
||||||
use cashu::{
|
use cashu::nuts::nut01::Keys;
|
||||||
nuts::{
|
use cashu::nuts::nut02;
|
||||||
nut00::{self, wallet::BlindedMessages, BlindedMessage, Proof},
|
use cashu::nuts::nut03::RequestMintResponse;
|
||||||
nut01::Keys,
|
use cashu::nuts::nut04::PostMintResponse;
|
||||||
nut02,
|
use cashu::nuts::nut05::CheckFeesResponse;
|
||||||
nut03::RequestMintResponse,
|
use cashu::nuts::nut06::{SplitRequest, SplitResponse};
|
||||||
nut04::PostMintResponse,
|
use cashu::nuts::nut07::CheckSpendableResponse;
|
||||||
nut05::CheckFeesResponse,
|
use cashu::nuts::nut08::MeltResponse;
|
||||||
nut06::{SplitRequest, SplitResponse},
|
use cashu::nuts::nut09::MintInfo;
|
||||||
nut07::CheckSpendableResponse,
|
use cashu::{Amount, Bolt11Invoice};
|
||||||
nut08::MeltResponse,
|
|
||||||
nut09::MintInfo,
|
|
||||||
},
|
|
||||||
Amount, Bolt11Invoice,
|
|
||||||
};
|
|
||||||
|
|
||||||
use super::Error;
|
use super::Error;
|
||||||
|
use crate::RUNTIME;
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub struct Client {
|
pub struct Client {
|
||||||
|
|||||||
@@ -2,12 +2,8 @@
|
|||||||
use std::fmt;
|
use std::fmt;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
|
|
||||||
use cashu::url::UncheckedUrl;
|
use cashu::nuts::nut00::wallet::BlindedMessages;
|
||||||
use serde::{Deserialize, Serialize};
|
use cashu::nuts::nut00::{BlindedMessage, Proof};
|
||||||
use serde_json::Value;
|
|
||||||
use url::Url;
|
|
||||||
|
|
||||||
use cashu::nuts::nut00::{wallet::BlindedMessages, BlindedMessage, Proof};
|
|
||||||
use cashu::nuts::nut01::Keys;
|
use cashu::nuts::nut01::Keys;
|
||||||
use cashu::nuts::nut03::RequestMintResponse;
|
use cashu::nuts::nut03::RequestMintResponse;
|
||||||
use cashu::nuts::nut04::{MintRequest, PostMintResponse};
|
use cashu::nuts::nut04::{MintRequest, PostMintResponse};
|
||||||
@@ -17,11 +13,13 @@ use cashu::nuts::nut07::{CheckSpendableRequest, CheckSpendableResponse};
|
|||||||
use cashu::nuts::nut08::{MeltRequest, MeltResponse};
|
use cashu::nuts::nut08::{MeltRequest, MeltResponse};
|
||||||
use cashu::nuts::nut09::MintInfo;
|
use cashu::nuts::nut09::MintInfo;
|
||||||
use cashu::nuts::*;
|
use cashu::nuts::*;
|
||||||
use cashu::utils;
|
use cashu::url::UncheckedUrl;
|
||||||
use cashu::Amount;
|
use cashu::{utils, Amount};
|
||||||
|
|
||||||
#[cfg(target_arch = "wasm32")]
|
#[cfg(target_arch = "wasm32")]
|
||||||
use gloo::net::http::Request;
|
use gloo::net::http::Request;
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
use serde_json::Value;
|
||||||
|
use url::Url;
|
||||||
|
|
||||||
#[cfg(feature = "blocking")]
|
#[cfg(feature = "blocking")]
|
||||||
pub mod blocking;
|
pub mod blocking;
|
||||||
|
|||||||
@@ -1,15 +1,13 @@
|
|||||||
#[cfg(all(target_arch = "wasm32", feature = "blocking"))]
|
#[cfg(all(target_arch = "wasm32", feature = "blocking"))]
|
||||||
compile_error!("`blocking` feature can't be enabled for WASM targets");
|
compile_error!("`blocking` feature can't be enabled for WASM targets");
|
||||||
|
|
||||||
|
#[cfg(feature = "blocking")]
|
||||||
|
use futures_util::Future;
|
||||||
#[cfg(feature = "blocking")]
|
#[cfg(feature = "blocking")]
|
||||||
use once_cell::sync::Lazy;
|
use once_cell::sync::Lazy;
|
||||||
|
|
||||||
#[cfg(feature = "blocking")]
|
#[cfg(feature = "blocking")]
|
||||||
use tokio::runtime::Runtime;
|
use tokio::runtime::Runtime;
|
||||||
|
|
||||||
#[cfg(feature = "blocking")]
|
|
||||||
use futures_util::Future;
|
|
||||||
|
|
||||||
#[cfg(feature = "wallet")]
|
#[cfg(feature = "wallet")]
|
||||||
pub mod client;
|
pub mod client;
|
||||||
|
|
||||||
|
|||||||
@@ -1,20 +1,13 @@
|
|||||||
use std::collections::{HashMap, HashSet};
|
use std::collections::{HashMap, HashSet};
|
||||||
|
|
||||||
|
use cashu::dhke::{sign_message, verify_message};
|
||||||
pub use cashu::error::mint::Error;
|
pub use cashu::error::mint::Error;
|
||||||
|
use cashu::nuts::nut00::{BlindedMessage, BlindedSignature, Proof};
|
||||||
use cashu::dhke::sign_message;
|
|
||||||
use cashu::dhke::verify_message;
|
|
||||||
use cashu::nuts::nut00::BlindedMessage;
|
|
||||||
use cashu::nuts::nut00::BlindedSignature;
|
|
||||||
use cashu::nuts::nut00::Proof;
|
|
||||||
use cashu::nuts::nut02::mint::KeySet;
|
use cashu::nuts::nut02::mint::KeySet;
|
||||||
use cashu::nuts::nut02::Id;
|
use cashu::nuts::nut02::Id;
|
||||||
use cashu::nuts::nut06::SplitRequest;
|
use cashu::nuts::nut06::{SplitRequest, SplitResponse};
|
||||||
use cashu::nuts::nut06::SplitResponse;
|
use cashu::nuts::nut07::{CheckSpendableRequest, CheckSpendableResponse};
|
||||||
use cashu::nuts::nut07::CheckSpendableRequest;
|
use cashu::nuts::nut08::{MeltRequest, MeltResponse};
|
||||||
use cashu::nuts::nut07::CheckSpendableResponse;
|
|
||||||
use cashu::nuts::nut08::MeltRequest;
|
|
||||||
use cashu::nuts::nut08::MeltResponse;
|
|
||||||
use cashu::nuts::*;
|
use cashu::nuts::*;
|
||||||
use cashu::secret::Secret;
|
use cashu::secret::Secret;
|
||||||
use cashu::types::KeysetInfo;
|
use cashu::types::KeysetInfo;
|
||||||
|
|||||||
@@ -3,11 +3,9 @@ use std::error::Error as StdError;
|
|||||||
use std::fmt;
|
use std::fmt;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
|
|
||||||
use cashu::dhke::construct_proofs;
|
use cashu::dhke::{construct_proofs, unblind_message};
|
||||||
use cashu::dhke::unblind_message;
|
use cashu::nuts::nut00::wallet::{BlindedMessages, Token};
|
||||||
use cashu::nuts::nut00::{
|
use cashu::nuts::nut00::{mint, BlindedSignature, Proof, Proofs};
|
||||||
mint, wallet::BlindedMessages, wallet::Token, BlindedSignature, Proof, Proofs,
|
|
||||||
};
|
|
||||||
use cashu::nuts::nut01::Keys;
|
use cashu::nuts::nut01::Keys;
|
||||||
use cashu::nuts::nut03::RequestMintResponse;
|
use cashu::nuts::nut03::RequestMintResponse;
|
||||||
use cashu::nuts::nut06::{SplitPayload, SplitRequest};
|
use cashu::nuts::nut06::{SplitPayload, SplitRequest};
|
||||||
@@ -18,7 +16,6 @@ use tracing::warn;
|
|||||||
|
|
||||||
#[cfg(feature = "blocking")]
|
#[cfg(feature = "blocking")]
|
||||||
use crate::client::blocking::Client;
|
use crate::client::blocking::Client;
|
||||||
|
|
||||||
#[cfg(not(feature = "blocking"))]
|
#[cfg(not(feature = "blocking"))]
|
||||||
use crate::client::Client;
|
use crate::client::Client;
|
||||||
|
|
||||||
|
|||||||
@@ -2,25 +2,19 @@
|
|||||||
|
|
||||||
use std::ops::Mul;
|
use std::ops::Mul;
|
||||||
|
|
||||||
use bitcoin::hashes::sha256;
|
use bitcoin::hashes::{sha256, Hash};
|
||||||
use bitcoin::hashes::Hash;
|
|
||||||
|
|
||||||
#[cfg(feature = "wallet")]
|
#[cfg(feature = "wallet")]
|
||||||
use k256::ProjectivePoint;
|
use k256::ProjectivePoint;
|
||||||
|
|
||||||
use k256::{Scalar, SecretKey};
|
use k256::{Scalar, SecretKey};
|
||||||
|
|
||||||
use crate::error;
|
use crate::error;
|
||||||
use crate::secret::Secret;
|
|
||||||
|
|
||||||
#[cfg(feature = "wallet")]
|
#[cfg(feature = "wallet")]
|
||||||
use crate::nuts::nut00::{BlindedSignature, Proof, Proofs};
|
use crate::nuts::nut00::{BlindedSignature, Proof, Proofs};
|
||||||
|
|
||||||
#[cfg(feature = "wallet")]
|
#[cfg(feature = "wallet")]
|
||||||
use crate::nuts::nut01::{Keys, PublicKey};
|
use crate::nuts::nut01::{Keys, PublicKey};
|
||||||
|
|
||||||
#[cfg(feature = "wallet")]
|
#[cfg(feature = "wallet")]
|
||||||
use crate::nuts::*;
|
use crate::nuts::*;
|
||||||
|
use crate::secret::Secret;
|
||||||
|
|
||||||
fn hash_to_curve(message: &[u8]) -> k256::PublicKey {
|
fn hash_to_curve(message: &[u8]) -> k256::PublicKey {
|
||||||
let mut msg_to_hash = message.to_vec();
|
let mut msg_to_hash = message.to_vec();
|
||||||
@@ -145,7 +139,6 @@ pub fn verify_message(
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use hex::decode;
|
use hex::decode;
|
||||||
|
|
||||||
use k256::elliptic_curve::scalar::ScalarPrimitive;
|
use k256::elliptic_curve::scalar::ScalarPrimitive;
|
||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|||||||
@@ -1,11 +1,13 @@
|
|||||||
//! Notation and Models
|
//! Notation and Models
|
||||||
// https://github.com/cashubtc/nuts/blob/main/00.md
|
// https://github.com/cashubtc/nuts/blob/main/00.md
|
||||||
|
|
||||||
use crate::{secret::Secret, url::UncheckedUrl, Amount};
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use super::nut01::PublicKey;
|
use super::nut01::PublicKey;
|
||||||
use super::nut02::Id;
|
use super::nut02::Id;
|
||||||
|
use crate::secret::Secret;
|
||||||
|
use crate::url::UncheckedUrl;
|
||||||
|
use crate::Amount;
|
||||||
|
|
||||||
/// Blinded Message [NUT-00]
|
/// Blinded Message [NUT-00]
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||||
@@ -21,21 +23,20 @@ pub struct BlindedMessage {
|
|||||||
pub mod wallet {
|
pub mod wallet {
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
|
|
||||||
use base64::{engine::general_purpose, Engine as _};
|
use base64::engine::general_purpose;
|
||||||
|
use base64::Engine as _;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use url::Url;
|
use url::Url;
|
||||||
|
|
||||||
use crate::error;
|
use super::MintProofs;
|
||||||
|
use crate::dhke::blind_message;
|
||||||
use crate::error::wallet;
|
use crate::error::wallet;
|
||||||
use crate::nuts::nut00::BlindedMessage;
|
use crate::nuts::nut00::{BlindedMessage, Proofs};
|
||||||
use crate::nuts::nut00::Proofs;
|
|
||||||
use crate::nuts::nut01;
|
use crate::nuts::nut01;
|
||||||
use crate::secret::Secret;
|
use crate::secret::Secret;
|
||||||
use crate::url::UncheckedUrl;
|
use crate::url::UncheckedUrl;
|
||||||
use crate::Amount;
|
use crate::utils::split_amount;
|
||||||
use crate::{dhke::blind_message, utils::split_amount};
|
use crate::{error, Amount};
|
||||||
|
|
||||||
use super::MintProofs;
|
|
||||||
|
|
||||||
/// Blinded Messages [NUT-00]
|
/// Blinded Messages [NUT-00]
|
||||||
#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize)]
|
#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize)]
|
||||||
@@ -221,9 +222,10 @@ impl From<Proof> for mint::Proof {
|
|||||||
pub mod mint {
|
pub mod mint {
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::{nuts::nut02::Id, secret::Secret, Amount};
|
|
||||||
|
|
||||||
use super::PublicKey;
|
use super::PublicKey;
|
||||||
|
use crate::nuts::nut02::Id;
|
||||||
|
use crate::secret::Secret;
|
||||||
|
use crate::Amount;
|
||||||
|
|
||||||
/// Proofs [NUT-00]
|
/// Proofs [NUT-00]
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||||
@@ -273,9 +275,7 @@ mod tests {
|
|||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
token.token[0].mint,
|
token.token[0].mint,
|
||||||
UncheckedUrl::from_str("https://8333.space:3338")
|
UncheckedUrl::from_str("https://8333.space:3338").unwrap()
|
||||||
.unwrap()
|
|
||||||
.into()
|
|
||||||
);
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
token.token[0].proofs[0].clone().id.unwrap(),
|
token.token[0].proofs[0].clone().id.unwrap(),
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
//! Mint public key exchange
|
//! Mint public key exchange
|
||||||
// https://github.com/cashubtc/nuts/blob/main/01.md
|
// https://github.com/cashubtc/nuts/blob/main/01.md
|
||||||
|
|
||||||
use std::collections::BTreeMap;
|
use std::collections::{BTreeMap, HashMap};
|
||||||
use std::collections::HashMap;
|
|
||||||
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
@@ -156,7 +155,8 @@ impl<'de> serde::de::Deserialize<'de> for Response {
|
|||||||
|
|
||||||
keys.insert(amount, pubkey);
|
keys.insert(amount, pubkey);
|
||||||
}
|
}
|
||||||
// TODO: Should return an error if an amount or key is invalid and not continue
|
// TODO: Should return an error if an amount or key is
|
||||||
|
// invalid and not continue
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(Response { keys: Keys(keys) })
|
Ok(Response { keys: Keys(keys) })
|
||||||
@@ -172,11 +172,9 @@ pub mod mint {
|
|||||||
|
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
|
use super::{PublicKey, SecretKey};
|
||||||
use crate::Amount;
|
use crate::Amount;
|
||||||
|
|
||||||
use super::PublicKey;
|
|
||||||
use super::SecretKey;
|
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
|
||||||
pub struct Keys(pub BTreeMap<Amount, KeyPair>);
|
pub struct Keys(pub BTreeMap<Amount, KeyPair>);
|
||||||
|
|
||||||
|
|||||||
@@ -4,9 +4,9 @@
|
|||||||
use std::collections::HashSet;
|
use std::collections::HashSet;
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
|
|
||||||
use base64::{engine::general_purpose, Engine as _};
|
use base64::engine::general_purpose;
|
||||||
use bitcoin::hashes::sha256;
|
use base64::Engine as _;
|
||||||
use bitcoin::hashes::Hash;
|
use bitcoin::hashes::{sha256, Hash};
|
||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
@@ -41,10 +41,8 @@ impl Id {
|
|||||||
const STRLEN: usize = 12;
|
const STRLEN: usize = 12;
|
||||||
|
|
||||||
pub fn try_from_base64(b64: &str) -> Result<Self, Error> {
|
pub fn try_from_base64(b64: &str) -> Result<Self, Error> {
|
||||||
use base64::{
|
use base64::engine::general_purpose::{STANDARD, URL_SAFE};
|
||||||
engine::general_purpose::{STANDARD, URL_SAFE},
|
use base64::Engine as _;
|
||||||
Engine as _,
|
|
||||||
};
|
|
||||||
|
|
||||||
if b64.len() != Self::STRLEN {
|
if b64.len() != Self::STRLEN {
|
||||||
return Err(Error::Length);
|
return Err(Error::Length);
|
||||||
@@ -174,14 +172,12 @@ pub mod mint {
|
|||||||
use std::collections::BTreeMap;
|
use std::collections::BTreeMap;
|
||||||
|
|
||||||
use bitcoin::hashes::sha256::Hash as Sha256;
|
use bitcoin::hashes::sha256::Hash as Sha256;
|
||||||
use bitcoin::hashes::Hash;
|
use bitcoin::hashes::{Hash, HashEngine};
|
||||||
use bitcoin::hashes::HashEngine;
|
|
||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
use k256::SecretKey;
|
use k256::SecretKey;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use super::Id;
|
use super::Id;
|
||||||
|
|
||||||
use crate::nuts::nut01::mint::{KeyPair, Keys};
|
use crate::nuts::nut01::mint::{KeyPair, Keys};
|
||||||
use crate::Amount;
|
use crate::Amount;
|
||||||
|
|
||||||
@@ -268,9 +264,8 @@ pub mod mint {
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test {
|
mod test {
|
||||||
|
|
||||||
use crate::nuts::nut02::Id;
|
|
||||||
|
|
||||||
use super::Keys;
|
use super::Keys;
|
||||||
|
use crate::nuts::nut02::Id;
|
||||||
|
|
||||||
const SHORT_KEYSET_ID: &str = "esom3oyNLLit";
|
const SHORT_KEYSET_ID: &str = "esom3oyNLLit";
|
||||||
const SHORT_KEYSET: &str = r#"
|
const SHORT_KEYSET: &str = r#"
|
||||||
|
|||||||
@@ -5,8 +5,7 @@ use serde::{Deserialize, Serialize};
|
|||||||
|
|
||||||
use super::nut00::Proofs;
|
use super::nut00::Proofs;
|
||||||
use crate::error::Error;
|
use crate::error::Error;
|
||||||
use crate::Amount;
|
use crate::{Amount, Bolt11Invoice};
|
||||||
use crate::Bolt11Invoice;
|
|
||||||
|
|
||||||
/// Check Fees Response [NUT-05]
|
/// Check Fees Response [NUT-05]
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||||
|
|||||||
@@ -2,13 +2,11 @@
|
|||||||
// https://github.com/cashubtc/nuts/blob/main/06.md
|
// https://github.com/cashubtc/nuts/blob/main/06.md
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::nuts::nut00::{BlindedMessage, Proofs};
|
use super::nut00::BlindedSignature;
|
||||||
use crate::Amount;
|
|
||||||
|
|
||||||
#[cfg(feature = "wallet")]
|
#[cfg(feature = "wallet")]
|
||||||
use crate::nuts::nut00::wallet::BlindedMessages;
|
use crate::nuts::nut00::wallet::BlindedMessages;
|
||||||
|
use crate::nuts::nut00::{BlindedMessage, Proofs};
|
||||||
use super::nut00::BlindedSignature;
|
use crate::Amount;
|
||||||
|
|
||||||
#[cfg(feature = "wallet")]
|
#[cfg(feature = "wallet")]
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
|
||||||
|
|||||||
@@ -4,9 +4,9 @@
|
|||||||
use lightning_invoice::Bolt11Invoice;
|
use lightning_invoice::Bolt11Invoice;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::{error::Error, Amount};
|
|
||||||
|
|
||||||
use super::nut00::{BlindedMessage, BlindedSignature, Proofs};
|
use super::nut00::{BlindedMessage, BlindedSignature, Proofs};
|
||||||
|
use crate::error::Error;
|
||||||
|
use crate::Amount;
|
||||||
|
|
||||||
/// Melt Request [NUT-08]
|
/// Melt Request [NUT-08]
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||||
|
|||||||
@@ -26,7 +26,8 @@ impl Secret {
|
|||||||
const BIT_LENGTH: usize = 128;
|
const BIT_LENGTH: usize = 128;
|
||||||
/// Create secret value
|
/// Create secret value
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
use base64::{engine::general_purpose::URL_SAFE, Engine as _};
|
use base64::engine::general_purpose::URL_SAFE;
|
||||||
|
use base64::Engine as _;
|
||||||
use rand::RngCore;
|
use rand::RngCore;
|
||||||
|
|
||||||
let mut rng = rand::thread_rng();
|
let mut rng = rand::thread_rng();
|
||||||
|
|||||||
@@ -21,7 +21,8 @@ pub mod serde_url {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub mod bytes_base64 {
|
pub mod bytes_base64 {
|
||||||
use base64::{engine::general_purpose, Engine as _};
|
use base64::engine::general_purpose;
|
||||||
|
use base64::Engine as _;
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
|
|
||||||
pub fn serialize<S>(my_bytes: &Vec<u8>, serializer: S) -> Result<S::Ok, S::Error>
|
pub fn serialize<S>(my_bytes: &Vec<u8>, serializer: S) -> Result<S::Ok, S::Error>
|
||||||
|
|||||||
@@ -2,10 +2,8 @@
|
|||||||
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::nuts::{
|
use crate::nuts::nut00::{mint, Proofs};
|
||||||
nut00::{mint, Proofs},
|
use crate::nuts::nut02::Id;
|
||||||
nut02::Id,
|
|
||||||
};
|
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||||
pub struct ProofsStatus {
|
pub struct ProofsStatus {
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
use core::fmt;
|
use core::fmt;
|
||||||
use core::str::FromStr;
|
use core::str::FromStr;
|
||||||
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use url::{ParseError, Url};
|
use url::{ParseError, Url};
|
||||||
|
|
||||||
@@ -115,6 +116,7 @@ mod tests {
|
|||||||
|
|
||||||
assert_eq!(relay, unchecked_relay_url.to_string());
|
assert_eq!(relay, unchecked_relay_url.to_string());
|
||||||
|
|
||||||
// assert_eq!(relay, serde_json::to_string(&unchecked_relay_url).unwrap())
|
// assert_eq!(relay,
|
||||||
|
// serde_json::to_string(&unchecked_relay_url).unwrap())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,9 +48,9 @@ mod tests {
|
|||||||
split_amount(Amount::from_sat(3)),
|
split_amount(Amount::from_sat(3)),
|
||||||
vec![Amount::from_sat(1), Amount::from_sat(2)]
|
vec![Amount::from_sat(1), Amount::from_sat(2)]
|
||||||
);
|
);
|
||||||
let amounts: Vec<Amount> = vec![1, 2, 8].iter().map(|a| Amount::from_sat(*a)).collect();
|
let amounts: Vec<Amount> = [1, 2, 8].iter().map(|a| Amount::from_sat(*a)).collect();
|
||||||
assert_eq!(split_amount(Amount::from_sat(11)), amounts);
|
assert_eq!(split_amount(Amount::from_sat(11)), amounts);
|
||||||
let amounts: Vec<Amount> = vec![1, 2, 4, 8, 16, 32, 64, 128]
|
let amounts: Vec<Amount> = [1, 2, 4, 8, 16, 32, 64, 128]
|
||||||
.iter()
|
.iter()
|
||||||
.map(|a| Amount::from_sat(*a))
|
.map(|a| Amount::from_sat(*a))
|
||||||
.collect();
|
.collect();
|
||||||
|
|||||||
375
flake.lock
generated
Normal file
375
flake.lock
generated
Normal file
@@ -0,0 +1,375 @@
|
|||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"android-nixpkgs": {
|
||||||
|
"inputs": {
|
||||||
|
"devshell": "devshell",
|
||||||
|
"flake-utils": "flake-utils_2",
|
||||||
|
"nixpkgs": [
|
||||||
|
"flakebox",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1695500413,
|
||||||
|
"narHash": "sha256-yinrAWIc4XZbWQoXOYkUO0lCNQ5z/vMyl+QCYuIwdPc=",
|
||||||
|
"owner": "dpc",
|
||||||
|
"repo": "android-nixpkgs",
|
||||||
|
"rev": "2e42268a196375ce9b010a10ec5250d2f91a09b4",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "dpc",
|
||||||
|
"repo": "android-nixpkgs",
|
||||||
|
"rev": "2e42268a196375ce9b010a10ec5250d2f91a09b4",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"crane": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-compat": "flake-compat",
|
||||||
|
"flake-utils": "flake-utils_3",
|
||||||
|
"nixpkgs": [
|
||||||
|
"flakebox",
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"rust-overlay": "rust-overlay"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1697596235,
|
||||||
|
"narHash": "sha256-4VTrrTdoA1u1wyf15krZCFl3c29YLesSNioYEgfb2FY=",
|
||||||
|
"owner": "dpc",
|
||||||
|
"repo": "crane",
|
||||||
|
"rev": "c97a0c0d83bfdf01c29113c5592a3defc27cb315",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "dpc",
|
||||||
|
"repo": "crane",
|
||||||
|
"rev": "c97a0c0d83bfdf01c29113c5592a3defc27cb315",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"devshell": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"flakebox",
|
||||||
|
"android-nixpkgs",
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"systems": "systems_2"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1695195896,
|
||||||
|
"narHash": "sha256-pq9q7YsGXnQzJFkR5284TmxrLNFc0wo4NQ/a5E93CQU=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "devshell",
|
||||||
|
"rev": "05d40d17bf3459606316e3e9ec683b784ff28f16",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "devshell",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fenix": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"flakebox",
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"rust-analyzer-src": "rust-analyzer-src"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1696918968,
|
||||||
|
"narHash": "sha256-18rAHsM9YsGp7aKKemO4gKIeWfrSyDsdJZ/mk4dQ3JI=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "fenix",
|
||||||
|
"rev": "638fc95a2a3d01b372c76f71cbb6d73c63909d6e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "fenix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-compat": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1673956053,
|
||||||
|
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
|
||||||
|
"owner": "edolstra",
|
||||||
|
"repo": "flake-compat",
|
||||||
|
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "edolstra",
|
||||||
|
"repo": "flake-compat",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-utils": {
|
||||||
|
"inputs": {
|
||||||
|
"systems": "systems"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1694529238,
|
||||||
|
"narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "ff7b65b44d01cf9ba6a71320833626af21126384",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-utils_2": {
|
||||||
|
"inputs": {
|
||||||
|
"systems": "systems_3"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1694529238,
|
||||||
|
"narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "ff7b65b44d01cf9ba6a71320833626af21126384",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-utils_3": {
|
||||||
|
"inputs": {
|
||||||
|
"systems": "systems_4"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1694529238,
|
||||||
|
"narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "ff7b65b44d01cf9ba6a71320833626af21126384",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-utils_4": {
|
||||||
|
"inputs": {
|
||||||
|
"systems": [
|
||||||
|
"flakebox",
|
||||||
|
"systems"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1694529238,
|
||||||
|
"narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "ff7b65b44d01cf9ba6a71320833626af21126384",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flakebox": {
|
||||||
|
"inputs": {
|
||||||
|
"android-nixpkgs": "android-nixpkgs",
|
||||||
|
"crane": "crane",
|
||||||
|
"fenix": "fenix",
|
||||||
|
"flake-utils": "flake-utils_4",
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"nixpkgs-unstable": "nixpkgs-unstable",
|
||||||
|
"systems": "systems_5"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1697876216,
|
||||||
|
"narHash": "sha256-Sxf43+wj7bW11yNMstEzn6mbI/Pk9fMSYWFF+swQV5s=",
|
||||||
|
"owner": "rustshop",
|
||||||
|
"repo": "flakebox",
|
||||||
|
"rev": "be3482250c7e7427e86aa8c2523df2cbc478ae5f",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "rustshop",
|
||||||
|
"repo": "flakebox",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1697777081,
|
||||||
|
"narHash": "sha256-n2vQARhKevRGyeo+LAa8g+CdUQsdH/caNk8jnylcPhY=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "679cadfdfed2b90311a247b2d6ef6dfd3d6cab73",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-23.05",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs-unstable": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1697456312,
|
||||||
|
"narHash": "sha256-roiSnrqb5r+ehnKCauPLugoU8S36KgmWraHgRqVYndo=",
|
||||||
|
"owner": "nixos",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "ca012a02bf8327be9e488546faecae5e05d7d749",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nixos",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-utils": "flake-utils",
|
||||||
|
"flakebox": "flakebox",
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"rust-analyzer-src": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1696840854,
|
||||||
|
"narHash": "sha256-wphOvjDSDsUN5DMe3MOhdargANIab7YE3hkh3Qv7qso=",
|
||||||
|
"owner": "rust-lang",
|
||||||
|
"repo": "rust-analyzer",
|
||||||
|
"rev": "aaa1e8e1b82d742b876d164a30dda02f318ce809",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "rust-lang",
|
||||||
|
"ref": "nightly",
|
||||||
|
"repo": "rust-analyzer",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"rust-overlay": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-utils": [
|
||||||
|
"flakebox",
|
||||||
|
"crane",
|
||||||
|
"flake-utils"
|
||||||
|
],
|
||||||
|
"nixpkgs": [
|
||||||
|
"flakebox",
|
||||||
|
"crane",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1695003086,
|
||||||
|
"narHash": "sha256-d1/ZKuBRpxifmUf7FaedCqhy0lyVbqj44Oc2s+P5bdA=",
|
||||||
|
"owner": "oxalica",
|
||||||
|
"repo": "rust-overlay",
|
||||||
|
"rev": "b87a14abea512d956f0b89d0d8a1e9b41f3e20ff",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "oxalica",
|
||||||
|
"repo": "rust-overlay",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"systems": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681028828,
|
||||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"systems_2": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681028828,
|
||||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"systems_3": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681028828,
|
||||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"systems_4": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681028828,
|
||||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"systems_5": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681028828,
|
||||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
||||||
25
flake.nix
Normal file
25
flake.nix
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
description = "A very basic flake";
|
||||||
|
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-23.05";
|
||||||
|
|
||||||
|
flakebox = {
|
||||||
|
url = "github:rustshop/flakebox";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
|
flake-utils.url = "github:numtide/flake-utils";
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs = { self, nixpkgs, flakebox, flake-utils }:
|
||||||
|
flake-utils.lib.eachDefaultSystem (system:
|
||||||
|
let
|
||||||
|
flakeboxLib = flakebox.lib.${system} { };
|
||||||
|
in
|
||||||
|
{
|
||||||
|
devShells = flakeboxLib.mkShells {
|
||||||
|
packages = [ ];
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
107
justfile
107
justfile
@@ -1,20 +1,87 @@
|
|||||||
precommit:
|
# THIS FILE IS AUTOGENERATED FROM FLAKEBOX CONFIGURATION
|
||||||
rustup default stable
|
|
||||||
cargo fmt
|
alias b := build
|
||||||
cargo check -p cashu
|
alias c := check
|
||||||
cargo check -p cashu-sdk --no-default-features --features mint
|
alias t := test
|
||||||
cargo check -p cashu-sdk --no-default-features --features wallet
|
|
||||||
cargo check -p cashu-sdk --no-default-features --features blocking
|
|
||||||
typos
|
[private]
|
||||||
cargo test -p cashu
|
default:
|
||||||
cargo test -p cashu-sdk
|
@just --list
|
||||||
cargo clippy --target wasm32-unknown-unknown -p cashu
|
|
||||||
cargo clippy --target wasm32-unknown-unknown -p cashu-sdk
|
|
||||||
rustup default 1.70.0
|
# run `cargo build` on everything
|
||||||
cargo check -p cashu
|
build:
|
||||||
cargo check -p cashu-sdk --no-default-features --features mint
|
cargo build --workspace --all-targets
|
||||||
cargo check -p cashu-sdk --no-default-features --features wallet
|
|
||||||
cargo check -p cashu-sdk --no-default-features --features blocking
|
|
||||||
cargo test -p cashu
|
# run `cargo check` on everything
|
||||||
cargo test -p cashu-sdk
|
check:
|
||||||
rustup default stable
|
cargo check --workspace --all-targets
|
||||||
|
|
||||||
|
|
||||||
|
# run all checks recommended before opening a PR
|
||||||
|
final-check: lint clippy
|
||||||
|
cargo test --doc
|
||||||
|
just test
|
||||||
|
|
||||||
|
|
||||||
|
# run code formatters
|
||||||
|
format:
|
||||||
|
cargo fmt --all
|
||||||
|
nixpkgs-fmt $(echo **.nix)
|
||||||
|
|
||||||
|
|
||||||
|
# run lints (git pre-commit hook)
|
||||||
|
lint:
|
||||||
|
env NO_STASH=true $(git rev-parse --git-common-dir)/hooks/pre-commit
|
||||||
|
|
||||||
|
|
||||||
|
# run tests
|
||||||
|
test: build
|
||||||
|
cargo test
|
||||||
|
|
||||||
|
|
||||||
|
# run and restart on changes
|
||||||
|
watch:
|
||||||
|
env RUST_LOG=${RUST_LOG:-debug} cargo watch -x run
|
||||||
|
|
||||||
|
|
||||||
|
# run `cargo clippy` on everything
|
||||||
|
clippy:
|
||||||
|
cargo clippy --locked --offline --workspace --all-targets -- --deny warnings --allow deprecated
|
||||||
|
|
||||||
|
# run `cargo clippy --fix` on everything
|
||||||
|
clippy-fix:
|
||||||
|
cargo clippy --locked --offline --workspace --all-targets --fix
|
||||||
|
|
||||||
|
|
||||||
|
# run `semgrep`
|
||||||
|
semgrep:
|
||||||
|
env SEMGREP_ENABLE_VERSION_CHECK=0 \
|
||||||
|
semgrep --error --no-rewrite-rule-ids --config .config/semgrep.yaml
|
||||||
|
|
||||||
|
|
||||||
|
# check typos
|
||||||
|
[no-exit-message]
|
||||||
|
typos *PARAMS:
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
set -eo pipefail
|
||||||
|
|
||||||
|
export FLAKEBOX_GIT_LS
|
||||||
|
FLAKEBOX_GIT_LS="$(git ls-files)"
|
||||||
|
export FLAKEBOX_GIT_LS_TEXT
|
||||||
|
FLAKEBOX_GIT_LS_TEXT="$(echo "$FLAKEBOX_GIT_LS" | grep -v -E "^db/|\.(png|ods|jpg|jpeg|woff2|keystore|wasm|ttf|jar|ico)\$")"
|
||||||
|
|
||||||
|
|
||||||
|
if ! echo "$FLAKEBOX_GIT_LS_TEXT" | typos {{PARAMS}} --file-list - --force-exclude ; then
|
||||||
|
>&2 echo "Typos found: Valid new words can be added to '.typos.toml'"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# fix all typos
|
||||||
|
[no-exit-message]
|
||||||
|
typos-fix-all:
|
||||||
|
just typos -w
|
||||||
|
|
||||||
|
# THIS FILE IS AUTOGENERATED FROM FLAKEBOX CONFIGURATION
|
||||||
|
|||||||
23
misc/git-hooks/commit-msg
Executable file
23
misc/git-hooks/commit-msg
Executable file
@@ -0,0 +1,23 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Sanitize file first, by removing leading lines that are empty or start with a hash,
|
||||||
|
# as `convco` currently does not do it automatically (but git will)
|
||||||
|
# TODO: next release of convco should be able to do it automatically
|
||||||
|
MESSAGE="$(
|
||||||
|
while read -r line ; do
|
||||||
|
# skip any initial comments (possibly from previous run)
|
||||||
|
if [ -z "${body_detected:-}" ] && { [[ "$line" =~ ^#.*$ ]] || [ "$line" == "" ]; }; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
body_detected="true"
|
||||||
|
|
||||||
|
echo "$line"
|
||||||
|
done < "$1"
|
||||||
|
)"
|
||||||
|
|
||||||
|
# convco fails on fixup!, so remove fixup! prefix
|
||||||
|
MESSAGE="${MESSAGE#fixup! }"
|
||||||
|
if ! convco check --from-stdin <<<"$MESSAGE" ; then
|
||||||
|
>&2 echo "Please follow conventional commits(https://www.conventionalcommits.org)"
|
||||||
|
>&2 echo "Use git recommit <args> to fix your commit"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
2
misc/git-hooks/commit-template.txt
Normal file
2
misc/git-hooks/commit-template.txt
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
|
||||||
|
# Explain *why* this change is being made width limit ->|
|
||||||
165
misc/git-hooks/pre-commit
Executable file
165
misc/git-hooks/pre-commit
Executable file
@@ -0,0 +1,165 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
set +e
|
||||||
|
git diff-files --quiet
|
||||||
|
is_unclean=$?
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Revert `git stash` on exit
|
||||||
|
function revert_git_stash {
|
||||||
|
>&2 echo "Unstashing uncommitted changes..."
|
||||||
|
git stash pop -q
|
||||||
|
}
|
||||||
|
|
||||||
|
# Stash pending changes and revert them when script ends
|
||||||
|
if [ -z "${NO_STASH:-}" ] && [ $is_unclean -ne 0 ]; then
|
||||||
|
>&2 echo "Stashing uncommitted changes..."
|
||||||
|
GIT_LITERAL_PATHSPECS=0 git stash -q --keep-index
|
||||||
|
trap revert_git_stash EXIT
|
||||||
|
fi
|
||||||
|
|
||||||
|
export FLAKEBOX_GIT_LS
|
||||||
|
FLAKEBOX_GIT_LS="$(git ls-files)"
|
||||||
|
export FLAKEBOX_GIT_LS_TEXT
|
||||||
|
FLAKEBOX_GIT_LS_TEXT="$(echo "$FLAKEBOX_GIT_LS" | grep -v -E "\.(png|ods|jpg|jpeg|woff2|keystore|wasm|ttf|jar|ico|gif)\$")"
|
||||||
|
|
||||||
|
|
||||||
|
function check_nothing() {
|
||||||
|
true
|
||||||
|
}
|
||||||
|
export -f check_nothing
|
||||||
|
|
||||||
|
function check_cargo_fmt() {
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
cargo fmt --all --check
|
||||||
|
|
||||||
|
}
|
||||||
|
export -f check_cargo_fmt
|
||||||
|
|
||||||
|
function check_cargo_lock() {
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
# https://users.rust-lang.org/t/check-if-the-cargo-lock-is-up-to-date-without-building-anything/91048/5
|
||||||
|
cargo update --workspace --locked
|
||||||
|
|
||||||
|
}
|
||||||
|
export -f check_cargo_lock
|
||||||
|
|
||||||
|
function check_leftover_dbg() {
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
errors=""
|
||||||
|
for path in $(echo "$FLAKEBOX_GIT_LS_TEXT" | grep '.*\.rs'); do
|
||||||
|
if grep 'dbg!(' "$path" > /dev/null; then
|
||||||
|
>&2 echo "$path contains dbg! macro"
|
||||||
|
errors="true"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -n "$errors" ]; then
|
||||||
|
>&2 echo "Fix the problems above or use --no-verify" 1>&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
}
|
||||||
|
export -f check_leftover_dbg
|
||||||
|
|
||||||
|
function check_semgrep() {
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
# semgrep is not available on MacOS
|
||||||
|
if ! command -v semgrep > /dev/null ; then
|
||||||
|
>&2 echo "Skipping semgrep check: not available"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f .config/semgrep.yaml ] ; then
|
||||||
|
>&2 echo "Skipping semgrep check: .config/semgrep.yaml doesn't exist"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -s .config/semgrep.yaml ] ; then
|
||||||
|
>&2 echo "Skipping semgrep check: .config/semgrep.yaml empty"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
env SEMGREP_ENABLE_VERSION_CHECK=0 \
|
||||||
|
semgrep -q --error --no-rewrite-rule-ids --config .config/semgrep.yaml
|
||||||
|
|
||||||
|
}
|
||||||
|
export -f check_semgrep
|
||||||
|
|
||||||
|
function check_shellcheck() {
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
for path in $(echo "$FLAKEBOX_GIT_LS_TEXT" | grep -E '.*\.sh$'); do
|
||||||
|
shellcheck --severity=warning "$path"
|
||||||
|
done
|
||||||
|
|
||||||
|
}
|
||||||
|
export -f check_shellcheck
|
||||||
|
|
||||||
|
function check_trailing_newline() {
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
errors=""
|
||||||
|
for path in $(echo "$FLAKEBOX_GIT_LS_TEXT"); do
|
||||||
|
|
||||||
|
# extra branches for clarity
|
||||||
|
if [ ! -s "$path" ]; then
|
||||||
|
# echo "$path is empty"
|
||||||
|
true
|
||||||
|
elif [ -z "$(tail -c 1 < "$path")" ]; then
|
||||||
|
# echo "$path ends with a newline or with a null byte"
|
||||||
|
true
|
||||||
|
else
|
||||||
|
>&2 echo "$path doesn't end with a newline" 1>&2
|
||||||
|
errors="true"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -n "$errors" ]; then
|
||||||
|
>&2 echo "Fix the problems above or use --no-verify" 1>&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
}
|
||||||
|
export -f check_trailing_newline
|
||||||
|
|
||||||
|
function check_trailing_whitespace() {
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
if ! git diff --check HEAD ; then
|
||||||
|
echo "Trailing whitespace detected. Please remove them before committing."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
}
|
||||||
|
export -f check_trailing_whitespace
|
||||||
|
|
||||||
|
function check_typos() {
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
if ! echo "$FLAKEBOX_GIT_LS_TEXT" | typos --file-list - --force-exclude ; then
|
||||||
|
>&2 echo "Typos found: Valid new words can be added to '.typos.toml'"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
}
|
||||||
|
export -f check_typos
|
||||||
|
|
||||||
|
parallel \
|
||||||
|
--nonotice \
|
||||||
|
::: \
|
||||||
|
check_cargo_fmt \
|
||||||
|
check_cargo_lock \
|
||||||
|
check_leftover_dbg \
|
||||||
|
check_semgrep \
|
||||||
|
check_shellcheck \
|
||||||
|
check_trailing_newline \
|
||||||
|
check_trailing_whitespace \
|
||||||
|
check_typos \
|
||||||
|
check_nothing
|
||||||
Reference in New Issue
Block a user