diff options
author | Florian Dold <florian@dold.me> | 2021-11-23 23:51:12 +0100 |
---|---|---|
committer | Florian Dold <florian@dold.me> | 2021-11-23 23:51:12 +0100 |
commit | ae8af3f27c0ed1746c49a7608fe05af24ae8a18b (patch) | |
tree | c28f588071bdd1d4cda2279e62563a3664d79be9 /packages/taler-wallet-core/src/operations/merchants.ts | |
parent | 829a59e1a24d6a99ce7554d28acfd05f21baeaf8 (diff) | |
download | wallet-core-ae8af3f27c0ed1746c49a7608fe05af24ae8a18b.tar.xz |
wallet: tipping protocol change / merchant version info
Diffstat (limited to 'packages/taler-wallet-core/src/operations/merchants.ts')
-rw-r--r-- | packages/taler-wallet-core/src/operations/merchants.ts | 68 |
1 files changed, 68 insertions, 0 deletions
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 <http://www.gnu.org/licenses/> + */ + +/** + * 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<MerchantInfo> { + 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; +} |