Merge branch 'master' into age-withdraw
This commit is contained in:
commit
e13278315c
@ -29,5 +29,6 @@ copy_configure "$our_configure" ./configure
|
||||
copy_configure "$our_configure" ./packages/taler-wallet-cli/configure
|
||||
copy_configure "$our_configure" ./packages/anastasis-cli/configure
|
||||
copy_configure "$our_configure" ./packages/demobank-ui/configure
|
||||
copy_configure "$our_configure" ./packages/merchant-backoffice-ui/configure
|
||||
copy_configure "$our_configure" ./packages/taler-harness/configure
|
||||
copy_configure "$our_configure" ./packages/taler-util/configure
|
||||
copy_configure "$our_configure" ./packages/merchant-backoffice-ui/configure
|
||||
|
@ -581,6 +581,7 @@ deploymentCli
|
||||
logger.error(
|
||||
`unable to create instance ${instanceId}, HTTP status ${createResp.status}`,
|
||||
);
|
||||
process.exit(2);
|
||||
}
|
||||
|
||||
const accountsUrl = new URL(
|
||||
|
42
packages/taler-util/Makefile
Normal file
42
packages/taler-util/Makefile
Normal file
@ -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
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user