summaryrefslogtreecommitdiff
path: root/contrib
diff options
context:
space:
mode:
Diffstat (limited to 'contrib')
-rw-r--r--contrib/articles/spending.txt2
-rw-r--r--contrib/articles/ui/ui-cameraready.tex6
-rw-r--r--contrib/articles/ui/ui.tex6
-rw-r--r--contrib/articles/ui/ui_short.tex2
-rwxr-xr-xcontrib/build-fast-web.sh7
-rwxr-xr-xcontrib/bump-taler-version.mjs119
-rw-r--r--contrib/ci/Containerfile27
-rwxr-xr-xcontrib/ci/ci.sh34
-rw-r--r--contrib/ci/jobs/0-codespell/config.ini6
-rw-r--r--contrib/ci/jobs/0-codespell/dictionary.txt20
-rwxr-xr-xcontrib/ci/jobs/0-codespell/job.sh6
-rwxr-xr-xcontrib/ci/jobs/1-build/build.sh6
-rwxr-xr-xcontrib/ci/jobs/1-build/job.sh6
-rwxr-xr-xcontrib/ci/jobs/2-docs/docs.sh8
-rwxr-xr-xcontrib/ci/jobs/2-docs/job.sh6
-rw-r--r--contrib/ci/jobs/3-wallet-cli-deb-package/config.ini6
-rwxr-xr-xcontrib/ci/jobs/3-wallet-cli-deb-package/job.sh36
-rwxr-xr-xcontrib/ci/jobs/3-wallet-cli-deb-package/version.sh17
-rw-r--r--contrib/ci/jobs/4-taler-harness-deb-package/config.ini6
-rwxr-xr-xcontrib/ci/jobs/4-taler-harness-deb-package/job.sh36
-rwxr-xr-xcontrib/ci/jobs/4-taler-harness-deb-package/version.sh17
-rw-r--r--contrib/ci/jobs/5-deploy-packages/config.ini6
-rwxr-xr-xcontrib/ci/jobs/5-deploy-packages/job.sh14
-rwxr-xr-xcontrib/cleanup-prebuilt-dir.sh11
-rwxr-xr-xcontrib/copy-aml-backoffice-into-prebuilt.sh10
-rwxr-xr-xcontrib/copy-anastasis-into-prebuilt.sh10
-rwxr-xr-xcontrib/copy-auditor-backoffice-into-prebuilt.sh10
-rwxr-xr-xcontrib/copy-backend-into-prebuilt.sh8
-rwxr-xr-xcontrib/copy-backoffice-into-prebuilt.sh10
-rwxr-xr-xcontrib/copy-bank-into-prebuilt.sh10
-rwxr-xr-xcontrib/copy-challenger-into-prebuilt.sh10
-rw-r--r--contrib/custom-protocol/README33
-rwxr-xr-xcontrib/custom-protocol/taler-wallet-cli.desktop12
-rwxr-xr-xcontrib/devrelease.sh2
-rwxr-xr-xcontrib/publish-prebuilt-dir.sh15
-rwxr-xr-xcontrib/publish-prebuilt.sh17
-rw-r--r--contrib/sample-data/history1.json402
m---------contrib/wallet-testdata0
38 files changed, 548 insertions, 411 deletions
diff --git a/contrib/articles/spending.txt b/contrib/articles/spending.txt
index 7f2c716f8..887a80910 100644
--- a/contrib/articles/spending.txt
+++ b/contrib/articles/spending.txt
@@ -45,7 +45,7 @@ If the above parameters have an optimal assignment, then replacing
v'[x] := 0
gives another optimal solution, as otherwise we'd get a better one for the first situation.
-There is however no assurence that t[x] = price mod v[x] for some x in D, so nievely such solutions give you running times like O(price * |D|), which kinda sucks actually. Just one simplified example :
+There is however no assurence that t[x] = price mod v[x] for some x in D, so naively such solutions give you running times like O(price * |D|), which kinda sucks actually. Just one simplified example :
http://www.codeproject.com/Articles/31002/Coin-Change-Problem-Using-Dynamic-Programming
diff --git a/contrib/articles/ui/ui-cameraready.tex b/contrib/articles/ui/ui-cameraready.tex
index ef79d91ba..b7015b8d3 100644
--- a/contrib/articles/ui/ui-cameraready.tex
+++ b/contrib/articles/ui/ui-cameraready.tex
@@ -881,7 +881,7 @@ the page. Then the wallet inspects the response as it may contain
error reports about a failed payment which the wallet has to handle.
By submitting the payment this way, we also ensure that this
intermediate request does not require JavaScript and still does not
-interfer with navigation. Once the Web shop confirms the payment, the
+interfere with navigation. Once the Web shop confirms the payment, the
wallet causes the fulfillment URL to be reloaded.
If the contract hash does not match a payment which the user
@@ -937,7 +937,7 @@ it has the following key advantages:
other users has the expected behavior
of asking the other user to pay for the resource.
\item Asynchronously transmitting coins from injected JavaScript costs
- one roundtrip, but does not interfer with navigation and allows
+ one roundtrip, but does not interfere with navigation and allows
proper error handling.
\item The different pages of the merchant have clear
delineations: the shopping pages conclude by making an offer, and
@@ -1137,7 +1137,7 @@ passes it to the wallet (sample code for this is shown in
Figure~\ref{listing:http-contract}).
Instead of adding any cryptographic logic to the merchant frontend,
-the Taler merchant backend allows the implementor to delegate
+the Taler merchant backend allows the implementer to delegate
coin handling to the payment backend, which validates the coins,
deposits them at the exchange, and finally validates and persists the
receipt from the exchange. The merchant backend then communicates the
diff --git a/contrib/articles/ui/ui.tex b/contrib/articles/ui/ui.tex
index 37cd8b076..4aef43bd4 100644
--- a/contrib/articles/ui/ui.tex
+++ b/contrib/articles/ui/ui.tex
@@ -933,7 +933,7 @@ the page. Then the wallet inspects the response as it may contain
error reports about a failed payment which the wallet has to handle.
By submitting the payment this way, we also ensure that this
intermediate request does not require JavaScript and still does not
-interfer with navigation. Once the Web shop confirms the payment, the
+interfere with navigation. Once the Web shop confirms the payment, the
wallet causes the fulfillment URL to be reloaded.
If the contract hash does not match a payment which the user
@@ -989,7 +989,7 @@ it has the following key advantages:
other users has the expected behavior
of asking the other user to pay for the resource.
\item Asynchronously transmitting coins from injected JavaScript costs
- one roundtrip, but does not interfer with navigation and allows
+ one roundtrip, but does not interfere with navigation and allows
proper error handling.
\item The different pages of the merchant have clear
delineations: the shopping pages conclude by making an offer, and
@@ -1189,7 +1189,7 @@ passes it to the wallet (sample code for this is shown in
Figure~\ref{listing:contract}).
Instead of adding any cryptographic logic to the merchant frontend,
-the Taler merchant backend allows the implementor to delegate
+the Taler merchant backend allows the implementer to delegate
coin handling to the payment backend, which validates the coins,
deposits them at the exchange, and finally validates and persists the
receipt from the exchange. The merchant backend then communicates the
diff --git a/contrib/articles/ui/ui_short.tex b/contrib/articles/ui/ui_short.tex
index 18f0c1de0..9257a997c 100644
--- a/contrib/articles/ui/ui_short.tex
+++ b/contrib/articles/ui/ui_short.tex
@@ -221,7 +221,7 @@ existing infrastructure.
Instead of adding any cryptographic logic to the merchant front-end,
-the generic Taler merchant backend allows the implementor to delegate
+the generic Taler merchant backend allows the implementer to delegate
handling of the coins to the payment backend, which validates the
coins, deposits them at the exchange, and finally validates and
persists the receipt from the exchange. The merchant backend then
diff --git a/contrib/build-fast-web.sh b/contrib/build-fast-web.sh
index ddc9f10f3..2f213e5f6 100755
--- a/contrib/build-fast-web.sh
+++ b/contrib/build-fast-web.sh
@@ -84,6 +84,12 @@ function build_preact_compat() {
esbuild $BUNDLE_OPTIONS --loader:.js=jsx vendor/preact/test-utils/src/index.js > $DIST/react-dom/test-utils/index.js
}
+function build_qrcode() {
+ mkdir -p $DIST/qrcode-generator
+
+ esbuild $BUNDLE_OPTIONS vendor/qrcode-generator/js/qrcode.js > $DIST/qrcode-generator/index.js
+}
+
function build_history() {
mkdir -p $DIST/{history,resolve-pathname,value-equal,tiny-warning,tiny-invariant}
@@ -133,6 +139,7 @@ build_preact
build_preact-router
build_preact_compat
+build_qrcode
build_history
build_linaria
diff --git a/contrib/bump-taler-version.mjs b/contrib/bump-taler-version.mjs
new file mode 100755
index 000000000..3a57bd01d
--- /dev/null
+++ b/contrib/bump-taler-version.mjs
@@ -0,0 +1,119 @@
+#!/usr/bin/env node
+
+// Bump the package.json versions in Taler-related packagesin
+// this repository.
+// The version must be in one of the following formats:
+// - x.y.z
+// - x.y.z-dev.n
+
+import * as child_process from "child_process";
+import * as fs from "fs";
+
+let requestedVersion = process.argv[2];
+
+let dry = false;
+if (process.argv.includes("--dry")) {
+ dry = true;
+}
+
+let verMatched = false;
+let verMajor = 0;
+let verMinor = 0;
+let verPatch = 0;
+let verDev = undefined;
+
+// Parse the requested version
+const releaseVerRegex = /^(\d+)[.](\d+)[.](\d+)$/;
+const devVerRegex = /^(\d+)[.](\d+)[.](\d+)-dev[.](\d+)$/;
+
+const releaseMatch = requestedVersion.match(releaseVerRegex);
+if (releaseMatch) {
+ verMatched = true;
+ verMajor = releaseMatch[1];
+ verMinor = releaseMatch[2];
+ verPatch = releaseMatch[3];
+}
+
+if (!verMatched) {
+ const devMatch = requestedVersion.match(devVerRegex);
+ if (devMatch) {
+ verMatched = true;
+ verMajor = devMatch[1];
+ verMinor = devMatch[2];
+ verPatch = devMatch[3];
+ verDev = devMatch[4];
+ }
+}
+
+const packages = fs.readdirSync("packages")
+
+for (const pkg of packages) {
+ const p = `packages/${pkg}/package.json`;
+ const data = JSON.parse(fs.readFileSync(p));
+ console.log(p, data.version);
+ if (!dry) {
+ data.version = requestedVersion;
+ fs.writeFileSync(p, JSON.stringify(data, undefined, 2) + "\n");
+ }
+}
+
+{
+ const p = "packages/taler-wallet-webextension/manifest-common.json";
+ const data = JSON.parse(fs.readFileSync(p));
+ console.log("manifest version", data.version);
+ console.log("manifest version_name", data.version_name);
+ // In manifest.json, we transform x.y.z-dev.n info x.y.z.n.
+ // It's necessary because browsers only allow decimals and dots
+ // in that field.
+ let dottedVer = undefined;
+ if (verDev != null) {
+ dottedVer = `${verMajor}.${verMinor}.${verPatch}.${verDev}`;
+ } else {
+ dottedVer = `${verMajor}.${verMinor}.${verPatch}`;
+ }
+ console.log("new manifest version", dottedVer);
+ if (!dry) {
+ data.version = dottedVer;
+ data.version_name = requestedVersion;
+ fs.writeFileSync(p, JSON.stringify(data, undefined, 2) + "\n");
+ }
+}
+
+let debs = ["taler-wallet-cli", "taler-harness"];
+
+for (const deb of debs) {
+ const p = `packages/${deb}/debian/changelog`;
+ const data = fs.readFileSync(p, {
+ encoding: "utf-8",
+ });
+ const lines = data.split("\n");
+ for (const line of lines) {
+ const s = line.trim();
+ if (s == "") {
+ continue;
+ }
+ const re = /\((.*)\)/;
+ const m = s.match(re);
+ const version = m[1];
+ let pfx = "";
+ if (version != requestedVersion) {
+ pfx = "[!] ";
+ if (!dry) {
+ const dateStr = child_process.execSync("date -R", {
+ encoding: "utf-8",
+ });
+ const entryLines = [
+ `${deb} (${requestedVersion}) unstable; urgency=low`,
+ "",
+ ` * Release ${requestedVersion}`,
+ "",
+ ` -- Florian Dold <dold@taler.net> ${dateStr}`,
+ ``,
+ ];
+ fs.writeFileSync(p, `${entryLines.join("\n")}${data}`);
+ }
+ }
+ console.log(`${pfx}${p} is ${version}`);
+ break;
+ }
+}
diff --git a/contrib/ci/Containerfile b/contrib/ci/Containerfile
new file mode 100644
index 000000000..a9da11ae8
--- /dev/null
+++ b/contrib/ci/Containerfile
@@ -0,0 +1,27 @@
+FROM docker.io/library/node:18-slim
+
+ENV DEBIAN_FRONTEND=noninteractive
+
+RUN apt-get update -yq && \
+ apt-get install -yqq \
+ git \
+ python3 \
+ codespell \
+ python3-distutils \
+ make \
+ zip \
+ jq \
+ # Debian packaging tools \
+ po-debconf \
+ build-essential \
+ debhelper-compat \
+ devscripts \
+ git-buildpackage \
+ && rm -rf /var/lib/apt/lists/*
+
+RUN npm install -g pnpm
+
+# Set our workdir. All subsequent commands will be relative to this path.
+WORKDIR /workdir
+
+CMD ["bash", "/workdir/ci/ci.sh"]
diff --git a/contrib/ci/ci.sh b/contrib/ci/ci.sh
new file mode 100755
index 000000000..0719015b9
--- /dev/null
+++ b/contrib/ci/ci.sh
@@ -0,0 +1,34 @@
+#!/bin/bash
+set -exvuo pipefail
+
+# Requires podman
+# Fails if not found in PATH
+OCI_RUNTIME=$(which podman)
+REPO_NAME=$(basename "${PWD}")
+JOB_NAME="${1}"
+JOB_ARCH=$((grep CONTAINER_ARCH contrib/ci/jobs/${JOB_NAME}/config.ini | cut -d' ' -f 3) || echo "${2:-amd64}")
+JOB_CONTAINER=$((grep CONTAINER_NAME contrib/ci/jobs/${JOB_NAME}/config.ini | cut -d' ' -f 3) || echo "localhost/${REPO_NAME}:${JOB_ARCH}")
+CONTAINER_BUILD=$((grep CONTAINER_BUILD contrib/ci/jobs/${JOB_NAME}/config.ini | cut -d' ' -f 3) || echo "True")
+
+echo "Image name: ${JOB_CONTAINER}"
+
+if [ "${CONTAINER_BUILD}" = "True" ] ; then
+ "${OCI_RUNTIME}" build \
+ --arch "${JOB_ARCH}" \
+ -t "${JOB_CONTAINER}" \
+ -f contrib/ci/Containerfile .
+fi
+
+"${OCI_RUNTIME}" run \
+ --rm \
+ -ti \
+ --arch "${JOB_ARCH}" \
+ --env CI_COMMIT_REF="$(git rev-parse HEAD)" \
+ --volume "${PWD}":/workdir \
+ --workdir /workdir \
+ "${JOB_CONTAINER}" \
+ contrib/ci/jobs/"${JOB_NAME}"/job.sh
+
+top_dir=$(dirname "${BASH_SOURCE[0]}")
+
+#"${top_dir}"/build.sh
diff --git a/contrib/ci/jobs/0-codespell/config.ini b/contrib/ci/jobs/0-codespell/config.ini
new file mode 100644
index 000000000..bd7d73860
--- /dev/null
+++ b/contrib/ci/jobs/0-codespell/config.ini
@@ -0,0 +1,6 @@
+[build]
+HALT_ON_FAILURE = False
+WARN_ON_FAILURE = True
+CONTAINER_BUILD = False
+CONTAINER_NAME = nixery.dev/shell/codespell
+CONTAINER_ARCH = amd64
diff --git a/contrib/ci/jobs/0-codespell/dictionary.txt b/contrib/ci/jobs/0-codespell/dictionary.txt
new file mode 100644
index 000000000..aeace0e9e
--- /dev/null
+++ b/contrib/ci/jobs/0-codespell/dictionary.txt
@@ -0,0 +1,20 @@
+# List of "words" that codespell should ignore in our sources.
+#
+# Note: The word sensitivity depends on how the to-be-ignored word is
+# spelled in codespell_lib/data/dictionary.txt. F.e. if there is a word
+# 'foo' and you add 'Foo' _here_, codespell will continue to complain
+# about 'Foo'.
+#
+aci
+cant
+ect
+fo
+som
+te
+ths
+updateing
+vie
+zar
+nam
+pares
+kwanza
diff --git a/contrib/ci/jobs/0-codespell/job.sh b/contrib/ci/jobs/0-codespell/job.sh
new file mode 100755
index 000000000..9271343e6
--- /dev/null
+++ b/contrib/ci/jobs/0-codespell/job.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+set -exuo pipefail
+
+job_dir=$(dirname "${BASH_SOURCE[0]}")
+
+codespell -q 0 -I "${job_dir}"/dictionary.txt -S "*.bib,*.bst,*.cls,*.json,*.png,*.svg,*.wav,*.gz,*/templating/test?/**,**/auditor/*.sql,**/templating/mustach**,*.fees,*key,*.tag,*.info,*.latexmkrc,*.ecc,*.jpg,*.zkey,*.sqlite,*/contrib/hellos/**,*/vpn/tests/**,*.priv,*.file,*.tgz,*.woff,*.gif,*.odt,*.fee,*.deflate,*.dat,*.jpeg,*.eps,*.odg,*/m4/ax_lib_postgresql.m4,*/m4/libgcrypt.m4,*.rpath,config.status,ABOUT-NLS,*/doc/texinfo.tex,*.PNG,*.??.json,*.docx,*.ods,*.doc,*.docx,*.xcf,*.xlsx,*.ecc,*.ttf,*.woff2,*.eot,*.ttf,*.eot,*.mp4,*.pptx,*.epgz,*.min.js,**/*.map,**/fonts/**,*.pack.js,*.po,*.bbl,*/afl-tests/*,*/.git/**,*.pdf,*.epub,**/signing-key.asc,**/pnpm-lock.yaml,**/*.svg,**/*.cls,**/rfc.bib,**/*.bst,*/cbdc-es.tex,*/cbdc-it.tex,**/ExchangeSelection/example.ts,*/testcurl/test_tricky.c,*/i18n/strings.ts,*/src/anastasis-data.ts,**/doc/flows/main.de.tex,*/vendor/**,*/node_modules/**,*.pnpm-store/**"
diff --git a/contrib/ci/jobs/1-build/build.sh b/contrib/ci/jobs/1-build/build.sh
new file mode 100755
index 000000000..25a38946d
--- /dev/null
+++ b/contrib/ci/jobs/1-build/build.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+set -exuo pipefail
+
+./bootstrap
+./configure --prefix=$HOME/local/
+make
diff --git a/contrib/ci/jobs/1-build/job.sh b/contrib/ci/jobs/1-build/job.sh
new file mode 100755
index 000000000..8d79902c5
--- /dev/null
+++ b/contrib/ci/jobs/1-build/job.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+set -exuo pipefail
+
+job_dir=$(dirname "${BASH_SOURCE[0]}")
+
+"${job_dir}"/build.sh
diff --git a/contrib/ci/jobs/2-docs/docs.sh b/contrib/ci/jobs/2-docs/docs.sh
new file mode 100755
index 000000000..ee6abc2ac
--- /dev/null
+++ b/contrib/ci/jobs/2-docs/docs.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+set -exuo pipefail
+
+./bootstrap
+./configure
+make
+
+pnpm run typedoc
diff --git a/contrib/ci/jobs/2-docs/job.sh b/contrib/ci/jobs/2-docs/job.sh
new file mode 100755
index 000000000..a72bca4ba
--- /dev/null
+++ b/contrib/ci/jobs/2-docs/job.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+set -exuo pipefail
+
+job_dir=$(dirname "${BASH_SOURCE[0]}")
+
+"${job_dir}"/docs.sh
diff --git a/contrib/ci/jobs/3-wallet-cli-deb-package/config.ini b/contrib/ci/jobs/3-wallet-cli-deb-package/config.ini
new file mode 100644
index 000000000..fe4fd36a6
--- /dev/null
+++ b/contrib/ci/jobs/3-wallet-cli-deb-package/config.ini
@@ -0,0 +1,6 @@
+[build]
+HALT_ON_FAILURE = False
+WARN_ON_FAILURE = True
+CONTAINER_BUILD = True
+CONTAINER_NAME = localhost/wallet-core
+CONTAINER_ARCH = amd64
diff --git a/contrib/ci/jobs/3-wallet-cli-deb-package/job.sh b/contrib/ci/jobs/3-wallet-cli-deb-package/job.sh
new file mode 100755
index 000000000..ac9132929
--- /dev/null
+++ b/contrib/ci/jobs/3-wallet-cli-deb-package/job.sh
@@ -0,0 +1,36 @@
+#!/bin/bash
+set -exuo pipefail
+# This file is in the public domain.
+# Helper script to build the latest DEB packages in the container.
+
+
+unset LD_LIBRARY_PATH
+
+# Run the bootstrap script in case it hasn't been done already at this point
+./bootstrap
+
+# gbp wants the debian directory in the root of the git repo
+# so we symlink in the debian directory for the package we want to create
+rm -f ./debian # in case we already have a symlink there
+ln -s packages/taler-wallet-cli/debian .
+
+# Change to our package directory
+cd packages/taler-wallet-cli
+
+# Install build-time dependencies.
+# Update apt cache first
+apt-get update
+apt-get upgrade -y
+mk-build-deps --install --tool='apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends --yes' debian/control
+
+export VERSION="$(../../contrib/ci/jobs/3-wallet-cli-deb-package/version.sh)"
+echo "Building package version ${VERSION}"
+
+EMAIL=none gbp dch --ignore-branch --debian-tag="%(version)s" --git-author --new-version="${VERSION}"
+echo "Current PWD is $PWD"
+./configure --prefix=$HOME/local/
+dpkg-buildpackage -rfakeroot -b -uc -us
+
+ls -alh ../*.deb
+mkdir -p /artifacts/wallet-core/${CI_COMMIT_REF} # Variable comes from CI environment
+mv ../*.deb /artifacts/wallet-core/${CI_COMMIT_REF}/
diff --git a/contrib/ci/jobs/3-wallet-cli-deb-package/version.sh b/contrib/ci/jobs/3-wallet-cli-deb-package/version.sh
new file mode 100755
index 000000000..52031b23a
--- /dev/null
+++ b/contrib/ci/jobs/3-wallet-cli-deb-package/version.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+set -ex
+
+BRANCH=$(git name-rev --name-only HEAD)
+if [ -z "${BRANCH}" ]; then
+ exit 1
+else
+ # "Unshallow" our checkout, but only our current branch, and exclude the submodules.
+ git fetch --no-recurse-submodules --tags --depth=1000 origin "${BRANCH}"
+ RECENT_VERSION_TAG=$(git describe --tags --match 'v*.*.*' --exclude '*-dev*' --always --abbrev=0 HEAD || exit 1)
+ commits="$(git rev-list ${RECENT_VERSION_TAG}..HEAD --count)"
+ if [ "${commits}" = "0" ]; then
+ git describe --tag HEAD | sed -r 's/^v//' || exit 1
+ else
+ echo $(echo ${RECENT_VERSION_TAG} | sed -r 's/^v//')-${commits}-$(git rev-parse --short=8 HEAD)
+ fi
+fi
diff --git a/contrib/ci/jobs/4-taler-harness-deb-package/config.ini b/contrib/ci/jobs/4-taler-harness-deb-package/config.ini
new file mode 100644
index 000000000..fe4fd36a6
--- /dev/null
+++ b/contrib/ci/jobs/4-taler-harness-deb-package/config.ini
@@ -0,0 +1,6 @@
+[build]
+HALT_ON_FAILURE = False
+WARN_ON_FAILURE = True
+CONTAINER_BUILD = True
+CONTAINER_NAME = localhost/wallet-core
+CONTAINER_ARCH = amd64
diff --git a/contrib/ci/jobs/4-taler-harness-deb-package/job.sh b/contrib/ci/jobs/4-taler-harness-deb-package/job.sh
new file mode 100755
index 000000000..c58c643e6
--- /dev/null
+++ b/contrib/ci/jobs/4-taler-harness-deb-package/job.sh
@@ -0,0 +1,36 @@
+#!/bin/bash
+set -exuo pipefail
+# This file is in the public domain.
+# Helper script to build the latest DEB packages in the container.
+
+
+unset LD_LIBRARY_PATH
+
+# Run the bootstrap script in case it hasn't been done already at this point
+./bootstrap
+
+# gbp wants the debian directory in the root of the git repo
+# so we symlink in the debian directory for the package we want to create
+rm -f ./debian # in case we already have a symlink there
+ln -s packages/taler-harness/debian .
+
+# Change to our package directory
+cd packages/taler-harness
+
+# Install build-time dependencies.
+# Update apt cache first
+apt-get update
+apt-get upgrade -y
+mk-build-deps --install --tool='apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends --yes' debian/control
+
+export VERSION="$(../../contrib/ci/jobs/4-taler-harness-deb-package/version.sh)"
+echo "Building package version ${VERSION}"
+
+EMAIL=none gbp dch --ignore-branch --debian-tag="%(version)s" --git-author --new-version="${VERSION}"
+echo "Current PWD is $PWD"
+./configure --prefix=$HOME/local/
+dpkg-buildpackage -rfakeroot -b -uc -us
+
+ls -alh ../*.deb
+mkdir -p /artifacts/wallet-core/${CI_COMMIT_REF} # Variable comes from CI environment
+mv ../*.deb /artifacts/wallet-core/${CI_COMMIT_REF}/
diff --git a/contrib/ci/jobs/4-taler-harness-deb-package/version.sh b/contrib/ci/jobs/4-taler-harness-deb-package/version.sh
new file mode 100755
index 000000000..52031b23a
--- /dev/null
+++ b/contrib/ci/jobs/4-taler-harness-deb-package/version.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+set -ex
+
+BRANCH=$(git name-rev --name-only HEAD)
+if [ -z "${BRANCH}" ]; then
+ exit 1
+else
+ # "Unshallow" our checkout, but only our current branch, and exclude the submodules.
+ git fetch --no-recurse-submodules --tags --depth=1000 origin "${BRANCH}"
+ RECENT_VERSION_TAG=$(git describe --tags --match 'v*.*.*' --exclude '*-dev*' --always --abbrev=0 HEAD || exit 1)
+ commits="$(git rev-list ${RECENT_VERSION_TAG}..HEAD --count)"
+ if [ "${commits}" = "0" ]; then
+ git describe --tag HEAD | sed -r 's/^v//' || exit 1
+ else
+ echo $(echo ${RECENT_VERSION_TAG} | sed -r 's/^v//')-${commits}-$(git rev-parse --short=8 HEAD)
+ fi
+fi
diff --git a/contrib/ci/jobs/5-deploy-packages/config.ini b/contrib/ci/jobs/5-deploy-packages/config.ini
new file mode 100644
index 000000000..08c106f9c
--- /dev/null
+++ b/contrib/ci/jobs/5-deploy-packages/config.ini
@@ -0,0 +1,6 @@
+[build]
+HALT_ON_FAILURE = True
+WARN_ON_FAILURE = True
+CONTAINER_BUILD = False
+CONTAINER_NAME = nixery.dev/shell/rsync
+CONTAINER_ARCH = amd64
diff --git a/contrib/ci/jobs/5-deploy-packages/job.sh b/contrib/ci/jobs/5-deploy-packages/job.sh
new file mode 100755
index 000000000..46ed90f70
--- /dev/null
+++ b/contrib/ci/jobs/5-deploy-packages/job.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+set -exuo pipefail
+
+ARTIFACT_PATH="/artifacts/wallet-core/${CI_COMMIT_REF}/*.deb"
+
+RSYNC_HOST="taler.host.internal"
+RSYNC_PORT=424242
+RSYNC_PATH="incoming_packages/bookworm-taler-ci/"
+RSYNC_DEST="rsync://${RSYNC_HOST}/${RSYNC_PATH}"
+
+
+rsync -vP \
+ --port ${RSYNC_PORT} \
+ ${ARTIFACT_PATH} ${RSYNC_DEST}
diff --git a/contrib/cleanup-prebuilt-dir.sh b/contrib/cleanup-prebuilt-dir.sh
new file mode 100755
index 000000000..5553fb467
--- /dev/null
+++ b/contrib/cleanup-prebuilt-dir.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+set -e
+
+[ ! -d prebuilt ] && git worktree add -f prebuilt prebuilt && exit 1
+
+# make sure that the prebuilt directory is clean
+# before building
+# this script is part of the make prebuilt
+cd prebuilt
+git checkout -- .
+git pull
diff --git a/contrib/copy-aml-backoffice-into-prebuilt.sh b/contrib/copy-aml-backoffice-into-prebuilt.sh
new file mode 100755
index 000000000..2b94327e6
--- /dev/null
+++ b/contrib/copy-aml-backoffice-into-prebuilt.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+[ ! -d prebuilt ] && git worktree add -f prebuilt prebuilt && exit 1
+
+find packages/aml-backoffice-ui/dist/prod/ -type f -printf '%P\n' | sort > prebuilt/aml-backoffice/bof
+
+while IFS= read -r file; do
+ cp packages/aml-backoffice-ui/dist/prod/$file prebuilt/aml-backoffice/$file
+done < prebuilt/aml-backoffice/bof
+
diff --git a/contrib/copy-anastasis-into-prebuilt.sh b/contrib/copy-anastasis-into-prebuilt.sh
new file mode 100755
index 000000000..36335bfcf
--- /dev/null
+++ b/contrib/copy-anastasis-into-prebuilt.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+[ ! -d prebuilt ] && git worktree add -f prebuilt prebuilt && exit 1
+
+find packages/anastasis-webui/dist/prod/ -type f -printf '%P\n' | sort > prebuilt/anastasis/bof
+
+while IFS= read -r file; do
+ cp packages/anastasis-webui/dist/prod/$file prebuilt/anastasis/$file
+done < prebuilt/anastasis/bof
+
diff --git a/contrib/copy-auditor-backoffice-into-prebuilt.sh b/contrib/copy-auditor-backoffice-into-prebuilt.sh
new file mode 100755
index 000000000..6b6544183
--- /dev/null
+++ b/contrib/copy-auditor-backoffice-into-prebuilt.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+[ ! -d prebuilt ] && git worktree add -f prebuilt prebuilt && exit 1
+
+find packages/auditor-backoffice-ui/dist/prod/ -type f -printf '%P\n' | sort > prebuilt/auditor-backoffice/bof
+
+while IFS= read -r file; do
+ cp packages/auditor-backoffice-ui/dist/prod/$file prebuilt/auditor-backoffice/$file
+done < prebuilt/auditor-backoffice/bof
+
diff --git a/contrib/copy-backend-into-prebuilt.sh b/contrib/copy-backend-into-prebuilt.sh
new file mode 100755
index 000000000..81d38cdea
--- /dev/null
+++ b/contrib/copy-backend-into-prebuilt.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+[ ! -d prebuilt ] && git worktree add -f prebuilt prebuilt && exit 1
+
+for file in offer_refund.en.html request_payment.en.html show_order_details.en.html; do
+ cp packages/merchant-backend-ui/dist/pages/$file prebuilt/backend/
+done
+
diff --git a/contrib/copy-backoffice-into-prebuilt.sh b/contrib/copy-backoffice-into-prebuilt.sh
new file mode 100755
index 000000000..d21b91096
--- /dev/null
+++ b/contrib/copy-backoffice-into-prebuilt.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+[ ! -d prebuilt ] && git worktree add -f prebuilt prebuilt && exit 1
+
+find packages/merchant-backoffice-ui/dist/prod/ -type f -printf '%P\n' | sort > prebuilt/backoffice/bof
+
+while IFS= read -r file; do
+ cp packages/merchant-backoffice-ui/dist/prod/$file prebuilt/backoffice/$file
+done < prebuilt/backoffice/bof
+
diff --git a/contrib/copy-bank-into-prebuilt.sh b/contrib/copy-bank-into-prebuilt.sh
new file mode 100755
index 000000000..5ad375767
--- /dev/null
+++ b/contrib/copy-bank-into-prebuilt.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+[ ! -d prebuilt ] && git worktree add -f prebuilt prebuilt && exit 1
+
+find packages/bank-ui/dist/prod/ -type f -printf '%P\n' | sort > prebuilt/bank/bof
+
+while IFS= read -r file; do
+ cp packages/bank-ui/dist/prod/$file prebuilt/bank/$file
+done < prebuilt/bank/bof
+
diff --git a/contrib/copy-challenger-into-prebuilt.sh b/contrib/copy-challenger-into-prebuilt.sh
new file mode 100755
index 000000000..ebc39192c
--- /dev/null
+++ b/contrib/copy-challenger-into-prebuilt.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+[ ! -d prebuilt ] && git worktree add -f prebuilt prebuilt && exit 1
+
+find packages/challenger-ui/dist/prod/ -type f -printf '%P\n' | sort > prebuilt/challenger/bof
+
+while IFS= read -r file; do
+ cp packages/challenger-ui/dist/prod/$file prebuilt/challenger/$file
+done < prebuilt/challenger/bof
+
diff --git a/contrib/custom-protocol/README b/contrib/custom-protocol/README
new file mode 100644
index 000000000..0ebbeed4d
--- /dev/null
+++ b/contrib/custom-protocol/README
@@ -0,0 +1,33 @@
+Custom protocol handler for taler:// URI
+
+In order to run the wallet when trying to open an html anchor to a ref starting with "taler://" you have to setup a custom protocol handler in your local setup.
+
+
+
+First add this content into file `.config/mimeapps.list` under section `[Default Applications]`
+
+```
+x-scheme-handler/taler=taler-wallet-cli.desktop
+x-scheme-handler/taler+http=taler-wallet-cli.desktop
+```
+
+then create a file named `taler-wallet-cli.desktop` in location `$HOME/.local/share/applications` with content
+
+```
+[Desktop Entry]
+Name=GNU Taler Wallet CLI URL Handler
+GenericName=Wallet
+Comment=Handle URL Scheme taler://
+Exec=bash -c "taler-wallet-cli handle-uri %u; read"
+Terminal=true
+Type=Application
+MimeType=x-scheme-handler/taler;x-scheme-handler/taler+http
+Name[en_US]=GNU Taler Wallet URL Handler
+```
+
+Done, you can test it using the next command:
+
+```
+$ xdg-open taler://withdraw/bank.demo.taler.net/api/793ee3e4-2915-47e8-9abe-bcc36c8e65cf
+```
+
diff --git a/contrib/custom-protocol/taler-wallet-cli.desktop b/contrib/custom-protocol/taler-wallet-cli.desktop
new file mode 100755
index 000000000..35c8e5154
--- /dev/null
+++ b/contrib/custom-protocol/taler-wallet-cli.desktop
@@ -0,0 +1,12 @@
+[Desktop Entry]
+Name=GNU Taler Wallet CLI URL Handler
+GenericName=Wallet
+Comment=Handle URL Scheme taler://
+Exec=bash -c "taler-wallet-cli handle-uri %u; read"
+Terminal=true
+Type=Application
+MimeType=x-scheme-handler/taler;x-scheme-handler/taler+http
+Icon=sublime-text-2
+Categories=TextEditor;Development;Utility;
+Name[en_US]=GNU Taler Wallet URL Handler
+
diff --git a/contrib/devrelease.sh b/contrib/devrelease.sh
index 72b059a01..4418ee539 100755
--- a/contrib/devrelease.sh
+++ b/contrib/devrelease.sh
@@ -16,7 +16,7 @@ fi
mkdir -p prebuilt/$devtag
-cp packages/taler-wallet-android/dist/taler-wallet-android.js prebuilt/$devtag/
+cp packages/taler-wallet-embedded/dist/taler-wallet-embedded.js prebuilt/$devtag/
cd prebuilt
git add -A $devtag
git commit -m "prebuilt files for $devtag" || true
diff --git a/contrib/publish-prebuilt-dir.sh b/contrib/publish-prebuilt-dir.sh
new file mode 100755
index 000000000..a636c6de6
--- /dev/null
+++ b/contrib/publish-prebuilt-dir.sh
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+# this script is part of the make prebuilt procedure
+# is expected on the root folder
+
+# create a commit message with the commit id
+COMMIT=$(git rev-parse --verify HEAD)
+MSG="built from ${COMMIT}"
+
+# after building process has copy everything into
+# the prebuilt folder
+cd prebuilt
+git commit -m "$MSG" -a
+git show --stat
+echo "ready to push"
diff --git a/contrib/publish-prebuilt.sh b/contrib/publish-prebuilt.sh
new file mode 100755
index 000000000..94bd274ff
--- /dev/null
+++ b/contrib/publish-prebuilt.sh
@@ -0,0 +1,17 @@
+#!/usr/bin/env bash
+
+# Helper script to publish a prebuilt wallet-core.
+# Assumes that the prebuilt branch is checked out
+# at ./prebuilt as a git worktree.
+
+set -eu
+
+TAG=$1
+
+pnpm run compile
+mkdir prebuilt/$TAG
+cp packages/taler-wallet-embedded/dist/taler-wallet-embedded.js prebuilt/$TAG/taler-wallet-embedded.js
+git -C prebuilt add .
+git -C prebuilt commit -a -m "prebuilt $TAG"
+git -C prebuilt push
+sha256sum prebuilt/$TAG/taler-wallet-android.js
diff --git a/contrib/sample-data/history1.json b/contrib/sample-data/history1.json
deleted file mode 100644
index 8d0076a31..000000000
--- a/contrib/sample-data/history1.json
+++ /dev/null
@@ -1,402 +0,0 @@
-{
- "history": [
- {
- "type": "exchange-added",
- "builtIn": false,
- "eventId": "exchange-added;https%3A%2F%2Fexchange.demo.taler.net%2F",
- "exchangeBaseUrl": "https://exchange.demo.taler.net/",
- "timestamp": {
- "t_ms": 1578334008633
- }
- },
- {
- "type": "exchange-updated",
- "eventId": "exchange-updated;https%3A%2F%2Fexchange.demo.taler.net%2F",
- "exchangeBaseUrl": "https://exchange.demo.taler.net/",
- "timestamp": {
- "t_ms": 1578334009266
- }
- },
- {
- "type": "reserve-balance-updated",
- "eventId": "reserve-balance-updated;HHG1KBFSW4PM8J43D14GVJYB8F5J56RDHANY1EQSW6RTYDAQJC6G",
- "amountExpected": "KUDOS:5",
- "amountReserveBalance": "KUDOS:5",
- "timestamp": {
- "t_ms": 1578334039291
- },
- "newHistoryTransactions": [
- {
- "amount": "KUDOS:5",
- "sender_account_url": "payto://x-taler-bank/bank.demo.taler.net/65",
- "timestamp": {
- "t_ms": 1578334028000
- },
- "wire_reference": "000000000038Y",
- "type": "DEPOSIT"
- }
- ],
- "reserveShortInfo": {
- "exchangeBaseUrl": "https://exchange.demo.taler.net/",
- "reserveCreationDetail": {
- "type": "taler-bank-withdraw",
- "bankUrl": "https://bank.demo.taler.net/api/withdraw-operation/6fd6a78f-3d12-4c91-b5e4-c6fc31f44e8d"
- },
- "reservePub": "JPE7VR8R985WQ7ZX3EEYRTEGJQ1FAFE7P3JK1J7WFJEP7AGNTJD0"
- }
- },
- {
- "type": "withdrawn",
- "withdrawSessionId": "SFW3JS0JV0GZQQ1W07TNQEAGBD84X2QMH38PJ2CCTTKSDKQFCBY0",
- "eventId": "withdrawn;SFW3JS0JV0GZQQ1W07TNQEAGBD84X2QMH38PJ2CCTTKSDKQFCBY0",
- "amountWithdrawnEffective": "KUDOS:4.8",
- "amountWithdrawnRaw": "KUDOS:5",
- "exchangeBaseUrl": "https://exchange.demo.taler.net/",
- "timestamp": {
- "t_ms": 1578334039853
- },
- "withdrawalSource": {
- "type": "reserve",
- "reservePub": "JPE7VR8R985WQ7ZX3EEYRTEGJQ1FAFE7P3JK1J7WFJEP7AGNTJD0"
- }
- },
- {
- "type": "order-accepted",
- "eventId": "order-accepted;RNFEQ2FHF6NPM5M58HJH635TD4CE9S2SRNK3VN9SCMH3H7H0REBG",
- "orderShortInfo": {
- "amount": "KUDOS:0.5",
- "orderId": "2020.006-G1NT65XRPQ8GP",
- "merchantBaseUrl": "https://backend.demo.taler.net/public/instances/FSF/",
- "proposalId": "RNFEQ2FHF6NPM5M58HJH635TD4CE9S2SRNK3VN9SCMH3H7H0REBG",
- "summary": "Essay: 2. The GNU Project"
- },
- "timestamp": {
- "t_ms": 1578334078823
- }
- },
- {
- "type": "order-redirected",
- "eventId": "order-redirected;0W4EBHQJ90XX4TSQ9C0M6K9MBFJ1ENKTWH4R3CXFT986A2QHCESG",
- "alreadyPaidOrderShortInfo": {
- "amount": "KUDOS:0.5",
- "orderId": "2020.006-G1NT65XRPQ8GP",
- "merchantBaseUrl": "https://backend.demo.taler.net/public/instances/FSF/",
- "proposalId": "RNFEQ2FHF6NPM5M58HJH635TD4CE9S2SRNK3VN9SCMH3H7H0REBG",
- "summary": "Essay: 2. The GNU Project"
- },
- "newOrderShortInfo": {
- "amount": "KUDOS:0.5",
- "orderId": "2020.006-00W4ANVVKAHAP",
- "merchantBaseUrl": "https://backend.demo.taler.net/public/instances/FSF/",
- "proposalId": "0W4EBHQJ90XX4TSQ9C0M6K9MBFJ1ENKTWH4R3CXFT986A2QHCESG",
- "summary": "Essay: 2. The GNU Project"
- },
- "timestamp": {
- "t_ms": 1578334108380
- }
- },
- {
- "type": "payment-sent",
- "eventId": "payment-sent;RNFEQ2FHF6NPM5M58HJH635TD4CE9S2SRNK3VN9SCMH3H7H0REBG",
- "orderShortInfo": {
- "amount": "KUDOS:0.5",
- "orderId": "2020.006-G1NT65XRPQ8GP",
- "merchantBaseUrl": "https://backend.demo.taler.net/public/instances/FSF/",
- "proposalId": "RNFEQ2FHF6NPM5M58HJH635TD4CE9S2SRNK3VN9SCMH3H7H0REBG",
- "summary": "Essay: 2. The GNU Project"
- },
- "replay": true,
- "sessionId": "ab48396f-3aa1-4e1f-bfb5-30852d1e0d5e",
- "timestamp": {
- "t_ms": 1578334108677
- },
- "numCoins": 6,
- "amountPaidWithFees": "KUDOS:0.54"
- },
- {
- "type": "exchange-added",
- "builtIn": false,
- "eventId": "exchange-added;https%3A%2F%2Fexchange.test.taler.net%2F",
- "exchangeBaseUrl": "https://exchange.test.taler.net/",
- "timestamp": {
- "t_ms": 1578334134741
- }
- },
- {
- "type": "exchange-updated",
- "eventId": "exchange-updated;https%3A%2F%2Fexchange.test.taler.net%2F",
- "exchangeBaseUrl": "https://exchange.test.taler.net/",
- "timestamp": {
- "t_ms": 1578334135451
- }
- },
- {
- "type": "reserve-balance-updated",
- "eventId": "reserve-balance-updated;498DDH4ZB41QX45FH38T4Y8JM14WX8Q2J1VKKZTE0CMS6TCPYZAG",
- "amountExpected": "TESTKUDOS:5",
- "amountReserveBalance": "TESTKUDOS:5",
- "timestamp": {
- "t_ms": 1578334141843
- },
- "newHistoryTransactions": [
- {
- "amount": "TESTKUDOS:5",
- "sender_account_url": "payto://x-taler-bank/bank.test.taler.net/9",
- "timestamp": {
- "t_ms": 1578334138000
- },
- "wire_reference": "0000000000184",
- "type": "DEPOSIT"
- }
- ],
- "reserveShortInfo": {
- "exchangeBaseUrl": "https://exchange.test.taler.net/",
- "reserveCreationDetail": {
- "type": "taler-bank-withdraw",
- "bankUrl": "https://bank.test.taler.net/api/withdraw-operation/e6210f62-d27b-4f58-815c-c5160de8804c"
- },
- "reservePub": "ZQ2N7V8M035HAD1HTW7ZX22NM9GAXDCGX6GSJECD2KEY9TN3C0V0"
- }
- },
- {
- "type": "withdrawn",
- "withdrawSessionId": "AAVX0GVZ8GRPYX2RWANQ9J279ABA7KNFYEQ3A0C63TW7NMV0GAT0",
- "eventId": "withdrawn;AAVX0GVZ8GRPYX2RWANQ9J279ABA7KNFYEQ3A0C63TW7NMV0GAT0",
- "amountWithdrawnEffective": "TESTKUDOS:5",
- "amountWithdrawnRaw": "TESTKUDOS:5",
- "exchangeBaseUrl": "https://exchange.test.taler.net/",
- "timestamp": {
- "t_ms": 1578334142432
- },
- "withdrawalSource": {
- "type": "reserve",
- "reservePub": "ZQ2N7V8M035HAD1HTW7ZX22NM9GAXDCGX6GSJECD2KEY9TN3C0V0"
- }
- },
- {
- "type": "refreshed",
- "refreshGroupId": "2TARBASBNCE0X7F0D89Z3TJGPXKRARFSBH3HKZ5JFQRKPV9CA5C0",
- "eventId": "refreshed;2TARBASBNCE0X7F0D89Z3TJGPXKRARFSBH3HKZ5JFQRKPV9CA5C0",
- "timestamp": {
- "t_ms": 1578334142528
- },
- "refreshReason": "pay",
- "amountRefreshedEffective": "KUDOS:0",
- "amountRefreshedRaw": "KUDOS:0.06",
- "numInputCoins": 6,
- "numOutputCoins": 0,
- "numRefreshedInputCoins": 0
- },
- {
- "type": "order-accepted",
- "eventId": "order-accepted;W39MQT31M1ZY3NPF9ZSGXM8Q1K5XS5D5R1J10ZSHBREC6EZ570F0",
- "orderShortInfo": {
- "amount": "TESTKUDOS:1",
- "orderId": "2020.006-00GBW7AD1VFRW",
- "merchantBaseUrl": "https://backend.test.taler.net/public/instances/GNUnet/",
- "proposalId": "W39MQT31M1ZY3NPF9ZSGXM8Q1K5XS5D5R1J10ZSHBREC6EZ570F0",
- "summary": "Donation to GNUnet"
- },
- "timestamp": {
- "t_ms": 1578334230099
- }
- },
- {
- "type": "payment-sent",
- "eventId": "payment-sent;W39MQT31M1ZY3NPF9ZSGXM8Q1K5XS5D5R1J10ZSHBREC6EZ570F0",
- "orderShortInfo": {
- "amount": "TESTKUDOS:1",
- "orderId": "2020.006-00GBW7AD1VFRW",
- "merchantBaseUrl": "https://backend.test.taler.net/public/instances/GNUnet/",
- "proposalId": "W39MQT31M1ZY3NPF9ZSGXM8Q1K5XS5D5R1J10ZSHBREC6EZ570F0",
- "summary": "Donation to GNUnet"
- },
- "replay": false,
- "timestamp": {
- "t_ms": 1578334232527
- },
- "numCoins": 4,
- "amountPaidWithFees": "TESTKUDOS:1"
- },
- {
- "type": "order-accepted",
- "eventId": "order-accepted;Y8230SR6DP52J61CHEAPM5NHRVK408YP5KJP6VRBGZ3QZ0TBZQ90",
- "orderShortInfo": {
- "amount": "TESTKUDOS:0.1",
- "orderId": "2020.006-02RFGFSSAZY9Y",
- "merchantBaseUrl": "https://backend.test.taler.net/public/instances/Taler/",
- "proposalId": "Y8230SR6DP52J61CHEAPM5NHRVK408YP5KJP6VRBGZ3QZ0TBZQ90",
- "summary": "Donation to Taler"
- },
- "timestamp": {
- "t_ms": 1578334258703
- }
- },
- {
- "type": "payment-sent",
- "eventId": "payment-sent;Y8230SR6DP52J61CHEAPM5NHRVK408YP5KJP6VRBGZ3QZ0TBZQ90",
- "orderShortInfo": {
- "amount": "TESTKUDOS:0.1",
- "orderId": "2020.006-02RFGFSSAZY9Y",
- "merchantBaseUrl": "https://backend.test.taler.net/public/instances/Taler/",
- "proposalId": "Y8230SR6DP52J61CHEAPM5NHRVK408YP5KJP6VRBGZ3QZ0TBZQ90",
- "summary": "Donation to Taler"
- },
- "replay": false,
- "timestamp": {
- "t_ms": 1578334260497
- },
- "numCoins": 1,
- "amountPaidWithFees": "TESTKUDOS:0.1"
- },
- {
- "type": "reserve-balance-updated",
- "eventId": "reserve-balance-updated;NBZX24YB4GEHFXFXD5NJAC84ZZD63DFAD6Q7YFJQGX8WX9YQ7B90",
- "amountExpected": "TESTKUDOS:15",
- "amountReserveBalance": "TESTKUDOS:15",
- "timestamp": {
- "t_ms": 1578334530519
- },
- "newHistoryTransactions": [
- {
- "amount": "TESTKUDOS:15",
- "sender_account_url": "payto://x-taler-bank/bank.test.taler.net/9",
- "timestamp": {
- "t_ms": 1578334522000
- },
- "wire_reference": "000000000018C",
- "type": "DEPOSIT"
- }
- ],
- "reserveShortInfo": {
- "exchangeBaseUrl": "https://exchange.test.taler.net/",
- "reserveCreationDetail": {
- "type": "taler-bank-withdraw",
- "bankUrl": "https://bank.test.taler.net/api/withdraw-operation/6b5fae55-3634-4e6b-a877-2f8bd76dfaf9"
- },
- "reservePub": "5XZC4DQMNR3482443727Q2RNKRVEBEW7SFJ8N9TYV5AZ74AZJB4G"
- }
- },
- {
- "type": "withdrawn",
- "withdrawSessionId": "312AKNY5BGF08PY1ZK0Z2QBEZ3481NFP9BN36Z08FHJQQZW80EZG",
- "eventId": "withdrawn;312AKNY5BGF08PY1ZK0Z2QBEZ3481NFP9BN36Z08FHJQQZW80EZG",
- "amountWithdrawnEffective": "TESTKUDOS:15",
- "amountWithdrawnRaw": "TESTKUDOS:15",
- "exchangeBaseUrl": "https://exchange.test.taler.net/",
- "timestamp": {
- "t_ms": 1578334531085
- },
- "withdrawalSource": {
- "type": "reserve",
- "reservePub": "5XZC4DQMNR3482443727Q2RNKRVEBEW7SFJ8N9TYV5AZ74AZJB4G"
- }
- },
- {
- "type": "refreshed",
- "refreshGroupId": "3FN9PFD2JCPS3FDHZDPRS50VQT4G7SE54JDTG2ZW2HV1R3PJ9KBG",
- "eventId": "refreshed;3FN9PFD2JCPS3FDHZDPRS50VQT4G7SE54JDTG2ZW2HV1R3PJ9KBG",
- "timestamp": {
- "t_ms": 1578334532478
- },
- "refreshReason": "pay",
- "amountRefreshedEffective": "TESTKUDOS:2.46",
- "amountRefreshedRaw": "TESTKUDOS:2.46",
- "numInputCoins": 1,
- "numOutputCoins": 6,
- "numRefreshedInputCoins": 1
- },
- {
- "type": "refreshed",
- "refreshGroupId": "DF0DQ6MGJ39R0891B0P86MY2QTMPF9FPDJN30PRBMXBZ8XEVHZE0",
- "eventId": "refreshed;DF0DQ6MGJ39R0891B0P86MY2QTMPF9FPDJN30PRBMXBZ8XEVHZE0",
- "timestamp": {
- "t_ms": 1578334533177
- },
- "refreshReason": "pay",
- "amountRefreshedEffective": "TESTKUDOS:1.12",
- "amountRefreshedRaw": "TESTKUDOS:1.12",
- "numInputCoins": 4,
- "numOutputCoins": 3,
- "numRefreshedInputCoins": 1
- },
- {
- "type": "order-accepted",
- "eventId": "order-accepted;KYSVHAENJFQB308KF6ENPM46VJRFAXFRDGW856P7MM90AW60REZ0",
- "orderShortInfo": {
- "amount": "TESTKUDOS:0.5",
- "orderId": "2020.006-03WSPCDEZK6HG",
- "merchantBaseUrl": "https://backend.test.taler.net/public/instances/FSF/",
- "proposalId": "KYSVHAENJFQB308KF6ENPM46VJRFAXFRDGW856P7MM90AW60REZ0",
- "summary": "Essay: 6. Why Software Should Be Free"
- },
- "timestamp": {
- "t_ms": 1578334554161
- }
- },
- {
- "type": "payment-sent",
- "eventId": "payment-sent;KYSVHAENJFQB308KF6ENPM46VJRFAXFRDGW856P7MM90AW60REZ0",
- "orderShortInfo": {
- "amount": "TESTKUDOS:0.5",
- "orderId": "2020.006-03WSPCDEZK6HG",
- "merchantBaseUrl": "https://backend.test.taler.net/public/instances/FSF/",
- "proposalId": "KYSVHAENJFQB308KF6ENPM46VJRFAXFRDGW856P7MM90AW60REZ0",
- "summary": "Essay: 6. Why Software Should Be Free"
- },
- "replay": false,
- "sessionId": "489c048b-7702-49e8-b66f-2de5e33f0008",
- "timestamp": {
- "t_ms": 1578334556292
- },
- "numCoins": 5,
- "amountPaidWithFees": "TESTKUDOS:0.5"
- },
- {
- "type": "refreshed",
- "refreshGroupId": "NG8Z05Q8CM7KCC98PDNDQR0G920J2SGYM15ACBV0PMBE6XA8Q87G",
- "eventId": "refreshed;NG8Z05Q8CM7KCC98PDNDQR0G920J2SGYM15ACBV0PMBE6XA8Q87G",
- "timestamp": {
- "t_ms": 1578334568850
- },
- "refreshReason": "pay",
- "amountRefreshedEffective": "TESTKUDOS:0.06",
- "amountRefreshedRaw": "TESTKUDOS:0.06",
- "numInputCoins": 5,
- "numOutputCoins": 2,
- "numRefreshedInputCoins": 1
- },
- {
- "type": "refund",
- "eventId": "refund;FRW9DGXKPFS9HZEGFYMABDF6FRXDYNMFHH23FT71AAKN8FHGV2EG",
- "refundGroupId": "FRW9DGXKPFS9HZEGFYMABDF6FRXDYNMFHH23FT71AAKN8FHGV2EG",
- "orderShortInfo": {
- "amount": "TESTKUDOS:0.5",
- "orderId": "2020.006-03WSPCDEZK6HG",
- "merchantBaseUrl": "https://backend.test.taler.net/public/instances/FSF/",
- "proposalId": "KYSVHAENJFQB308KF6ENPM46VJRFAXFRDGW856P7MM90AW60REZ0",
- "summary": "Essay: 6. Why Software Should Be Free"
- },
- "timestamp": {
- "t_ms": 1578334581129
- },
- "amountRefundedEffective": "TESTKUDOS:0.5",
- "amountRefundedRaw": "TESTKUDOS:0.5",
- "amountRefundedInvalid": "TESTKUDOS:0"
- },
- {
- "type": "refreshed",
- "refreshGroupId": "TY8G0FDE83YJY3CWBYKMV891CADG06X8MTBZHE42XNQV2B2C95RG",
- "eventId": "refreshed;TY8G0FDE83YJY3CWBYKMV891CADG06X8MTBZHE42XNQV2B2C95RG",
- "timestamp": {
- "t_ms": 1578334585583
- },
- "refreshReason": "refund",
- "amountRefreshedEffective": "TESTKUDOS:0.5",
- "amountRefreshedRaw": "TESTKUDOS:0.5",
- "numInputCoins": 5,
- "numOutputCoins": 6,
- "numRefreshedInputCoins": 5
- }
- ]
-}
diff --git a/contrib/wallet-testdata b/contrib/wallet-testdata
new file mode 160000
+Subproject 7ca3d9b4751cbd513b3a45dfa9e337d4c5980ea