aboutsummaryrefslogtreecommitdiff
path: root/packages
diff options
context:
space:
mode:
authorÖzgür Kesim <oec-taler@kesim.org>2023-10-11 13:44:41 +0200
committerÖzgür Kesim <oec-taler@kesim.org>2023-10-11 13:44:41 +0200
commite13278315c99eaafda0c6dc59adc2511f04bb1ba (patch)
tree8facae92e3c8966a8ea3cce7622f0e3726b9043f /packages
parent490b813f77b3806343bbdd453d5abd29db9ea037 (diff)
parent0631187f42921fab0e20be91a95c1d7eacda277f (diff)
Merge branch 'master' into age-withdraw
Diffstat (limited to 'packages')
-rw-r--r--packages/taler-harness/src/index.ts1
-rw-r--r--packages/taler-util/Makefile42
-rw-r--r--packages/taler-util/src/wallet-types.ts37
-rw-r--r--packages/taler-wallet-core/src/wallet-api-types.ts16
-rw-r--r--packages/taler-wallet-core/src/wallet.ts53
5 files changed, 116 insertions, 33 deletions
diff --git a/packages/taler-harness/src/index.ts b/packages/taler-harness/src/index.ts
index f06a66a21..076f71355 100644
--- a/packages/taler-harness/src/index.ts
+++ b/packages/taler-harness/src/index.ts
@@ -581,6 +581,7 @@ deploymentCli
logger.error(
`unable to create instance ${instanceId}, HTTP status ${createResp.status}`,
);
+ process.exit(2);
}
const accountsUrl = new URL(
diff --git a/packages/taler-util/Makefile b/packages/taler-util/Makefile
new file mode 100644
index 000000000..def16c823
--- /dev/null
+++ b/packages/taler-util/Makefile
@@ -0,0 +1,42 @@
+# This Makefile has been placed in the public domain.
+
+ifeq ($(TOPLEVEL), yes)
+ $(info top-level build)
+ -include ../../.config.mk
+ override DESTDIR := $(TOP_DESTDIR)
+else
+ $(info package-level build)
+ -include ../../.config.mk
+ -include .config.mk
+endif
+
+$(info prefix is $(prefix))
+
+all:
+ @echo use 'make install' to build and install taler-util
+
+ifndef prefix
+.PHONY: warn-noprefix install
+warn-noprefix:
+ @echo "no prefix configured, did you run ./configure?"
+install: warn-noprefix
+else
+LIBDIR = $(prefix)/share/taler-js/taler-util
+NODE_DEPS = $(shell jq "(.dependencies|keys|map(\"node_modules/\" + .)|join(\" \"))" package.json -r)
+.PHONY: install install-nodeps deps
+install-nodeps:
+ pnpm compile
+ @echo installing taler-util to $(DESTDIR)$(prefix)
+ install -d $(DESTDIR)$(LIBDIR)/lib/globbing
+ install lib/*.* $(DESTDIR)$(LIBDIR)/lib
+ install lib/globbing/*.* $(DESTDIR)$(LIBDIR)/lib/globbing
+ install package.json $(DESTDIR)$(LIBDIR)
+ tar hcf - $(NODE_DEPS) | (cd $(DESTDIR)$(LIBDIR); tar xf -)
+
+deps:
+ pnpm install --frozen-lockfile --filter @gnu-taler/taler-util...
+ pnpm run --filter @gnu-taler/taler-util... compile
+install:
+ $(MAKE) deps
+ $(MAKE) install-nodeps
+endif
diff --git a/packages/taler-util/src/wallet-types.ts b/packages/taler-util/src/wallet-types.ts
index 4811d674f..9a4e15ae1 100644
--- a/packages/taler-util/src/wallet-types.ts
+++ b/packages/taler-util/src/wallet-types.ts
@@ -415,24 +415,28 @@ export const codecForScopeInfo = (): Codec<ScopeInfo> =>
.alternative(ScopeType.Auditor, codecForScopeInfoAuditor())
.build("ScopeInfo");
-export interface GetCurrencyInfoRequest {
+export interface GetCurrencySpecificationRequest {
scope: ScopeInfo;
}
export const codecForGetCurrencyInfoRequest =
- (): Codec<GetCurrencyInfoRequest> =>
- buildCodecForObject<GetCurrencyInfoRequest>()
+ (): Codec<GetCurrencySpecificationRequest> =>
+ buildCodecForObject<GetCurrencySpecificationRequest>()
.property("scope", codecForScopeInfo())
- .build("GetCurrencyInfoRequest");
+ .build("GetCurrencySpecificationRequest");
-export interface GetCurrencyInfoResponse {
- decimalSeparator: string;
- numFractionalDigits: number;
- numTinyDigits: number;
- /**
- * Is the currency name leading or trailing?
- */
- isCurrencyNameLeading: boolean;
+export interface GetCurrencySpecificationResponse {
+ currencySpecification: CurrencySpecification;
+}
+
+export interface CurrencySpecification {
+ decimal_separator: string;
+ fractional_input_digits: number;
+ fractional_normal_digits: number;
+ fractional_trailing_zero_digits: number;
+ is_currency_name_leading: boolean;
+ name: string;
+ alt_unit_names: { [n: number]: string };
}
export interface InitRequest {
@@ -1605,10 +1609,11 @@ export interface UpdateExchangeEntryRequest {
exchangeBaseUrl: string;
}
-export const codecForUpdateExchangeEntryRequest = (): Codec<UpdateExchangeEntryRequest> =>
- buildCodecForObject<UpdateExchangeEntryRequest>()
- .property("exchangeBaseUrl", codecForString())
- .build("UpdateExchangeEntryRequest");
+export const codecForUpdateExchangeEntryRequest =
+ (): Codec<UpdateExchangeEntryRequest> =>
+ buildCodecForObject<UpdateExchangeEntryRequest>()
+ .property("exchangeBaseUrl", codecForString())
+ .build("UpdateExchangeEntryRequest");
export interface ForceExchangeUpdateRequest {
exchangeBaseUrl: string;
diff --git a/packages/taler-wallet-core/src/wallet-api-types.ts b/packages/taler-wallet-core/src/wallet-api-types.ts
index 375e0a1b2..fadc7aa7f 100644
--- a/packages/taler-wallet-core/src/wallet-api-types.ts
+++ b/packages/taler-wallet-core/src/wallet-api-types.ts
@@ -61,8 +61,8 @@ import {
GetAmountRequest,
GetBalanceDetailRequest,
GetContractTermsDetailsRequest,
- GetCurrencyInfoRequest,
- GetCurrencyInfoResponse,
+ GetCurrencySpecificationRequest,
+ GetCurrencySpecificationResponse,
GetExchangeTosRequest,
GetExchangeTosResult,
GetPlanForOperationRequest,
@@ -218,7 +218,7 @@ export enum WalletApiOperation {
TestingWaitRefreshesFinal = "testingWaitRefreshesFinal",
TestingWaitTransactionState = "testingWaitTransactionState",
TestingSetTimetravel = "testingSetTimetravel",
- GetScopedCurrencyInfo = "getScopedCurrencyInfo",
+ GetCurrencySpecification = "getCurrencySpecification",
ListStoredBackups = "listStoredBackups",
CreateStoredBackup = "createStoredBackup",
DeleteStoredBackup = "deleteStoredBackup",
@@ -627,10 +627,10 @@ export type ListCurrenciesOp = {
response: WalletCurrencyInfo;
};
-export type GetScopedCurrencyInfoOp = {
- op: WalletApiOperation.GetScopedCurrencyInfo;
- request: GetCurrencyInfoRequest;
- response: GetCurrencyInfoResponse;
+export type GetCurrencySpecificationOp = {
+ op: WalletApiOperation.GetCurrencySpecification;
+ request: GetCurrencySpecificationRequest;
+ response: GetCurrencySpecificationResponse;
};
// group: Deposits
@@ -1136,7 +1136,7 @@ export type WalletOperations = {
[WalletApiOperation.TestingWaitRefreshesFinal]: TestingWaitRefreshesFinal;
[WalletApiOperation.TestingSetTimetravel]: TestingSetTimetravelOp;
[WalletApiOperation.TestingWaitTransactionState]: TestingWaitTransactionStateOp;
- [WalletApiOperation.GetScopedCurrencyInfo]: GetScopedCurrencyInfoOp;
+ [WalletApiOperation.GetCurrencySpecification]: GetCurrencySpecificationOp;
[WalletApiOperation.CreateStoredBackup]: CreateStoredBackupsOp;
[WalletApiOperation.ListStoredBackups]: ListStoredBackupsOp;
[WalletApiOperation.DeleteStoredBackup]: DeleteStoredBackupOp;
diff --git a/packages/taler-wallet-core/src/wallet.ts b/packages/taler-wallet-core/src/wallet.ts
index ead0ee407..571bf07ee 100644
--- a/packages/taler-wallet-core/src/wallet.ts
+++ b/packages/taler-wallet-core/src/wallet.ts
@@ -117,7 +117,7 @@ import {
sampleWalletCoreTransactions,
validateIban,
codecForSharePaymentRequest,
- GetCurrencyInfoResponse,
+ GetCurrencySpecificationResponse,
codecForGetCurrencyInfoRequest,
CreateStoredBackupResponse,
StoredBackupList,
@@ -1427,16 +1427,51 @@ async function dispatchRequestInternal<Op extends WalletApiOperation>(
await waitTransactionState(ws, req.transactionId, req.txState);
return {};
}
- case WalletApiOperation.GetScopedCurrencyInfo: {
+ case WalletApiOperation.GetCurrencySpecification: {
// Ignore result, just validate in this mock implementation
- codecForGetCurrencyInfoRequest().decode(payload);
- const resp: GetCurrencyInfoResponse = {
- decimalSeparator: ",",
- isCurrencyNameLeading: false,
- numFractionalDigits: 2,
- numTinyDigits: 1,
+ const req = codecForGetCurrencyInfoRequest().decode(payload);
+ // Hard-coded mock for KUDOS and TESTKUDOS
+ if (req.scope.currency === "KUDOS") {
+ const kudosResp: GetCurrencySpecificationResponse = {
+ currencySpecification: {
+ decimal_separator: ",",
+ name: "Kudos (Taler Demonstrator)",
+ fractional_input_digits: 2,
+ fractional_normal_digits: 2,
+ fractional_trailing_zero_digits: 2,
+ is_currency_name_leading: true,
+ alt_unit_names: {
+ "0": "ク",
+ },
+ },
+ };
+ return kudosResp;
+ } else if (req.scope.currency === "TESTKUDOS") {
+ const testkudosResp: GetCurrencySpecificationResponse = {
+ currencySpecification: {
+ decimal_separator: ",",
+ name: "Test (Taler Unstable Demonstrator)",
+ fractional_input_digits: 0,
+ fractional_normal_digits: 0,
+ fractional_trailing_zero_digits: 0,
+ is_currency_name_leading: false,
+ alt_unit_names: {},
+ },
+ };
+ return testkudosResp;
+ }
+ const defaultResp: GetCurrencySpecificationResponse = {
+ currencySpecification: {
+ decimal_separator: ",",
+ name: "Unknown",
+ fractional_input_digits: 2,
+ fractional_normal_digits: 2,
+ fractional_trailing_zero_digits: 2,
+ is_currency_name_leading: true,
+ alt_unit_names: {},
+ },
};
- return resp;
+ return defaultResp;
}
case WalletApiOperation.ImportBackupRecovery: {
const req = codecForAny().decode(payload);