From ae8af3f27c0ed1746c49a7608fe05af24ae8a18b Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Tue, 23 Nov 2021 23:51:12 +0100 Subject: wallet: tipping protocol change / merchant version info --- .../taler-wallet-core/src/operations/merchants.ts | 68 ++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 packages/taler-wallet-core/src/operations/merchants.ts (limited to 'packages/taler-wallet-core/src/operations/merchants.ts') diff --git a/packages/taler-wallet-core/src/operations/merchants.ts b/packages/taler-wallet-core/src/operations/merchants.ts new file mode 100644 index 000000000..d12417c7c --- /dev/null +++ b/packages/taler-wallet-core/src/operations/merchants.ts @@ -0,0 +1,68 @@ +/* + This file is part of GNU Taler + (C) 2021 Taler Systems S.A.. + + GNU Taler is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + GNU Taler; see the file COPYING. If not, see + */ + +/** + * Imports. + */ +import { + canonicalizeBaseUrl, + Logger, + URL, + codecForMerchantConfigResponse, + LibtoolVersion, +} from "@gnu-taler/taler-util"; +import { InternalWalletState, MerchantInfo } from "../common.js"; +import { readSuccessResponseJsonOrThrow } from "../index.js"; + +const logger = new Logger("taler-wallet-core:merchants.ts"); + +export async function getMerchantInfo( + ws: InternalWalletState, + merchantBaseUrl: string, +): Promise { + const canonBaseUrl = canonicalizeBaseUrl(merchantBaseUrl); + + const existingInfo = ws.merchantInfoCache[canonBaseUrl]; + if (existingInfo) { + return existingInfo; + } + + const configUrl = new URL("config", canonBaseUrl); + const resp = await ws.http.get(configUrl.href); + + const configResp = await readSuccessResponseJsonOrThrow( + resp, + codecForMerchantConfigResponse(), + ); + + logger.info( + `merchant "${canonBaseUrl}" reports protocol ${configResp.version}"`, + ); + + const merchantInfo: MerchantInfo = { + supportsMerchantProtocolV1: !!LibtoolVersion.compare( + "1:0:0", + configResp.version, + )?.compatible, + supportsMerchantProtocolV2: !!LibtoolVersion.compare( + "2:0:0", + configResp.version, + )?.compatible, + }; + + ws.merchantInfoCache[canonBaseUrl] = merchantInfo; + return merchantInfo; +} -- cgit v1.2.3