diff options
author | Sebastian <sebasjm@gmail.com> | 2021-08-27 11:28:26 -0300 |
---|---|---|
committer | Sebastian <sebasjm@gmail.com> | 2021-08-27 11:28:39 -0300 |
commit | eae88828683ec05d438dd4908d86b73e67e9707d (patch) | |
tree | bf8e494c40c0f6f03a5a35fdf19c609fe7d75a7a | |
parent | f4cbd85008d14a78433b9495cce48903192e2e0d (diff) | |
download | merchant-backoffice-eae88828683ec05d438dd4908d86b73e67e9707d.tar.gz merchant-backoffice-eae88828683ec05d438dd4908d86b73e67e9707d.tar.bz2 merchant-backoffice-eae88828683ec05d438dd4908d86b73e67e9707d.zip |
merchant backend pages
74 files changed, 20031 insertions, 48 deletions
diff --git a/packages/backend/.gitignore b/packages/backend/.gitignore new file mode 100644 index 0000000..db8559a --- /dev/null +++ b/packages/backend/.gitignore @@ -0,0 +1,8 @@ +/build +/size-plugin.json +/storybook-static +/docs +/single +/coverage +/dist +/.rollup.cache diff --git a/packages/backend/.linaria-cache/src/pages/OfferTip.linaria.css b/packages/backend/.linaria-cache/src/pages/OfferTip.linaria.css new file mode 100644 index 0000000..9ba2add --- /dev/null +++ b/packages/backend/.linaria-cache/src/pages/OfferTip.linaria.css @@ -0,0 +1,2 @@ +.d54jv91{background-color:red;} +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9wYWdlcy9PZmZlclRpcC50c3giXSwibmFtZXMiOlsiLmQ1NGp2OTEiXSwibWFwcGluZ3MiOiJBQTJCTUEiLCJmaWxlIjoic3JjL3BhZ2VzL09mZmVyVGlwLnRzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIFRhbGVyXG4gKEMpIDIwMjEgVGFsZXIgU3lzdGVtcyBTLkEuXG5cbiBHTlUgVGFsZXIgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGVcbiB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlXG4gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuIEdOVSBUYWxlciBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTllcbiBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUlxuIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aFxuIEdOVSBUYWxlcjsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz5cbiAqL1xuXG4vKipcbipcbiogQGF1dGhvciBTZWJhc3RpYW4gSmF2aWVyIE1hcmNoYW5vIChzZWJhc2ptKVxuKi9cbmltcG9ydCB7IHJlbmRlciwgaCwgVk5vZGUsIEZyYWdtZW50IH0gZnJvbSAncHJlYWN0JztcbmltcG9ydCB7IHVzZUVmZmVjdCB9IGZyb20gJ3ByZWFjdC9ob29rcyc7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tIFwiQGxpbmFyaWEvcmVhY3RcIlxuaW1wb3J0IFwiLi4vY3NzL3B1cmUtbWluLmNzc1wiXG5pbXBvcnQgXCIuLi9jc3Mvc3R5bGUuY3NzXCJcblxuXG5jb25zdCBEaXZSZWQgPSBzdHlsZWQuZGl2YFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZWQ7XG5gO1xuXG5leHBvcnQgZnVuY3Rpb24gT2ZmZXJUaXAoKTogVk5vZGUge1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGNoZWNrVXJsID0gXCJ7eyYgdGlwX3N0YXR1c191cmwgfX1cIjtcbiAgICBjb25zdCBkZWxheU1zID0gNTAwO1xuICAgIGZ1bmN0aW9uIGNoZWNrKCkge1xuICAgICAgbGV0IHJldHJpZWQgPSBmYWxzZTtcbiAgICAgIGZ1bmN0aW9uIHJldHJ5T25jZSgpIHtcbiAgICAgICAgaWYgKCFyZXRyaWVkKSB7XG4gICAgICAgICAgcmV0cmllZCA9IHRydWU7XG4gICAgICAgICAgY2hlY2soKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICByZXEub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAocmVxLnJlYWR5U3RhdGUgPT09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpIHtcbiAgICAgICAgICBpZiAocmVxLnN0YXR1cyA9PT0gNDEwKSB7XG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZXRUaW1lb3V0KHJldHJ5T25jZSwgZGVsYXlNcyk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2V0VGltZW91dChyZXRyeU9uY2UsIGRlbGF5TXMpO1xuICAgICAgfVxuICAgICAgLy8gcmVxLm9wZW4oXCJHRVRcIiwgY2hlY2tVcmwpO1xuICAgICAgcmVxLnNlbmQoKTtcbiAgICB9XG5cbiAgICAvLyBzZXRUaW1lb3V0KGNoZWNrLCBkZWxheU1zKTtcbiAgfSlcbiAgcmV0dXJuIDxGcmFnbWVudD5cbiAgPHNlY3Rpb24gaWQ9XCJtYWluXCIgY2xhc3M9XCJjb250ZW50XCI+XG4gICAgPGgxPkNvbGxlY3QgVGFsZXIgdGlwPC9oMT5cbiAgICA8ZGl2IGNsYXNzPVwidGFsZXItaW5zdGFsbGVkLWhpZGVcIj5cbiAgICAgIDxwPlxuICAgICAgICBTY2FuIHRoaXMgUVIgY29kZSB3aXRoIHlvdXIgVGFsZXIgbW9iaWxlIHdhbGxldDpcbiAgICAgIDwvcD5cbiAgICAgIDxkaXYgY2xhc3M9XCJxclwiPlxuICAgICAgICB7Lyoge3t7dGFsZXJfdGlwX3FyY29kZV9zdmd9fX0gKi99XG4gICAgICA8L2Rpdj5cbiAgICAgIDxwPlxuICAgICAgICA8YnV0dG9uIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAvLyB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICd7e3RhbGVyX3JlZnVuZF91cml9fSdcbiAgICAgICAgfX0+XG4gICAgICAgICAgT3Igb3BlbiB5b3VyIFRhbGxlciB3YWxsZXRcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3A+XG4gICAgICA8cD5cbiAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8vd2FsbGV0LnRhbGVyLm5ldC9cIj5Eb24ndCBoYXZlIGEgVGFsZXIgd2FsbGV0IHlldD8gSW5zdGFsbCBpdCE8L2E+XG4gICAgICA8L3A+XG4gICAgPC9kaXY+XG4gICAgPGhyIC8+XG4gICAgPERpdlJlZD5cbiAgICAgIHRoaXMgYmFja2dyb3VuZCBpcyByZWRhc2RzYVxuICAgIDwvRGl2UmVkPlxuICA8L3NlY3Rpb24+XG4gIDxGb290ZXIgLz5cbiAgPC9GcmFnbWVudD5cbn1cblxuZnVuY3Rpb24gRm9vdGVyKCkge1xuICByZXR1cm4gPGRpdiBjbGFzcz1cInRhbGVyYmFyXCI+XG4gICAgPHA+WW91IGNhbiBsZWFybiBtb3JlIGFib3V0IEdOVSBUYWxlciBvbiBvdXIgPGEgaHJlZj1cImh0dHBzOi8vdGFsZXIubmV0L1wiPndlYnNpdGU8L2E+LjxiciAvPlxuICAgICAgQ29weXJpZ2h0ICZjb3B5OyAyMDE0Jm1kYXNoOzIwMjEgVGFsZXIgU3lzdGVtcyBTQTwvcD5cbiAgPC9kaXY+XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIFRpdGxlKCk6IFZOb2RlIHtcbiAgcmV0dXJuIDx0aXRsZT5UaXAgYXZhaWxhYmxlPC90aXRsZT5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1haW4oKTogdm9pZCB7XG4gIHRyeSB7XG4gICAgcmVuZGVyKDxPZmZlclRpcCAvPiwgZG9jdW1lbnQuYm9keSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiZ290IGVycm9yXCIsIGUpO1xuICAgIGRvY3VtZW50LmJvZHkuaW5uZXJUZXh0ID0gYEZhdGFsIGVycm9yOiBcIiR7ZS5tZXNzYWdlfVwiLiAgUGxlYXNlIHJlcG9ydCB0aGlzIGJ1ZyBhdCBodHRwczovL2J1Z3MuZ251bmV0Lm9yZy8uYDtcbiAgfVxufVxuXG4iXX0=*/
\ No newline at end of file diff --git a/packages/backend/.storybook/.babelrc b/packages/backend/.storybook/.babelrc new file mode 100644 index 0000000..610b6f3 --- /dev/null +++ b/packages/backend/.storybook/.babelrc @@ -0,0 +1,25 @@ +/* + 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/> + */ + + /** + * + * @author Sebastian Javier Marchano (sebasjm) + */ +{ + "presets": [ + "preact-cli/babel" + ] +}
\ No newline at end of file diff --git a/packages/backend/.storybook/main.js b/packages/backend/.storybook/main.js new file mode 100644 index 0000000..5497a65 --- /dev/null +++ b/packages/backend/.storybook/main.js @@ -0,0 +1,82 @@ +/* + 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/> + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ + + +module.exports = { + "stories": [ + "../src/**/*.stories.mdx", + "../src/**/*.stories.@(js|jsx|ts|tsx)" + ], + "addons": [ + "@storybook/preset-scss", + "@storybook/addon-a11y", + "@storybook/addon-essentials" //docs, control, actions, viewpot, toolbar, background + ], + // sb does not yet support new jsx transform by default + // https://github.com/storybookjs/storybook/issues/12881 + // https://github.com/storybookjs/storybook/issues/12952 + babel: async (options) => ({ + ...options, + presets: [ + ...options.presets, + [ + '@babel/preset-react', { + runtime: 'automatic', + }, + 'preset-react-jsx-transform' + ], + "@linaria", + ], + }), + webpackFinal: (config) => { + // should be removed after storybook 6.3 + // https://github.com/storybookjs/storybook/issues/12853#issuecomment-821576113 + config.resolve.alias = { + react: "preact/compat", + "react-dom": "preact/compat", + }; + + // we need to add @linaria loader AFTER the babel-loader + // https://github.com/callstack/linaria/blob/master/docs/BUNDLERS_INTEGRATION.md#webpack + config.module.rules[0] = { + ...(config.module.rules[0]), + loader: undefined, // Disable the predefined babel-loader on the rule + use: [ + { + ...(config.module.rules[0].use[0]), + loader: 'babel-loader', + }, + { + loader: '@linaria/webpack-loader', + options: { + sourceMap: true, //always true since this is dev + babelOptions: { + presets: config.module.rules[0].use[0].options.presets, + } + // Pass the current babel options to linaria's babel instance + } + } + ] + }; + + return config; + }, +}
\ No newline at end of file diff --git a/packages/backend/.storybook/preview.js b/packages/backend/.storybook/preview.js new file mode 100644 index 0000000..a9cc4c3 --- /dev/null +++ b/packages/backend/.storybook/preview.js @@ -0,0 +1,73 @@ +/* + 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/> + */ + +import { ConfigContextProvider } from '../src/context/config' +import { InstanceContextProvider } from '../src/context/instance' +import { TranslationProvider } from '../src/context/translation' +import { BackendContextProvider } from '../src/context/backend' +import { h } from 'preact'; + +const mockConfig = { + backendURL: 'http://demo.taler.net', + currency: 'TESTKUDOS' +} + +const mockInstance = { + id: 'instance-id', + token: 'instance-token', + admin: false, +} + +const mockBackend = { + url: 'http://merchant.url', + token: 'default-token', + triedToLog: false, +} + +export const parameters = { + controls: { expanded: true }, + // actions: { argTypesRegex: "^on.*" }, +} + +export const globalTypes = { + locale: { + name: 'Locale', + description: 'Internationalization locale', + defaultValue: 'en', + toolbar: { + icon: 'globe', + items: [ + { value: 'en', right: 'πΊπΈ', title: 'English' }, + { value: 'es', right: 'πͺπΈ', title: 'Spanish' }, + ], + }, + }, +}; + +export const decorators = [ + (Story, { globals }) => <TranslationProvider initial='en' forceLang={globals.locale}> + <Story /> + </TranslationProvider>, + (Story) => <ConfigContextProvider value={mockConfig}> + <Story /> + </ConfigContextProvider>, + (Story) => <InstanceContextProvider value={mockInstance}> + <Story /> + </InstanceContextProvider>, + (Story) => <BackendContextProvider defaultUrl={mockBackend.url}> + <Story /> + </BackendContextProvider>, +]; diff --git a/packages/backend/contrib/po2ts b/packages/backend/contrib/po2ts new file mode 100755 index 0000000..a135da6 --- /dev/null +++ b/packages/backend/contrib/po2ts @@ -0,0 +1,42 @@ +#!/usr/bin/env node +/* + This file is part of GNU Taler + (C) 2020 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/> + */ + +/** + * Convert a <lang>.po file into a JavaScript / TypeScript expression. + */ + +const po2json = require("po2json"); + +const filename = process.argv[2]; + +if (!filename) { + console.error("error: missing filename"); + process.exit(1); +} + +const m = filename.match(/([a-zA-Z0-9-_]+).po/); + +if (!m) { + console.error("error: unexpected filename (expected <lang>.po)"); + process.exit(1); +} + +const lang = m[1]; +const pojson = po2json.parseFileSync(filename, { format: "jed1.x", fuzzy: true }); +const s = + "strings['" + lang + "'] = " + JSON.stringify(pojson, null, " ") + ";\n"; +console.log(s); diff --git a/packages/backend/copyleft-header.js b/packages/backend/copyleft-header.js new file mode 100644 index 0000000..0794cb8 --- /dev/null +++ b/packages/backend/copyleft-header.js @@ -0,0 +1,15 @@ +/* + 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/> + */ diff --git a/packages/backend/package.json b/packages/backend/package.json new file mode 100644 index 0000000..6a78f5f --- /dev/null +++ b/packages/backend/package.json @@ -0,0 +1,142 @@ +{ + "private": true, + "name": "merchant-backend", + "version": "0.0.4", + "license": "MIT", + "scripts": { + "build": "rollup -c", + "compile": "tsc", + "dev": "rollup -c -w", + "lint-check": "eslint '{src,tests}/**/*.{js,jsx,ts,tsx}'", + "lint-fix": "eslint --fix '{src,tests}/**/*.{js,jsx,ts,tsx}'", + "test": "jest ./tests", + "dev-test": "jest ./tests --watch", + "typedoc": "typedoc src", + "clean": "rimraf build storybook-static docs single", + "serve-dist": "sirv --port ${PORT:=8080} --cors --single dist", + "build-storybook": "build-storybook", + "storybook": "start-storybook -p 6006" + }, + "engines": { + "node": ">=12", + "pnpm": ">=5" + }, + "eslintConfig": { + "parser": "@typescript-eslint/parser", + "extends": [ + "preact", + "plugin:@typescript-eslint/recommended" + ], + "plugins": [ + "header" + ], + "rules": { + "header/header": [ + 2, + "copyleft-header.js" + ] + }, + "ignorePatterns": [ + "build/" + ] + }, + "dependencies": { + "@gnu-taler/taler-util": "0.8.3", + "axios": "^0.21.1", + "date-fns": "^2.21.1", + "history": "4.10.1", + "jed": "^1.1.1", + "preact": "^10.5.13", + "preact-router": "^3.2.1", + "qrcode-generator": "^1.4.4", + "swr": "^0.5.5", + "yup": "^0.32.9" + }, + "devDependencies": { + "@babel/core": "^7.13.16", + "@babel/plugin-transform-react-jsx-source": "^7.12.13", + "@creativebulma/bulma-tooltip": "^1.2.0", + "@gnu-taler/pogen": "^0.0.5", + "@linaria/babel-preset": "^3.0.0-beta.4", + "@linaria/core": "^3.0.0-beta.4", + "@linaria/react": "^3.0.0-beta.7", + "@linaria/rollup": "^3.0.0-beta.7", + "@linaria/shaker": "^3.0.0-beta.7", + "@linaria/webpack-loader": "^3.0.0-beta.7", + "@rollup/plugin-alias": "^3.1.5", + "@rollup/plugin-babel": "^5.3.0", + "@rollup/plugin-commonjs": "^20.0.0", + "@rollup/plugin-html": "^0.2.3", + "@rollup/plugin-image": "^2.1.1", + "@rollup/plugin-json": "^4.1.0", + "@rollup/plugin-replace": "^3.0.0", + "@rollup/plugin-typescript": "^8.2.5", + "@storybook/addon-a11y": "^6.2.9", + "@storybook/addon-actions": "^6.2.9", + "@storybook/addon-essentials": "^6.2.9", + "@storybook/addon-links": "^6.2.9", + "@storybook/preact": "^6.2.9", + "@storybook/preset-scss": "^1.0.3", + "@testing-library/preact": "^2.0.1", + "@testing-library/preact-hooks": "^1.1.0", + "@types/enzyme": "^3.10.8", + "@types/history": "^4.7.8", + "@types/jest": "^26.0.23", + "@types/mocha": "^8.2.2", + "@typescript-eslint/eslint-plugin": "^4.22.0", + "@typescript-eslint/parser": "^4.22.0", + "babel-loader": "^8.2.2", + "base64-inline-loader": "^1.1.1", + "bulma": "^0.9.2", + "bulma-checkbox": "^1.1.1", + "bulma-radio": "^1.1.1", + "bulma-responsive-tables": "^1.2.3", + "bulma-switch-control": "^1.1.1", + "bulma-timeline": "^3.0.4", + "bulma-upload-control": "^1.2.0", + "dotenv": "^8.2.0", + "enzyme": "^3.11.0", + "enzyme-adapter-preact-pure": "^3.1.0", + "eslint": "^7.25.0", + "eslint-config-preact": "^1.1.4", + "eslint-plugin-header": "^3.1.1", + "html-webpack-inline-chunk-plugin": "^1.1.1", + "html-webpack-inline-source-plugin": "0.0.10", + "html-webpack-skip-assets-plugin": "^1.0.1", + "inline-chunk-html-plugin": "^1.1.1", + "jest": "^26.6.3", + "jest-preset-preact": "^4.0.2", + "po2json": "^0.4.5", + "preact-cli": "^3.0.5", + "preact-render-to-json": "^3.6.6", + "preact-render-to-string": "^5.1.19", + "rimraf": "^3.0.2", + "rollup": "^2.56.3", + "rollup-plugin-bundle-html": "^0.2.2", + "rollup-plugin-css-only": "^3.1.0", + "sass": "^1.32.13", + "sass-loader": "10.1.1", + "script-ext-html-webpack-plugin": "^2.1.5", + "sirv-cli": "^1.0.11", + "tslib": "^2.3.1", + "typedoc": "^0.20.36", + "typescript": "^4.2.4" + }, + "jest": { + "preset": "jest-preset-preact", + "transformIgnorePatterns": [ + "node_modules/.pnpm/(?!(@gnu-taler\\+taler-util))", + "\\.pnp\\.[^\\/]+$" + ], + "setupFiles": [ + "<rootDir>/tests/__mocks__/browserMocks.ts", + "<rootDir>/tests/__mocks__/setupTests.ts" + ], + "moduleNameMapper": { + "\\.(css|less)$": "identity-obj-proxy" + }, + "transform": { + "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga|po)$": "<rootDir>/tests/__mocks__/fileTransformer.js" + } + } +} diff --git a/packages/backend/rollup.config.js b/packages/backend/rollup.config.js new file mode 100644 index 0000000..9051adc --- /dev/null +++ b/packages/backend/rollup.config.js @@ -0,0 +1,100 @@ +/* + 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/> + */ + +// rollup.config.js +import linaria from '@linaria/rollup'; +import nodeResolve from "@rollup/plugin-node-resolve"; +import alias from "@rollup/plugin-alias"; +import image from '@rollup/plugin-image'; +import json from "@rollup/plugin-json"; +import ts from "@rollup/plugin-typescript"; +import replace from "@rollup/plugin-replace"; +import css from 'rollup-plugin-css-only'; +import html from '@rollup/plugin-html'; + + + +const template = async ({ + files, + title +}) => { + const scripts = (files.js || []).map(({ code }) => `<script>${code}</script>`).join('\n'); + const css = (files.css || []).map(({ source }) => `<style>${source}</style>`).join('\n'); + return ` +<!doctype html> +<html> + <head> + <title>${title}</title> + ${css} + </head> + <body> + ${scripts} + <script>page.mountIntoBody()</script> + </body> +</html>`; +}; + +const makePlugins = (name) => [ + alias({ + entries: [ + { find: 'react', replacement: 'preact/compat' }, + { find: 'react-dom', replacement: 'preact/compat' } + ] + }), + + replace({ + "process.env.NODE_ENV": JSON.stringify("production"), + preventAssignment: true, + }), + + nodeResolve({ + browser: true, + preferBuiltins: true, + }), + + json(), + image(), + + linaria({ + sourceMap: process.env.NODE_ENV !== 'production', + }), + css(), + ts({ + sourceMap: false, + outputToFilesystem: false, + }), + html({ template, fileName: name }), +]; + + +const pageDefinition = (name) => ({ + input: `src/pages/${name}.tsx`, + output: { + file: `dist/pages/${name}.js`, + format: "iife", + exports: 'named', + name: 'page', + }, + plugins: makePlugins(`${name}.html`), +}); + +export default [ + pageDefinition("OfferTip"), + pageDefinition("OfferRefund"), + pageDefinition("DepletedTip"), + pageDefinition("RequestPayment"), + pageDefinition("ShowOrderDetails"), +] diff --git a/packages/backend/src/assets/empty.png b/packages/backend/src/assets/empty.png Binary files differnew file mode 100644 index 0000000..5120d31 --- /dev/null +++ b/packages/backend/src/assets/empty.png diff --git a/packages/backend/src/assets/icons/android-chrome-192x192.png b/packages/backend/src/assets/icons/android-chrome-192x192.png Binary files differnew file mode 100644 index 0000000..93ebe2e --- /dev/null +++ b/packages/backend/src/assets/icons/android-chrome-192x192.png diff --git a/packages/backend/src/assets/icons/android-chrome-512x512.png b/packages/backend/src/assets/icons/android-chrome-512x512.png Binary files differnew file mode 100644 index 0000000..52d1623 --- /dev/null +++ b/packages/backend/src/assets/icons/android-chrome-512x512.png diff --git a/packages/backend/src/assets/icons/apple-touch-icon.png b/packages/backend/src/assets/icons/apple-touch-icon.png Binary files differnew file mode 100644 index 0000000..254e4bb --- /dev/null +++ b/packages/backend/src/assets/icons/apple-touch-icon.png diff --git a/packages/backend/src/assets/icons/favicon-16x16.png b/packages/backend/src/assets/icons/favicon-16x16.png Binary files differnew file mode 100644 index 0000000..e81177d --- /dev/null +++ b/packages/backend/src/assets/icons/favicon-16x16.png diff --git a/packages/backend/src/assets/icons/favicon-32x32.png b/packages/backend/src/assets/icons/favicon-32x32.png Binary files differnew file mode 100644 index 0000000..40e9b5b --- /dev/null +++ b/packages/backend/src/assets/icons/favicon-32x32.png diff --git a/packages/backend/src/assets/icons/languageicon.svg b/packages/backend/src/assets/icons/languageicon.svg new file mode 100644 index 0000000..22d58da --- /dev/null +++ b/packages/backend/src/assets/icons/languageicon.svg @@ -0,0 +1,48 @@ +<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 2411.2 2794" style="enable-background:new 0 0 2411.2 2794;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#FFFFFF;}
+ .st1{fill-rule:evenodd;clip-rule:evenodd;}
+ .st2{fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;}
+</style>
+<g id="Layer_2">
+</g>
+<g id="Layer_x5F_1_x5F_1">
+ <g>
+ <polygon points="1204.6,359.2 271.8,30 271.8,2060.1 1204.6,1758.3 "/>
+ <polygon class="st0" points="1182.2,358.1 2150.6,29 2150.6,2059 1182.2,1757.3 "/>
+ <polygon class="st0" points="30,2415.4 1182.2,2031.4 1182.2,357.9 30,742 "/>
+ <polygon points="1707.2,2440.7 1870.5,2709.4 1956.6,2459.8 "/>
+ <g>
+ <path d="M421.7,934.8c-6.1-6,8,49.1,27.6,68.9c34.8,35.1,61.9,39.6,76.4,40.2c32,1.3,71.5-8,94.9-17.8
+ c22.7-9.7,62.4-30,77.5-59.6c3.2-6.3,11.9-17,6.4-43.2c-4.2-20.2-17-27.3-32.7-26.2c-15.7,1.1-63.2,13.7-86.1,20.8
+ c-23,7-70.3,21.4-90.9,25.8C474.3,948.2,429,941.7,421.7,934.8z"/>
+ <path d="M1003.1,1593.7c-9.1-3.3-196.9-81.1-223.6-93.9c-21.8-10.5-75.2-33.1-100.4-43.3c70.8-109.2,115.5-191.6,121.5-204.1
+ c11-23,86-169.6,87.7-178.7c1.7-9.1,3.8-42.9,2.2-51c-1.7-8.2-29.1,7.6-66.4,20.2c-37.4,12.6-108.4,58.8-135.8,64.6
+ c-27.5,5.7-115.5,39.1-160.5,54c-45,14.9-130.2,40.9-165.2,50.4c-35.1,9.5-65.7,10.2-85.3,16.2c0,0,2.6,27.5,7.8,35.7
+ c5.2,8.2,23.7,28.4,45.3,34.1c21.6,5.7,57.3,3.4,73.6-0.3c16.3-3.8,44.4-17.5,48.2-23.6c3.8-6.1-2-24.9,4.5-30.6
+ c6.5-5.6,92.2-25.7,124.6-35.4c32.4-10,156.3-52.6,173.1-50.5c-5.3,17.7-105,215.1-137.1,274c-32.1,58.9-218.6,318-258.3,363.6
+ c-30.1,34.7-103.2,123.5-128.5,143.6c6.4,1.8,51.6-2.1,59.9-7.2c51.3-31.6,136.9-138.1,164.4-170.5
+ c81.9-96,153.8-196.8,210.8-283.4h0.1c11.1,4.6,100.9,77.8,124.4,94c23.4,16.2,115.9,67.8,136,76.4c20,8.7,97.1,44.2,100.3,32.2
+ C1029.4,1668,1012.2,1597.1,1003.1,1593.7z"/>
+ </g>
+ <path class="st1" d="M569,2572c18,11,35,20,54,29c38,19,81,39,122,54c56,21,112,38,168,51c31,7,65,13,98,18c3,0,92,11,110,11h90
+ c35-3,68-5,103-10c28-4,59-9,89-16c22-5,45-10,67-17c21-6,45-14,68-22c15-5,31-12,47-18c13-6,29-13,44-19c18-8,39-19,59-29
+ c16-8,34-18,51-28c13-7,43-30,59-30c18,0,30,16,30,30c0,29-39,38-57,51c-19,13-42,23-62,34c-40,21-81,39-120,54
+ c-51,19-107,37-157,49c-19,4-38,9-57,12c-10,2-114,18-143,18h-132c-35-3-72-7-107-12c-31-5-64-11-95-18c-24-5-50-12-73-19
+ c-40-11-79-25-117-40c-69-26-141-60-209-105c-12-8-13-16-13-25c0-15,11-29,29-29C531,2546,563,2569,569,2572z"/>
+ <path class="st1" d="M1151,2009L61,2372V764l1090-363V2009z M1212,354v1680c-1,5-3,10-7,15c-2,3-6,7-9,8c-25,10-1151,388-1166,388
+ c-12,0-23-8-29-21c0-1-1-2-1-4V739c2-5,3-12,7-16c8-11,22-13,31-16c17-6,1126-378,1142-378C1190,329,1212,336,1212,354z"/>
+ <path class="st1" d="M2120,2017l-907-282V380l907-308V2017z M2181,32v2023c-1,23-17,33-32,33c-13,0-107-32-123-37
+ c-126-39-253-78-378-117c-28-9-57-18-84-27c-24-7-50-15-74-23c-107-33-216-66-323-102c-4-1-14-15-14-18V351c2-5,4-11,9-15
+ c8-9,351-123,486-168c36-13,487-168,501-168C2167,0,2181,13,2181,32z"/>
+ <polygon points="2411.2,2440.7 1199.5,2054.5 1204.6,373.2 2411.2,757.2 "/>
+ <g>
+ <path class="st2" d="M1800.3,1124.6L1681.4,1412l218.6,66.3L1800.3,1124.6z M1729,853.2l156.1,47.3l284.4,1025l-160.3-48.7
+ l-57.6-210.4L1620.2,1566l-71.3,171.4l-160.4-48.7L1729,853.2z"/>
+ </g>
+ </g>
+</g>
+</svg>
diff --git a/packages/backend/src/assets/icons/mstile-150x150.png b/packages/backend/src/assets/icons/mstile-150x150.png Binary files differnew file mode 100644 index 0000000..9cfb889 --- /dev/null +++ b/packages/backend/src/assets/icons/mstile-150x150.png diff --git a/packages/backend/src/context/backend.ts b/packages/backend/src/context/backend.ts new file mode 100644 index 0000000..a920d6f --- /dev/null +++ b/packages/backend/src/context/backend.ts @@ -0,0 +1,82 @@ +/* + 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/> + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ + +import { createContext, h, VNode } from 'preact' +import { useCallback, useContext, useState } from 'preact/hooks' +import { useBackendDefaultToken, useBackendURL } from '../hooks'; + +interface BackendContextType { + url: string; + token?: string; + triedToLog: boolean; + resetBackend: () => void; + clearAllTokens: () => void; + addTokenCleaner: (c: () => void) => void; + updateLoginStatus: (url: string, token?: string) => void; +} + +const BackendContext = createContext<BackendContextType>({ + url: '', + token: undefined, + triedToLog: false, + resetBackend: () => null, + clearAllTokens: () => null, + addTokenCleaner: () => null, + updateLoginStatus: () => null, +}) + +function useBackendContextState(defaultUrl?: string): BackendContextType { + const [url, triedToLog, changeBackend, resetBackend] = useBackendURL(defaultUrl); + const [token, _updateToken] = useBackendDefaultToken(); + const updateToken = (t?: string) => { + _updateToken(t) + } + + const tokenCleaner = useCallback(() => { updateToken(undefined) }, []) + const [cleaners, setCleaners] = useState([tokenCleaner]) + const addTokenCleaner = (c: () => void) => setCleaners(cs => [...cs, c]) + const addTokenCleanerMemo = useCallback((c: () => void) => { addTokenCleaner(c) }, [tokenCleaner]) + + const clearAllTokens = () => { + cleaners.forEach(c => c()) + for (let i = 0; i < localStorage.length; i++) { + const k = localStorage.key(i) + if (k && /^backend-token/.test(k)) localStorage.removeItem(k) + } + resetBackend() + } + + const updateLoginStatus = (url: string, token?: string) => { + changeBackend(url); + if (token) updateToken(token); + }; + + + return { url, token, triedToLog, updateLoginStatus, resetBackend, clearAllTokens, addTokenCleaner: addTokenCleanerMemo } +} + +export const BackendContextProvider = ({ children, defaultUrl }: { children: any, defaultUrl?: string }): VNode => { + const value = useBackendContextState(defaultUrl) + + return h(BackendContext.Provider, { value, children }); +} + +export const useBackendContext = (): BackendContextType => useContext(BackendContext); diff --git a/packages/backend/src/context/config.ts b/packages/backend/src/context/config.ts new file mode 100644 index 0000000..5cd7723 --- /dev/null +++ b/packages/backend/src/context/config.ts @@ -0,0 +1,32 @@ +/* + 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/> + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ + +import { createContext } from 'preact' +import { useContext } from 'preact/hooks' + +interface Type { + currency: string; + version: string; +} +const Context = createContext<Type>(null!) + +export const ConfigContextProvider = Context.Provider +export const useConfigContext = (): Type => useContext(Context); diff --git a/packages/backend/src/context/fetch.ts b/packages/backend/src/context/fetch.ts new file mode 100644 index 0000000..52a4f9c --- /dev/null +++ b/packages/backend/src/context/fetch.ts @@ -0,0 +1,40 @@ +/* + 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/> + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ + +import { h, createContext, VNode, ComponentChildren } from 'preact' +import { useContext } from 'preact/hooks' +import useSWR, { trigger, useSWRInfinite, cache, mutate } from 'swr'; + +interface Type { + useSWR: typeof useSWR, + useSWRInfinite: typeof useSWRInfinite, +} + +const Context = createContext<Type>({} as any) + +export const useFetchContext = (): Type => useContext(Context); +export const FetchContextProvider = ({ children }: { children: ComponentChildren }): VNode => { + return h(Context.Provider, { value: { useSWR, useSWRInfinite }, children }); +} + +export const FetchContextProviderTesting = ({ children, data }: { children: ComponentChildren, data:any }): VNode => { + return h(Context.Provider, { value: { useSWR: () => data, useSWRInfinite }, children }); +} diff --git a/packages/backend/src/context/instance.ts b/packages/backend/src/context/instance.ts new file mode 100644 index 0000000..fecf364 --- /dev/null +++ b/packages/backend/src/context/instance.ts @@ -0,0 +1,35 @@ +/* + 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/> + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ + +import { createContext } from 'preact' +import { useContext } from 'preact/hooks' + +interface Type { + id: string; + token?: string; + admin?: boolean; + changeToken: (t?:string) => void; +} + +const Context = createContext<Type>({} as any) + +export const InstanceContextProvider = Context.Provider +export const useInstanceContext = (): Type => useContext(Context); diff --git a/packages/backend/src/context/listener.ts b/packages/backend/src/context/listener.ts new file mode 100644 index 0000000..659db0a --- /dev/null +++ b/packages/backend/src/context/listener.ts @@ -0,0 +1,35 @@ +/* + 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/> + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ + +import { createContext } from 'preact' +import { useContext } from 'preact/hooks' + +interface Type { + id: string; + token?: string; + admin?: boolean; + changeToken: (t?:string) => void; +} + +const Context = createContext<Type>({} as any) + +export const ListenerContextProvider = Context.Provider +export const useListenerContext = (): Type => useContext(Context); diff --git a/packages/backend/src/context/translation.ts b/packages/backend/src/context/translation.ts new file mode 100644 index 0000000..952a1e3 --- /dev/null +++ b/packages/backend/src/context/translation.ts @@ -0,0 +1,59 @@ +/* + 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/> + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ + +import { createContext, h, VNode } from 'preact' +import { useContext, useEffect } from 'preact/hooks' +import { useLang } from '../hooks' +import * as jedLib from "jed"; +import { strings } from "../i18n/strings"; + +interface Type { + lang: string; + handler: any; + changeLanguage: (l: string) => void; +} +const initial = { + lang: 'en', + handler: null, + changeLanguage: () => { + // do not change anything + } +} +const Context = createContext<Type>(initial) + +interface Props { + initial?: string, + children: any, + forceLang?: string +} + +export const TranslationProvider = ({ initial, children, forceLang }: Props): VNode => { + const [lang, changeLanguage] = useLang(initial) + useEffect(() => { + if (forceLang) { + changeLanguage(forceLang) + } + }) + const handler = new jedLib.Jed(strings[lang]); + return h(Context.Provider, { value: { lang, handler, changeLanguage }, children }); +} + +export const useTranslationContext = (): Type => useContext(Context);
\ No newline at end of file diff --git a/packages/backend/src/css/pure-min.css b/packages/backend/src/css/pure-min.css new file mode 100644 index 0000000..77217b5 --- /dev/null +++ b/packages/backend/src/css/pure-min.css @@ -0,0 +1,973 @@ +/*! + Pure v2.0.3 + Copyright 2013 Yahoo! + Licensed under the BSD License. + https://github.com/pure-cs s/pure/blob/master/LICENSE.md +*/ +/*! + normalize.cs s v | MIT License | git.io/normalize + Copyright (c) Nicolas Gallagher and Jonathan Neal +*/ +/*! normalize.cs s v8.0.1 | MIT License | github.com/necolas/normalize.cs s */ + +.talerbar { + text-align: center; +} + +html { + line-height: 1.15; + -webkit-text-size-adjust: 100%; +} +body { + margin: 0; +} +main { + display: block; +} +h1 { + font-size: 2em; + margin: 0.67em 0; +} +hr { + -webkit-box-sizing: content-box; + box-sizing: content-box; + height: 0; + overflow: visible; +} +pre { + font-family: monospace, monospace; + font-size: 1em; +} +a { + background-color: transparent; +} +abbr[title] { + border-bottom: none; + text-decoration: underline; + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; +} +b, +strong { + font-weight: bolder; +} +code, +kbd, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +small { + font-size: 80%; +} +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} +sub { + bottom: -0.25em; +} +sup { + top: -0.5em; +} +img { + border-style: none; +} +button, +input, +optgroup, +select, +textarea { + font-family: inherit; + font-size: 100%; + line-height: 1.15; + margin: 0; +} +button, +input { + overflow: visible; +} +button, +select { + text-transform: none; +} +[type="button"], +[type="reset"], +[type="submit"], +button { + -webkit-appearance: button; +} +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + border-style: none; + padding: 0; +} +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring, +button:-moz-focusring { + outline: 1px dotted ButtonText; +} +fieldset { + padding: 0.35em 0.75em 0.625em; +} +legend { + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: inherit; + display: table; + max-width: 100%; + padding: 0; + white-space: normal; +} +progress { + vertical-align: baseline; +} +textarea { + overflow: auto; +} +[type="checkbox"], +[type="radio"] { + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding: 0; +} +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} +[type="search"] { + -webkit-appearance: textfield; + outline-offset: -2px; +} +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +::-webkit-file-upload-button { + -webkit-appearance: button; + font: inherit; +} +details { + display: block; +} +summary { + display: list-item; +} +template { + display: none; +} +[hidden] { + display: none; +} +html { + font-family: sans-serif; +} +.hidden, +[hidden] { + display: none !important; +} +.pure-img { + max-width: 100%; + height: auto; + display: block; +} +.pure-g { + letter-spacing: -0.31em; + text-rendering: optimizespeed; + font-family: FreeSans, Arimo, "Droid Sans", Helvetica, Arial, sans-serif; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + -ms-flex-line-pack: start; + align-content: flex-start; +} +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + table .pure-g { + display: block; + } +} +.opera-only :-o-prefocus, +.pure-g { + word-spacing: -0.43em; +} +.pure-u { + display: inline-block; + letter-spacing: normal; + word-spacing: normal; + vertical-align: top; + text-rendering: auto; +} +.pure-g [class*="pure-u"] { + font-family: sans-serif; +} +.pure-u-1, +.pure-u-1-1, +.pure-u-1-12, +.pure-u-1-2, +.pure-u-1-24, +.pure-u-1-3, +.pure-u-1-4, +.pure-u-1-5, +.pure-u-1-6, +.pure-u-1-8, +.pure-u-10-24, +.pure-u-11-12, +.pure-u-11-24, +.pure-u-12-24, +.pure-u-13-24, +.pure-u-14-24, +.pure-u-15-24, +.pure-u-16-24, +.pure-u-17-24, +.pure-u-18-24, +.pure-u-19-24, +.pure-u-2-24, +.pure-u-2-3, +.pure-u-2-5, +.pure-u-20-24, +.pure-u-21-24, +.pure-u-22-24, +.pure-u-23-24, +.pure-u-24-24, +.pure-u-3-24, +.pure-u-3-4, +.pure-u-3-5, +.pure-u-3-8, +.pure-u-4-24, +.pure-u-4-5, +.pure-u-5-12, +.pure-u-5-24, +.pure-u-5-5, +.pure-u-5-6, +.pure-u-5-8, +.pure-u-6-24, +.pure-u-7-12, +.pure-u-7-24, +.pure-u-7-8, +.pure-u-8-24, +.pure-u-9-24 { + display: inline-block; + letter-spacing: normal; + word-spacing: normal; + vertical-align: top; + text-rendering: auto; +} +.pure-u-1-24 { + width: 4.1667%; +} +.pure-u-1-12, +.pure-u-2-24 { + width: 8.3333%; +} +.pure-u-1-8, +.pure-u-3-24 { + width: 12.5%; +} +.pure-u-1-6, +.pure-u-4-24 { + width: 16.6667%; +} +.pure-u-1-5 { + width: 20%; +} +.pure-u-5-24 { + width: 20.8333%; +} +.pure-u-1-4, +.pure-u-6-24 { + width: 25%; +} +.pure-u-7-24 { + width: 29.1667%; +} +.pure-u-1-3, +.pure-u-8-24 { + width: 33.3333%; +} +.pure-u-3-8, +.pure-u-9-24 { + width: 37.5%; +} +.pure-u-2-5 { + width: 40%; +} +.pure-u-10-24, +.pure-u-5-12 { + width: 41.6667%; +} +.pure-u-11-24 { + width: 45.8333%; +} +.pure-u-1-2, +.pure-u-12-24 { + width: 50%; +} +.pure-u-13-24 { + width: 54.1667%; +} +.pure-u-14-24, +.pure-u-7-12 { + width: 58.3333%; +} +.pure-u-3-5 { + width: 60%; +} +.pure-u-15-24, +.pure-u-5-8 { + width: 62.5%; +} +.pure-u-16-24, +.pure-u-2-3 { + width: 66.6667%; +} +.pure-u-17-24 { + width: 70.8333%; +} +.pure-u-18-24, +.pure-u-3-4 { + width: 75%; +} +.pure-u-19-24 { + width: 79.1667%; +} +.pure-u-4-5 { + width: 80%; +} +.pure-u-20-24, +.pure-u-5-6 { + width: 83.3333%; +} +.pure-u-21-24, +.pure-u-7-8 { + width: 87.5%; +} +.pure-u-11-12, +.pure-u-22-24 { + width: 91.6667%; +} +.pure-u-23-24 { + width: 95.8333%; +} +.pure-u-1, +.pure-u-1-1, +.pure-u-24-24, +.pure-u-5-5 { + width: 100%; +} +.pure-button { + display: inline-block; + line-height: normal; + white-space: nowrap; + vertical-align: middle; + text-align: center; + cursor: pointer; + -webkit-user-drag: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +.pure-button::-moz-focus-inner { + padding: 0; + border: 0; +} +.pure-button-group { + letter-spacing: -0.31em; + text-rendering: optimizespeed; +} +.opera-only :-o-prefocus, +.pure-button-group { + word-spacing: -0.43em; +} +.pure-button-group .pure-button { + letter-spacing: normal; + word-spacing: normal; + vertical-align: top; + text-rendering: auto; +} +.pure-button { + font-family: inherit; + font-size: 100%; + padding: 0.5em 1em; + color: rgba(0, 0, 0, 0.8); + border: none transparent; + background-color: #e6e6e6; + text-decoration: none; + border-radius: 2px; +} +.pure-button-hover, +.pure-button:focus, +.pure-button:hover { + background-image: -webkit-gradient( + linear, + left top, + left bottom, + from(transparent), + color-stop(40%, rgba(0, 0, 0, 0.05)), + to(rgba(0, 0, 0, 0.1)) + ); + background-image: linear-gradient( + transparent, + rgba(0, 0, 0, 0.05) 40%, + rgba(0, 0, 0, 0.1) + ); +} +.pure-button:focus { + outline: 0; +} +.pure-button-active, +.pure-button:active { + -webkit-box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.15) inset, + 0 0 6px rgba(0, 0, 0, 0.2) inset; + box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.15) inset, + 0 0 6px rgba(0, 0, 0, 0.2) inset; + border-color: #000; +} +.pure-button-disabled, +.pure-button-disabled:active, +.pure-button-disabled:focus, +.pure-button-disabled:hover, +.pure-button[disabled] { + border: none; + background-image: none; + opacity: 0.4; + cursor: not-allowed; + -webkit-box-shadow: none; + box-shadow: none; + pointer-events: none; +} +.pure-button-hidden { + display: none; +} +.pure-button-primary, +.pure-button-selected, +a.pure-button-primary, +a.pure-button-selected { + background-color: #0078e7; + color: #fff; +} +.pure-button-group .pure-button { + margin: 0; + border-radius: 0; + border-right: 1px solid rgba(0, 0, 0, 0.2); +} +.pure-button-group .pure-button:first-child { + border-top-left-radius: 2px; + border-bottom-left-radius: 2px; +} +.pure-button-group .pure-button:last-child { + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; + border-right: none; +} +.pure-form input[type="color"], +.pure-form input[type="date"], +.pure-form input[type="datetime-local"], +.pure-form input[type="datetime"], +.pure-form input[type="email"], +.pure-form input[type="month"], +.pure-form input[type="number"], +.pure-form input[type="password"], +.pure-form input[type="search"], +.pure-form input[type="tel"], +.pure-form input[type="text"], +.pure-form input[type="time"], +.pure-form input[type="url"], +.pure-form input[type="week"], +.pure-form select, +.pure-form textarea { + padding: 0.5em 0.6em; + display: inline-block; + border: 1px solid #ccc; + -webkit-box-shadow: inset 0 1px 3px #ddd; + box-shadow: inset 0 1px 3px #ddd; + border-radius: 4px; + vertical-align: middle; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +.pure-form input:not([type]) { + padding: 0.5em 0.6em; + display: inline-block; + border: 1px solid #ccc; + -webkit-box-shadow: inset 0 1px 3px #ddd; + box-shadow: inset 0 1px 3px #ddd; + border-radius: 4px; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +.pure-form input[type="color"] { + padding: 0.2em 0.5em; +} +.pure-form input[type="color"]:focus, +.pure-form input[type="date"]:focus, +.pure-form input[type="datetime-local"]:focus, +.pure-form input[type="datetime"]:focus, +.pure-form input[type="email"]:focus, +.pure-form input[type="month"]:focus, +.pure-form input[type="number"]:focus, +.pure-form input[type="password"]:focus, +.pure-form input[type="search"]:focus, +.pure-form input[type="tel"]:focus, +.pure-form input[type="text"]:focus, +.pure-form input[type="time"]:focus, +.pure-form input[type="url"]:focus, +.pure-form input[type="week"]:focus, +.pure-form select:focus, +.pure-form textarea:focus { + outline: 0; + border-color: #129fea; +} +.pure-form input:not([type]):focus { + outline: 0; + border-color: #129fea; +} +.pure-form input[type="checkbox"]:focus, +.pure-form input[type="file"]:focus, +.pure-form input[type="radio"]:focus { + outline: thin solid #129fea; + outline: 1px auto #129fea; +} +.pure-form .pure-checkbox, +.pure-form .pure-radio { + margin: 0.5em 0; + display: block; +} +.pure-form input[type="color"][disabled], +.pure-form input[type="date"][disabled], +.pure-form input[type="datetime-local"][disabled], +.pure-form input[type="datetime"][disabled], +.pure-form input[type="email"][disabled], +.pure-form input[type="month"][disabled], +.pure-form input[type="number"][disabled], +.pure-form input[type="password"][disabled], +.pure-form input[type="search"][disabled], +.pure-form input[type="tel"][disabled], +.pure-form input[type="text"][disabled], +.pure-form input[type="time"][disabled], +.pure-form input[type="url"][disabled], +.pure-form input[type="week"][disabled], +.pure-form select[disabled], +.pure-form textarea[disabled] { + cursor: not-allowed; + background-color: #eaeded; + color: #cad2d3; +} +.pure-form input:not([type])[disabled] { + cursor: not-allowed; + background-color: #eaeded; + color: #cad2d3; +} +.pure-form input[readonly], +.pure-form select[readonly], +.pure-form textarea[readonly] { + background-color: #eee; + color: #777; + border-color: #ccc; +} +.pure-form input:focus:invalid, +.pure-form select:focus:invalid, +.pure-form textarea:focus:invalid { + color: #b94a48; + border-color: #e9322d; +} +.pure-form input[type="checkbox"]:focus:invalid:focus, +.pure-form input[type="file"]:focus:invalid:focus, +.pure-form input[type="radio"]:focus:invalid:focus { + outline-color: #e9322d; +} +.pure-form select { + height: 2.25em; + border: 1px solid #ccc; + background-color: #fff; +} +.pure-form select[multiple] { + height: auto; +} +.pure-form label { + margin: 0.5em 0 0.2em; +} +.pure-form fieldset { + margin: 0; + padding: 0.35em 0 0.75em; + border: 0; +} +.pure-form legend { + display: block; + width: 100%; + padding: 0.3em 0; + margin-bottom: 0.3em; + color: #333; + border-bottom: 1px solid #e5e5e5; +} +.pure-form-stacked input[type="color"], +.pure-form-stacked input[type="date"], +.pure-form-stacked input[type="datetime-local"], +.pure-form-stacked input[type="datetime"], +.pure-form-stacked input[type="email"], +.pure-form-stacked input[type="file"], +.pure-form-stacked input[type="month"], +.pure-form-stacked input[type="number"], +.pure-form-stacked input[type="password"], +.pure-form-stacked input[type="search"], +.pure-form-stacked input[type="tel"], +.pure-form-stacked input[type="text"], +.pure-form-stacked input[type="time"], +.pure-form-stacked input[type="url"], +.pure-form-stacked input[type="week"], +.pure-form-stacked label, +.pure-form-stacked select, +.pure-form-stacked textarea { + display: block; + margin: 0.25em 0; +} +.pure-form-stacked input:not([type]) { + display: block; + margin: 0.25em 0; +} +.pure-form-aligned input, +.pure-form-aligned select, +.pure-form-aligned textarea, +.pure-form-message-inline { + display: inline-block; + vertical-align: middle; +} +.pure-form-aligned textarea { + vertical-align: top; +} +.pure-form-aligned .pure-control-group { + margin-bottom: 0.5em; +} +.pure-form-aligned .pure-control-group label { + text-align: right; + display: inline-block; + vertical-align: middle; + width: 10em; + margin: 0 1em 0 0; +} +.pure-form-aligned .pure-controls { + margin: 1.5em 0 0 11em; +} +.pure-form .pure-input-rounded, +.pure-form input.pure-input-rounded { + border-radius: 2em; + padding: 0.5em 1em; +} +.pure-form .pure-group fieldset { + margin-bottom: 10px; +} +.pure-form .pure-group input, +.pure-form .pure-group textarea { + display: block; + padding: 10px; + margin: 0 0 -1px; + border-radius: 0; + position: relative; + top: -1px; +} +.pure-form .pure-group input:focus, +.pure-form .pure-group textarea:focus { + z-index: 3; +} +.pure-form .pure-group input:first-child, +.pure-form .pure-group textarea:first-child { + top: 1px; + border-radius: 4px 4px 0 0; + margin: 0; +} +.pure-form .pure-group input:first-child:last-child, +.pure-form .pure-group textarea:first-child:last-child { + top: 1px; + border-radius: 4px; + margin: 0; +} +.pure-form .pure-group input:last-child, +.pure-form .pure-group textarea:last-child { + top: -2px; + border-radius: 0 0 4px 4px; + margin: 0; +} +.pure-form .pure-group button { + margin: 0.35em 0; +} +.pure-form .pure-input-1 { + width: 100%; +} +.pure-form .pure-input-3-4 { + width: 75%; +} +.pure-form .pure-input-2-3 { + width: 66%; +} +.pure-form .pure-input-1-2 { + width: 50%; +} +.pure-form .pure-input-1-3 { + width: 33%; +} +.pure-form .pure-input-1-4 { + width: 25%; +} +.pure-form-message-inline { + display: inline-block; + padding-left: 0.3em; + color: #666; + vertical-align: middle; + font-size: 0.875em; +} +.pure-form-message { + display: block; + color: #666; + font-size: 0.875em; +} +@media only screen and (max-width: 480px) { + .pure-form button[type="submit"] { + margin: 0.7em 0 0; + } + .pure-form input:not([type]), + .pure-form input[type="color"], + .pure-form input[type="date"], + .pure-form input[type="datetime-local"], + .pure-form input[type="datetime"], + .pure-form input[type="email"], + .pure-form input[type="month"], + .pure-form input[type="number"], + .pure-form input[type="password"], + .pure-form input[type="search"], + .pure-form input[type="tel"], + .pure-form input[type="text"], + .pure-form input[type="time"], + .pure-form input[type="url"], + .pure-form input[type="week"], + .pure-form label { + margin-bottom: 0.3em; + display: block; + } + .pure-group input:not([type]), + .pure-group input[type="color"], + .pure-group input[type="date"], + .pure-group input[type="datetime-local"], + .pure-group input[type="datetime"], + .pure-group input[type="email"], + .pure-group input[type="month"], + .pure-group input[type="number"], + .pure-group input[type="password"], + .pure-group input[type="search"], + .pure-group input[type="tel"], + .pure-group input[type="text"], + .pure-group input[type="time"], + .pure-group input[type="url"], + .pure-group input[type="week"] { + margin-bottom: 0; + } + .pure-form-aligned .pure-control-group label { + margin-bottom: 0.3em; + text-align: left; + display: block; + width: 100%; + } + .pure-form-aligned .pure-controls { + margin: 1.5em 0 0 0; + } + .pure-form-message, + .pure-form-message-inline { + display: block; + font-size: 0.75em; + padding: 0.2em 0 0.8em; + } +} +.pure-menu { + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +.pure-menu-fixed { + position: fixed; + left: 0; + top: 0; + z-index: 3; +} +.pure-menu-item, +.pure-menu-list { + position: relative; +} +.pure-menu-list { + list-style: none; + margin: 0; + padding: 0; +} +.pure-menu-item { + padding: 0; + margin: 0; + height: 100%; +} +.pure-menu-heading, +.pure-menu-link { + display: block; + text-decoration: none; + white-space: nowrap; +} +.pure-menu-horizontal { + width: 100%; + white-space: nowrap; +} +.pure-menu-horizontal .pure-menu-list { + display: inline-block; +} +.pure-menu-horizontal .pure-menu-heading, +.pure-menu-horizontal .pure-menu-item, +.pure-menu-horizontal .pure-menu-separator { + display: inline-block; + vertical-align: middle; +} +.pure-menu-item .pure-menu-item { + display: block; +} +.pure-menu-children { + display: none; + position: absolute; + left: 100%; + top: 0; + margin: 0; + padding: 0; + z-index: 3; +} +.pure-menu-horizontal .pure-menu-children { + left: 0; + top: auto; + width: inherit; +} +.pure-menu-active > .pure-menu-children, +.pure-menu-allow-hover:hover > .pure-menu-children { + display: block; + position: absolute; +} +.pure-menu-has-children > .pure-menu-link:after { + padding-left: 0.5em; + content: "\25B8"; + font-size: small; +} +.pure-menu-horizontal .pure-menu-has-children > .pure-menu-link:after { + content: "\25BE"; +} +.pure-menu-scrollable { + overflow-y: scroll; + overflow-x: hidden; +} +.pure-menu-scrollable .pure-menu-list { + display: block; +} +.pure-menu-horizontal.pure-menu-scrollable .pure-menu-list { + display: inline-block; +} +.pure-menu-horizontal.pure-menu-scrollable { + white-space: nowrap; + overflow-y: hidden; + overflow-x: auto; + padding: 0.5em 0; +} +.pure-menu-horizontal .pure-menu-children .pure-menu-separator, +.pure-menu-separator { + background-color: #ccc; + height: 1px; + margin: 0.3em 0; +} +.pure-menu-horizontal .pure-menu-separator { + width: 1px; + height: 1.3em; + margin: 0 0.3em; +} +.pure-menu-horizontal .pure-menu-children .pure-menu-separator { + display: block; + width: auto; +} +.pure-menu-heading { + text-transform: uppercase; + color: #565d64; +} +.pure-menu-link { + color: #777; +} +.pure-menu-children { + background-color: #fff; +} +.pure-menu-disabled, +.pure-menu-heading, +.pure-menu-link { + padding: 0.5em 1em; +} +.pure-menu-disabled { + opacity: 0.5; +} +.pure-menu-disabled .pure-menu-link:hover { + background-color: transparent; +} +.pure-menu-active > .pure-menu-link, +.pure-menu-link:focus, +.pure-menu-link:hover { + background-color: #eee; +} +.pure-menu-selected > .pure-menu-link, +.pure-menu-selected > .pure-menu-link:visited { + color: #000; +} +.pure-table { + border-collapse: collapse; + border-spacing: 0; + empty-cells: show; + border: 1px solid #cbcbcb; +} +.pure-table caption { + color: #000; + font: italic 85%/1 arial, sans-serif; + padding: 1em 0; + text-align: center; +} +.pure-table td, +.pure-table th { + border-left: 1px solid #cbcbcb; + border-width: 0 0 0 1px; + font-size: inherit; + margin: 0; + overflow: visible; + padding: 0.5em 1em; +} +.pure-table thead { + background-color: #e0e0e0; + color: #000; + text-align: left; + vertical-align: bottom; +} +.pure-table td { + background-color: transparent; +} +.pure-table-odd td { + background-color: #f2f2f2; +} +.pure-table-striped tr:nth-child(2n-1) td { + background-color: #f2f2f2; +} +.pure-table-bordered td { + border-bottom: 1px solid #cbcbcb; +} +.pure-table-bordered tbody > tr:last-child > td { + border-bottom-width: 0; +} +.pure-table-horizontal td, +.pure-table-horizontal th { + border-width: 0 0 1px 0; + border-bottom: 1px solid #cbcbcb; +} +.pure-table-horizontal tbody > tr:last-child > td { + border-bottom-width: 0; +} diff --git a/packages/backend/src/css/style.css b/packages/backend/src/css/style.css new file mode 100644 index 0000000..e03b632 --- /dev/null +++ b/packages/backend/src/css/style.css @@ -0,0 +1,62 @@ +/*! + Pure v2.0.3 + Copyright 2013 Yahoo! + Licensed under the BSD License. + https://github.com/pure-ss/pure/blob/master/LICENSE.md +*/ +/*! + normalize.cs v | MIT License | git.io/normalize + Copyright (c) Nicolas Gallagher and Jonathan Neal +*/ +/*! normalize.ss v8.0.1 | MIT License | github.com/necolas/normalize.cs */ + +.talerbar { + text-align: center; +} +.tt { + font-family: "Lucida Console", Monaco, monospace; +} +.content { + overflow-x: auto; + padding-left: 15%; + padding-right: 15%; +} +.qr { + margin: auto; + text-align: center; +} +.qrtext { + width: max-content; + margin: auto; + transition: font-size 0.2s; + font-family: "Lucida Console", Monaco, monospace; + font-size: 0.5em; +} +.qrtext:hover { + font-size: 1em; +} +.talerbar { + margin: 0; + bottom: 0; + background-color: #033; + color: white; + width: 100%; + padding: 1em; + overflow: auto; +} +body { + overflow-y: scroll; +} +@media (min-width: 500px) { + .content { + padding-bottom: 2em; + margin-right: 1em; + overflow-y: auto; + } +} +#main a:link, +#main a:visited, +#main a:hover, +#main a:active { + color: black; +}
\ No newline at end of file diff --git a/packages/backend/src/custom.d.ts b/packages/backend/src/custom.d.ts new file mode 100644 index 0000000..d270500 --- /dev/null +++ b/packages/backend/src/custom.d.ts @@ -0,0 +1,40 @@ +/* + 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/> + */ +declare module '*.po' { + const content: any; + export default content; +} +declare module 'jed' { + const x: any; + export = x; +} +declare module "*.jpeg" { + const content: any; + export default content; +} +declare module "*.png" { + const content: any; + export default content; +} +declare module '*.svg' { + const content: any; + export default content; +} + +declare module '*.scss' { + const content: Record<string, string>; + export default content; +} diff --git a/packages/backend/src/declaration.d.ts b/packages/backend/src/declaration.d.ts new file mode 100644 index 0000000..1722a3d --- /dev/null +++ b/packages/backend/src/declaration.d.ts @@ -0,0 +1,1384 @@ +/* + 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/> + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ + + +type HashCode = string; +type EddsaPublicKey = string; +type EddsaSignature = string; +type WireTransferIdentifierRawP = string; +type RelativeTime = Duration; +type ImageDataUrl = string; + +export interface WithId { + id: string +} + +interface Timestamp { + // Milliseconds since epoch, or the special + // value "forever" to represent an event that will + // never happen. + t_ms: number | "never"; +} +interface Duration { + // Duration in milliseconds or "forever" + // to represent an infinite duration. + d_ms: number | "forever"; +} + +interface WithId { + id: string; +} + +type Amount = string; +type UUID = string; +type Integer = number; + +export namespace ExchangeBackend { + interface WireResponse { + + // Master public key of the exchange, must match the key returned in /keys. + master_public_key: EddsaPublicKey; + + // Array of wire accounts operated by the exchange for + // incoming wire transfers. + accounts: WireAccount[]; + + // Object mapping names of wire methods (i.e. "sepa" or "x-taler-bank") + // to wire fees. + fees: { method: AggregateTransferFee }; + } + interface WireAccount { + // payto:// URI identifying the account and wire method + payto_uri: string; + + // Signature using the exchange's offline key + // with purpose TALER_SIGNATURE_MASTER_WIRE_DETAILS. + master_sig: EddsaSignature; + } + interface AggregateTransferFee { + // Per transfer wire transfer fee. + wire_fee: Amount; + + // Per transfer closing fee. + closing_fee: Amount; + + // What date (inclusive) does this fee go into effect? + // The different fees must cover the full time period in which + // any of the denomination keys are valid without overlap. + start_date: Timestamp; + + // What date (exclusive) does this fee stop going into effect? + // The different fees must cover the full time period in which + // any of the denomination keys are valid without overlap. + end_date: Timestamp; + + // Signature of TALER_MasterWireFeePS with + // purpose TALER_SIGNATURE_MASTER_WIRE_FEES. + sig: EddsaSignature; + } + +} +export namespace MerchantBackend { + interface ErrorDetail { + + // Numeric error code unique to the condition. + // The other arguments are specific to the error value reported here. + code: number; + + // Human-readable description of the error, i.e. "missing parameter", "commitment violation", ... + // Should give a human-readable hint about the error's nature. Optional, may change without notice! + hint?: string; + + // Optional detail about the specific input value that failed. May change without notice! + detail?: string; + + // Name of the parameter that was bogus (if applicable). + parameter?: string; + + // Path to the argument that was bogus (if applicable). + path?: string; + + // Offset of the argument that was bogus (if applicable). + offset?: string; + + // Index of the argument that was bogus (if applicable). + index?: string; + + // Name of the object that was bogus (if applicable). + object?: string; + + // Name of the currency than was problematic (if applicable). + currency?: string; + + // Expected type (if applicable). + type_expected?: string; + + // Type that was provided instead (if applicable). + type_actual?: string; + } + + + // Delivery location, loosely modeled as a subset of + // ISO20022's PostalAddress25. + interface Tax { + // the name of the tax + name: string; + + // amount paid in tax + tax: Amount; + } + + interface Auditor { + // official name + name: string; + + // Auditor's public key + auditor_pub: EddsaPublicKey; + + // Base URL of the auditor + url: string; + } + interface Exchange { + // the exchange's base URL + url: string; + + // master public key of the exchange + master_pub: EddsaPublicKey; + } + + interface Product { + // merchant-internal identifier for the product. + product_id?: string; + + // Human-readable product description. + description: string; + + // Map from IETF BCP 47 language tags to localized descriptions + description_i18n?: { [lang_tag: string]: string }; + + // The number of units of the product to deliver to the customer. + quantity: Integer; + + // The unit in which the product is measured (liters, kilograms, packages, etc.) + unit: string; + + // The price of the product; this is the total price for quantity times unit of this product. + price: Amount; + + // An optional base64-encoded product image + image: ImageDataUrl; + + // a list of taxes paid by the merchant for this product. Can be empty. + taxes: Tax[]; + + // time indicating when this product should be delivered + delivery_date?: Timestamp; + } + interface Merchant { + // label for a location with the business address of the merchant + address: Location; + + // the merchant's legal name of business + name: string; + + // label for a location that denotes the jurisdiction for disputes. + // Some of the typical fields for a location (such as a street address) may be absent. + jurisdiction: Location; + } + + interface VersionResponse { + // libtool-style representation of the Merchant protocol version, see + // https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning + // The format is "current:revision:age". + version: string; + + // Name of the protocol. + name: "taler-merchant"; + + // Currency supported by this backend. + currency: string; + + } + interface Location { + // Nation with its own government. + country?: string; + + // Identifies a subdivision of a country such as state, region, county. + country_subdivision?: string; + + // Identifies a subdivision within a country sub-division. + district?: string; + + // Name of a built-up area, with defined boundaries, and a local government. + town?: string; + + // Specific location name within the town. + town_location?: string; + + // Identifier consisting of a group of letters and/or numbers that + // is added to a postal address to assist the sorting of mail. + post_code?: string; + + // Name of a street or thoroughfare. + street?: string; + + // Name of the building or house. + building_name?: string; + + // Number that identifies the position of a building on a street. + building_number?: string; + + // Free-form address lines, should not exceed 7 elements. + address_lines?: string[]; + } + namespace Instances { + + //POST /private/instances/$INSTANCE/auth + interface InstanceAuthConfigurationMessage { + // Type of authentication. + // "external": The mechant backend does not do + // any authentication checks. Instead an API + // gateway must do the authentication. + // "token": The merchant checks an auth token. + // See "token" for details. + method: "external" | "token"; + + // For method "external", this field is mandatory. + // The token MUST begin with the string "secret-token:". + // After the auth token has been set (with method "token"), + // the value must be provided in a "Authorization: Bearer $token" + // header. + token?: string; + + } + //POST /private/instances + interface InstanceConfigurationMessage { + // The URI where the wallet will send coins. A merchant may have + // multiple accounts, thus this is an array. Note that by + // removing URIs from this list the respective account is set to + // inactive and thus unavailable for new contracts, but preserved + // in the database as existing offers and contracts may still refer + // to it. + payto_uris: string[]; + + // Name of the merchant instance to create (will become $INSTANCE). + id: string; + + // Merchant name corresponding to this instance. + name: string; + + // "Authentication" header required to authorize management access the instance. + // Optional, if not given authentication will be disabled for + // this instance (hopefully authentication checks are still + // done by some reverse proxy). + auth: InstanceAuthConfigurationMessage; + + // The merchant's physical address (to be put into contracts). + address: Location; + + // The jurisdiction under which the merchant conducts its business + // (to be put into contracts). + jurisdiction: Location; + + // Maximum wire fee this instance is willing to pay. + // Can be overridden by the frontend on a per-order basis. + default_max_wire_fee: Amount; + + // Default factor for wire fee amortization calculations. + // Can be overridden by the frontend on a per-order basis. + default_wire_fee_amortization: Integer; + + // Maximum deposit fee (sum over all coins) this instance is willing to pay. + // Can be overridden by the frontend on a per-order basis. + default_max_deposit_fee: Amount; + + // If the frontend does NOT specify an execution date, how long should + // we tell the exchange to wait to aggregate transactions before + // executing the wire transfer? This delay is added to the current + // time when we generate the advisory execution time for the exchange. + default_wire_transfer_delay: RelativeTime; + + // If the frontend does NOT specify a payment deadline, how long should + // offers we make be valid by default? + default_pay_delay: RelativeTime; + + } + + // PATCH /private/instances/$INSTANCE + interface InstanceReconfigurationMessage { + // The URI where the wallet will send coins. A merchant may have + // multiple accounts, thus this is an array. Note that by + // removing URIs from this list + payto_uris: string[]; + + // Merchant name corresponding to this instance. + name: string; + + // The merchant's physical address (to be put into contracts). + address: Location; + + // The jurisdiction under which the merchant conducts its business + // (to be put into contracts). + jurisdiction: Location; + + // Maximum wire fee this instance is willing to pay. + // Can be overridden by the frontend on a per-order basis. + default_max_wire_fee: Amount; + + // Default factor for wire fee amortization calculations. + // Can be overridden by the frontend on a per-order basis. + default_wire_fee_amortization: Integer; + + // Maximum deposit fee (sum over all coins) this instance is willing to pay. + // Can be overridden by the frontend on a per-order basis. + default_max_deposit_fee: Amount; + + // If the frontend does NOT specify an execution date, how long should + // we tell the exchange to wait to aggregate transactions before + // executing the wire transfer? This delay is added to the current + // time when we generate the advisory execution time for the exchange. + default_wire_transfer_delay: RelativeTime; + + // If the frontend does NOT specify a payment deadline, how long should + // offers we make be valid by default? + default_pay_delay: RelativeTime; + + } + + // GET /private/instances + interface InstancesResponse { + // List of instances that are present in the backend (see Instance) + instances: Instance[]; + } + + interface Instance { + // Merchant name corresponding to this instance. + name: string; + + deleted?: boolean; + + // Merchant instance this response is about ($INSTANCE) + id: string; + + // Public key of the merchant/instance, in Crockford Base32 encoding. + merchant_pub: EddsaPublicKey; + + // List of the payment targets supported by this instance. Clients can + // specify the desired payment target in /order requests. Note that + // front-ends do not have to support wallets selecting payment targets. + payment_targets: string[]; + + } + + //GET /private/instances/$INSTANCE + interface QueryInstancesResponse { + // The URI where the wallet will send coins. A merchant may have + // multiple accounts, thus this is an array. + accounts: MerchantAccount[]; + + // Merchant name corresponding to this instance. + name: string; + + // Public key of the merchant/instance, in Crockford Base32 encoding. + merchant_pub: EddsaPublicKey; + + // The merchant's physical address (to be put into contracts). + address: Location; + + // The jurisdiction under which the merchant conducts its business + // (to be put into contracts). + jurisdiction: Location; + + // Maximum wire fee this instance is willing to pay. + // Can be overridden by the frontend on a per-order basis. + default_max_wire_fee: Amount; + + // Default factor for wire fee amortization calculations. + // Can be overridden by the frontend on a per-order basis. + default_wire_fee_amortization: Integer; + + // Maximum deposit fee (sum over all coins) this instance is willing to pay. + // Can be overridden by the frontend on a per-order basis. + default_max_deposit_fee: Amount; + + // If the frontend does NOT specify an execution date, how long should + // we tell the exchange to wait to aggregate transactions before + // executing the wire transfer? This delay is added to the current + // time when we generate the advisory execution time for the exchange. + default_wire_transfer_delay: RelativeTime; + + // If the frontend does NOT specify a payment deadline, how long should + // offers we make be valid by default? + default_pay_delay: RelativeTime; + + // Authentication configuration. + // Does not contain the token when token auth is configured. + auth: { + method: "external" | "token"; + }; + } + + interface MerchantAccount { + + // payto:// URI of the account. + payto_uri: string; + + // Hash over the wire details (including over the salt) + h_wire: HashCode; + + // salt used to compute h_wire + salt: HashCode; + + // true if this account is active, + // false if it is historic. + active: boolean; + } + + // DELETE /private/instances/$INSTANCE + + + } + + namespace Products { + // POST /private/products + interface ProductAddDetail { + + // product ID to use. + product_id: string; + + // Human-readable product description. + description: string; + + // Map from IETF BCP 47 language tags to localized descriptions + description_i18n: { [lang_tag: string]: string }; + + // unit in which the product is measured (liters, kilograms, packages, etc.) + unit: string; + + // The price for one unit of the product. Zero is used + // to imply that this product is not sold separately, or + // that the price is not fixed, and must be supplied by the + // front-end. If non-zero, this price MUST include applicable + // taxes. + price: Amount; + + // An optional base64-encoded product image + image: ImageDataUrl; + + // a list of taxes paid by the merchant for one unit of this product + taxes: Tax[]; + + // Number of units of the product in stock in sum in total, + // including all existing sales ever. Given in product-specific + // units. + // A value of -1 indicates "infinite" (i.e. for "electronic" books). + total_stock: Integer; + + // Identifies where the product is in stock. + address: Location; + + // Identifies when we expect the next restocking to happen. + next_restock?: Timestamp; + + } + // PATCH /private/products/$PRODUCT_ID + interface ProductPatchDetail { + + // Human-readable product description. + description: string; + + // Map from IETF BCP 47 language tags to localized descriptions + description_i18n: { [lang_tag: string]: string }; + + // unit in which the product is measured (liters, kilograms, packages, etc.) + unit: string; + + // The price for one unit of the product. Zero is used + // to imply that this product is not sold separately, or + // that the price is not fixed, and must be supplied by the + // front-end. If non-zero, this price MUST include applicable + // taxes. + price: Amount; + + // An optional base64-encoded product image + image: ImageDataUrl; + + // a list of taxes paid by the merchant for one unit of this product + taxes: Tax[]; + + // Number of units of the product in stock in sum in total, + // including all existing sales ever. Given in product-specific + // units. + // A value of -1 indicates "infinite" (i.e. for "electronic" books). + total_stock: Integer; + + // Number of units of the product that were lost (spoiled, stolen, etc.) + total_lost: Integer; + + // Identifies where the product is in stock. + address: Location; + + // Identifies when we expect the next restocking to happen. + next_restock?: Timestamp; + + } + + // GET /private/products + interface InventorySummaryResponse { + // List of products that are present in the inventory + products: InventoryEntry[]; + } + interface InventoryEntry { + // Product identifier, as found in the product. + product_id: string; + + } + + // GET /private/products/$PRODUCT_ID + interface ProductDetail { + + // Human-readable product description. + description: string; + + // Map from IETF BCP 47 language tags to localized descriptions + description_i18n: { [lang_tag: string]: string }; + + // unit in which the product is measured (liters, kilograms, packages, etc.) + unit: string; + + // The price for one unit of the product. Zero is used + // to imply that this product is not sold separately, or + // that the price is not fixed, and must be supplied by the + // front-end. If non-zero, this price MUST include applicable + // taxes. + price: Amount; + + // An optional base64-encoded product image + image: ImageDataUrl; + + // a list of taxes paid by the merchant for one unit of this product + taxes: Tax[]; + + // Number of units of the product in stock in sum in total, + // including all existing sales ever. Given in product-specific + // units. + // A value of -1 indicates "infinite" (i.e. for "electronic" books). + total_stock: Integer; + + // Number of units of the product that have already been sold. + total_sold: Integer; + + // Number of units of the product that were lost (spoiled, stolen, etc.) + total_lost: Integer; + + // Identifies where the product is in stock. + address: Location; + + // Identifies when we expect the next restocking to happen. + next_restock?: Timestamp; + + } + + // POST /private/products/$PRODUCT_ID/lock + interface LockRequest { + + // UUID that identifies the frontend performing the lock + // It is suggested that clients use a timeflake for this, + // see https://github.com/anthonynsimon/timeflake + lock_uuid: UUID; + + // How long does the frontend intend to hold the lock + duration: RelativeTime; + + // How many units should be locked? + quantity: Integer; + + } + + // DELETE /private/products/$PRODUCT_ID + + } + + namespace Orders { + + type MerchantOrderStatusResponse = CheckPaymentPaidResponse | + CheckPaymentClaimedResponse | + CheckPaymentUnpaidResponse; + interface CheckPaymentPaidResponse { + // The customer paid for this contract. + order_status: "paid"; + + // Was the payment refunded (even partially)? + refunded: boolean; + + // True if there are any approved refunds that the wallet has + // not yet obtained. + refund_pending: boolean; + + // Did the exchange wire us the funds? + wired: boolean; + + // Total amount the exchange deposited into our bank account + // for this contract, excluding fees. + deposit_total: Amount; + + // Numeric error code indicating errors the exchange + // encountered tracking the wire transfer for this purchase (before + // we even got to specific coin issues). + // 0 if there were no issues. + exchange_ec: number; + + // HTTP status code returned by the exchange when we asked for + // information to track the wire transfer for this purchase. + // 0 if there were no issues. + exchange_hc: number; + + // Total amount that was refunded, 0 if refunded is false. + refund_amount: Amount; + + // Contract terms. + contract_terms: ContractTerms; + + // The wire transfer status from the exchange for this order if + // available, otherwise empty array. + wire_details: TransactionWireTransfer[]; + + // Reports about trouble obtaining wire transfer details, + // empty array if no trouble were encountered. + wire_reports: TransactionWireReport[]; + + // The refund details for this order. One entry per + // refunded coin; empty array if there are no refunds. + refund_details: RefundDetails[]; + + // Status URL, can be used as a redirect target for the browser + // to show the order QR code / trigger the wallet. + order_status_url: string; + } + interface CheckPaymentClaimedResponse { + // A wallet claimed the order, but did not yet pay for the contract. + order_status: "claimed"; + + // Contract terms. + contract_terms: ContractTerms; + + } + interface CheckPaymentUnpaidResponse { + // The order was neither claimed nor paid. + order_status: "unpaid"; + + // when was the order created + creation_time: Timestamp; + + // Order summary text. + summary: string; + + // Total amount of the order (to be paid by the customer). + total_amount: Amount; + + // URI that the wallet must process to complete the payment. + taler_pay_uri: string; + + // Alternative order ID which was paid for already in the same session. + // Only given if the same product was purchased before in the same session. + already_paid_order_id?: string; + + // Fulfillment URL of an already paid order. Only given if under this + // session an already paid order with a fulfillment URL exists. + already_paid_fulfillment_url?: string; + + // Status URL, can be used as a redirect target for the browser + // to show the order QR code / trigger the wallet. + order_status_url: string; + + // We do we NOT return the contract terms here because they may not + // exist in case the wallet did not yet claim them. + } + interface RefundDetails { + // Reason given for the refund. + reason: string; + + // When was the refund approved. + timestamp: Timestamp; + + // Total amount that was refunded (minus a refund fee). + amount: Amount; + } + interface TransactionWireTransfer { + // Responsible exchange. + exchange_url: string; + + // 32-byte wire transfer identifier. + wtid: Base32; + + // Execution time of the wire transfer. + execution_time: Timestamp; + + // Total amount that has been wire transferred + // to the merchant. + amount: Amount; + + // Was this transfer confirmed by the merchant via the + // POST /transfers API, or is it merely claimed by the exchange? + confirmed: boolean; + } + interface TransactionWireReport { + // Numerical error code. + code: number; + + // Human-readable error description. + hint: string; + + // Numerical error code from the exchange. + exchange_ec: number; + + // HTTP status code received from the exchange. + exchange_hc: number; + + // Public key of the coin for which we got the exchange error. + coin_pub: CoinPublicKey; + } + + interface OrderHistory { + // timestamp-sorted array of all orders matching the query. + // The order of the sorting depends on the sign of delta. + orders: OrderHistoryEntry[]; + } + interface OrderHistoryEntry { + + // order ID of the transaction related to this entry. + order_id: string; + + // row ID of the order in the database + row_id: number; + + // when the order was created + timestamp: Timestamp; + + // the amount of money the order is for + amount: Amount; + + // the summary of the order + summary: string; + + // whether some part of the order is refundable, + // that is the refund deadline has not yet expired + // and the total amount refunded so far is below + // the value of the original transaction. + refundable: boolean; + + // whether the order has been paid or not + paid: boolean; + } + + interface PostOrderRequest { + // The order must at least contain the minimal + // order detail, but can override all + order: Order; + + // if set, the backend will then set the refund deadline to the current + // time plus the specified delay. If it's not set, refunds will not be + // possible. + refund_delay?: RelativeTime; + + // specifies the payment target preferred by the client. Can be used + // to select among the various (active) wire methods supported by the instance. + payment_target?: string; + + // specifies that some products are to be included in the + // order from the inventory. For these inventory management + // is performed (so the products must be in stock) and + // details are completed from the product data of the backend. + inventory_products?: MinimalInventoryProduct[]; + + // Specifies a lock identifier that was used to + // lock a product in the inventory. Only useful if + // manage_inventory is set. Used in case a frontend + // reserved quantities of the individual products while + // the shopping card was being built. Multiple UUIDs can + // be used in case different UUIDs were used for different + // products (i.e. in case the user started with multiple + // shopping sessions that were combined during checkout). + lock_uuids?: UUID[]; + + // Should a token for claiming the order be generated? + // False can make sense if the ORDER_ID is sufficiently + // high entropy to prevent adversarial claims (like it is + // if the backend auto-generates one). Default is 'true'. + create_token?: boolean; + + } + type Order = MinimalOrderDetail | ContractTerms; + + interface MinimalOrderDetail { + // Amount to be paid by the customer + amount: Amount; + + // Short summary of the order + summary: string; + + // URL that will show that the order was successful after + // it has been paid for. Optional. When POSTing to the + // merchant, the placeholder "${ORDER_ID}" will be + // replaced with the actual order ID (useful if the + // order ID is generated server-side and needs to be + // in the URL). + fulfillment_url?: string; + } + + interface MinimalInventoryProduct { + // Which product is requested (here mandatory!) + product_id: string; + + // How many units of the product are requested + quantity: Integer; + } + interface PostOrderResponse { + // Order ID of the response that was just created + order_id: string; + + // Token that authorizes the wallet to claim the order. + // Provided only if "create_token" was set to 'true' + // in the request. + token?: ClaimToken; + } + interface OutOfStockResponse { + + // Product ID of an out-of-stock item + product_id: string; + + // Requested quantity + requested_quantity: Integer; + + // Available quantity (must be below requested_quanitity) + available_quantity: Integer; + + // When do we expect the product to be again in stock? + // Optional, not given if unknown. + restock_expected?: Timestamp; + } + + interface ForgetRequest { + + // Array of valid JSON paths to forgettable fields in the order's + // contract terms. + fields: string[]; + } + interface RefundRequest { + // Amount to be refunded + refund: Amount; + + // Human-readable refund justification + reason: string; + } + interface MerchantRefundResponse { + + // URL (handled by the backend) that the wallet should access to + // trigger refund processing. + // taler://refund/... + taler_refund_uri: string; + + // Contract hash that a client may need to authenticate an + // HTTP request to obtain the above URI in a wallet-friendly way. + h_contract: HashCode; + } + + } + + namespace Tips { + + // GET /private/reserves + interface TippingReserveStatus { + // Array of all known reserves (possibly empty!) + reserves: ReserveStatusEntry[]; + } + interface ReserveStatusEntry { + // Public key of the reserve + reserve_pub: EddsaPublicKey; + + // Timestamp when it was established + creation_time: Timestamp; + + // Timestamp when it expires + expiration_time: Timestamp; + + // Initial amount as per reserve creation call + merchant_initial_amount: Amount; + + // Initial amount as per exchange, 0 if exchange did + // not confirm reserve creation yet. + exchange_initial_amount: Amount; + + // Amount picked up so far. + pickup_amount: Amount; + + // Amount approved for tips that exceeds the pickup_amount. + committed_amount: Amount; + + // Is this reserve active (false if it was deleted but not purged) + active: boolean; + } + + interface ReserveCreateRequest { + // Amount that the merchant promises to put into the reserve + initial_balance: Amount; + + // Exchange the merchant intends to use for tipping + exchange_url: string; + + // Desired wire method, for example "iban" or "x-taler-bank" + wire_method: string; + } + interface ReserveCreateConfirmation { + // Public key identifying the reserve + reserve_pub: EddsaPublicKey; + + // Wire account of the exchange where to transfer the funds + payto_uri: string; + } + interface TipCreateRequest { + // Amount that the customer should be tipped + amount: Amount; + + // Justification for giving the tip + justification: string; + + // URL that the user should be directed to after tipping, + // will be included in the tip_token. + next_url: string; + } + interface TipCreateConfirmation { + // Unique tip identifier for the tip that was created. + tip_id: HashCode; + + // taler://tip URI for the tip + taler_tip_uri: string; + + // URL that will directly trigger processing + // the tip when the browser is redirected to it + tip_status_url: string; + + // when does the tip expire + tip_expiration: Timestamp; + } + + interface ReserveDetail { + // Timestamp when it was established. + creation_time: Timestamp; + + // Timestamp when it expires. + expiration_time: Timestamp; + + // Initial amount as per reserve creation call. + merchant_initial_amount: Amount; + + // Initial amount as per exchange, 0 if exchange did + // not confirm reserve creation yet. + exchange_initial_amount: Amount; + + // Amount picked up so far. + pickup_amount: Amount; + + // Amount approved for tips that exceeds the pickup_amount. + committed_amount: Amount; + + // Array of all tips created by this reserves (possibly empty!). + // Only present if asked for explicitly. + tips?: TipStatusEntry[]; + + // Is this reserve active (false if it was deleted but not purged)? + active: boolean; + + // URI to use to fill the reserve, can be NULL + // if the reserve is inactive or was already filled + payto_uri: string; + + // URL of the exchange hosting the reserve, + // NULL if the reserve is inactive + exchange_url: string; + + } + + interface TipStatusEntry { + + // Unique identifier for the tip. + tip_id: HashCode; + + // Total amount of the tip that can be withdrawn. + total_amount: Amount; + + // Human-readable reason for why the tip was granted. + reason: string; + } + + interface TipDetails { + // Amount that we authorized for this tip. + total_authorized: Amount; + + // Amount that was picked up by the user already. + total_picked_up: Amount; + + // Human-readable reason given when authorizing the tip. + reason: string; + + // Timestamp indicating when the tip is set to expire (may be in the past). + expiration: Timestamp; + + // Reserve public key from which the tip is funded. + reserve_pub: EddsaPublicKey; + + // Array showing the pickup operations of the wallet (possibly empty!). + // Only present if asked for explicitly. + pickups?: PickupDetail[]; + } + interface PickupDetail { + // Unique identifier for the pickup operation. + pickup_id: HashCode; + + // Number of planchets involved. + num_planchets: Integer; + + // Total amount requested for this pickup_id. + requested_amount: Amount; + } + + } + + namespace Transfers { + + interface TransferList { + // list of all the transfers that fit the filter that we know + transfers: TransferDetails[]; + } + interface TransferDetails { + // how much was wired to the merchant (minus fees) + credit_amount: Amount; + + // raw wire transfer identifier identifying the wire transfer (a base32-encoded value) + wtid: string; + + // target account that received the wire transfer + payto_uri: string; + + // base URL of the exchange that made the wire transfer + exchange_url: string; + + // Serial number identifying the transfer in the merchant backend. + // Used for filgering via offset. + transfer_serial_id: number; + + // Time of the execution of the wire transfer by the exchange, according to the exchange + // Only provided if we did get an answer from the exchange. + execution_time?: Timestamp; + + // True if we checked the exchange's answer and are happy with it. + // False if we have an answer and are unhappy, missing if we + // do not have an answer from the exchange. + verified?: boolean; + + // True if the merchant uses the POST /transfers API to confirm + // that this wire transfer took place (and it is thus not + // something merely claimed by the exchange). + confirmed?: boolean; + } + + interface TransferInformation { + // how much was wired to the merchant (minus fees) + credit_amount: Amount; + + // raw wire transfer identifier identifying the wire transfer (a base32-encoded value) + wtid: WireTransferIdentifierRawP; + + // target account that received the wire transfer + payto_uri: string; + + // base URL of the exchange that made the wire transfer + exchange_url: string; + } + interface MerchantTrackTransferResponse { + // Total amount transferred + total: Amount; + + // Applicable wire fee that was charged + wire_fee: Amount; + + // Time of the execution of the wire transfer by the exchange, according to the exchange + execution_time: Timestamp; + + // details about the deposits + deposits_sums: MerchantTrackTransferDetail[]; + } + interface MerchantTrackTransferDetail { + // Business activity associated with the wire transferred amount + // deposit_value. + order_id: string; + + // The total amount the exchange paid back for order_id. + deposit_value: Amount; + + // applicable fees for the deposit + deposit_fee: Amount; + } + + type ExchangeConflictDetails = WireFeeConflictDetails | TrackTransferConflictDetails + // Note: this is not the full 'proof' of missbehavior, as + // the bogus message from the exchange with a signature + // over the 'different' wire fee is missing. + // + // This information is NOT provided by the current implementation, + // because this would be quite expensive to generate and is + // hardly needed _here_. Once we add automated reports for + // the Taler auditor, we need to generate this data anyway + // and should probably return it here as well. + interface WireFeeConflictDetails { + // Numerical error code: + code: "TALER_EC_MERCHANT_PRIVATE_POST_TRANSFERS_BAD_WIRE_FEE"; + + // Text describing the issue for humans. + hint: string; + + + // Wire fee (wrongly) charged by the exchange, breaking the + // contract affirmed by the exchange_sig. + wire_fee: Amount; + + // Timestamp of the wire transfer + execution_time: Timestamp; + + // The expected wire fee (as signed by the exchange) + expected_wire_fee: Amount; + + // Expected closing fee (needed to verify signature) + expected_closing_fee: Amount; + + // Start date of the expected fee structure + start_date: Timestamp; + + // End date of the expected fee structure + end_date: Timestamp; + + // Signature of the exchange affirming the expected fee structure + master_sig: EddsaSignature; + + // Master public key of the exchange + master_pub: EddsaPublicKey; + } + interface TrackTransferConflictDetails { + // Numerical error code + code: "TALER_EC_MERCHANT_PRIVATE_POST_TRANSFERS_CONFLICTING_REPORTS"; + + // Text describing the issue for humans. + hint: string; + + // Offset in the exchange_transfer where the + // exchange's response fails to match the exchange_deposit_proof. + conflict_offset: number; + + // The response from the exchange which tells us when the + // coin was returned to us, except that it does not match + // the expected value of the coin. + // + // This field is NOT provided by the current implementation, + // because this would be quite expensive to generate and is + // hardly needed _here_. Once we add automated reports for + // the Taler auditor, we need to generate this data anyway + // and should probably return it here as well. + // exchange_transfer?: TrackTransferResponse; + + // Public key of the exchange used to sign the response to + // our deposit request. + deposit_exchange_pub: EddsaPublicKey; + + // Signature of the exchange signing the (conflicting) response. + // Signs over a struct TALER_DepositConfirmationPS. + deposit_exchange_sig: EddsaSignature; + + // Hash of the merchant's bank account the wire transfer went to + h_wire: HashCode; + + // Hash of the contract terms with the conflicting deposit. + h_contract_terms: HashCode; + + // At what time the exchange received the deposit. Needed + // to verify the \exchange_sig\. + deposit_timestamp: Timestamp; + + // At what time the refund possibility expired (needed to verify exchange_sig). + refund_deadline: Timestamp; + + // Public key of the coin for which we have conflicting information. + coin_pub: EddsaPublicKey; + + // Amount the exchange counted the coin for in the transfer. + amount_with_fee: Amount; + + // Expected value of the coin. + coin_value: Amount; + + // Expected deposit fee of the coin. + coin_fee: Amount; + + // Expected deposit fee of the coin. + deposit_fee: Amount; + + } + + // interface TrackTransferProof { + // // signature from the exchange made with purpose + // // TALER_SIGNATURE_EXCHANGE_CONFIRM_WIRE_DEPOSIT + // exchange_sig: EddsaSignature; + + // // public EdDSA key of the exchange that was used to generate the signature. + // // Should match one of the exchange's signing keys from /keys. Again given + // // explicitly as the client might otherwise be confused by clock skew as to + // // which signing key was used. + // exchange_pub: EddsaSignature; + + // // hash of the wire details (identical for all deposits) + // // Needed to check the exchange_sig + // h_wire: HashCode; + // } + + } + + + interface ContractTerms { + // Human-readable description of the whole purchase + summary: string; + + // Map from IETF BCP 47 language tags to localized summaries + summary_i18n?: { [lang_tag: string]: string }; + + // Unique, free-form identifier for the proposal. + // Must be unique within a merchant instance. + // For merchants that do not store proposals in their DB + // before the customer paid for them, the order_id can be used + // by the frontend to restore a proposal from the information + // encoded in it (such as a short product identifier and timestamp). + order_id: string; + + // Total price for the transaction. + // The exchange will subtract deposit fees from that amount + // before transferring it to the merchant. + amount: Amount; + + // The URL for this purchase. Every time is is visited, the merchant + // will send back to the customer the same proposal. Clearly, this URL + // can be bookmarked and shared by users. + fulfillment_url?: string; + + // Maximum total deposit fee accepted by the merchant for this contract + max_fee: Amount; + + // Maximum wire fee accepted by the merchant (customer share to be + // divided by the 'wire_fee_amortization' factor, and further reduced + // if deposit fees are below 'max_fee'). Default if missing is zero. + max_wire_fee: Amount; + + // Over how many customer transactions does the merchant expect to + // amortize wire fees on average? If the exchange's wire fee is + // above 'max_wire_fee', the difference is divided by this number + // to compute the expected customer's contribution to the wire fee. + // The customer's contribution may further be reduced by the difference + // between the 'max_fee' and the sum of the actual deposit fees. + // Optional, default value if missing is 1. 0 and negative values are + // invalid and also interpreted as 1. + wire_fee_amortization: number; + + // List of products that are part of the purchase (see Product). + products: Product[]; + + // Time when this contract was generated + timestamp: Timestamp; + + // After this deadline has passed, no refunds will be accepted. + refund_deadline: Timestamp; + + // After this deadline, the merchant won't accept payments for the contact + pay_deadline: Timestamp; + + // Transfer deadline for the exchange. Must be in the + // deposit permissions of coins used to pay for this order. + wire_transfer_deadline: Timestamp; + + // Merchant's public key used to sign this proposal; this information + // is typically added by the backend Note that this can be an ephemeral key. + merchant_pub: EddsaPublicKey; + + // Base URL of the (public!) merchant backend API. + // Must be an absolute URL that ends with a slash. + merchant_base_url: string; + + // More info about the merchant, see below + merchant: Merchant; + + // The hash of the merchant instance's wire details. + h_wire: HashCode; + + // Wire transfer method identifier for the wire method associated with h_wire. + // The wallet may only select exchanges via a matching auditor if the + // exchange also supports this wire method. + // The wire transfer fees must be added based on this wire transfer method. + wire_method: string; + + // Any exchanges audited by these auditors are accepted by the merchant. + auditors: Auditor[]; + + // Exchanges that the merchant accepts even if it does not accept any auditors that audit them. + exchanges: Exchange[]; + + // Delivery location for (all!) products. + delivery_location?: Location; + + // Time indicating when the order should be delivered. + // May be overwritten by individual products. + delivery_date?: Timestamp; + + // Nonce generated by the wallet and echoed by the merchant + // in this field when the proposal is generated. + nonce: string; + + // Specifies for how long the wallet should try to get an + // automatic refund for the purchase. If this field is + // present, the wallet should wait for a few seconds after + // the purchase and then automatically attempt to obtain + // a refund. The wallet should probe until "delay" + // after the payment was successful (i.e. via long polling + // or via explicit requests with exponential back-off). + // + // In particular, if the wallet is offline + // at that time, it MUST repeat the request until it gets + // one response from the merchant after the delay has expired. + // If the refund is granted, the wallet MUST automatically + // recover the payment. This is used in case a merchant + // knows that it might be unable to satisfy the contract and + // desires for the wallet to attempt to get the refund without any + // customer interaction. Note that it is NOT an error if the + // merchant does not grant a refund. + auto_refund?: RelativeTime; + + // Extra data that is only interpreted by the merchant frontend. + // Useful when the merchant needs to store extra information on a + // contract without storing it separately in their database. + extra?: any; + } + +} diff --git a/packages/backend/src/hooks/async.ts b/packages/backend/src/hooks/async.ts new file mode 100644 index 0000000..fd55004 --- /dev/null +++ b/packages/backend/src/hooks/async.ts @@ -0,0 +1,76 @@ +/* + 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/> + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ +import { useState } from "preact/hooks"; +import { cancelPendingRequest } from "./backend"; + +export interface Options { + slowTolerance: number, +} + +export interface AsyncOperationApi<T> { + request: (...a: any) => void, + cancel: () => void, + data: T | undefined, + isSlow: boolean, + isLoading: boolean, + error: string | undefined +} + +export function useAsync<T>(fn?: (...args: any) => Promise<T>, { slowTolerance: tooLong }: Options = { slowTolerance: 1000 }): AsyncOperationApi<T> { + const [data, setData] = useState<T | undefined>(undefined); + const [isLoading, setLoading] = useState<boolean>(false); + const [error, setError] = useState<any>(undefined); + const [isSlow, setSlow] = useState(false) + + const request = async (...args: any) => { + if (!fn) return; + setLoading(true); + + const handler = setTimeout(() => { + setSlow(true) + }, tooLong) + + try { + const result = await fn(...args); + setData(result); + } catch (error) { + setError(error); + } + setLoading(false); + setSlow(false) + clearTimeout(handler) + }; + + function cancel() { + cancelPendingRequest() + setLoading(false); + setSlow(false) + } + + return { + request, + cancel, + data, + isSlow, + isLoading, + error + }; +} diff --git a/packages/backend/src/hooks/backend.ts b/packages/backend/src/hooks/backend.ts new file mode 100644 index 0000000..96b8f71 --- /dev/null +++ b/packages/backend/src/hooks/backend.ts @@ -0,0 +1,262 @@ +/* + 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/> + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ + +import { mutate, cache } from 'swr'; +import axios, { AxiosError, AxiosResponse } from 'axios' +import { MerchantBackend } from '../declaration'; +import { useBackendContext } from '../context/backend'; +import { useEffect, useState } from 'preact/hooks'; +import { DEFAULT_REQUEST_TIMEOUT } from '../utils/constants'; + +export function mutateAll(re: RegExp, value?: unknown): Array<Promise<any>> { + return cache.keys().filter(key => { + return re.test(key) + }).map(key => { + return mutate(key, value) + }) +} + +export type HttpResponse<T> = HttpResponseOk<T> | HttpResponseLoading<T> | HttpError; +export type HttpResponsePaginated<T> = HttpResponseOkPaginated<T> | HttpResponseLoading<T> | HttpError; + +export interface RequestInfo { + url: string; + hasToken: boolean; + params: unknown; + data: unknown; +} + +interface HttpResponseLoading<T> { + ok?: false; + loading: true; + clientError?: false; + serverError?: false; + + data?: T; +} +export interface HttpResponseOk<T> { + ok: true; + loading?: false; + clientError?: false; + serverError?: false; + + data: T; + info?: RequestInfo; +} + +export type HttpResponseOkPaginated<T> = HttpResponseOk<T> & WithPagination + +export interface WithPagination { + loadMore: () => void; + loadMorePrev: () => void; + isReachingEnd?: boolean; + isReachingStart?: boolean; +} + +export type HttpError = HttpResponseClientError | HttpResponseServerError | HttpResponseUnexpectedError; +export interface SwrError { + info: unknown, + status: number, + message: string, +} +export interface HttpResponseServerError { + ok?: false; + loading?: false; + clientError?: false; + serverError: true; + + error?: MerchantBackend.ErrorDetail; + status: number; + message: string; + info?: RequestInfo; +} +interface HttpResponseClientError { + ok?: false; + loading?: false; + clientError: true; + serverError?: false; + + info?: RequestInfo; + isUnauthorized: boolean; + isNotfound: boolean; + status: number; + error?: MerchantBackend.ErrorDetail; + message: string; + +} + +interface HttpResponseUnexpectedError { + ok?: false; + loading?: false; + clientError?: false; + serverError?: false; + + info?: RequestInfo; + status?: number; + error: unknown; + message: string; +} + +type Methods = 'get' | 'post' | 'patch' | 'delete' | 'put'; + +interface RequestOptions { + method?: Methods; + token?: string; + data?: unknown; + params?: unknown; +} + +function buildRequestOk<T>(res: AxiosResponse<T>, url: string, hasToken: boolean): HttpResponseOk<T> { + return { + ok: true, data: res.data, info: { + params: res.config.params, + data: res.config.data, + url, + hasToken, + } + } +} + +// function buildResponse<T>(data?: T, error?: MerchantBackend.ErrorDetail, isValidating?: boolean): HttpResponse<T> { +// if (isValidating) return {loading: true} +// if (error) return buildRequestFailed() +// } + +function buildRequestFailed(ex: AxiosError<MerchantBackend.ErrorDetail>, url: string, hasToken: boolean): HttpResponseClientError | HttpResponseServerError | HttpResponseUnexpectedError { + const status = ex.response?.status + + const info: RequestInfo = { + data: ex.request?.data, + params: ex.request?.params, + url, + hasToken, + }; + + if (status && status >= 400 && status < 500) { + const error: HttpResponseClientError = { + clientError: true, + isNotfound: status === 404, + isUnauthorized: status === 401, + status, + info, + message: ex.response?.data?.hint || ex.message, + error: ex.response?.data + } + return error + } + if (status && status >= 500 && status < 600) { + const error: HttpResponseServerError = { + serverError: true, + status, + info, + message: `${ex.response?.data?.hint} (code ${ex.response?.data?.code})` || ex.message, + error: ex.response?.data + } + return error; + } + + const error: HttpResponseUnexpectedError = { + info, + status, + error: ex, + message: ex.message + } + + return error +} + + +const CancelToken = axios.CancelToken; +let source = CancelToken.source(); + +export function cancelPendingRequest() { + source.cancel('canceled by the user') + source = CancelToken.source() +} + +let removeAxiosCancelToken = false +/** + * Jest mocking seems to break when using the cancelToken property. + * Using this workaround when testing while finding the correct solution + */ +export function setAxiosRequestAsTestingEnvironment() { + removeAxiosCancelToken = true +} + +export async function request<T>(url: string, options: RequestOptions = {}): Promise<HttpResponseOk<T>> { + const headers = options.token ? { Authorization: `Bearer ${options.token}` } : undefined + + try { + const res = await axios({ + url, + responseType: 'json', + headers, + cancelToken: !removeAxiosCancelToken? source.token : undefined, + method: options.method || 'get', + data: options.data, + params: options.params, + timeout: DEFAULT_REQUEST_TIMEOUT * 1000, + }) + return buildRequestOk<T>(res, url, !!options.token) + } catch (e) { + const error = buildRequestFailed(e, url, !!options.token) + throw error + } + +} + +export function fetcher<T>(url: string, token: string, backend: string): Promise<HttpResponseOk<T>> { + return request<T>(`${backend}${url}`, { token }) +} + +export function useBackendInstancesTestForAdmin(): HttpResponse<MerchantBackend.Instances.InstancesResponse> { + const { url, token } = useBackendContext() + + type Type = MerchantBackend.Instances.InstancesResponse; + + const [result, setResult] = useState<HttpResponse<Type>>({ loading: true }) + + useEffect(() => { + request<Type>(`${url}/management/instances`, { token }) + .then(data => setResult(data)) + .catch(error => setResult(error)) + }, [url, token]) + + + return result +} + + +export function useBackendConfig(): HttpResponse<MerchantBackend.VersionResponse> { + const { url, token } = useBackendContext() + + type Type = MerchantBackend.VersionResponse; + + const [result, setResult] = useState<HttpResponse<Type>>({ loading: true }) + + useEffect(() => { + request<Type>(`${url}/config`, { token }) + .then(data => setResult(data)) + .catch(error => setResult(error)) + }, [url, token]) + + return result +} diff --git a/packages/backend/src/hooks/index.ts b/packages/backend/src/hooks/index.ts new file mode 100644 index 0000000..19d672a --- /dev/null +++ b/packages/backend/src/hooks/index.ts @@ -0,0 +1,110 @@ +/* + 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/> + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ + +import { StateUpdater, useCallback, useState } from "preact/hooks"; +import { ValueOrFunction } from '../utils/types'; + + +const calculateRootPath = () => { + const rootPath = typeof window !== undefined ? window.location.origin + window.location.pathname : '/' + return rootPath +} + +export function useBackendURL(url?: string): [string, boolean, StateUpdater<string>, () => void] { + const [value, setter] = useNotNullLocalStorage('backend-url', url || calculateRootPath()) + const [triedToLog, setTriedToLog] = useLocalStorage('tried-login') + + const checkedSetter = (v: ValueOrFunction<string>) => { + setTriedToLog('yes') + return setter(p => (v instanceof Function ? v(p) : v).replace(/\/$/, '')) + } + + const resetBackend = () => { + setTriedToLog(undefined) + } + return [value, !!triedToLog, checkedSetter, resetBackend] +} + +export function useBackendDefaultToken(): [string | undefined, StateUpdater<string | undefined>] { + return useLocalStorage('backend-token') +} + +export function useBackendInstanceToken(id: string): [string | undefined, StateUpdater<string | undefined>] { + const [token, setToken] = useLocalStorage(`backend-token-${id}`) + const [defaultToken, defaultSetToken] = useBackendDefaultToken() + + // instance named 'default' use the default token + if (id === 'default') { + return [defaultToken, defaultSetToken] + } + + return [token, setToken] +} + +export function useLang(initial?: string): [string, StateUpdater<string>] { + const browserLang = typeof window !== "undefined" ? navigator.language || (navigator as any).userLanguage : undefined; + const defaultLang = (browserLang || initial || 'en').substring(0, 2) + return useNotNullLocalStorage('lang-preference', defaultLang) +} + +export function useLocalStorage(key: string, initialValue?: string): [string | undefined, StateUpdater<string | undefined>] { + const [storedValue, setStoredValue] = useState<string | undefined>((): string | undefined => { + return typeof window !== "undefined" ? window.localStorage.getItem(key) || initialValue : initialValue; + }); + + const setValue = (value?: string | ((val?: string) => string | undefined)) => { + setStoredValue(p => { + const toStore = value instanceof Function ? value(p) : value + if (typeof window !== "undefined") { + if (!toStore) { + window.localStorage.removeItem(key) + } else { + window.localStorage.setItem(key, toStore); + } + } + return toStore + }) + }; + + return [storedValue, setValue]; +} + +export function useNotNullLocalStorage(key: string, initialValue: string): [string, StateUpdater<string>] { + const [storedValue, setStoredValue] = useState<string>((): string => { + return typeof window !== "undefined" ? window.localStorage.getItem(key) || initialValue : initialValue; + }); + + const setValue = (value: string | ((val: string) => string)) => { + const valueToStore = value instanceof Function ? value(storedValue) : value; + setStoredValue(valueToStore); + if (typeof window !== "undefined") { + if (!valueToStore) { + window.localStorage.removeItem(key) + } else { + window.localStorage.setItem(key, valueToStore); + } + } + }; + + return [storedValue, setValue]; +} + + diff --git a/packages/backend/src/hooks/instance.ts b/packages/backend/src/hooks/instance.ts new file mode 100644 index 0000000..14ab8de --- /dev/null +++ b/packages/backend/src/hooks/instance.ts @@ -0,0 +1,187 @@ +/* + 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/> + */ +import { MerchantBackend } from '../declaration'; +import { useBackendContext } from '../context/backend'; +import { fetcher, HttpError, HttpResponse, HttpResponseOk, request, SwrError } from './backend'; +import useSWR, { mutate } from 'swr'; +import { useInstanceContext } from '../context/instance'; + + +interface InstanceAPI { + updateInstance: (data: MerchantBackend.Instances.InstanceReconfigurationMessage) => Promise<void>; + deleteInstance: () => Promise<void>; + clearToken: () => Promise<void>; + setNewToken: (token: string) => Promise<void>; +} + +export function useManagementAPI(instanceId: string) : InstanceAPI { + const { url, token } = useBackendContext() + + const updateInstance = async (instance: MerchantBackend.Instances.InstanceReconfigurationMessage): Promise<void> => { + await request(`${url}/management/instances/${instanceId}`, { + method: 'patch', + token, + data: instance + }) + + mutate([`/private/`, token, url], null) + }; + + const deleteInstance = async (): Promise<void> => { + await request(`${url}/management/instances/${instanceId}`, { + method: 'delete', + token, + }) + + mutate([`/private/`, token, url], null) + } + + const clearToken = async (): Promise<void> => { + await request(`${url}/management/instances/${instanceId}/auth`, { + method: 'post', + token, + data: { method: 'external' } + }) + + mutate([`/private/`, token, url], null) + } + + const setNewToken = async (newToken: string): Promise<void> => { + await request(`${url}/management/instances/${instanceId}/auth`, { + method: 'post', + token, + data: { method: 'token', token: newToken } + }) + + mutate([`/private/`, token, url], null) + } + + return { updateInstance, deleteInstance, setNewToken, clearToken } +} + +export function useInstanceAPI(): InstanceAPI { + const { url: baseUrl, token: adminToken } = useBackendContext() + const { token: instanceToken, id, admin } = useInstanceContext() + + const { url, token } = !admin ? { + url: baseUrl, token: adminToken + } : { + url: `${baseUrl}/instances/${id}`, token: instanceToken + }; + + const updateInstance = async (instance: MerchantBackend.Instances.InstanceReconfigurationMessage): Promise<void> => { + await request(`${url}/private/`, { + method: 'patch', + token, + data: instance + }) + + if (adminToken) mutate(['/private/instances', adminToken, baseUrl], null) + mutate([`/private/`, token, url], null) + }; + + const deleteInstance = async (): Promise<void> => { + await request(`${url}/private/`, { + method: 'delete', + token: adminToken, + }) + + if (adminToken) mutate(['/private/instances', adminToken, baseUrl], null) + mutate([`/private/`, token, url], null) + } + + const clearToken = async (): Promise<void> => { + await request(`${url}/private/auth`, { + method: 'post', + token, + data: { method: 'external' } + }) + + mutate([`/private/`, token, url], null) + } + + const setNewToken = async (newToken: string): Promise<void> => { + await request(`${url}/private/auth`, { + method: 'post', + token, + data: { method: 'token', token: newToken } + }) + + mutate([`/private/`, token, url], null) + } + + return { updateInstance, deleteInstance, setNewToken, clearToken } +} + + +export function useInstanceDetails(): HttpResponse<MerchantBackend.Instances.QueryInstancesResponse> { + const { url: baseUrl, token: baseToken } = useBackendContext(); + const { token: instanceToken, id, admin } = useInstanceContext(); + + const { url, token } = !admin ? { + url: baseUrl, token: baseToken + } : { + url: `${baseUrl}/instances/${id}`, token: instanceToken + } + + const { data, error, isValidating } = useSWR<HttpResponseOk<MerchantBackend.Instances.QueryInstancesResponse>, HttpError>([`/private/`, token, url], fetcher, { + refreshInterval:0, + refreshWhenHidden: false, + revalidateOnFocus: false, + revalidateOnReconnect: false, + refreshWhenOffline: false, + errorRetryCount: 0, + errorRetryInterval: 1, + shouldRetryOnError: false, + }) + + if (isValidating) return {loading:true, data: data?.data} + if (data) return data + if (error) return error + return {loading: true} +} + +export function useManagedInstanceDetails(instanceId: string): HttpResponse<MerchantBackend.Instances.QueryInstancesResponse> { + const { url, token } = useBackendContext(); + + const { data, error, isValidating } = useSWR<HttpResponseOk<MerchantBackend.Instances.QueryInstancesResponse>, HttpError>([`/management/instances/${instanceId}`, token, url], fetcher, { + refreshInterval:0, + refreshWhenHidden: false, + revalidateOnFocus: false, + revalidateOnReconnect: false, + refreshWhenOffline: false, + errorRetryCount: 0, + errorRetryInterval: 1, + shouldRetryOnError: false, + }) + + if (isValidating) return {loading:true, data: data?.data} + if (data) return data + if (error) return error + return {loading: true} +} + +export function useBackendInstances(): HttpResponse<MerchantBackend.Instances.InstancesResponse> { + const { url } = useBackendContext() + const { token } = useInstanceContext(); + + const { data, error, isValidating } = useSWR<HttpResponseOk<MerchantBackend.Instances.InstancesResponse>, HttpError>(['/management/instances', token, url], fetcher) + + if (isValidating) return {loading:true, data: data?.data} + if (data) return data + if (error) return error + return {loading: true} +} diff --git a/packages/backend/src/hooks/listener.ts b/packages/backend/src/hooks/listener.ts new file mode 100644 index 0000000..231ed6c --- /dev/null +++ b/packages/backend/src/hooks/listener.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/> + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ + +import { useState } from "preact/hooks"; + +/** + * returns subscriber and activator + * subscriber will receive a method (listener) that will be call when the activator runs. + * the result of calling the listener will be sent to @action + * + * @param action from <T> to <R> + * @returns activator and subscriber, undefined activator means that there is not subscriber + */ + +export function useListener<T, R = any>(action: (r: T) => Promise<R>): [undefined | (() => Promise<R>), (listener?: () => T) => void] { + type RunnerHandler = { toBeRan?: () => Promise<R>; }; + const [state, setState] = useState<RunnerHandler>({}); + + /** + * subscriber will receive a method that will be call when the activator runs + * + * @param listener function to be run when the activator runs + */ + const subscriber = (listener?: () => T) => { + if (listener) { + setState({ + toBeRan: () => { + const whatWeGetFromTheListener = listener(); + return action(whatWeGetFromTheListener); + } + }); + } else { + setState({ + toBeRan: undefined + }) + } + }; + + /** + * activator will call runner if there is someone subscribed + */ + const activator = state.toBeRan ? async () => { + if (state.toBeRan) { + return state.toBeRan(); + } + return Promise.reject(); + } : undefined; + + return [activator, subscriber]; +} diff --git a/packages/backend/src/hooks/notification.ts b/packages/backend/src/hooks/notification.ts new file mode 100644 index 0000000..d1dfbff --- /dev/null +++ b/packages/backend/src/hooks/notification.ts @@ -0,0 +1,43 @@ +/* + 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/> + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ + +import { useCallback, useState } from "preact/hooks"; +import { Notification } from '../utils/types'; + +interface Result { + notification?: Notification; + pushNotification: (n: Notification) => void; + removeNotification: () => void; +} + +export function useNotification(): Result { + const [notification, setNotifications] = useState<Notification|undefined>(undefined) + + const pushNotification = useCallback((n: Notification): void => { + setNotifications(n) + },[]) + + const removeNotification = useCallback(() => { + setNotifications(undefined) + },[]) + + return { notification, pushNotification, removeNotification } +} diff --git a/packages/backend/src/hooks/notifications.ts b/packages/backend/src/hooks/notifications.ts new file mode 100644 index 0000000..1c0c373 --- /dev/null +++ b/packages/backend/src/hooks/notifications.ts @@ -0,0 +1,48 @@ +/* + 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/> + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ + +import { useState } from "preact/hooks"; +import { Notification } from '../utils/types'; + +interface Result { + notifications: Notification[]; + pushNotification: (n: Notification) => void; + removeNotification: (n: Notification) => void; +} + +type NotificationWithDate = Notification & { since: Date } + +export function useNotifications(initial: Notification[] = [], timeout = 3000): Result { + const [notifications, setNotifications] = useState<(NotificationWithDate)[]>(initial.map(i => ({...i, since: new Date() }))) + + const pushNotification = (n: Notification): void => { + const entry = { ...n, since: new Date() } + setNotifications(ns => [...ns, entry]) + if (n.type !== 'ERROR') setTimeout(() => { + setNotifications(ns => ns.filter(x => x.since !== entry.since)) + }, timeout) + } + + const removeNotification = (notif: Notification) => { + setNotifications((ns: NotificationWithDate[]) => ns.filter(n => n !== notif)) + } + return { notifications, pushNotification, removeNotification } +} diff --git a/packages/backend/src/hooks/order.ts b/packages/backend/src/hooks/order.ts new file mode 100644 index 0000000..a0d7916 --- /dev/null +++ b/packages/backend/src/hooks/order.ts @@ -0,0 +1,217 @@ +/* + 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/> + */ +import { useEffect, useState } from 'preact/hooks'; +import useSWR from 'swr'; +import { useBackendContext } from '../context/backend'; +import { useInstanceContext } from '../context/instance'; +import { MerchantBackend } from '../declaration'; +import { MAX_RESULT_SIZE, PAGE_SIZE } from '../utils/constants'; +import { fetcher, HttpError, HttpResponse, HttpResponseOk, HttpResponsePaginated, mutateAll, request } from './backend'; + +export interface OrderAPI { + //FIXME: add OutOfStockResponse on 410 + createOrder: (data: MerchantBackend.Orders.PostOrderRequest) => Promise<HttpResponseOk<MerchantBackend.Orders.PostOrderResponse>>; + forgetOrder: (id: string, data: MerchantBackend.Orders.ForgetRequest) => Promise<HttpResponseOk<void>>; + refundOrder: (id: string, data: MerchantBackend.Orders.RefundRequest) => Promise<HttpResponseOk<MerchantBackend.Orders.MerchantRefundResponse>>; + deleteOrder: (id: string) => Promise<HttpResponseOk<void>>; + getPaymentURL: (id: string) => Promise<HttpResponseOk<string>>; +} + +type YesOrNo = 'yes' | 'no'; + + +export function orderFetcher<T>(url: string, token: string, backend: string, paid?: YesOrNo, refunded?: YesOrNo, wired?: YesOrNo, searchDate?: Date, delta?: number): Promise<HttpResponseOk<T>> { + const date_ms = delta && delta < 0 && searchDate ? searchDate.getTime() + 1 : searchDate?.getTime() + const params: any = {} + if (paid !== undefined) params.paid = paid + if (delta !== undefined) params.delta = delta + if (refunded !== undefined) params.refunded = refunded + if (wired !== undefined) params.wired = wired + if (date_ms !== undefined) params.date_ms = date_ms + return request<T>(`${backend}${url}`, { token, params }) +} + + +export function useOrderAPI(): OrderAPI { + const { url: baseUrl, token: adminToken } = useBackendContext() + const { token: instanceToken, id, admin } = useInstanceContext() + + const { url, token } = !admin ? { + url: baseUrl, token: adminToken + } : { + url: `${baseUrl}/instances/${id}`, token: instanceToken + } + + const createOrder = async (data: MerchantBackend.Orders.PostOrderRequest): Promise<HttpResponseOk<MerchantBackend.Orders.PostOrderResponse>> => { + const res = await request<MerchantBackend.Orders.PostOrderResponse>(`${url}/private/orders`, { + method: 'post', + token, + data + }) + await mutateAll(/@"\/private\/orders"@/) + return res + } + const refundOrder = async (orderId: string, data: MerchantBackend.Orders.RefundRequest): Promise<HttpResponseOk<MerchantBackend.Orders.MerchantRefundResponse>> => { + mutateAll(/@"\/private\/orders"@/) + return request<MerchantBackend.Orders.MerchantRefundResponse>(`${url}/private/orders/${orderId}/refund`, { + method: 'post', + token, + data + }) + + // return res + } + + const forgetOrder = async (orderId: string, data: MerchantBackend.Orders.ForgetRequest): Promise<HttpResponseOk<void>> => { + mutateAll(/@"\/private\/orders"@/) + return request(`${url}/private/orders/${orderId}/forget`, { + method: 'patch', + token, + data + }) + + } + const deleteOrder = async (orderId: string): Promise<HttpResponseOk<void>> => { + mutateAll(/@"\/private\/orders"@/) + return request(`${url}/private/orders/${orderId}`, { + method: 'delete', + token + }) + } + + const getPaymentURL = async (orderId: string): Promise<HttpResponseOk<string>> => { + return request<MerchantBackend.Orders.MerchantOrderStatusResponse>(`${url}/private/orders/${orderId}`, { + method: 'get', + token + }).then((res) => { + const url = res.data.order_status === "unpaid" ? res.data.taler_pay_uri : res.data.contract_terms.fulfillment_url + const response: HttpResponseOk<string> = res as any + response.data = url || '' + return response + }) + } + + return { createOrder, forgetOrder, deleteOrder, refundOrder, getPaymentURL } +} + +export function useOrderDetails(oderId: string): HttpResponse<MerchantBackend.Orders.MerchantOrderStatusResponse> { + const { url: baseUrl, token: baseToken } = useBackendContext(); + const { token: instanceToken, id, admin } = useInstanceContext(); + + const { url, token } = !admin ? { + url: baseUrl, token: baseToken + } : { + url: `${baseUrl}/instances/${id}`, token: instanceToken + }; + + const { data, error, isValidating } = useSWR<HttpResponseOk<MerchantBackend.Orders.MerchantOrderStatusResponse>, HttpError>([`/private/orders/${oderId}`, token, url], fetcher, { + refreshInterval:0, + refreshWhenHidden: false, + revalidateOnFocus: false, + revalidateOnReconnect: false, + refreshWhenOffline: false, + }) + + if (isValidating) return { loading: true, data: data?.data } + if (data) return data + if (error) return error + return { loading: true } +} + +export interface InstanceOrderFilter { + paid?: YesOrNo; + refunded?: YesOrNo; + wired?: YesOrNo; + date?: Date; +} + +export function useInstanceOrders(args?: InstanceOrderFilter, updateFilter?: (d: Date) => void): HttpResponsePaginated<MerchantBackend.Orders.OrderHistory> { + const { url: baseUrl, token: baseToken } = useBackendContext(); + const { token: instanceToken, id, admin } = useInstanceContext(); + + const { url, token } = !admin ? { + url: baseUrl, token: baseToken + } : { + url: `${baseUrl}/instances/${id}`, token: instanceToken + } + + const [pageBefore, setPageBefore] = useState(1) + const [pageAfter, setPageAfter] = useState(1) + + const totalAfter = pageAfter * PAGE_SIZE; + const totalBefore = args?.date ? pageBefore * PAGE_SIZE : 0; + + /** + * FIXME: this can be cleaned up a little + * + * the logic of double query should be inside the orderFetch so from the hook perspective and cache + * is just one query and one error status + */ + const { data: beforeData, error: beforeError, isValidating: loadingBefore } = useSWR<HttpResponseOk<MerchantBackend.Orders.OrderHistory>, HttpError>( + [`/private/orders`, token, url, args?.paid, args?.refunded, args?.wired, args?.date, totalBefore], + orderFetcher, + ) + const { data: afterData, error: afterError, isValidating: loadingAfter } = useSWR<HttpResponseOk<MerchantBackend.Orders.OrderHistory>, HttpError>( + [`/private/orders`, token, url, args?.paid, args?.refunded, args?.wired, args?.date, -totalAfter], + orderFetcher, + ) + + //this will save last result + const [lastBefore, setLastBefore] = useState<HttpResponse<MerchantBackend.Orders.OrderHistory>>({ loading: true }) + const [lastAfter, setLastAfter] = useState<HttpResponse<MerchantBackend.Orders.OrderHistory>>({ loading: true }) + useEffect(() => { + if (afterData) setLastAfter(afterData) + if (beforeData) setLastBefore(beforeData) + }, [afterData, beforeData]) + + // this has problems when there are some ids missing + + if (beforeError) return beforeError + if (afterError) return afterError + + + const pagination = { + isReachingEnd: afterData && afterData.data.orders.length < totalAfter, + isReachingStart: (!args?.date) || (beforeData && beforeData.data.orders.length < totalBefore), + loadMore: () => { + if (!afterData) return + if (afterData.data.orders.length < MAX_RESULT_SIZE) { + setPageAfter(pageAfter + 1) + } else { + const from = afterData.data.orders[afterData.data.orders.length - 1].timestamp.t_ms + if (from && updateFilter) updateFilter(new Date(from)) + } + }, + loadMorePrev: () => { + if (!beforeData) return + if (beforeData.data.orders.length < MAX_RESULT_SIZE) { + setPageBefore(pageBefore + 1) + } else if (beforeData) { + const from = beforeData.data.orders[beforeData.data.orders.length - 1].timestamp.t_ms + if (from && updateFilter) updateFilter(new Date(from)) + } + }, + } + + const orders = !beforeData || !afterData ? [] : (beforeData || lastBefore).data.orders.slice().reverse().concat((afterData || lastAfter).data.orders) + if (loadingAfter || loadingBefore) return { loading: true, data: { orders } } + if (beforeData && afterData) { + return { ok: true, data: { orders }, ...pagination } + } + return { loading: true } + +} + diff --git a/packages/backend/src/hooks/product.ts b/packages/backend/src/hooks/product.ts new file mode 100644 index 0000000..edba27b --- /dev/null +++ b/packages/backend/src/hooks/product.ts @@ -0,0 +1,199 @@ +/* + 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/> + */ +import { useEffect } from 'preact/hooks'; +import useSWR, { trigger, useSWRInfinite, cache, mutate } from 'swr'; +import { useBackendContext } from '../context/backend'; +// import { useFetchContext } from '../context/fetch'; +import { useInstanceContext } from '../context/instance'; +import { MerchantBackend, WithId } from '../declaration'; +import { fetcher, HttpError, HttpResponse, HttpResponseOk, mutateAll, request } from './backend'; + +export interface ProductAPI { + createProduct: (data: MerchantBackend.Products.ProductAddDetail) => Promise<void>; + updateProduct: (id: string, data: MerchantBackend.Products.ProductPatchDetail) => Promise<void>; + deleteProduct: (id: string) => Promise<void>; + lockProduct: (id: string, data: MerchantBackend.Products.LockRequest) => Promise<void>; +} + + +export function useProductAPI(): ProductAPI { + const { url: baseUrl, token: adminToken } = useBackendContext(); + const { token: instanceToken, id, admin } = useInstanceContext(); + + const { url, token } = !admin ? { + url: baseUrl, token: adminToken + } : { + url: `${baseUrl}/instances/${id}`, token: instanceToken + }; + + + const createProduct = async (data: MerchantBackend.Products.ProductAddDetail): Promise<void> => { + await request(`${url}/private/products`, { + method: 'post', + token, + data + }); + + await mutateAll(/@"\/private\/products"@/, null); + }; + + const updateProduct = async (productId: string, data: MerchantBackend.Products.ProductPatchDetail): Promise<void> => { + const r = await request(`${url}/private/products/${productId}`, { + method: 'patch', + token, + data + }); + + /** + * There is some inconsistency in how the cache is evicted. + * I'm keeping this for later inspection + */ + + // -- Clear all cache + // -- This seems to work always but is bad + + // const keys = [...cache.keys()] + // console.log(keys) + // cache.clear() + // await Promise.all(keys.map(k => trigger(k))) + + // -- From the keys to the cache trigger + // -- An intermediate step + + // const keys = [ + // [`/private/products`, token, url], + // [`/private/products/${productId}`, token, url], + // ] + // cache.clear() + // const f: string[][] = keys.map(k => cache.serializeKey(k)) + // console.log(f) + // const m = flat(f) + // console.log(m) + // await Promise.all(m.map(k => trigger(k, true))) + + // await Promise.all(keys.map(k => mutate(k))) + + // -- This is how is supposed to be use + + // await mutate([`/private/products`, token, url]) + // await mutate([`/private/products/${productId}`, token, url]) + + // await mutateAll(/@"\/private\/products"@/); + await mutateAll(/@"\/private\/products\/.*"@/); + // return true + // return r + + // -- FIXME: why this un-break the tests? + return Promise.resolve() + }; + + const deleteProduct = async (productId: string): Promise<void> => { + await request(`${url}/private/products/${productId}`, { + method: 'delete', + token, + }); + + await mutateAll(/@"\/private\/products"@/); + }; + + const lockProduct = async (productId: string, data: MerchantBackend.Products.LockRequest): Promise<void> => { + await request(`${url}/private/products/${productId}/lock`, { + method: 'post', + token, + data + }); + + await mutateAll(/@"\/private\/products"@/); + }; + + return { createProduct, updateProduct, deleteProduct, lockProduct }; +} + + +export function useInstanceProducts(): HttpResponse<(MerchantBackend.Products.ProductDetail & WithId)[]> { + const { url: baseUrl, token: baseToken } = useBackendContext(); + const { token: instanceToken, id, admin } = useInstanceContext(); + // const { useSWR, useSWRInfinite } = useFetchContext(); + + const { url, token } = !admin ? { + url: baseUrl, token: baseToken + } : { + url: `${baseUrl}/instances/${id}`, token: instanceToken + }; + + const { data: list, error: listError, isValidating: listLoading } = useSWR<HttpResponseOk<MerchantBackend.Products.InventorySummaryResponse>, HttpError>([`/private/products`, token, url], fetcher, { + refreshInterval: 0, + refreshWhenHidden: false, + revalidateOnFocus: false, + revalidateOnReconnect: false, + refreshWhenOffline: false, + }); + + const { data: products, error: productError, setSize, size } = useSWRInfinite<HttpResponseOk<MerchantBackend.Products.ProductDetail>, HttpError>((pageIndex: number) => { + if (!list?.data || !list.data.products.length || listError || listLoading) return null + return [`/private/products/${list.data.products[pageIndex].product_id}`, token, url] + }, fetcher, { + revalidateAll: true, + }) + + useEffect(() => { + if (list?.data && list.data.products.length > 0) { + setSize(list.data.products.length) + } + }, [list?.data.products.length, listLoading]) + + + if (listLoading) return { loading: true, data: [] } + if (listError) return listError + if (productError) return productError + if (list?.data && list.data.products.length === 0) { + return { ok: true, data: [] } + } + if (products) { + const dataWithId = products.map((d) => { + //take the id from the queried url + return ({ ...d.data, id: d.info?.url.replace(/.*\/private\/products\//, '') || '' }) + }) + return { ok: true, data: dataWithId } + } + return { loading: true } +} + +export function useProductDetails(productId: string): HttpResponse<MerchantBackend.Products.ProductDetail> { + const { url: baseUrl, token: baseToken } = useBackendContext(); + const { token: instanceToken, id, admin } = useInstanceContext(); + + const { url, token } = !admin ? { + url: baseUrl, token: baseToken + } : { + url: `${baseUrl}/instances/${id}`, token: instanceToken + }; + + const { data, error, isValidating } = useSWR<HttpResponseOk<MerchantBackend.Products.ProductDetail>, HttpError>( + [`/private/products/${productId}`, token, url], fetcher, { + refreshInterval: 0, + refreshWhenHidden: false, + revalidateOnFocus: false, + revalidateOnReconnect: false, + refreshWhenOffline: false, + } + ) + + if (isValidating) return { loading: true, data: data?.data } + if (data) return data + if (error) return error + return { loading: true } +} diff --git a/packages/backend/src/hooks/tips.ts b/packages/backend/src/hooks/tips.ts new file mode 100644 index 0000000..345e1fa --- /dev/null +++ b/packages/backend/src/hooks/tips.ts @@ -0,0 +1,159 @@ +/* + 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/> + */ +import useSWR from 'swr'; +import { useBackendContext } from '../context/backend'; +import { useInstanceContext } from '../context/instance'; +import { MerchantBackend } from '../declaration'; +import { fetcher, HttpError, HttpResponse, HttpResponseOk, mutateAll, request } from './backend'; + + +export function useReservesAPI(): ReserveMutateAPI { + const { url: baseUrl, token: adminToken } = useBackendContext(); + const { token: instanceToken, id, admin } = useInstanceContext(); + + const { url, token } = !admin ? { + url: baseUrl, token: adminToken + } : { + url: `${baseUrl}/instances/${id}`, token: instanceToken + }; + + const createReserve = async (data: MerchantBackend.Tips.ReserveCreateRequest): Promise<HttpResponseOk<MerchantBackend.Tips.ReserveCreateConfirmation>> => { + const res = await request<MerchantBackend.Tips.ReserveCreateConfirmation>(`${url}/private/reserves`, { + method: 'post', + token, + data + }); + + await mutateAll(/@"\/private\/reserves"@/); + + return res + }; + + const authorizeTipReserve = async (pub: string, data: MerchantBackend.Tips.TipCreateRequest): Promise<HttpResponseOk<MerchantBackend.Tips.TipCreateConfirmation>> => { + const res = await request<MerchantBackend.Tips.TipCreateConfirmation>(`${url}/private/reserves/${pub}/authorize-tip`, { + method: 'post', + token, + data + }); + await mutateAll(/@"\/private\/reserves"@/); + + return res + }; + + const authorizeTip = async (data: MerchantBackend.Tips.TipCreateRequest): Promise<HttpResponseOk<MerchantBackend.Tips.TipCreateConfirmation>> => { + const res = await request<MerchantBackend.Tips.TipCreateConfirmation>(`${url}/private/tips`, { + method: 'post', + token, + data + }); + + await mutateAll(/@"\/private\/reserves"@/); + + return res + }; + + const deleteReserve = async (pub: string): Promise<HttpResponse<void>> => { + const res = await request<void>(`${url}/private/reserves/${pub}`, { + method: 'delete', + token, + }); + + await mutateAll(/@"\/private\/reserves"@/); + + return res + }; + + + return { createReserve, authorizeTip, authorizeTipReserve, deleteReserve }; +} + +export interface ReserveMutateAPI { + createReserve: (data: MerchantBackend.Tips.ReserveCreateRequest) => Promise<HttpResponseOk<MerchantBackend.Tips.ReserveCreateConfirmation>>; + authorizeTipReserve: (id: string, data: MerchantBackend.Tips.TipCreateRequest) => Promise<HttpResponseOk<MerchantBackend.Tips.TipCreateConfirmation>>; + authorizeTip: (data: MerchantBackend.Tips.TipCreateRequest) => Promise<HttpResponseOk<MerchantBackend.Tips.TipCreateConfirmation>>; + deleteReserve: (id: string) => Promise<HttpResponse<void>>; +} + +export function useInstanceTips(): HttpResponse<MerchantBackend.Tips.TippingReserveStatus> { + const { url: baseUrl, token: baseToken } = useBackendContext(); + const { token: instanceToken, id, admin } = useInstanceContext(); + + const { url, token } = !admin ? { + url: baseUrl, token: baseToken + } : { + url: `${baseUrl}/instances/${id}`, token: instanceToken + } + + const { data, error, isValidating } = useSWR<HttpResponseOk<MerchantBackend.Tips.TippingReserveStatus>, HttpError>([`/private/reserves`, token, url], fetcher) + + if (isValidating) return { loading: true, data: data?.data } + if (data) return data + if (error) return error + return { loading: true } +} + + +export function useReserveDetails(reserveId: string): HttpResponse<MerchantBackend.Tips.ReserveDetail> { + const { url: baseUrl } = useBackendContext(); + const { token, id: instanceId, admin } = useInstanceContext(); + + const url = !admin ? baseUrl : `${baseUrl}/instances/${instanceId}` + + const { data, error, isValidating } = useSWR<HttpResponseOk<MerchantBackend.Tips.ReserveDetail>, HttpError>([`/private/reserves/${reserveId}`, token, url], reserveDetailFetcher, { + refreshInterval:0, + refreshWhenHidden: false, + revalidateOnFocus: false, + revalidateOnReconnect: false, + refreshWhenOffline: false, + }) + + if (isValidating) return { loading: true, data: data?.data } + if (data) return data + if (error) return error + return { loading: true } +} + +export function useTipDetails(tipId: string): HttpResponse<MerchantBackend.Tips.TipDetails> { + const { url: baseUrl } = useBackendContext(); + const { token, id: instanceId, admin } = useInstanceContext(); + + const url = !admin ? baseUrl : `${baseUrl}/instances/${instanceId}` + + const { data, error, isValidating } = useSWR<HttpResponseOk<MerchantBackend.Tips.TipDetails>, HttpError>([`/private/tips/${tipId}`, token, url], tipsDetailFetcher, { + refreshInterval:0, + refreshWhenHidden: false, + revalidateOnFocus: false, + revalidateOnReconnect: false, + refreshWhenOffline: false, + }) + + if (isValidating) return { loading: true, data: data?.data } + if (data) return data + if (error) return error + return { loading: true } +} + +export function reserveDetailFetcher<T>(url: string, token: string, backend: string): Promise<HttpResponseOk<T>> { + return request<T>(`${backend}${url}`, { token, params: { + tips: 'yes' + } }) +} + +export function tipsDetailFetcher<T>(url: string, token: string, backend: string): Promise<HttpResponseOk<T>> { + return request<T>(`${backend}${url}`, { token, params: { + pickups: 'yes' + } }) +} diff --git a/packages/backend/src/hooks/transfer.ts b/packages/backend/src/hooks/transfer.ts new file mode 100644 index 0000000..02e041a --- /dev/null +++ b/packages/backend/src/hooks/transfer.ts @@ -0,0 +1,150 @@ +/* + 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/> + */ +import { MerchantBackend } from '../declaration'; +import { useBackendContext } from '../context/backend'; +import { request, mutateAll, HttpResponse, HttpError, HttpResponseOk, HttpResponsePaginated } from './backend'; +import useSWR from 'swr'; +import { useInstanceContext } from '../context/instance'; +import { MAX_RESULT_SIZE, PAGE_SIZE } from '../utils/constants'; +import { useEffect, useState } from 'preact/hooks'; + +async function transferFetcher<T>(url: string, token: string, backend: string, payto_uri?: string, verified?: string, position?: string, delta?: number): Promise<HttpResponseOk<T>> { + const params: any = {} + if (payto_uri !== undefined) params.payto_uri = payto_uri + if (verified !== undefined) params.verified = verified + if (delta !== undefined) { + // if (delta > 0) { + // params.after = searchDate?.getTime() + // } else { + // params.before = searchDate?.getTime() + // } + params.limit = delta + } + if (position !== undefined) params.offset = position + + return request<T>(`${backend}${url}`, { token, params }) +} + +export function useTransferAPI(): TransferAPI { + const { url: baseUrl, token: adminToken } = useBackendContext(); + const { token: instanceToken, id, admin } = useInstanceContext(); + + const { url, token } = !admin ? { + url: baseUrl, token: adminToken + } : { + url: `${baseUrl}/instances/${id}`, token: instanceToken + }; + + const informTransfer = async (data: MerchantBackend.Transfers.TransferInformation): Promise<HttpResponseOk<MerchantBackend.Transfers.MerchantTrackTransferResponse>> => { + mutateAll(/@"\/private\/transfers"@/); + + return request<MerchantBackend.Transfers.MerchantTrackTransferResponse>(`${url}/private/transfers`, { + method: 'post', + token, + data + }); + }; + + return { informTransfer }; +} + +export interface TransferAPI { + informTransfer: (data: MerchantBackend.Transfers.TransferInformation) => Promise<HttpResponseOk<MerchantBackend.Transfers.MerchantTrackTransferResponse>>; +} + +export interface InstanceTransferFilter { + payto_uri?: string; + verified?: 'yes' | 'no'; + position?: string; +} + + +export function useInstanceTransfers(args?: InstanceTransferFilter, updatePosition?: (id: string) => void): HttpResponsePaginated<MerchantBackend.Transfers.TransferList> { + const { url: baseUrl, token: baseToken } = useBackendContext(); + const { token: instanceToken, id, admin } = useInstanceContext(); + + const { url, token } = !admin ? { + url: baseUrl, token: baseToken + } : { + url: `${baseUrl}/instances/${id}`, token: instanceToken + } + + const [pageBefore, setPageBefore] = useState(1) + const [pageAfter, setPageAfter] = useState(1) + + const totalAfter = pageAfter * PAGE_SIZE; + const totalBefore = args?.position !== undefined ? pageBefore * PAGE_SIZE : 0; + + /** + * FIXME: this can be cleaned up a little + * + * the logic of double query should be inside the orderFetch so from the hook perspective and cache + * is just one query and one error status + */ + const { data: beforeData, error: beforeError, isValidating: loadingBefore } = useSWR<HttpResponseOk<MerchantBackend.Transfers.TransferList>, HttpError>( + [`/private/transfers`, token, url, args?.payto_uri, args?.verified, args?.position, totalBefore], + transferFetcher, + ) + const { data: afterData, error: afterError, isValidating: loadingAfter } = useSWR<HttpResponseOk<MerchantBackend.Transfers.TransferList>, HttpError>( + [`/private/transfers`, token, url, args?.payto_uri, args?.verified, args?.position, -totalAfter], + transferFetcher, + ) + + //this will save last result + const [lastBefore, setLastBefore] = useState<HttpResponse<MerchantBackend.Transfers.TransferList>>({ loading: true }) + const [lastAfter, setLastAfter] = useState<HttpResponse<MerchantBackend.Transfers.TransferList>>({ loading: true }) + useEffect(() => { + if (afterData) setLastAfter(afterData) + if (beforeData) setLastBefore(beforeData) + }, [afterData, beforeData]) + + // this has problems when there are some ids missing + + if (beforeError) return beforeError + if (afterError) return afterError + + const pagination = { + isReachingEnd: afterData && afterData.data.transfers.length < totalAfter, + isReachingStart: (!args?.position) || (beforeData && beforeData.data.transfers.length < totalBefore), + loadMore: () => { + if (!afterData) return + if (afterData.data.transfers.length < MAX_RESULT_SIZE) { + setPageAfter(pageAfter + 1) + } else { + const from = ""+afterData.data.transfers[afterData.data.transfers.length - 1].transfer_serial_id + if (from && updatePosition) updatePosition(from) + } + }, + loadMorePrev: () => { + if (!beforeData) return + if (beforeData.data.transfers.length < MAX_RESULT_SIZE) { + setPageBefore(pageBefore + 1) + } else if (beforeData) { + const from = ""+beforeData.data.transfers[beforeData.data.transfers.length - 1].transfer_serial_id + if (from && updatePosition) updatePosition(from) + } + }, + } + + const transfers = !beforeData || !afterData ? [] : (beforeData || lastBefore).data.transfers.slice().reverse().concat((afterData || lastAfter).data.transfers) + if (loadingAfter || loadingBefore) return { loading: true, data: { transfers } } + if (beforeData && afterData) { + return { ok: true, data: { transfers }, ...pagination } + } + return { loading: true } +} + + diff --git a/packages/backend/src/i18n/de.po b/packages/backend/src/i18n/de.po new file mode 100644 index 0000000..6b35bd0 --- /dev/null +++ b/packages/backend/src/i18n/de.po @@ -0,0 +1,1057 @@ +# This file is part of TALER +# (C) 2016 GNUnet e.V. +# +# 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. +# +# 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 +# TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/> +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Taler Wallet\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-23 00:00+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: src/ApplicationReadyRoutes.tsx:50 src/InstanceRoutes.tsx:118 +#: src/InstanceRoutes.tsx:299 +#, c-format +msgid "Access denied" +msgstr "" + +#: src/ApplicationReadyRoutes.tsx:51 src/InstanceRoutes.tsx:118 +#: src/InstanceRoutes.tsx:300 +#, c-format +msgid "Check your token is valid" +msgstr "" + +#: src/ApplicationReadyRoutes.tsx:72 +#, c-format +msgid "Couldn't access the server." +msgstr "" + +#: src/ApplicationReadyRoutes.tsx:73 +#, c-format +msgid "Could not infer instance id from url %1$s" +msgstr "" + +#: src/InstanceRoutes.tsx:109 +#, c-format +msgid "HTTP status #%1$s: Server reported a problem" +msgstr "" + +#: src/InstanceRoutes.tsx:110 +#, c-format +msgid "Got message: \"%1$s\" from: %2$s" +msgstr "" + +#: src/InstanceRoutes.tsx:127 +#, c-format +msgid "No default instance" +msgstr "" + +#: src/InstanceRoutes.tsx:128 +#, c-format +msgid "" +"in order to use merchant backoffice, you should create the default instance" +msgstr "" + +#: src/InstanceRoutes.tsx:288 +#, c-format +msgid "Server reported a problem: HTTP status #%1$s" +msgstr "" + +#: src/InstanceRoutes.tsx:289 +#, c-format +msgid "Got message: %1$s from: %2$s" +msgstr "" + +#: src/components/exception/login.tsx:46 +#, c-format +msgid "Login required" +msgstr "" + +#: src/components/exception/login.tsx:49 +#, c-format +msgid "" +"Please enter your auth token. Token should have \"secret-token:\" and start " +"with Bearer or ApiKey" +msgstr "" + +#: src/components/exception/login.tsx:86 src/components/modal/index.tsx:53 +#: src/components/modal/index.tsx:75 src/paths/admin/create/CreatePage.tsx:115 +#: src/paths/instance/orders/create/CreatePage.tsx:325 +#: src/paths/instance/products/create/CreatePage.tsx:51 +#: src/paths/instance/products/list/Table.tsx:174 +#: src/paths/instance/products/list/Table.tsx:228 +#: src/paths/instance/products/update/UpdatePage.tsx:55 +#: src/paths/instance/transfers/create/CreatePage.tsx:89 +#: src/paths/instance/update/UpdatePage.tsx:134 +#, c-format +msgid "Confirm" +msgstr "" + +#: src/components/form/InputArray.tsx:72 +#, c-format +msgid "The value %1$s is invalid for a payment url" +msgstr "" + +#: src/components/form/InputDate.tsx:67 +#: src/paths/instance/orders/list/index.tsx:123 +#, c-format +msgid "pick a date" +msgstr "" + +#: src/components/form/InputDate.tsx:81 +#, c-format +msgid "clear" +msgstr "" + +#: src/components/form/InputDate.tsx:83 +#: src/paths/instance/transfers/list/Table.tsx:140 +#, c-format +msgid "never" +msgstr "" + +#: src/components/form/InputImage.tsx:80 +#, c-format +msgid "Image should be smaller than 1 MB" +msgstr "" + +#: src/components/form/InputLocation.tsx:28 +#, c-format +msgid "Country" +msgstr "" + +#: src/components/form/InputLocation.tsx:30 +#: src/paths/admin/create/CreatePage.tsx:99 +#: src/paths/instance/transfers/list/Table.tsx:124 +#: src/paths/instance/update/UpdatePage.tsx:118 +#, c-format +msgid "Address" +msgstr "" + +#: src/components/form/InputLocation.tsx:34 +#, c-format +msgid "Building number" +msgstr "" + +#: src/components/form/InputLocation.tsx:35 +#, c-format +msgid "Building name" +msgstr "" + +#: src/components/form/InputLocation.tsx:36 +#, c-format +msgid "Street" +msgstr "" + +#: src/components/form/InputLocation.tsx:37 +#, c-format +msgid "Post code" +msgstr "" + +#: src/components/form/InputLocation.tsx:38 +#, c-format +msgid "Town location" +msgstr "" + +#: src/components/form/InputLocation.tsx:39 +#, c-format +msgid "Town" +msgstr "" + +#: src/components/form/InputLocation.tsx:40 +#, c-format +msgid "District" +msgstr "" + +#: src/components/form/InputLocation.tsx:41 +#, c-format +msgid "Country subdivision" +msgstr "" + +#: src/components/form/InputSearchProduct.tsx:59 +#, c-format +msgid "Product id" +msgstr "" + +#: src/components/form/InputSearchProduct.tsx:60 +#: src/components/product/ProductForm.tsx:99 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:122 +#: src/paths/instance/orders/list/Table.tsx:227 +#: src/paths/instance/products/list/Table.tsx:86 +#, c-format +msgid "Description" +msgstr "" + +#: src/components/form/InputSearchProduct.tsx:73 +#: src/components/form/InputTaxes.tsx:81 +#: src/paths/admin/create/CreatePage.tsx:87 src/paths/admin/list/Table.tsx:110 +#: src/paths/instance/details/DetailPage.tsx:76 +#: src/paths/instance/update/UpdatePage.tsx:106 +#, c-format +msgid "Name" +msgstr "" + +#: src/components/form/InputSearchProduct.tsx:102 +#, c-format +msgid "loading..." +msgstr "" + +#: src/components/form/InputSearchProduct.tsx:108 +#, c-format +msgid "no products found" +msgstr "" + +#: src/components/form/InputSearchProduct.tsx:116 +#, c-format +msgid "no results" +msgstr "" + +#: src/components/form/InputSecured.tsx:33 +#, c-format +msgid "Deleting" +msgstr "" + +#: src/components/form/InputSecured.tsx:34 +#, c-format +msgid "Changing" +msgstr "" + +#: src/components/form/InputSecured.tsx:60 +#, c-format +msgid "Manage token" +msgstr "" + +#: src/components/form/InputSecured.tsx:83 +#, c-format +msgid "Update" +msgstr "" + +#: src/components/form/InputSecured.tsx:100 +#: src/paths/instance/orders/create/CreatePage.tsx:252 +#: src/paths/instance/orders/create/CreatePage.tsx:273 +#, c-format +msgid "Remove" +msgstr "" + +#: src/components/form/InputSecured.tsx:106 src/components/modal/index.tsx:52 +#: src/components/modal/index.tsx:73 src/paths/admin/create/CreatePage.tsx:114 +#: src/paths/instance/orders/create/CreatePage.tsx:324 +#: src/paths/instance/products/create/CreatePage.tsx:50 +#: src/paths/instance/products/list/Table.tsx:166 +#: src/paths/instance/products/list/Table.tsx:218 +#: src/paths/instance/products/update/UpdatePage.tsx:54 +#: src/paths/instance/transfers/create/CreatePage.tsx:88 +#: src/paths/instance/update/UpdatePage.tsx:133 +#, c-format +msgid "Cancel" +msgstr "" + +#: src/components/form/InputStock.tsx:91 +#, c-format +msgid "Manage stock" +msgstr "" + +#: src/components/form/InputStock.tsx:93 +#, c-format +msgid "Infinite" +msgstr "" + +#: src/components/form/InputStock.tsx:105 +#, c-format +msgid "lost cannot be greater that current + incoming (max %1$s)" +msgstr "" + +#: src/components/form/InputStock.tsx:111 +#, c-format +msgid "current stock will change from %1$s to %2$s" +msgstr "" + +#: src/components/form/InputStock.tsx:112 +#, c-format +msgid "current stock will stay at %1$s" +msgstr "" + +#: src/components/form/InputStock.tsx:129 +#: src/paths/instance/products/list/Table.tsx:204 +#, c-format +msgid "Incoming" +msgstr "" + +#: src/components/form/InputStock.tsx:130 +#: src/paths/instance/products/list/Table.tsx:205 +#, c-format +msgid "Lost" +msgstr "" + +#: src/components/form/InputStock.tsx:142 +#, c-format +msgid "Current" +msgstr "" + +#: src/components/form/InputStock.tsx:145 +#, c-format +msgid "without stock" +msgstr "" + +#: src/components/form/InputStock.tsx:150 +#, c-format +msgid "Next restock" +msgstr "" + +#: src/components/form/InputStock.tsx:152 +#, c-format +msgid "Delivery address" +msgstr "" + +#: src/components/form/InputTaxes.tsx:73 +#, c-format +msgid "this product has no taxes" +msgstr "" + +#: src/components/form/InputTaxes.tsx:77 +#: src/paths/instance/orders/details/DetailPage.tsx:145 +#: src/paths/instance/orders/details/DetailPage.tsx:296 +#: src/paths/instance/orders/list/Table.tsx:116 +#: src/paths/instance/transfers/create/CreatePage.tsx:84 +#, c-format +msgid "Amount" +msgstr "" + +#: src/components/form/InputTaxes.tsx:78 +#, c-format +msgid "currency and value separated with colon" +msgstr "" + +#: src/components/form/InputTaxes.tsx:84 +#: src/paths/instance/orders/create/InventoryProductForm.tsx:78 +#, c-format +msgid "Add" +msgstr "" + +#: src/components/menu/SideBar.tsx:53 +#, c-format +msgid "Instance" +msgstr "" + +#: src/components/menu/SideBar.tsx:59 +#, c-format +msgid "Settings" +msgstr "" + +#: src/components/menu/SideBar.tsx:65 +#: src/paths/instance/orders/list/Table.tsx:60 +#, c-format +msgid "Orders" +msgstr "" + +#: src/components/menu/SideBar.tsx:71 +#: src/paths/instance/orders/create/CreatePage.tsx:258 +#: src/paths/instance/products/list/Table.tsx:48 +#, c-format +msgid "Products" +msgstr "" + +#: src/components/menu/SideBar.tsx:77 +#: src/paths/instance/transfers/list/Table.tsx:65 +#, c-format +msgid "Transfers" +msgstr "" + +#: src/components/menu/SideBar.tsx:87 +#, c-format +msgid "Connection" +msgstr "" + +#: src/components/menu/SideBar.tsx:112 src/paths/admin/list/Table.tsx:57 +#, c-format +msgid "Instances" +msgstr "" + +#: src/components/menu/SideBar.tsx:116 +#, c-format +msgid "New" +msgstr "" + +#: src/components/menu/SideBar.tsx:122 +#, c-format +msgid "List" +msgstr "" + +#: src/components/menu/SideBar.tsx:129 +#, c-format +msgid "Log out" +msgstr "" + +#: src/components/modal/index.tsx:74 +#, c-format +msgid "Clear" +msgstr "" + +#: src/components/modal/index.tsx:110 src/components/modal/index.tsx:111 +#, c-format +msgid "should be the same" +msgstr "" + +#: src/components/modal/index.tsx:111 +#, c-format +msgid "cannot be the same as before" +msgstr "" + +#: src/components/modal/index.tsx:114 +#, c-format +msgid "" +"You are updating the authorization token from instance %1$s with id %2$s" +msgstr "" + +#: src/components/modal/index.tsx:124 +#, c-format +msgid "Old token" +msgstr "" + +#: src/components/modal/index.tsx:125 +#, c-format +msgid "New token" +msgstr "" + +#: src/components/modal/index.tsx:127 +#, c-format +msgid "Clearing the auth token will mean public access to the instance" +msgstr "" + +#: src/components/product/ProductForm.tsx:96 +#: src/paths/admin/create/CreatePage.tsx:85 src/paths/admin/list/Table.tsx:109 +#: src/paths/instance/transfers/list/Table.tsx:122 +#, c-format +msgid "ID" +msgstr "" + +#: src/components/product/ProductForm.tsx:98 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:121 +#: src/paths/instance/products/list/Table.tsx:85 +#, c-format +msgid "Image" +msgstr "" + +#: src/components/product/ProductForm.tsx:100 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:123 +#, c-format +msgid "Unit" +msgstr "" + +#: src/components/product/ProductForm.tsx:101 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:124 +#: src/paths/instance/products/list/Table.tsx:162 +#: src/paths/instance/products/list/Table.tsx:214 +#, c-format +msgid "Price" +msgstr "" + +#: src/components/product/ProductForm.tsx:103 +#: src/paths/instance/products/list/Table.tsx:90 +#, c-format +msgid "Stock" +msgstr "" + +#: src/components/product/ProductForm.tsx:105 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:128 +#: src/paths/instance/products/list/Table.tsx:88 +#, c-format +msgid "Taxes" +msgstr "" + +#: src/index.tsx:75 +#, c-format +msgid "Server not found" +msgstr "" + +#: src/index.tsx:85 +#, c-format +msgid "Couldn't access the server" +msgstr "" + +#: src/index.tsx:87 src/index.tsx:99 +#, c-format +msgid "Got message %1$s from %2$s" +msgstr "" + +#: src/index.tsx:97 +#, c-format +msgid "Unexpected Error" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:89 +#: src/paths/instance/update/UpdatePage.tsx:108 +#, c-format +msgid "Auth token" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:91 +#: src/paths/instance/details/DetailPage.tsx:77 +#: src/paths/instance/update/UpdatePage.tsx:110 +#, c-format +msgid "Account address" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:93 +#: src/paths/instance/update/UpdatePage.tsx:112 +#, c-format +msgid "Default max deposit fee" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:95 +#: src/paths/instance/update/UpdatePage.tsx:114 +#, c-format +msgid "Default max wire fee" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:97 +#: src/paths/instance/update/UpdatePage.tsx:116 +#, c-format +msgid "Default wire fee amortization" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:103 +#: src/paths/instance/update/UpdatePage.tsx:122 +#, c-format +msgid "Jurisdiction" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:107 +#: src/paths/instance/update/UpdatePage.tsx:126 +#, c-format +msgid "Default pay delay" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:109 +#: src/paths/instance/update/UpdatePage.tsx:128 +#, c-format +msgid "Default wire transfer delay" +msgstr "" + +#: src/paths/admin/create/index.tsx:58 +#, c-format +msgid "could not create instance" +msgstr "" + +#: src/paths/admin/list/Table.tsx:63 src/paths/admin/list/Table.tsx:131 +#: src/paths/instance/transfers/list/Table.tsx:71 +#, c-format +msgid "Delete" +msgstr "" + +#: src/paths/admin/list/Table.tsx:128 +#, c-format +msgid "Edit" +msgstr "" + +#: src/paths/admin/list/Table.tsx:149 +#: src/paths/instance/products/list/Table.tsx:245 +#, c-format +msgid "There is no instances yet, add more pressing the + sign" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:237 +#, c-format +msgid "Inventory products" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:286 +#, c-format +msgid "Total price" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:287 +#, c-format +msgid "Total tax" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:289 +#: src/paths/instance/orders/create/CreatePage.tsx:297 +#, c-format +msgid "Order price" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:295 +#, c-format +msgid "Net" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:300 +#: src/paths/instance/orders/details/DetailPage.tsx:144 +#: src/paths/instance/orders/details/DetailPage.tsx:295 +#: src/paths/instance/orders/list/Table.tsx:117 +#, c-format +msgid "Summary" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:302 +#, c-format +msgid "Payments options" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:303 +#, c-format +msgid "Auto refund deadline" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:304 +#, c-format +msgid "Refund deadline" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:305 +#, c-format +msgid "Pay deadline" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:307 +#, c-format +msgid "Delivery date" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:308 +#, c-format +msgid "Location" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:312 +#, c-format +msgid "Max fee" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:313 +#, c-format +msgid "Max wire fee" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:314 +#, c-format +msgid "Wire fee amortization" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:315 +#, c-format +msgid "Fullfilment url" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:318 +#, c-format +msgid "Extra information" +msgstr "" + +#: src/paths/instance/orders/create/InventoryProductForm.tsx:44 +#, c-format +msgid "select a product first" +msgstr "" + +#: src/paths/instance/orders/create/InventoryProductForm.tsx:51 +#, c-format +msgid "should be greater than 0" +msgstr "" + +#: src/paths/instance/orders/create/InventoryProductForm.tsx:58 +#, c-format +msgid "" +"cannot be greater than current stock and quantity previously added. max: %1$s" +msgstr "" + +#: src/paths/instance/orders/create/InventoryProductForm.tsx:64 +#, c-format +msgid "cannot be greater than current stock %1$s" +msgstr "" + +#: src/paths/instance/orders/create/InventoryProductForm.tsx:76 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:126 +#, c-format +msgid "Quantity" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:92 +#: src/paths/instance/orders/details/DetailPage.tsx:235 +#: src/paths/instance/orders/details/DetailPage.tsx:333 +#, c-format +msgid "Order" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:93 +#, c-format +msgid "claimed" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:110 +#: src/paths/instance/orders/details/DetailPage.tsx:261 +#: src/paths/instance/orders/list/Table.tsx:136 +#, c-format +msgid "copy url" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:126 +#: src/paths/instance/orders/details/DetailPage.tsx:349 +#, c-format +msgid "pay at" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:127 +#: src/paths/instance/orders/details/DetailPage.tsx:350 +#, c-format +msgid "created at" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:138 +#: src/paths/instance/orders/details/DetailPage.tsx:289 +#, c-format +msgid "Timeline" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:142 +#: src/paths/instance/orders/details/DetailPage.tsx:293 +#, c-format +msgid "Payment details" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:146 +#: src/paths/instance/orders/details/DetailPage.tsx:299 +#: src/paths/instance/orders/details/DetailPage.tsx:363 +#, c-format +msgid "Order status" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:156 +#: src/paths/instance/orders/details/DetailPage.tsx:308 +#, c-format +msgid "Product list" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:236 +#, c-format +msgid "paid" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:238 +#, c-format +msgid "wired" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:241 +#, c-format +msgid "refunded" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:258 +#, c-format +msgid "refund" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:297 +#, c-format +msgid "Refunded amount" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:298 +#, c-format +msgid "Deposit total" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:336 +#, c-format +msgid "unpaid" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:364 +#, c-format +msgid "Order status URL" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:365 +#, c-format +msgid "Pay URI" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:383 +#, c-format +msgid "" +"Unknown order status. This is an error, please contact the administrator." +msgstr "" + +#: src/paths/instance/orders/details/index.tsx:56 +#: src/paths/instance/orders/list/index.tsx:147 +#, c-format +msgid "refund created successfully" +msgstr "" + +#: src/paths/instance/orders/details/index.tsx:59 +#: src/paths/instance/orders/list/index.tsx:150 +#, c-format +msgid "could not create the refund" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:111 +#, c-format +msgid "load newer orders" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:115 +#, c-format +msgid "Date" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:131 +#: src/paths/instance/orders/list/Table.tsx:223 +#, c-format +msgid "Refund" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:145 +#, c-format +msgid "load older orders" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:154 +#, c-format +msgid "No orders has been found" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:202 +#, c-format +msgid "date" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:203 +#, c-format +msgid "amount" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:204 +#, c-format +msgid "reason" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:224 +#, c-format +msgid "Max refundable:" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:226 +#, c-format +msgid "Reason" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:226 +#, c-format +msgid "duplicated" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:226 +#, c-format +msgid "requested by the customer" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:226 +#, c-format +msgid "other" +msgstr "" + +#: src/paths/instance/orders/list/index.tsx:91 +#, c-format +msgid "go to order id" +msgstr "" + +#: src/paths/instance/orders/list/index.tsx:107 +#, c-format +msgid "Paid" +msgstr "" + +#: src/paths/instance/orders/list/index.tsx:108 +#, c-format +msgid "Refunded" +msgstr "" + +#: src/paths/instance/orders/list/index.tsx:109 +#, c-format +msgid "Not wired" +msgstr "" + +#: src/paths/instance/orders/list/index.tsx:110 +#, c-format +msgid "All" +msgstr "" + +#: src/paths/instance/products/create/index.tsx:48 +#: src/paths/instance/products/update/index.tsx:64 +#, c-format +msgid "could not create product" +msgstr "" + +#: src/paths/instance/products/list/Table.tsx:87 +#, c-format +msgid "Sell" +msgstr "" + +#: src/paths/instance/products/list/Table.tsx:89 +#, c-format +msgid "Profit" +msgstr "" + +#: src/paths/instance/products/list/Table.tsx:91 +#, c-format +msgid "Sold" +msgstr "" + +#: src/paths/instance/products/list/index.tsx:59 +#, c-format +msgid "product updated successfully" +msgstr "" + +#: src/paths/instance/products/list/index.tsx:62 +#, c-format +msgid "could not update the product" +msgstr "" + +#: src/paths/instance/products/list/index.tsx:70 +#, c-format +msgid "product delete successfully" +msgstr "" + +#: src/paths/instance/products/list/index.tsx:73 +#, c-format +msgid "could not delete the product" +msgstr "" + +#: src/paths/instance/tips/list/Table.tsx:59 +#, c-format +msgid "Tips" +msgstr "" + +#: src/paths/instance/tips/list/Table.tsx:111 +#, c-format +msgid "Committed amount" +msgstr "" + +#: src/paths/instance/tips/list/Table.tsx:112 +#, c-format +msgid "Exchange initial amount" +msgstr "" + +#: src/paths/instance/tips/list/Table.tsx:113 +#, c-format +msgid "Merchant initial amount" +msgstr "" + +#: src/paths/instance/tips/list/Table.tsx:148 +#, c-format +msgid "There is no tips yet, add more pressing the + sign" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:50 +#: src/paths/instance/transfers/create/CreatePage.tsx:54 +#: src/paths/instance/transfers/create/CreatePage.tsx:55 +#: src/paths/instance/transfers/create/CreatePage.tsx:56 +#, c-format +msgid "cannot be empty" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:51 +#, c-format +msgid "check the id, doest look valid" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:52 +#, c-format +msgid "should have 52 characters, current %1$s" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:57 +#, c-format +msgid "URL doesn't have the right format" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:74 +#, c-format +msgid "Transfer ID" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:76 +#, c-format +msgid "Account Address" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:82 +#: src/paths/instance/transfers/list/Table.tsx:125 +#, c-format +msgid "Exchange URL" +msgstr "" + +#: src/paths/instance/transfers/create/index.tsx:49 +#, c-format +msgid "could not inform transfer" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:118 +#, c-format +msgid "load newer transfers" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:123 +#, c-format +msgid "Credit" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:126 +#, c-format +msgid "Confirmed" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:127 +#: src/paths/instance/transfers/list/index.tsx:60 +#, c-format +msgid "Verified" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:128 +#, c-format +msgid "Executed at" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:138 +#: src/paths/instance/transfers/list/Table.tsx:139 +#, c-format +msgid "yes" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:138 +#: src/paths/instance/transfers/list/Table.tsx:139 +#, c-format +msgid "no" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:140 +#, c-format +msgid "unknown" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:145 +#, c-format +msgid "load older transfers" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:154 +#, c-format +msgid "There is no transfer yet, add more pressing the + sign" +msgstr "" diff --git a/packages/backend/src/i18n/en.po b/packages/backend/src/i18n/en.po new file mode 100644 index 0000000..6b35bd0 --- /dev/null +++ b/packages/backend/src/i18n/en.po @@ -0,0 +1,1057 @@ +# This file is part of TALER +# (C) 2016 GNUnet e.V. +# +# 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. +# +# 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 +# TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/> +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Taler Wallet\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-23 00:00+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: src/ApplicationReadyRoutes.tsx:50 src/InstanceRoutes.tsx:118 +#: src/InstanceRoutes.tsx:299 +#, c-format +msgid "Access denied" +msgstr "" + +#: src/ApplicationReadyRoutes.tsx:51 src/InstanceRoutes.tsx:118 +#: src/InstanceRoutes.tsx:300 +#, c-format +msgid "Check your token is valid" +msgstr "" + +#: src/ApplicationReadyRoutes.tsx:72 +#, c-format +msgid "Couldn't access the server." +msgstr "" + +#: src/ApplicationReadyRoutes.tsx:73 +#, c-format +msgid "Could not infer instance id from url %1$s" +msgstr "" + +#: src/InstanceRoutes.tsx:109 +#, c-format +msgid "HTTP status #%1$s: Server reported a problem" +msgstr "" + +#: src/InstanceRoutes.tsx:110 +#, c-format +msgid "Got message: \"%1$s\" from: %2$s" +msgstr "" + +#: src/InstanceRoutes.tsx:127 +#, c-format +msgid "No default instance" +msgstr "" + +#: src/InstanceRoutes.tsx:128 +#, c-format +msgid "" +"in order to use merchant backoffice, you should create the default instance" +msgstr "" + +#: src/InstanceRoutes.tsx:288 +#, c-format +msgid "Server reported a problem: HTTP status #%1$s" +msgstr "" + +#: src/InstanceRoutes.tsx:289 +#, c-format +msgid "Got message: %1$s from: %2$s" +msgstr "" + +#: src/components/exception/login.tsx:46 +#, c-format +msgid "Login required" +msgstr "" + +#: src/components/exception/login.tsx:49 +#, c-format +msgid "" +"Please enter your auth token. Token should have \"secret-token:\" and start " +"with Bearer or ApiKey" +msgstr "" + +#: src/components/exception/login.tsx:86 src/components/modal/index.tsx:53 +#: src/components/modal/index.tsx:75 src/paths/admin/create/CreatePage.tsx:115 +#: src/paths/instance/orders/create/CreatePage.tsx:325 +#: src/paths/instance/products/create/CreatePage.tsx:51 +#: src/paths/instance/products/list/Table.tsx:174 +#: src/paths/instance/products/list/Table.tsx:228 +#: src/paths/instance/products/update/UpdatePage.tsx:55 +#: src/paths/instance/transfers/create/CreatePage.tsx:89 +#: src/paths/instance/update/UpdatePage.tsx:134 +#, c-format +msgid "Confirm" +msgstr "" + +#: src/components/form/InputArray.tsx:72 +#, c-format +msgid "The value %1$s is invalid for a payment url" +msgstr "" + +#: src/components/form/InputDate.tsx:67 +#: src/paths/instance/orders/list/index.tsx:123 +#, c-format +msgid "pick a date" +msgstr "" + +#: src/components/form/InputDate.tsx:81 +#, c-format +msgid "clear" +msgstr "" + +#: src/components/form/InputDate.tsx:83 +#: src/paths/instance/transfers/list/Table.tsx:140 +#, c-format +msgid "never" +msgstr "" + +#: src/components/form/InputImage.tsx:80 +#, c-format +msgid "Image should be smaller than 1 MB" +msgstr "" + +#: src/components/form/InputLocation.tsx:28 +#, c-format +msgid "Country" +msgstr "" + +#: src/components/form/InputLocation.tsx:30 +#: src/paths/admin/create/CreatePage.tsx:99 +#: src/paths/instance/transfers/list/Table.tsx:124 +#: src/paths/instance/update/UpdatePage.tsx:118 +#, c-format +msgid "Address" +msgstr "" + +#: src/components/form/InputLocation.tsx:34 +#, c-format +msgid "Building number" +msgstr "" + +#: src/components/form/InputLocation.tsx:35 +#, c-format +msgid "Building name" +msgstr "" + +#: src/components/form/InputLocation.tsx:36 +#, c-format +msgid "Street" +msgstr "" + +#: src/components/form/InputLocation.tsx:37 +#, c-format +msgid "Post code" +msgstr "" + +#: src/components/form/InputLocation.tsx:38 +#, c-format +msgid "Town location" +msgstr "" + +#: src/components/form/InputLocation.tsx:39 +#, c-format +msgid "Town" +msgstr "" + +#: src/components/form/InputLocation.tsx:40 +#, c-format +msgid "District" +msgstr "" + +#: src/components/form/InputLocation.tsx:41 +#, c-format +msgid "Country subdivision" +msgstr "" + +#: src/components/form/InputSearchProduct.tsx:59 +#, c-format +msgid "Product id" +msgstr "" + +#: src/components/form/InputSearchProduct.tsx:60 +#: src/components/product/ProductForm.tsx:99 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:122 +#: src/paths/instance/orders/list/Table.tsx:227 +#: src/paths/instance/products/list/Table.tsx:86 +#, c-format +msgid "Description" +msgstr "" + +#: src/components/form/InputSearchProduct.tsx:73 +#: src/components/form/InputTaxes.tsx:81 +#: src/paths/admin/create/CreatePage.tsx:87 src/paths/admin/list/Table.tsx:110 +#: src/paths/instance/details/DetailPage.tsx:76 +#: src/paths/instance/update/UpdatePage.tsx:106 +#, c-format +msgid "Name" +msgstr "" + +#: src/components/form/InputSearchProduct.tsx:102 +#, c-format +msgid "loading..." +msgstr "" + +#: src/components/form/InputSearchProduct.tsx:108 +#, c-format +msgid "no products found" +msgstr "" + +#: src/components/form/InputSearchProduct.tsx:116 +#, c-format +msgid "no results" +msgstr "" + +#: src/components/form/InputSecured.tsx:33 +#, c-format +msgid "Deleting" +msgstr "" + +#: src/components/form/InputSecured.tsx:34 +#, c-format +msgid "Changing" +msgstr "" + +#: src/components/form/InputSecured.tsx:60 +#, c-format +msgid "Manage token" +msgstr "" + +#: src/components/form/InputSecured.tsx:83 +#, c-format +msgid "Update" +msgstr "" + +#: src/components/form/InputSecured.tsx:100 +#: src/paths/instance/orders/create/CreatePage.tsx:252 +#: src/paths/instance/orders/create/CreatePage.tsx:273 +#, c-format +msgid "Remove" +msgstr "" + +#: src/components/form/InputSecured.tsx:106 src/components/modal/index.tsx:52 +#: src/components/modal/index.tsx:73 src/paths/admin/create/CreatePage.tsx:114 +#: src/paths/instance/orders/create/CreatePage.tsx:324 +#: src/paths/instance/products/create/CreatePage.tsx:50 +#: src/paths/instance/products/list/Table.tsx:166 +#: src/paths/instance/products/list/Table.tsx:218 +#: src/paths/instance/products/update/UpdatePage.tsx:54 +#: src/paths/instance/transfers/create/CreatePage.tsx:88 +#: src/paths/instance/update/UpdatePage.tsx:133 +#, c-format +msgid "Cancel" +msgstr "" + +#: src/components/form/InputStock.tsx:91 +#, c-format +msgid "Manage stock" +msgstr "" + +#: src/components/form/InputStock.tsx:93 +#, c-format +msgid "Infinite" +msgstr "" + +#: src/components/form/InputStock.tsx:105 +#, c-format +msgid "lost cannot be greater that current + incoming (max %1$s)" +msgstr "" + +#: src/components/form/InputStock.tsx:111 +#, c-format +msgid "current stock will change from %1$s to %2$s" +msgstr "" + +#: src/components/form/InputStock.tsx:112 +#, c-format +msgid "current stock will stay at %1$s" +msgstr "" + +#: src/components/form/InputStock.tsx:129 +#: src/paths/instance/products/list/Table.tsx:204 +#, c-format +msgid "Incoming" +msgstr "" + +#: src/components/form/InputStock.tsx:130 +#: src/paths/instance/products/list/Table.tsx:205 +#, c-format +msgid "Lost" +msgstr "" + +#: src/components/form/InputStock.tsx:142 +#, c-format +msgid "Current" +msgstr "" + +#: src/components/form/InputStock.tsx:145 +#, c-format +msgid "without stock" +msgstr "" + +#: src/components/form/InputStock.tsx:150 +#, c-format +msgid "Next restock" +msgstr "" + +#: src/components/form/InputStock.tsx:152 +#, c-format +msgid "Delivery address" +msgstr "" + +#: src/components/form/InputTaxes.tsx:73 +#, c-format +msgid "this product has no taxes" +msgstr "" + +#: src/components/form/InputTaxes.tsx:77 +#: src/paths/instance/orders/details/DetailPage.tsx:145 +#: src/paths/instance/orders/details/DetailPage.tsx:296 +#: src/paths/instance/orders/list/Table.tsx:116 +#: src/paths/instance/transfers/create/CreatePage.tsx:84 +#, c-format +msgid "Amount" +msgstr "" + +#: src/components/form/InputTaxes.tsx:78 +#, c-format +msgid "currency and value separated with colon" +msgstr "" + +#: src/components/form/InputTaxes.tsx:84 +#: src/paths/instance/orders/create/InventoryProductForm.tsx:78 +#, c-format +msgid "Add" +msgstr "" + +#: src/components/menu/SideBar.tsx:53 +#, c-format +msgid "Instance" +msgstr "" + +#: src/components/menu/SideBar.tsx:59 +#, c-format +msgid "Settings" +msgstr "" + +#: src/components/menu/SideBar.tsx:65 +#: src/paths/instance/orders/list/Table.tsx:60 +#, c-format +msgid "Orders" +msgstr "" + +#: src/components/menu/SideBar.tsx:71 +#: src/paths/instance/orders/create/CreatePage.tsx:258 +#: src/paths/instance/products/list/Table.tsx:48 +#, c-format +msgid "Products" +msgstr "" + +#: src/components/menu/SideBar.tsx:77 +#: src/paths/instance/transfers/list/Table.tsx:65 +#, c-format +msgid "Transfers" +msgstr "" + +#: src/components/menu/SideBar.tsx:87 +#, c-format +msgid "Connection" +msgstr "" + +#: src/components/menu/SideBar.tsx:112 src/paths/admin/list/Table.tsx:57 +#, c-format +msgid "Instances" +msgstr "" + +#: src/components/menu/SideBar.tsx:116 +#, c-format +msgid "New" +msgstr "" + +#: src/components/menu/SideBar.tsx:122 +#, c-format +msgid "List" +msgstr "" + +#: src/components/menu/SideBar.tsx:129 +#, c-format +msgid "Log out" +msgstr "" + +#: src/components/modal/index.tsx:74 +#, c-format +msgid "Clear" +msgstr "" + +#: src/components/modal/index.tsx:110 src/components/modal/index.tsx:111 +#, c-format +msgid "should be the same" +msgstr "" + +#: src/components/modal/index.tsx:111 +#, c-format +msgid "cannot be the same as before" +msgstr "" + +#: src/components/modal/index.tsx:114 +#, c-format +msgid "" +"You are updating the authorization token from instance %1$s with id %2$s" +msgstr "" + +#: src/components/modal/index.tsx:124 +#, c-format +msgid "Old token" +msgstr "" + +#: src/components/modal/index.tsx:125 +#, c-format +msgid "New token" +msgstr "" + +#: src/components/modal/index.tsx:127 +#, c-format +msgid "Clearing the auth token will mean public access to the instance" +msgstr "" + +#: src/components/product/ProductForm.tsx:96 +#: src/paths/admin/create/CreatePage.tsx:85 src/paths/admin/list/Table.tsx:109 +#: src/paths/instance/transfers/list/Table.tsx:122 +#, c-format +msgid "ID" +msgstr "" + +#: src/components/product/ProductForm.tsx:98 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:121 +#: src/paths/instance/products/list/Table.tsx:85 +#, c-format +msgid "Image" +msgstr "" + +#: src/components/product/ProductForm.tsx:100 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:123 +#, c-format +msgid "Unit" +msgstr "" + +#: src/components/product/ProductForm.tsx:101 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:124 +#: src/paths/instance/products/list/Table.tsx:162 +#: src/paths/instance/products/list/Table.tsx:214 +#, c-format +msgid "Price" +msgstr "" + +#: src/components/product/ProductForm.tsx:103 +#: src/paths/instance/products/list/Table.tsx:90 +#, c-format +msgid "Stock" +msgstr "" + +#: src/components/product/ProductForm.tsx:105 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:128 +#: src/paths/instance/products/list/Table.tsx:88 +#, c-format +msgid "Taxes" +msgstr "" + +#: src/index.tsx:75 +#, c-format +msgid "Server not found" +msgstr "" + +#: src/index.tsx:85 +#, c-format +msgid "Couldn't access the server" +msgstr "" + +#: src/index.tsx:87 src/index.tsx:99 +#, c-format +msgid "Got message %1$s from %2$s" +msgstr "" + +#: src/index.tsx:97 +#, c-format +msgid "Unexpected Error" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:89 +#: src/paths/instance/update/UpdatePage.tsx:108 +#, c-format +msgid "Auth token" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:91 +#: src/paths/instance/details/DetailPage.tsx:77 +#: src/paths/instance/update/UpdatePage.tsx:110 +#, c-format +msgid "Account address" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:93 +#: src/paths/instance/update/UpdatePage.tsx:112 +#, c-format +msgid "Default max deposit fee" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:95 +#: src/paths/instance/update/UpdatePage.tsx:114 +#, c-format +msgid "Default max wire fee" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:97 +#: src/paths/instance/update/UpdatePage.tsx:116 +#, c-format +msgid "Default wire fee amortization" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:103 +#: src/paths/instance/update/UpdatePage.tsx:122 +#, c-format +msgid "Jurisdiction" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:107 +#: src/paths/instance/update/UpdatePage.tsx:126 +#, c-format +msgid "Default pay delay" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:109 +#: src/paths/instance/update/UpdatePage.tsx:128 +#, c-format +msgid "Default wire transfer delay" +msgstr "" + +#: src/paths/admin/create/index.tsx:58 +#, c-format +msgid "could not create instance" +msgstr "" + +#: src/paths/admin/list/Table.tsx:63 src/paths/admin/list/Table.tsx:131 +#: src/paths/instance/transfers/list/Table.tsx:71 +#, c-format +msgid "Delete" +msgstr "" + +#: src/paths/admin/list/Table.tsx:128 +#, c-format +msgid "Edit" +msgstr "" + +#: src/paths/admin/list/Table.tsx:149 +#: src/paths/instance/products/list/Table.tsx:245 +#, c-format +msgid "There is no instances yet, add more pressing the + sign" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:237 +#, c-format +msgid "Inventory products" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:286 +#, c-format +msgid "Total price" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:287 +#, c-format +msgid "Total tax" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:289 +#: src/paths/instance/orders/create/CreatePage.tsx:297 +#, c-format +msgid "Order price" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:295 +#, c-format +msgid "Net" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:300 +#: src/paths/instance/orders/details/DetailPage.tsx:144 +#: src/paths/instance/orders/details/DetailPage.tsx:295 +#: src/paths/instance/orders/list/Table.tsx:117 +#, c-format +msgid "Summary" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:302 +#, c-format +msgid "Payments options" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:303 +#, c-format +msgid "Auto refund deadline" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:304 +#, c-format +msgid "Refund deadline" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:305 +#, c-format +msgid "Pay deadline" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:307 +#, c-format +msgid "Delivery date" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:308 +#, c-format +msgid "Location" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:312 +#, c-format +msgid "Max fee" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:313 +#, c-format +msgid "Max wire fee" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:314 +#, c-format +msgid "Wire fee amortization" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:315 +#, c-format +msgid "Fullfilment url" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:318 +#, c-format +msgid "Extra information" +msgstr "" + +#: src/paths/instance/orders/create/InventoryProductForm.tsx:44 +#, c-format +msgid "select a product first" +msgstr "" + +#: src/paths/instance/orders/create/InventoryProductForm.tsx:51 +#, c-format +msgid "should be greater than 0" +msgstr "" + +#: src/paths/instance/orders/create/InventoryProductForm.tsx:58 +#, c-format +msgid "" +"cannot be greater than current stock and quantity previously added. max: %1$s" +msgstr "" + +#: src/paths/instance/orders/create/InventoryProductForm.tsx:64 +#, c-format +msgid "cannot be greater than current stock %1$s" +msgstr "" + +#: src/paths/instance/orders/create/InventoryProductForm.tsx:76 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:126 +#, c-format +msgid "Quantity" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:92 +#: src/paths/instance/orders/details/DetailPage.tsx:235 +#: src/paths/instance/orders/details/DetailPage.tsx:333 +#, c-format +msgid "Order" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:93 +#, c-format +msgid "claimed" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:110 +#: src/paths/instance/orders/details/DetailPage.tsx:261 +#: src/paths/instance/orders/list/Table.tsx:136 +#, c-format +msgid "copy url" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:126 +#: src/paths/instance/orders/details/DetailPage.tsx:349 +#, c-format +msgid "pay at" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:127 +#: src/paths/instance/orders/details/DetailPage.tsx:350 +#, c-format +msgid "created at" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:138 +#: src/paths/instance/orders/details/DetailPage.tsx:289 +#, c-format +msgid "Timeline" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:142 +#: src/paths/instance/orders/details/DetailPage.tsx:293 +#, c-format +msgid "Payment details" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:146 +#: src/paths/instance/orders/details/DetailPage.tsx:299 +#: src/paths/instance/orders/details/DetailPage.tsx:363 +#, c-format +msgid "Order status" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:156 +#: src/paths/instance/orders/details/DetailPage.tsx:308 +#, c-format +msgid "Product list" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:236 +#, c-format +msgid "paid" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:238 +#, c-format +msgid "wired" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:241 +#, c-format +msgid "refunded" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:258 +#, c-format +msgid "refund" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:297 +#, c-format +msgid "Refunded amount" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:298 +#, c-format +msgid "Deposit total" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:336 +#, c-format +msgid "unpaid" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:364 +#, c-format +msgid "Order status URL" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:365 +#, c-format +msgid "Pay URI" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:383 +#, c-format +msgid "" +"Unknown order status. This is an error, please contact the administrator." +msgstr "" + +#: src/paths/instance/orders/details/index.tsx:56 +#: src/paths/instance/orders/list/index.tsx:147 +#, c-format +msgid "refund created successfully" +msgstr "" + +#: src/paths/instance/orders/details/index.tsx:59 +#: src/paths/instance/orders/list/index.tsx:150 +#, c-format +msgid "could not create the refund" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:111 +#, c-format +msgid "load newer orders" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:115 +#, c-format +msgid "Date" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:131 +#: src/paths/instance/orders/list/Table.tsx:223 +#, c-format +msgid "Refund" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:145 +#, c-format +msgid "load older orders" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:154 +#, c-format +msgid "No orders has been found" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:202 +#, c-format +msgid "date" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:203 +#, c-format +msgid "amount" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:204 +#, c-format +msgid "reason" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:224 +#, c-format +msgid "Max refundable:" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:226 +#, c-format +msgid "Reason" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:226 +#, c-format +msgid "duplicated" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:226 +#, c-format +msgid "requested by the customer" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:226 +#, c-format +msgid "other" +msgstr "" + +#: src/paths/instance/orders/list/index.tsx:91 +#, c-format +msgid "go to order id" +msgstr "" + +#: src/paths/instance/orders/list/index.tsx:107 +#, c-format +msgid "Paid" +msgstr "" + +#: src/paths/instance/orders/list/index.tsx:108 +#, c-format +msgid "Refunded" +msgstr "" + +#: src/paths/instance/orders/list/index.tsx:109 +#, c-format +msgid "Not wired" +msgstr "" + +#: src/paths/instance/orders/list/index.tsx:110 +#, c-format +msgid "All" +msgstr "" + +#: src/paths/instance/products/create/index.tsx:48 +#: src/paths/instance/products/update/index.tsx:64 +#, c-format +msgid "could not create product" +msgstr "" + +#: src/paths/instance/products/list/Table.tsx:87 +#, c-format +msgid "Sell" +msgstr "" + +#: src/paths/instance/products/list/Table.tsx:89 +#, c-format +msgid "Profit" +msgstr "" + +#: src/paths/instance/products/list/Table.tsx:91 +#, c-format +msgid "Sold" +msgstr "" + +#: src/paths/instance/products/list/index.tsx:59 +#, c-format +msgid "product updated successfully" +msgstr "" + +#: src/paths/instance/products/list/index.tsx:62 +#, c-format +msgid "could not update the product" +msgstr "" + +#: src/paths/instance/products/list/index.tsx:70 +#, c-format +msgid "product delete successfully" +msgstr "" + +#: src/paths/instance/products/list/index.tsx:73 +#, c-format +msgid "could not delete the product" +msgstr "" + +#: src/paths/instance/tips/list/Table.tsx:59 +#, c-format +msgid "Tips" +msgstr "" + +#: src/paths/instance/tips/list/Table.tsx:111 +#, c-format +msgid "Committed amount" +msgstr "" + +#: src/paths/instance/tips/list/Table.tsx:112 +#, c-format +msgid "Exchange initial amount" +msgstr "" + +#: src/paths/instance/tips/list/Table.tsx:113 +#, c-format +msgid "Merchant initial amount" +msgstr "" + +#: src/paths/instance/tips/list/Table.tsx:148 +#, c-format +msgid "There is no tips yet, add more pressing the + sign" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:50 +#: src/paths/instance/transfers/create/CreatePage.tsx:54 +#: src/paths/instance/transfers/create/CreatePage.tsx:55 +#: src/paths/instance/transfers/create/CreatePage.tsx:56 +#, c-format +msgid "cannot be empty" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:51 +#, c-format +msgid "check the id, doest look valid" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:52 +#, c-format +msgid "should have 52 characters, current %1$s" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:57 +#, c-format +msgid "URL doesn't have the right format" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:74 +#, c-format +msgid "Transfer ID" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:76 +#, c-format +msgid "Account Address" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:82 +#: src/paths/instance/transfers/list/Table.tsx:125 +#, c-format +msgid "Exchange URL" +msgstr "" + +#: src/paths/instance/transfers/create/index.tsx:49 +#, c-format +msgid "could not inform transfer" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:118 +#, c-format +msgid "load newer transfers" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:123 +#, c-format +msgid "Credit" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:126 +#, c-format +msgid "Confirmed" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:127 +#: src/paths/instance/transfers/list/index.tsx:60 +#, c-format +msgid "Verified" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:128 +#, c-format +msgid "Executed at" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:138 +#: src/paths/instance/transfers/list/Table.tsx:139 +#, c-format +msgid "yes" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:138 +#: src/paths/instance/transfers/list/Table.tsx:139 +#, c-format +msgid "no" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:140 +#, c-format +msgid "unknown" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:145 +#, c-format +msgid "load older transfers" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:154 +#, c-format +msgid "There is no transfer yet, add more pressing the + sign" +msgstr "" diff --git a/packages/backend/src/i18n/es.po b/packages/backend/src/i18n/es.po new file mode 100644 index 0000000..9075d46 --- /dev/null +++ b/packages/backend/src/i18n/es.po @@ -0,0 +1,1065 @@ +# This file is part of TALER +# (C) 2016 GNUnet e.V. +# +# 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. +# +# 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 +# TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/> +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Taler Wallet\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-23 00:00+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: src/ApplicationReadyRoutes.tsx:50 src/InstanceRoutes.tsx:118 +#: src/InstanceRoutes.tsx:299 +#, c-format +msgid "Access denied" +msgstr "Acceso denegado" + +#: src/ApplicationReadyRoutes.tsx:51 src/InstanceRoutes.tsx:118 +#: src/InstanceRoutes.tsx:300 +#, c-format +msgid "Check your token is valid" +msgstr "Verifica que el token sea valido" + +#: src/ApplicationReadyRoutes.tsx:72 +#, c-format +msgid "Couldn't access the server." +msgstr "No se pudo acceder al servidor" + +#: src/ApplicationReadyRoutes.tsx:73 +#, c-format +msgid "Could not infer instance id from url %1$s" +msgstr "No se pudo inferir el id de la instancia con la url %1$s" + +#: src/InstanceRoutes.tsx:109 +#, c-format +msgid "HTTP status #%1$s: Server reported a problem" +msgstr "HTTP status #%1$s: Servidor reporto un problema" + +#: src/InstanceRoutes.tsx:110 +#, fuzzy, c-format +msgid "Got message: \"%1$s\" from: %2$s" +msgstr "Recivimos el mensaje %1$s desde %2$s" + +#: src/InstanceRoutes.tsx:127 +#, c-format +msgid "No default instance" +msgstr "Sin instancia default" + +#: src/InstanceRoutes.tsx:128 +#, c-format +msgid "" +"in order to use merchant backoffice, you should create the default instance" +msgstr "para usar el merchant backoffice, deberΓa crear la instancia default" + +#: src/InstanceRoutes.tsx:288 +#, c-format +msgid "Server reported a problem: HTTP status #%1$s" +msgstr "Servidir reporto un problema: HTTP status #%1$s" + +#: src/InstanceRoutes.tsx:289 +#, fuzzy, c-format +msgid "Got message: %1$s from: %2$s" +msgstr "Recivimos el mensaje %1$s desde %2$s" + +#: src/components/exception/login.tsx:46 +#, c-format +msgid "Login required" +msgstr "Login necesario" + +#: src/components/exception/login.tsx:49 +#, c-format +msgid "" +"Please enter your auth token. Token should have \"secret-token:\" and start " +"with Bearer or ApiKey" +msgstr "" +"Por favor ingrese su token de autorizaciΓ³n. El token debe tener \"secret-" +"token\" y comenzar con Bearer o ApiKey" + +#: src/components/exception/login.tsx:86 src/components/modal/index.tsx:53 +#: src/components/modal/index.tsx:75 src/paths/admin/create/CreatePage.tsx:115 +#: src/paths/instance/orders/create/CreatePage.tsx:325 +#: src/paths/instance/products/create/CreatePage.tsx:51 +#: src/paths/instance/products/list/Table.tsx:174 +#: src/paths/instance/products/list/Table.tsx:228 +#: src/paths/instance/products/update/UpdatePage.tsx:55 +#: src/paths/instance/transfers/create/CreatePage.tsx:89 +#: src/paths/instance/update/UpdatePage.tsx:134 +#, c-format +msgid "Confirm" +msgstr "Confirmar" + +#: src/components/form/InputArray.tsx:72 +#, c-format +msgid "The value %1$s is invalid for a payment url" +msgstr "El valor %1$s es invalido para una URL de pago" + +#: src/components/form/InputDate.tsx:67 +#: src/paths/instance/orders/list/index.tsx:123 +#, c-format +msgid "pick a date" +msgstr "elegir una fecha" + +#: src/components/form/InputDate.tsx:81 +#, fuzzy, c-format +msgid "clear" +msgstr "Limpiar" + +#: src/components/form/InputDate.tsx:83 +#: src/paths/instance/transfers/list/Table.tsx:140 +#, c-format +msgid "never" +msgstr "nunca" + +#: src/components/form/InputImage.tsx:80 +#, c-format +msgid "Image should be smaller than 1 MB" +msgstr "La imagen debe ser mas chica que 1 MB" + +#: src/components/form/InputLocation.tsx:28 +#, c-format +msgid "Country" +msgstr "PaΓs" + +#: src/components/form/InputLocation.tsx:30 +#: src/paths/admin/create/CreatePage.tsx:99 +#: src/paths/instance/transfers/list/Table.tsx:124 +#: src/paths/instance/update/UpdatePage.tsx:118 +#, c-format +msgid "Address" +msgstr "DirecciΓ³n" + +#: src/components/form/InputLocation.tsx:34 +#, c-format +msgid "Building number" +msgstr "NΓΊmero de edificio" + +#: src/components/form/InputLocation.tsx:35 +#, c-format +msgid "Building name" +msgstr "Nombre de edificio" + +#: src/components/form/InputLocation.tsx:36 +#, c-format +msgid "Street" +msgstr "Calle" + +#: src/components/form/InputLocation.tsx:37 +#, c-format +msgid "Post code" +msgstr "CΓ³digo postal" + +#: src/components/form/InputLocation.tsx:38 +#, fuzzy, c-format +msgid "Town location" +msgstr "UbicaciΓ³n de ciudad" + +#: src/components/form/InputLocation.tsx:39 +#, c-format +msgid "Town" +msgstr "Ciudad" + +#: src/components/form/InputLocation.tsx:40 +#, c-format +msgid "District" +msgstr "Distrito" + +#: src/components/form/InputLocation.tsx:41 +#, c-format +msgid "Country subdivision" +msgstr "Provincia" + +#: src/components/form/InputSearchProduct.tsx:59 +#, fuzzy, c-format +msgid "Product id" +msgstr "Id de producto" + +#: src/components/form/InputSearchProduct.tsx:60 +#: src/components/product/ProductForm.tsx:99 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:122 +#: src/paths/instance/orders/list/Table.tsx:227 +#: src/paths/instance/products/list/Table.tsx:86 +#, c-format +msgid "Description" +msgstr "Descripcion" + +#: src/components/form/InputSearchProduct.tsx:73 +#: src/components/form/InputTaxes.tsx:81 +#: src/paths/admin/create/CreatePage.tsx:87 src/paths/admin/list/Table.tsx:110 +#: src/paths/instance/details/DetailPage.tsx:76 +#: src/paths/instance/update/UpdatePage.tsx:106 +#, c-format +msgid "Name" +msgstr "Nombre" + +#: src/components/form/InputSearchProduct.tsx:102 +#, c-format +msgid "loading..." +msgstr "Cargando..." + +#: src/components/form/InputSearchProduct.tsx:108 +#, c-format +msgid "no products found" +msgstr "No se encontraron productos" + +#: src/components/form/InputSearchProduct.tsx:116 +#, c-format +msgid "no results" +msgstr "Sin resultados" + +#: src/components/form/InputSecured.tsx:33 +#, c-format +msgid "Deleting" +msgstr "Borrando" + +#: src/components/form/InputSecured.tsx:34 +#, c-format +msgid "Changing" +msgstr "Cambiando" + +#: src/components/form/InputSecured.tsx:60 +#, c-format +msgid "Manage token" +msgstr "Administrar token" + +#: src/components/form/InputSecured.tsx:83 +#, c-format +msgid "Update" +msgstr "Actualizar" + +#: src/components/form/InputSecured.tsx:100 +#: src/paths/instance/orders/create/CreatePage.tsx:252 +#: src/paths/instance/orders/create/CreatePage.tsx:273 +#, c-format +msgid "Remove" +msgstr "Eliminar" + +#: src/components/form/InputSecured.tsx:106 src/components/modal/index.tsx:52 +#: src/components/modal/index.tsx:73 src/paths/admin/create/CreatePage.tsx:114 +#: src/paths/instance/orders/create/CreatePage.tsx:324 +#: src/paths/instance/products/create/CreatePage.tsx:50 +#: src/paths/instance/products/list/Table.tsx:166 +#: src/paths/instance/products/list/Table.tsx:218 +#: src/paths/instance/products/update/UpdatePage.tsx:54 +#: src/paths/instance/transfers/create/CreatePage.tsx:88 +#: src/paths/instance/update/UpdatePage.tsx:133 +#, c-format +msgid "Cancel" +msgstr "Cancelar" + +#: src/components/form/InputStock.tsx:91 +#, c-format +msgid "Manage stock" +msgstr "Administrar stock" + +#: src/components/form/InputStock.tsx:93 +#, c-format +msgid "Infinite" +msgstr "Inifinito" + +#: src/components/form/InputStock.tsx:105 +#, fuzzy, c-format +msgid "lost cannot be greater that current + incoming (max %1$s)" +msgstr "no puede ser mayor al stock actual %1$s" + +#: src/components/form/InputStock.tsx:111 +#, c-format +msgid "current stock will change from %1$s to %2$s" +msgstr "stock actual cambiarΓ‘ desde %1$s a %2$s" + +#: src/components/form/InputStock.tsx:112 +#, c-format +msgid "current stock will stay at %1$s" +msgstr "stock actual seguirΓ‘ en %1$s" + +#: src/components/form/InputStock.tsx:129 +#: src/paths/instance/products/list/Table.tsx:204 +#, c-format +msgid "Incoming" +msgstr "Ingresando" + +#: src/components/form/InputStock.tsx:130 +#: src/paths/instance/products/list/Table.tsx:205 +#, c-format +msgid "Lost" +msgstr "Perdido" + +#: src/components/form/InputStock.tsx:142 +#, c-format +msgid "Current" +msgstr "Actual" + +#: src/components/form/InputStock.tsx:145 +#, c-format +msgid "without stock" +msgstr "sin stock" + +#: src/components/form/InputStock.tsx:150 +#, c-format +msgid "Next restock" +msgstr "PrΓ³ximo reabastecimiento" + +#: src/components/form/InputStock.tsx:152 +#, c-format +msgid "Delivery address" +msgstr "DirecciΓ³n de entrega" + +#: src/components/form/InputTaxes.tsx:73 +#, c-format +msgid "this product has no taxes" +msgstr "este producto no tiene impuestos" + +#: src/components/form/InputTaxes.tsx:77 +#: src/paths/instance/orders/details/DetailPage.tsx:145 +#: src/paths/instance/orders/details/DetailPage.tsx:296 +#: src/paths/instance/orders/list/Table.tsx:116 +#: src/paths/instance/transfers/create/CreatePage.tsx:84 +#, c-format +msgid "Amount" +msgstr "Monto" + +#: src/components/form/InputTaxes.tsx:78 +#, c-format +msgid "currency and value separated with colon" +msgstr "Moneda y valor separado por dos puntos" + +#: src/components/form/InputTaxes.tsx:84 +#: src/paths/instance/orders/create/InventoryProductForm.tsx:78 +#, c-format +msgid "Add" +msgstr "Agregar" + +#: src/components/menu/SideBar.tsx:53 +#, c-format +msgid "Instance" +msgstr "Instancia" + +#: src/components/menu/SideBar.tsx:59 +#, c-format +msgid "Settings" +msgstr "ConfiguraciΓ³n" + +#: src/components/menu/SideBar.tsx:65 +#: src/paths/instance/orders/list/Table.tsx:60 +#, fuzzy, c-format +msgid "Orders" +msgstr "Ordenes" + +#: src/components/menu/SideBar.tsx:71 +#: src/paths/instance/orders/create/CreatePage.tsx:258 +#: src/paths/instance/products/list/Table.tsx:48 +#, c-format +msgid "Products" +msgstr "Productos" + +#: src/components/menu/SideBar.tsx:77 +#: src/paths/instance/transfers/list/Table.tsx:65 +#, c-format +msgid "Transfers" +msgstr "Transferencias" + +#: src/components/menu/SideBar.tsx:87 +#, fuzzy, c-format +msgid "Connection" +msgstr "ConexiΓ³n" + +#: src/components/menu/SideBar.tsx:112 src/paths/admin/list/Table.tsx:57 +#, c-format +msgid "Instances" +msgstr "Instancias" + +#: src/components/menu/SideBar.tsx:116 +#, fuzzy, c-format +msgid "New" +msgstr "Nuevo" + +#: src/components/menu/SideBar.tsx:122 +#, c-format +msgid "List" +msgstr "Lista" + +#: src/components/menu/SideBar.tsx:129 +#, c-format +msgid "Log out" +msgstr "Salir" + +#: src/components/modal/index.tsx:74 +#, c-format +msgid "Clear" +msgstr "Limpiar" + +#: src/components/modal/index.tsx:110 src/components/modal/index.tsx:111 +#, c-format +msgid "should be the same" +msgstr "deberΓan ser iguales" + +#: src/components/modal/index.tsx:111 +#, c-format +msgid "cannot be the same as before" +msgstr "no puede ser igual al anterior" + +#: src/components/modal/index.tsx:114 +#, c-format +msgid "" +"You are updating the authorization token from instance %1$s with id %2$s" +msgstr "" +"EstΓ‘ actualizando el token de autorizaciΓ³n para la instancia %1$s con id %2$s" + +#: src/components/modal/index.tsx:124 +#, c-format +msgid "Old token" +msgstr "Viejo token" + +#: src/components/modal/index.tsx:125 +#, c-format +msgid "New token" +msgstr "Nuevo token" + +#: src/components/modal/index.tsx:127 +#, c-format +msgid "Clearing the auth token will mean public access to the instance" +msgstr "" +"Limpiar el token de autorizaciΓ³n significa acceso publico a la instancia" + +#: src/components/product/ProductForm.tsx:96 +#: src/paths/admin/create/CreatePage.tsx:85 src/paths/admin/list/Table.tsx:109 +#: src/paths/instance/transfers/list/Table.tsx:122 +#, c-format +msgid "ID" +msgstr "ID" + +#: src/components/product/ProductForm.tsx:98 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:121 +#: src/paths/instance/products/list/Table.tsx:85 +#, c-format +msgid "Image" +msgstr "Imagen" + +#: src/components/product/ProductForm.tsx:100 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:123 +#, c-format +msgid "Unit" +msgstr "Unidad" + +#: src/components/product/ProductForm.tsx:101 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:124 +#: src/paths/instance/products/list/Table.tsx:162 +#: src/paths/instance/products/list/Table.tsx:214 +#, c-format +msgid "Price" +msgstr "Precio" + +#: src/components/product/ProductForm.tsx:103 +#: src/paths/instance/products/list/Table.tsx:90 +#, c-format +msgid "Stock" +msgstr "Stock" + +#: src/components/product/ProductForm.tsx:105 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:128 +#: src/paths/instance/products/list/Table.tsx:88 +#, c-format +msgid "Taxes" +msgstr "Impuesto" + +#: src/index.tsx:75 +#, c-format +msgid "Server not found" +msgstr "Servidor no encontrado" + +#: src/index.tsx:85 +#, c-format +msgid "Couldn't access the server" +msgstr "No se pudo aceder al servidor" + +#: src/index.tsx:87 src/index.tsx:99 +#, c-format +msgid "Got message %1$s from %2$s" +msgstr "Recivimos el mensaje %1$s desde %2$s" + +#: src/index.tsx:97 +#, c-format +msgid "Unexpected Error" +msgstr "Error inesperado" + +#: src/paths/admin/create/CreatePage.tsx:89 +#: src/paths/instance/update/UpdatePage.tsx:108 +#, c-format +msgid "Auth token" +msgstr "Token de autorizaciΓ³n" + +#: src/paths/admin/create/CreatePage.tsx:91 +#: src/paths/instance/details/DetailPage.tsx:77 +#: src/paths/instance/update/UpdatePage.tsx:110 +#, c-format +msgid "Account address" +msgstr "DirecciΓ³n de cuenta" + +#: src/paths/admin/create/CreatePage.tsx:93 +#: src/paths/instance/update/UpdatePage.tsx:112 +#, c-format +msgid "Default max deposit fee" +msgstr "Impuesto mΓ‘ximo de deposito por omisiΓ³n" + +#: src/paths/admin/create/CreatePage.tsx:95 +#: src/paths/instance/update/UpdatePage.tsx:114 +#, c-format +msgid "Default max wire fee" +msgstr "Impuesto mΓ‘ximo de transferencia por omisiΓ³n" + +#: src/paths/admin/create/CreatePage.tsx:97 +#: src/paths/instance/update/UpdatePage.tsx:116 +#, c-format +msgid "Default wire fee amortization" +msgstr "AmortizaciΓ³n de impuesto de transferencia por omisiΓ³n" + +#: src/paths/admin/create/CreatePage.tsx:103 +#: src/paths/instance/update/UpdatePage.tsx:122 +#, c-format +msgid "Jurisdiction" +msgstr "JurisdicciΓ³n" + +#: src/paths/admin/create/CreatePage.tsx:107 +#: src/paths/instance/update/UpdatePage.tsx:126 +#, c-format +msgid "Default pay delay" +msgstr "Retrazo de pago por omisiΓ³n" + +#: src/paths/admin/create/CreatePage.tsx:109 +#: src/paths/instance/update/UpdatePage.tsx:128 +#, c-format +msgid "Default wire transfer delay" +msgstr "Retrazo de transferencia por omisiΓ³n" + +#: src/paths/admin/create/index.tsx:58 +#, c-format +msgid "could not create instance" +msgstr "no se pudo crear la instancia" + +#: src/paths/admin/list/Table.tsx:63 src/paths/admin/list/Table.tsx:131 +#: src/paths/instance/transfers/list/Table.tsx:71 +#, fuzzy, c-format +msgid "Delete" +msgstr "Borrando" + +#: src/paths/admin/list/Table.tsx:128 +#, c-format +msgid "Edit" +msgstr "" + +#: src/paths/admin/list/Table.tsx:149 +#: src/paths/instance/products/list/Table.tsx:245 +#, c-format +msgid "There is no instances yet, add more pressing the + sign" +msgstr "No hay instancias todavΓan, agregue mas presionando el signo +" + +#: src/paths/instance/orders/create/CreatePage.tsx:237 +#, c-format +msgid "Inventory products" +msgstr "Productos de inventario" + +#: src/paths/instance/orders/create/CreatePage.tsx:286 +#, c-format +msgid "Total price" +msgstr "Precio total" + +#: src/paths/instance/orders/create/CreatePage.tsx:287 +#, c-format +msgid "Total tax" +msgstr "Impuesto total" + +#: src/paths/instance/orders/create/CreatePage.tsx:289 +#: src/paths/instance/orders/create/CreatePage.tsx:297 +#, c-format +msgid "Order price" +msgstr "Precio de la orden" + +#: src/paths/instance/orders/create/CreatePage.tsx:295 +#, fuzzy, c-format +msgid "Net" +msgstr "Neto" + +#: src/paths/instance/orders/create/CreatePage.tsx:300 +#: src/paths/instance/orders/details/DetailPage.tsx:144 +#: src/paths/instance/orders/details/DetailPage.tsx:295 +#: src/paths/instance/orders/list/Table.tsx:117 +#, c-format +msgid "Summary" +msgstr "Resumen" + +#: src/paths/instance/orders/create/CreatePage.tsx:302 +#, c-format +msgid "Payments options" +msgstr "Opciones de pago" + +#: src/paths/instance/orders/create/CreatePage.tsx:303 +#, c-format +msgid "Auto refund deadline" +msgstr "Plazo de reembolso automΓ‘tico" + +#: src/paths/instance/orders/create/CreatePage.tsx:304 +#, c-format +msgid "Refund deadline" +msgstr "Plazo de reembolso" + +#: src/paths/instance/orders/create/CreatePage.tsx:305 +#, c-format +msgid "Pay deadline" +msgstr "Plazo de pago" + +#: src/paths/instance/orders/create/CreatePage.tsx:307 +#, c-format +msgid "Delivery date" +msgstr "Fecha de entrega" + +#: src/paths/instance/orders/create/CreatePage.tsx:308 +#, fuzzy, c-format +msgid "Location" +msgstr "UbicaciΓ³n" + +#: src/paths/instance/orders/create/CreatePage.tsx:312 +#, c-format +msgid "Max fee" +msgstr "Impuesto mΓ‘ximo" + +#: src/paths/instance/orders/create/CreatePage.tsx:313 +#, c-format +msgid "Max wire fee" +msgstr "Impuesto de transferencia mΓ‘ximo" + +#: src/paths/instance/orders/create/CreatePage.tsx:314 +#, c-format +msgid "Wire fee amortization" +msgstr "AmortizaciΓ³n de impuesto de transferencia" + +#: src/paths/instance/orders/create/CreatePage.tsx:315 +#, c-format +msgid "Fullfilment url" +msgstr "URL de completitud" + +#: src/paths/instance/orders/create/CreatePage.tsx:318 +#, c-format +msgid "Extra information" +msgstr "InformaciΓ³n extra" + +#: src/paths/instance/orders/create/InventoryProductForm.tsx:44 +#, c-format +msgid "select a product first" +msgstr "seleccione un producto primero" + +#: src/paths/instance/orders/create/InventoryProductForm.tsx:51 +#, fuzzy, c-format +msgid "should be greater than 0" +msgstr "La imagen debe ser mas chica que 1 MB" + +#: src/paths/instance/orders/create/InventoryProductForm.tsx:58 +#, c-format +msgid "" +"cannot be greater than current stock and quantity previously added. max: %1$s" +msgstr "" +"no puede ser mayor al stock actual y la cantidad previamente agregada. " +"mΓ‘ximo: %1$s" + +#: src/paths/instance/orders/create/InventoryProductForm.tsx:64 +#, c-format +msgid "cannot be greater than current stock %1$s" +msgstr "no puede ser mayor al stock actual %1$s" + +#: src/paths/instance/orders/create/InventoryProductForm.tsx:76 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:126 +#, c-format +msgid "Quantity" +msgstr "Cantidad" + +#: src/paths/instance/orders/details/DetailPage.tsx:92 +#: src/paths/instance/orders/details/DetailPage.tsx:235 +#: src/paths/instance/orders/details/DetailPage.tsx:333 +#, c-format +msgid "Order" +msgstr "Orden" + +#: src/paths/instance/orders/details/DetailPage.tsx:93 +#, c-format +msgid "claimed" +msgstr "reclamado" + +#: src/paths/instance/orders/details/DetailPage.tsx:110 +#: src/paths/instance/orders/details/DetailPage.tsx:261 +#: src/paths/instance/orders/list/Table.tsx:136 +#, c-format +msgid "copy url" +msgstr "copiar url" + +#: src/paths/instance/orders/details/DetailPage.tsx:126 +#: src/paths/instance/orders/details/DetailPage.tsx:349 +#, c-format +msgid "pay at" +msgstr "pagar en" + +#: src/paths/instance/orders/details/DetailPage.tsx:127 +#: src/paths/instance/orders/details/DetailPage.tsx:350 +#, c-format +msgid "created at" +msgstr "creado" + +#: src/paths/instance/orders/details/DetailPage.tsx:138 +#: src/paths/instance/orders/details/DetailPage.tsx:289 +#, c-format +msgid "Timeline" +msgstr "CronologΓa" + +#: src/paths/instance/orders/details/DetailPage.tsx:142 +#: src/paths/instance/orders/details/DetailPage.tsx:293 +#, c-format +msgid "Payment details" +msgstr "Detalles de pago" + +#: src/paths/instance/orders/details/DetailPage.tsx:146 +#: src/paths/instance/orders/details/DetailPage.tsx:299 +#: src/paths/instance/orders/details/DetailPage.tsx:363 +#, fuzzy, c-format +msgid "Order status" +msgstr "Estado de orden" + +#: src/paths/instance/orders/details/DetailPage.tsx:156 +#: src/paths/instance/orders/details/DetailPage.tsx:308 +#, fuzzy, c-format +msgid "Product list" +msgstr "Lista de producto" + +#: src/paths/instance/orders/details/DetailPage.tsx:236 +#, c-format +msgid "paid" +msgstr "pagados" + +#: src/paths/instance/orders/details/DetailPage.tsx:238 +#, c-format +msgid "wired" +msgstr "transferido" + +#: src/paths/instance/orders/details/DetailPage.tsx:241 +#, c-format +msgid "refunded" +msgstr "reembolzado" + +#: src/paths/instance/orders/details/DetailPage.tsx:258 +#, c-format +msgid "refund" +msgstr "reembolzar" + +#: src/paths/instance/orders/details/DetailPage.tsx:297 +#, c-format +msgid "Refunded amount" +msgstr "Monto reembolzado" + +#: src/paths/instance/orders/details/DetailPage.tsx:298 +#, c-format +msgid "Deposit total" +msgstr "Total depositado" + +#: src/paths/instance/orders/details/DetailPage.tsx:336 +#, c-format +msgid "unpaid" +msgstr "impago" + +#: src/paths/instance/orders/details/DetailPage.tsx:364 +#, c-format +msgid "Order status URL" +msgstr "URL de estado de orden" + +#: src/paths/instance/orders/details/DetailPage.tsx:365 +#, c-format +msgid "Pay URI" +msgstr "URI de pago" + +#: src/paths/instance/orders/details/DetailPage.tsx:383 +#, c-format +msgid "" +"Unknown order status. This is an error, please contact the administrator." +msgstr "" +"Estado de orden desconocido. Esto es un error, por favor contacte a su " +"administrador" + +#: src/paths/instance/orders/details/index.tsx:56 +#: src/paths/instance/orders/list/index.tsx:147 +#, c-format +msgid "refund created successfully" +msgstr "reembolzo creado satisfactoriamente" + +#: src/paths/instance/orders/details/index.tsx:59 +#: src/paths/instance/orders/list/index.tsx:150 +#, fuzzy, c-format +msgid "could not create the refund" +msgstr "No se pudo aceder al servidor" + +#: src/paths/instance/orders/list/Table.tsx:111 +#, c-format +msgid "load newer orders" +msgstr "cargar nuevas ordenes" + +#: src/paths/instance/orders/list/Table.tsx:115 +#, c-format +msgid "Date" +msgstr "Fecha" + +#: src/paths/instance/orders/list/Table.tsx:131 +#: src/paths/instance/orders/list/Table.tsx:223 +#, c-format +msgid "Refund" +msgstr "Reembolzar" + +#: src/paths/instance/orders/list/Table.tsx:145 +#, c-format +msgid "load older orders" +msgstr "cargar viejas ordenes" + +#: src/paths/instance/orders/list/Table.tsx:154 +#, c-format +msgid "No orders has been found" +msgstr "No se enconraron ordenes" + +#: src/paths/instance/orders/list/Table.tsx:202 +#, c-format +msgid "date" +msgstr "fecha" + +#: src/paths/instance/orders/list/Table.tsx:203 +#, c-format +msgid "amount" +msgstr "monto" + +#: src/paths/instance/orders/list/Table.tsx:204 +#, c-format +msgid "reason" +msgstr "razΓ³n" + +#: src/paths/instance/orders/list/Table.tsx:224 +#, c-format +msgid "Max refundable:" +msgstr "MΓ‘ximo reembolzable:" + +#: src/paths/instance/orders/list/Table.tsx:226 +#, c-format +msgid "Reason" +msgstr "RazΓ³n" + +#: src/paths/instance/orders/list/Table.tsx:226 +#, c-format +msgid "duplicated" +msgstr "duplicado" + +#: src/paths/instance/orders/list/Table.tsx:226 +#, c-format +msgid "requested by the customer" +msgstr "pedido por el consumidor" + +#: src/paths/instance/orders/list/Table.tsx:226 +#, c-format +msgid "other" +msgstr "otro" + +#: src/paths/instance/orders/list/index.tsx:91 +#, c-format +msgid "go to order id" +msgstr "ir a id de orden" + +#: src/paths/instance/orders/list/index.tsx:107 +#, c-format +msgid "Paid" +msgstr "Pagado" + +#: src/paths/instance/orders/list/index.tsx:108 +#, fuzzy, c-format +msgid "Refunded" +msgstr "Reembolzado" + +#: src/paths/instance/orders/list/index.tsx:109 +#, fuzzy, c-format +msgid "Not wired" +msgstr "No transferido" + +#: src/paths/instance/orders/list/index.tsx:110 +#, c-format +msgid "All" +msgstr "Todo" + +#: src/paths/instance/products/create/index.tsx:48 +#: src/paths/instance/products/update/index.tsx:64 +#, c-format +msgid "could not create product" +msgstr "no se pudo crear el producto" + +#: src/paths/instance/products/list/Table.tsx:87 +#, c-format +msgid "Sell" +msgstr "Venta" + +#: src/paths/instance/products/list/Table.tsx:89 +#, c-format +msgid "Profit" +msgstr "Ganancia" + +#: src/paths/instance/products/list/Table.tsx:91 +#, c-format +msgid "Sold" +msgstr "Vendido" + +#: src/paths/instance/products/list/index.tsx:59 +#, c-format +msgid "product updated successfully" +msgstr "producto actualizado correctamente" + +#: src/paths/instance/products/list/index.tsx:62 +#, c-format +msgid "could not update the product" +msgstr "no se pudo actualizar el producto" + +#: src/paths/instance/products/list/index.tsx:70 +#, c-format +msgid "product delete successfully" +msgstr "producto fue eliminado correctamente" + +#: src/paths/instance/products/list/index.tsx:73 +#, c-format +msgid "could not delete the product" +msgstr "no se pudo eliminar el producto" + +#: src/paths/instance/tips/list/Table.tsx:59 +#, c-format +msgid "Tips" +msgstr "Propinas" + +#: src/paths/instance/tips/list/Table.tsx:111 +#, c-format +msgid "Committed amount" +msgstr "" + +#: src/paths/instance/tips/list/Table.tsx:112 +#, c-format +msgid "Exchange initial amount" +msgstr "" + +#: src/paths/instance/tips/list/Table.tsx:113 +#, c-format +msgid "Merchant initial amount" +msgstr "" + +#: src/paths/instance/tips/list/Table.tsx:148 +#, c-format +msgid "There is no tips yet, add more pressing the + sign" +msgstr "No hay propinas todavΓa, agregar mas presionando el signo +" + +#: src/paths/instance/transfers/create/CreatePage.tsx:50 +#: src/paths/instance/transfers/create/CreatePage.tsx:54 +#: src/paths/instance/transfers/create/CreatePage.tsx:55 +#: src/paths/instance/transfers/create/CreatePage.tsx:56 +#, c-format +msgid "cannot be empty" +msgstr "no puede ser vacΓo" + +#: src/paths/instance/transfers/create/CreatePage.tsx:51 +#, c-format +msgid "check the id, doest look valid" +msgstr "verificar el id, no parece vΓ‘lido" + +#: src/paths/instance/transfers/create/CreatePage.tsx:52 +#, c-format +msgid "should have 52 characters, current %1$s" +msgstr "deberΓa tener 52 caracteres, actualmente %1$s" + +#: src/paths/instance/transfers/create/CreatePage.tsx:57 +#, c-format +msgid "URL doesn't have the right format" +msgstr "La URL no tiene el formato correcto" + +#: src/paths/instance/transfers/create/CreatePage.tsx:74 +#, fuzzy, c-format +msgid "Transfer ID" +msgstr "Transferencias" + +#: src/paths/instance/transfers/create/CreatePage.tsx:76 +#, fuzzy, c-format +msgid "Account Address" +msgstr "DirecciΓ³n de cuenta" + +#: src/paths/instance/transfers/create/CreatePage.tsx:82 +#: src/paths/instance/transfers/list/Table.tsx:125 +#, c-format +msgid "Exchange URL" +msgstr "URL del Exchange" + +#: src/paths/instance/transfers/create/index.tsx:49 +#, fuzzy, c-format +msgid "could not inform transfer" +msgstr "no se pudo crear la instancia" + +#: src/paths/instance/transfers/list/Table.tsx:118 +#, fuzzy, c-format +msgid "load newer transfers" +msgstr "cargar nuevas ordenes" + +#: src/paths/instance/transfers/list/Table.tsx:123 +#, c-format +msgid "Credit" +msgstr "CrΓ©dito" + +#: src/paths/instance/transfers/list/Table.tsx:126 +#, fuzzy, c-format +msgid "Confirmed" +msgstr "Confirmar" + +#: src/paths/instance/transfers/list/Table.tsx:127 +#: src/paths/instance/transfers/list/index.tsx:60 +#, c-format +msgid "Verified" +msgstr "Verificado" + +#: src/paths/instance/transfers/list/Table.tsx:128 +#, fuzzy, c-format +msgid "Executed at" +msgstr "creado" + +#: src/paths/instance/transfers/list/Table.tsx:138 +#: src/paths/instance/transfers/list/Table.tsx:139 +#, c-format +msgid "yes" +msgstr "si" + +#: src/paths/instance/transfers/list/Table.tsx:138 +#: src/paths/instance/transfers/list/Table.tsx:139 +#, c-format +msgid "no" +msgstr "no" + +#: src/paths/instance/transfers/list/Table.tsx:140 +#, c-format +msgid "unknown" +msgstr "desconocido" + +#: src/paths/instance/transfers/list/Table.tsx:145 +#, fuzzy, c-format +msgid "load older transfers" +msgstr "cargar viejas transferencias" + +#: src/paths/instance/transfers/list/Table.tsx:154 +#, c-format +msgid "There is no transfer yet, add more pressing the + sign" +msgstr "No hay transferencias todavΓa, agregar mas presionando el signo +" diff --git a/packages/backend/src/i18n/fr.po b/packages/backend/src/i18n/fr.po new file mode 100644 index 0000000..6b35bd0 --- /dev/null +++ b/packages/backend/src/i18n/fr.po @@ -0,0 +1,1057 @@ +# This file is part of TALER +# (C) 2016 GNUnet e.V. +# +# 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. +# +# 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 +# TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/> +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Taler Wallet\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-23 00:00+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: src/ApplicationReadyRoutes.tsx:50 src/InstanceRoutes.tsx:118 +#: src/InstanceRoutes.tsx:299 +#, c-format +msgid "Access denied" +msgstr "" + +#: src/ApplicationReadyRoutes.tsx:51 src/InstanceRoutes.tsx:118 +#: src/InstanceRoutes.tsx:300 +#, c-format +msgid "Check your token is valid" +msgstr "" + +#: src/ApplicationReadyRoutes.tsx:72 +#, c-format +msgid "Couldn't access the server." +msgstr "" + +#: src/ApplicationReadyRoutes.tsx:73 +#, c-format +msgid "Could not infer instance id from url %1$s" +msgstr "" + +#: src/InstanceRoutes.tsx:109 +#, c-format +msgid "HTTP status #%1$s: Server reported a problem" +msgstr "" + +#: src/InstanceRoutes.tsx:110 +#, c-format +msgid "Got message: \"%1$s\" from: %2$s" +msgstr "" + +#: src/InstanceRoutes.tsx:127 +#, c-format +msgid "No default instance" +msgstr "" + +#: src/InstanceRoutes.tsx:128 +#, c-format +msgid "" +"in order to use merchant backoffice, you should create the default instance" +msgstr "" + +#: src/InstanceRoutes.tsx:288 +#, c-format +msgid "Server reported a problem: HTTP status #%1$s" +msgstr "" + +#: src/InstanceRoutes.tsx:289 +#, c-format +msgid "Got message: %1$s from: %2$s" +msgstr "" + +#: src/components/exception/login.tsx:46 +#, c-format +msgid "Login required" +msgstr "" + +#: src/components/exception/login.tsx:49 +#, c-format +msgid "" +"Please enter your auth token. Token should have \"secret-token:\" and start " +"with Bearer or ApiKey" +msgstr "" + +#: src/components/exception/login.tsx:86 src/components/modal/index.tsx:53 +#: src/components/modal/index.tsx:75 src/paths/admin/create/CreatePage.tsx:115 +#: src/paths/instance/orders/create/CreatePage.tsx:325 +#: src/paths/instance/products/create/CreatePage.tsx:51 +#: src/paths/instance/products/list/Table.tsx:174 +#: src/paths/instance/products/list/Table.tsx:228 +#: src/paths/instance/products/update/UpdatePage.tsx:55 +#: src/paths/instance/transfers/create/CreatePage.tsx:89 +#: src/paths/instance/update/UpdatePage.tsx:134 +#, c-format +msgid "Confirm" +msgstr "" + +#: src/components/form/InputArray.tsx:72 +#, c-format +msgid "The value %1$s is invalid for a payment url" +msgstr "" + +#: src/components/form/InputDate.tsx:67 +#: src/paths/instance/orders/list/index.tsx:123 +#, c-format +msgid "pick a date" +msgstr "" + +#: src/components/form/InputDate.tsx:81 +#, c-format +msgid "clear" +msgstr "" + +#: src/components/form/InputDate.tsx:83 +#: src/paths/instance/transfers/list/Table.tsx:140 +#, c-format +msgid "never" +msgstr "" + +#: src/components/form/InputImage.tsx:80 +#, c-format +msgid "Image should be smaller than 1 MB" +msgstr "" + +#: src/components/form/InputLocation.tsx:28 +#, c-format +msgid "Country" +msgstr "" + +#: src/components/form/InputLocation.tsx:30 +#: src/paths/admin/create/CreatePage.tsx:99 +#: src/paths/instance/transfers/list/Table.tsx:124 +#: src/paths/instance/update/UpdatePage.tsx:118 +#, c-format +msgid "Address" +msgstr "" + +#: src/components/form/InputLocation.tsx:34 +#, c-format +msgid "Building number" +msgstr "" + +#: src/components/form/InputLocation.tsx:35 +#, c-format +msgid "Building name" +msgstr "" + +#: src/components/form/InputLocation.tsx:36 +#, c-format +msgid "Street" +msgstr "" + +#: src/components/form/InputLocation.tsx:37 +#, c-format +msgid "Post code" +msgstr "" + +#: src/components/form/InputLocation.tsx:38 +#, c-format +msgid "Town location" +msgstr "" + +#: src/components/form/InputLocation.tsx:39 +#, c-format +msgid "Town" +msgstr "" + +#: src/components/form/InputLocation.tsx:40 +#, c-format +msgid "District" +msgstr "" + +#: src/components/form/InputLocation.tsx:41 +#, c-format +msgid "Country subdivision" +msgstr "" + +#: src/components/form/InputSearchProduct.tsx:59 +#, c-format +msgid "Product id" +msgstr "" + +#: src/components/form/InputSearchProduct.tsx:60 +#: src/components/product/ProductForm.tsx:99 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:122 +#: src/paths/instance/orders/list/Table.tsx:227 +#: src/paths/instance/products/list/Table.tsx:86 +#, c-format +msgid "Description" +msgstr "" + +#: src/components/form/InputSearchProduct.tsx:73 +#: src/components/form/InputTaxes.tsx:81 +#: src/paths/admin/create/CreatePage.tsx:87 src/paths/admin/list/Table.tsx:110 +#: src/paths/instance/details/DetailPage.tsx:76 +#: src/paths/instance/update/UpdatePage.tsx:106 +#, c-format +msgid "Name" +msgstr "" + +#: src/components/form/InputSearchProduct.tsx:102 +#, c-format +msgid "loading..." +msgstr "" + +#: src/components/form/InputSearchProduct.tsx:108 +#, c-format +msgid "no products found" +msgstr "" + +#: src/components/form/InputSearchProduct.tsx:116 +#, c-format +msgid "no results" +msgstr "" + +#: src/components/form/InputSecured.tsx:33 +#, c-format +msgid "Deleting" +msgstr "" + +#: src/components/form/InputSecured.tsx:34 +#, c-format +msgid "Changing" +msgstr "" + +#: src/components/form/InputSecured.tsx:60 +#, c-format +msgid "Manage token" +msgstr "" + +#: src/components/form/InputSecured.tsx:83 +#, c-format +msgid "Update" +msgstr "" + +#: src/components/form/InputSecured.tsx:100 +#: src/paths/instance/orders/create/CreatePage.tsx:252 +#: src/paths/instance/orders/create/CreatePage.tsx:273 +#, c-format +msgid "Remove" +msgstr "" + +#: src/components/form/InputSecured.tsx:106 src/components/modal/index.tsx:52 +#: src/components/modal/index.tsx:73 src/paths/admin/create/CreatePage.tsx:114 +#: src/paths/instance/orders/create/CreatePage.tsx:324 +#: src/paths/instance/products/create/CreatePage.tsx:50 +#: src/paths/instance/products/list/Table.tsx:166 +#: src/paths/instance/products/list/Table.tsx:218 +#: src/paths/instance/products/update/UpdatePage.tsx:54 +#: src/paths/instance/transfers/create/CreatePage.tsx:88 +#: src/paths/instance/update/UpdatePage.tsx:133 +#, c-format +msgid "Cancel" +msgstr "" + +#: src/components/form/InputStock.tsx:91 +#, c-format +msgid "Manage stock" +msgstr "" + +#: src/components/form/InputStock.tsx:93 +#, c-format +msgid "Infinite" +msgstr "" + +#: src/components/form/InputStock.tsx:105 +#, c-format +msgid "lost cannot be greater that current + incoming (max %1$s)" +msgstr "" + +#: src/components/form/InputStock.tsx:111 +#, c-format +msgid "current stock will change from %1$s to %2$s" +msgstr "" + +#: src/components/form/InputStock.tsx:112 +#, c-format +msgid "current stock will stay at %1$s" +msgstr "" + +#: src/components/form/InputStock.tsx:129 +#: src/paths/instance/products/list/Table.tsx:204 +#, c-format +msgid "Incoming" +msgstr "" + +#: src/components/form/InputStock.tsx:130 +#: src/paths/instance/products/list/Table.tsx:205 +#, c-format +msgid "Lost" +msgstr "" + +#: src/components/form/InputStock.tsx:142 +#, c-format +msgid "Current" +msgstr "" + +#: src/components/form/InputStock.tsx:145 +#, c-format +msgid "without stock" +msgstr "" + +#: src/components/form/InputStock.tsx:150 +#, c-format +msgid "Next restock" +msgstr "" + +#: src/components/form/InputStock.tsx:152 +#, c-format +msgid "Delivery address" +msgstr "" + +#: src/components/form/InputTaxes.tsx:73 +#, c-format +msgid "this product has no taxes" +msgstr "" + +#: src/components/form/InputTaxes.tsx:77 +#: src/paths/instance/orders/details/DetailPage.tsx:145 +#: src/paths/instance/orders/details/DetailPage.tsx:296 +#: src/paths/instance/orders/list/Table.tsx:116 +#: src/paths/instance/transfers/create/CreatePage.tsx:84 +#, c-format +msgid "Amount" +msgstr "" + +#: src/components/form/InputTaxes.tsx:78 +#, c-format +msgid "currency and value separated with colon" +msgstr "" + +#: src/components/form/InputTaxes.tsx:84 +#: src/paths/instance/orders/create/InventoryProductForm.tsx:78 +#, c-format +msgid "Add" +msgstr "" + +#: src/components/menu/SideBar.tsx:53 +#, c-format +msgid "Instance" +msgstr "" + +#: src/components/menu/SideBar.tsx:59 +#, c-format +msgid "Settings" +msgstr "" + +#: src/components/menu/SideBar.tsx:65 +#: src/paths/instance/orders/list/Table.tsx:60 +#, c-format +msgid "Orders" +msgstr "" + +#: src/components/menu/SideBar.tsx:71 +#: src/paths/instance/orders/create/CreatePage.tsx:258 +#: src/paths/instance/products/list/Table.tsx:48 +#, c-format +msgid "Products" +msgstr "" + +#: src/components/menu/SideBar.tsx:77 +#: src/paths/instance/transfers/list/Table.tsx:65 +#, c-format +msgid "Transfers" +msgstr "" + +#: src/components/menu/SideBar.tsx:87 +#, c-format +msgid "Connection" +msgstr "" + +#: src/components/menu/SideBar.tsx:112 src/paths/admin/list/Table.tsx:57 +#, c-format +msgid "Instances" +msgstr "" + +#: src/components/menu/SideBar.tsx:116 +#, c-format +msgid "New" +msgstr "" + +#: src/components/menu/SideBar.tsx:122 +#, c-format +msgid "List" +msgstr "" + +#: src/components/menu/SideBar.tsx:129 +#, c-format +msgid "Log out" +msgstr "" + +#: src/components/modal/index.tsx:74 +#, c-format +msgid "Clear" +msgstr "" + +#: src/components/modal/index.tsx:110 src/components/modal/index.tsx:111 +#, c-format +msgid "should be the same" +msgstr "" + +#: src/components/modal/index.tsx:111 +#, c-format +msgid "cannot be the same as before" +msgstr "" + +#: src/components/modal/index.tsx:114 +#, c-format +msgid "" +"You are updating the authorization token from instance %1$s with id %2$s" +msgstr "" + +#: src/components/modal/index.tsx:124 +#, c-format +msgid "Old token" +msgstr "" + +#: src/components/modal/index.tsx:125 +#, c-format +msgid "New token" +msgstr "" + +#: src/components/modal/index.tsx:127 +#, c-format +msgid "Clearing the auth token will mean public access to the instance" +msgstr "" + +#: src/components/product/ProductForm.tsx:96 +#: src/paths/admin/create/CreatePage.tsx:85 src/paths/admin/list/Table.tsx:109 +#: src/paths/instance/transfers/list/Table.tsx:122 +#, c-format +msgid "ID" +msgstr "" + +#: src/components/product/ProductForm.tsx:98 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:121 +#: src/paths/instance/products/list/Table.tsx:85 +#, c-format +msgid "Image" +msgstr "" + +#: src/components/product/ProductForm.tsx:100 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:123 +#, c-format +msgid "Unit" +msgstr "" + +#: src/components/product/ProductForm.tsx:101 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:124 +#: src/paths/instance/products/list/Table.tsx:162 +#: src/paths/instance/products/list/Table.tsx:214 +#, c-format +msgid "Price" +msgstr "" + +#: src/components/product/ProductForm.tsx:103 +#: src/paths/instance/products/list/Table.tsx:90 +#, c-format +msgid "Stock" +msgstr "" + +#: src/components/product/ProductForm.tsx:105 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:128 +#: src/paths/instance/products/list/Table.tsx:88 +#, c-format +msgid "Taxes" +msgstr "" + +#: src/index.tsx:75 +#, c-format +msgid "Server not found" +msgstr "" + +#: src/index.tsx:85 +#, c-format +msgid "Couldn't access the server" +msgstr "" + +#: src/index.tsx:87 src/index.tsx:99 +#, c-format +msgid "Got message %1$s from %2$s" +msgstr "" + +#: src/index.tsx:97 +#, c-format +msgid "Unexpected Error" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:89 +#: src/paths/instance/update/UpdatePage.tsx:108 +#, c-format +msgid "Auth token" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:91 +#: src/paths/instance/details/DetailPage.tsx:77 +#: src/paths/instance/update/UpdatePage.tsx:110 +#, c-format +msgid "Account address" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:93 +#: src/paths/instance/update/UpdatePage.tsx:112 +#, c-format +msgid "Default max deposit fee" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:95 +#: src/paths/instance/update/UpdatePage.tsx:114 +#, c-format +msgid "Default max wire fee" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:97 +#: src/paths/instance/update/UpdatePage.tsx:116 +#, c-format +msgid "Default wire fee amortization" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:103 +#: src/paths/instance/update/UpdatePage.tsx:122 +#, c-format +msgid "Jurisdiction" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:107 +#: src/paths/instance/update/UpdatePage.tsx:126 +#, c-format +msgid "Default pay delay" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:109 +#: src/paths/instance/update/UpdatePage.tsx:128 +#, c-format +msgid "Default wire transfer delay" +msgstr "" + +#: src/paths/admin/create/index.tsx:58 +#, c-format +msgid "could not create instance" +msgstr "" + +#: src/paths/admin/list/Table.tsx:63 src/paths/admin/list/Table.tsx:131 +#: src/paths/instance/transfers/list/Table.tsx:71 +#, c-format +msgid "Delete" +msgstr "" + +#: src/paths/admin/list/Table.tsx:128 +#, c-format +msgid "Edit" +msgstr "" + +#: src/paths/admin/list/Table.tsx:149 +#: src/paths/instance/products/list/Table.tsx:245 +#, c-format +msgid "There is no instances yet, add more pressing the + sign" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:237 +#, c-format +msgid "Inventory products" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:286 +#, c-format +msgid "Total price" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:287 +#, c-format +msgid "Total tax" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:289 +#: src/paths/instance/orders/create/CreatePage.tsx:297 +#, c-format +msgid "Order price" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:295 +#, c-format +msgid "Net" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:300 +#: src/paths/instance/orders/details/DetailPage.tsx:144 +#: src/paths/instance/orders/details/DetailPage.tsx:295 +#: src/paths/instance/orders/list/Table.tsx:117 +#, c-format +msgid "Summary" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:302 +#, c-format +msgid "Payments options" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:303 +#, c-format +msgid "Auto refund deadline" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:304 +#, c-format +msgid "Refund deadline" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:305 +#, c-format +msgid "Pay deadline" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:307 +#, c-format +msgid "Delivery date" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:308 +#, c-format +msgid "Location" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:312 +#, c-format +msgid "Max fee" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:313 +#, c-format +msgid "Max wire fee" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:314 +#, c-format +msgid "Wire fee amortization" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:315 +#, c-format +msgid "Fullfilment url" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:318 +#, c-format +msgid "Extra information" +msgstr "" + +#: src/paths/instance/orders/create/InventoryProductForm.tsx:44 +#, c-format +msgid "select a product first" +msgstr "" + +#: src/paths/instance/orders/create/InventoryProductForm.tsx:51 +#, c-format +msgid "should be greater than 0" +msgstr "" + +#: src/paths/instance/orders/create/InventoryProductForm.tsx:58 +#, c-format +msgid "" +"cannot be greater than current stock and quantity previously added. max: %1$s" +msgstr "" + +#: src/paths/instance/orders/create/InventoryProductForm.tsx:64 +#, c-format +msgid "cannot be greater than current stock %1$s" +msgstr "" + +#: src/paths/instance/orders/create/InventoryProductForm.tsx:76 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:126 +#, c-format +msgid "Quantity" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:92 +#: src/paths/instance/orders/details/DetailPage.tsx:235 +#: src/paths/instance/orders/details/DetailPage.tsx:333 +#, c-format +msgid "Order" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:93 +#, c-format +msgid "claimed" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:110 +#: src/paths/instance/orders/details/DetailPage.tsx:261 +#: src/paths/instance/orders/list/Table.tsx:136 +#, c-format +msgid "copy url" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:126 +#: src/paths/instance/orders/details/DetailPage.tsx:349 +#, c-format +msgid "pay at" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:127 +#: src/paths/instance/orders/details/DetailPage.tsx:350 +#, c-format +msgid "created at" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:138 +#: src/paths/instance/orders/details/DetailPage.tsx:289 +#, c-format +msgid "Timeline" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:142 +#: src/paths/instance/orders/details/DetailPage.tsx:293 +#, c-format +msgid "Payment details" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:146 +#: src/paths/instance/orders/details/DetailPage.tsx:299 +#: src/paths/instance/orders/details/DetailPage.tsx:363 +#, c-format +msgid "Order status" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:156 +#: src/paths/instance/orders/details/DetailPage.tsx:308 +#, c-format +msgid "Product list" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:236 +#, c-format +msgid "paid" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:238 +#, c-format +msgid "wired" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:241 +#, c-format +msgid "refunded" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:258 +#, c-format +msgid "refund" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:297 +#, c-format +msgid "Refunded amount" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:298 +#, c-format +msgid "Deposit total" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:336 +#, c-format +msgid "unpaid" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:364 +#, c-format +msgid "Order status URL" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:365 +#, c-format +msgid "Pay URI" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:383 +#, c-format +msgid "" +"Unknown order status. This is an error, please contact the administrator." +msgstr "" + +#: src/paths/instance/orders/details/index.tsx:56 +#: src/paths/instance/orders/list/index.tsx:147 +#, c-format +msgid "refund created successfully" +msgstr "" + +#: src/paths/instance/orders/details/index.tsx:59 +#: src/paths/instance/orders/list/index.tsx:150 +#, c-format +msgid "could not create the refund" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:111 +#, c-format +msgid "load newer orders" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:115 +#, c-format +msgid "Date" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:131 +#: src/paths/instance/orders/list/Table.tsx:223 +#, c-format +msgid "Refund" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:145 +#, c-format +msgid "load older orders" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:154 +#, c-format +msgid "No orders has been found" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:202 +#, c-format +msgid "date" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:203 +#, c-format +msgid "amount" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:204 +#, c-format +msgid "reason" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:224 +#, c-format +msgid "Max refundable:" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:226 +#, c-format +msgid "Reason" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:226 +#, c-format +msgid "duplicated" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:226 +#, c-format +msgid "requested by the customer" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:226 +#, c-format +msgid "other" +msgstr "" + +#: src/paths/instance/orders/list/index.tsx:91 +#, c-format +msgid "go to order id" +msgstr "" + +#: src/paths/instance/orders/list/index.tsx:107 +#, c-format +msgid "Paid" +msgstr "" + +#: src/paths/instance/orders/list/index.tsx:108 +#, c-format +msgid "Refunded" +msgstr "" + +#: src/paths/instance/orders/list/index.tsx:109 +#, c-format +msgid "Not wired" +msgstr "" + +#: src/paths/instance/orders/list/index.tsx:110 +#, c-format +msgid "All" +msgstr "" + +#: src/paths/instance/products/create/index.tsx:48 +#: src/paths/instance/products/update/index.tsx:64 +#, c-format +msgid "could not create product" +msgstr "" + +#: src/paths/instance/products/list/Table.tsx:87 +#, c-format +msgid "Sell" +msgstr "" + +#: src/paths/instance/products/list/Table.tsx:89 +#, c-format +msgid "Profit" +msgstr "" + +#: src/paths/instance/products/list/Table.tsx:91 +#, c-format +msgid "Sold" +msgstr "" + +#: src/paths/instance/products/list/index.tsx:59 +#, c-format +msgid "product updated successfully" +msgstr "" + +#: src/paths/instance/products/list/index.tsx:62 +#, c-format +msgid "could not update the product" +msgstr "" + +#: src/paths/instance/products/list/index.tsx:70 +#, c-format +msgid "product delete successfully" +msgstr "" + +#: src/paths/instance/products/list/index.tsx:73 +#, c-format +msgid "could not delete the product" +msgstr "" + +#: src/paths/instance/tips/list/Table.tsx:59 +#, c-format +msgid "Tips" +msgstr "" + +#: src/paths/instance/tips/list/Table.tsx:111 +#, c-format +msgid "Committed amount" +msgstr "" + +#: src/paths/instance/tips/list/Table.tsx:112 +#, c-format +msgid "Exchange initial amount" +msgstr "" + +#: src/paths/instance/tips/list/Table.tsx:113 +#, c-format +msgid "Merchant initial amount" +msgstr "" + +#: src/paths/instance/tips/list/Table.tsx:148 +#, c-format +msgid "There is no tips yet, add more pressing the + sign" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:50 +#: src/paths/instance/transfers/create/CreatePage.tsx:54 +#: src/paths/instance/transfers/create/CreatePage.tsx:55 +#: src/paths/instance/transfers/create/CreatePage.tsx:56 +#, c-format +msgid "cannot be empty" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:51 +#, c-format +msgid "check the id, doest look valid" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:52 +#, c-format +msgid "should have 52 characters, current %1$s" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:57 +#, c-format +msgid "URL doesn't have the right format" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:74 +#, c-format +msgid "Transfer ID" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:76 +#, c-format +msgid "Account Address" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:82 +#: src/paths/instance/transfers/list/Table.tsx:125 +#, c-format +msgid "Exchange URL" +msgstr "" + +#: src/paths/instance/transfers/create/index.tsx:49 +#, c-format +msgid "could not inform transfer" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:118 +#, c-format +msgid "load newer transfers" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:123 +#, c-format +msgid "Credit" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:126 +#, c-format +msgid "Confirmed" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:127 +#: src/paths/instance/transfers/list/index.tsx:60 +#, c-format +msgid "Verified" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:128 +#, c-format +msgid "Executed at" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:138 +#: src/paths/instance/transfers/list/Table.tsx:139 +#, c-format +msgid "yes" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:138 +#: src/paths/instance/transfers/list/Table.tsx:139 +#, c-format +msgid "no" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:140 +#, c-format +msgid "unknown" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:145 +#, c-format +msgid "load older transfers" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:154 +#, c-format +msgid "There is no transfer yet, add more pressing the + sign" +msgstr "" diff --git a/packages/backend/src/i18n/index.tsx b/packages/backend/src/i18n/index.tsx new file mode 100644 index 0000000..63c8e19 --- /dev/null +++ b/packages/backend/src/i18n/index.tsx @@ -0,0 +1,203 @@ +/* + 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/> + */ + +/** + * Translation helpers for React components and template literals. + */ + +/** + * Imports + */ +import { ComponentChild, ComponentChildren, h, Fragment, VNode } from "preact"; + +import { useTranslationContext } from "../context/translation"; + +export function useTranslator() { + const ctx = useTranslationContext(); + const jed = ctx.handler + return function str(stringSeq: TemplateStringsArray, ...values: any[]): string { + const s = toI18nString(stringSeq); + if (!s) return s + const tr = jed + .translate(s) + .ifPlural(1, s) + .fetch(...values); + return tr; + } +} + + +/** + * Convert template strings to a msgid + */ + function toI18nString(stringSeq: ReadonlyArray<string>): string { + let s = ""; + for (let i = 0; i < stringSeq.length; i++) { + s += stringSeq[i]; + if (i < stringSeq.length - 1) { + s += `%${i + 1}$s`; + } + } + return s; +} + + +interface TranslateSwitchProps { + target: number; + children: ComponentChildren; +} + +function stringifyChildren(children: ComponentChildren): string { + let n = 1; + const ss = (children instanceof Array ? children : [children]).map((c) => { + if (typeof c === "string") { + return c; + } + return `%${n++}$s`; + }); + const s = ss.join("").replace(/ +/g, " ").trim(); + return s; +} + +interface TranslateProps { + children: ComponentChildren; + /** + * Component that the translated element should be wrapped in. + * Defaults to "div". + */ + wrap?: any; + + /** + * Props to give to the wrapped component. + */ + wrapProps?: any; +} + +function getTranslatedChildren( + translation: string, + children: ComponentChildren, +): ComponentChild[] { + const tr = translation.split(/%(\d+)\$s/); + const childArray = children instanceof Array ? children : [children]; + // Merge consecutive string children. + const placeholderChildren = Array<ComponentChild>(); + for (let i = 0; i < childArray.length; i++) { + const x = childArray[i]; + if (x === undefined) { + continue; + } else if (typeof x === "string") { + continue; + } else { + placeholderChildren.push(x); + } + } + const result = Array<ComponentChild>(); + for (let i = 0; i < tr.length; i++) { + if (i % 2 == 0) { + // Text + result.push(tr[i]); + } else { + const childIdx = Number.parseInt(tr[i],10) - 1; + result.push(placeholderChildren[childIdx]); + } + } + return result; +} + +/** + * Translate text node children of this component. + * If a child component might produce a text node, it must be wrapped + * in a another non-text element. + * + * Example: + * ``` + * <Translate> + * Hello. Your score is <span><PlayerScore player={player} /></span> + * </Translate> + * ``` + */ +export function Translate({ children }: TranslateProps): VNode { + const s = stringifyChildren(children); + const ctx = useTranslationContext() + const translation: string = ctx.handler.ngettext(s, s, 1); + const result = getTranslatedChildren(translation, children) + return <Fragment>{result}</Fragment>; +} + +/** + * Switch translation based on singular or plural based on the target prop. + * Should only contain TranslateSingular and TransplatePlural as children. + * + * Example: + * ``` + * <TranslateSwitch target={n}> + * <TranslateSingular>I have {n} apple.</TranslateSingular> + * <TranslatePlural>I have {n} apples.</TranslatePlural> + * </TranslateSwitch> + * ``` + */ +export function TranslateSwitch({ children, target }: TranslateSwitchProps) { + let singular: VNode<TranslationPluralProps> | undefined; + let plural: VNode<TranslationPluralProps> | undefined; + // const children = this.props.children; + if (children) { + (children instanceof Array ? children : [children]).forEach((child: any) => { + if (child.type === TranslatePlural) { + plural = child; + } + if (child.type === TranslateSingular) { + singular = child; + } + }); + } + if (!singular || !plural) { + console.error("translation not found"); + return h("span", {}, ["translation not found"]); + } + singular.props.target = target; + plural.props.target = target; + // We're looking up the translation based on the + // singular, even if we must use the plural form. + return singular; +} + +interface TranslationPluralProps { + children: ComponentChildren; + target: number; +} + +/** + * See [[TranslateSwitch]]. + */ +export function TranslatePlural({ children, target }: TranslationPluralProps): VNode { + const s = stringifyChildren(children); + const ctx = useTranslationContext() + const translation = ctx.handler.ngettext(s, s, 1); + const result = getTranslatedChildren(translation, children); + return <Fragment>{result}</Fragment>; +} + +/** + * See [[TranslateSwitch]]. + */ +export function TranslateSingular({ children, target }: TranslationPluralProps): VNode { + const s = stringifyChildren(children); + const ctx = useTranslationContext() + const translation = ctx.handler.ngettext(s, s, target); + const result = getTranslatedChildren(translation, children); + return <Fragment>{result}</Fragment>; + +} diff --git a/packages/backend/src/i18n/it.po b/packages/backend/src/i18n/it.po new file mode 100644 index 0000000..6b35bd0 --- /dev/null +++ b/packages/backend/src/i18n/it.po @@ -0,0 +1,1057 @@ +# This file is part of TALER +# (C) 2016 GNUnet e.V. +# +# 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. +# +# 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 +# TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/> +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Taler Wallet\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-23 00:00+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: src/ApplicationReadyRoutes.tsx:50 src/InstanceRoutes.tsx:118 +#: src/InstanceRoutes.tsx:299 +#, c-format +msgid "Access denied" +msgstr "" + +#: src/ApplicationReadyRoutes.tsx:51 src/InstanceRoutes.tsx:118 +#: src/InstanceRoutes.tsx:300 +#, c-format +msgid "Check your token is valid" +msgstr "" + +#: src/ApplicationReadyRoutes.tsx:72 +#, c-format +msgid "Couldn't access the server." +msgstr "" + +#: src/ApplicationReadyRoutes.tsx:73 +#, c-format +msgid "Could not infer instance id from url %1$s" +msgstr "" + +#: src/InstanceRoutes.tsx:109 +#, c-format +msgid "HTTP status #%1$s: Server reported a problem" +msgstr "" + +#: src/InstanceRoutes.tsx:110 +#, c-format +msgid "Got message: \"%1$s\" from: %2$s" +msgstr "" + +#: src/InstanceRoutes.tsx:127 +#, c-format +msgid "No default instance" +msgstr "" + +#: src/InstanceRoutes.tsx:128 +#, c-format +msgid "" +"in order to use merchant backoffice, you should create the default instance" +msgstr "" + +#: src/InstanceRoutes.tsx:288 +#, c-format +msgid "Server reported a problem: HTTP status #%1$s" +msgstr "" + +#: src/InstanceRoutes.tsx:289 +#, c-format +msgid "Got message: %1$s from: %2$s" +msgstr "" + +#: src/components/exception/login.tsx:46 +#, c-format +msgid "Login required" +msgstr "" + +#: src/components/exception/login.tsx:49 +#, c-format +msgid "" +"Please enter your auth token. Token should have \"secret-token:\" and start " +"with Bearer or ApiKey" +msgstr "" + +#: src/components/exception/login.tsx:86 src/components/modal/index.tsx:53 +#: src/components/modal/index.tsx:75 src/paths/admin/create/CreatePage.tsx:115 +#: src/paths/instance/orders/create/CreatePage.tsx:325 +#: src/paths/instance/products/create/CreatePage.tsx:51 +#: src/paths/instance/products/list/Table.tsx:174 +#: src/paths/instance/products/list/Table.tsx:228 +#: src/paths/instance/products/update/UpdatePage.tsx:55 +#: src/paths/instance/transfers/create/CreatePage.tsx:89 +#: src/paths/instance/update/UpdatePage.tsx:134 +#, c-format +msgid "Confirm" +msgstr "" + +#: src/components/form/InputArray.tsx:72 +#, c-format +msgid "The value %1$s is invalid for a payment url" +msgstr "" + +#: src/components/form/InputDate.tsx:67 +#: src/paths/instance/orders/list/index.tsx:123 +#, c-format +msgid "pick a date" +msgstr "" + +#: src/components/form/InputDate.tsx:81 +#, c-format +msgid "clear" +msgstr "" + +#: src/components/form/InputDate.tsx:83 +#: src/paths/instance/transfers/list/Table.tsx:140 +#, c-format +msgid "never" +msgstr "" + +#: src/components/form/InputImage.tsx:80 +#, c-format +msgid "Image should be smaller than 1 MB" +msgstr "" + +#: src/components/form/InputLocation.tsx:28 +#, c-format +msgid "Country" +msgstr "" + +#: src/components/form/InputLocation.tsx:30 +#: src/paths/admin/create/CreatePage.tsx:99 +#: src/paths/instance/transfers/list/Table.tsx:124 +#: src/paths/instance/update/UpdatePage.tsx:118 +#, c-format +msgid "Address" +msgstr "" + +#: src/components/form/InputLocation.tsx:34 +#, c-format +msgid "Building number" +msgstr "" + +#: src/components/form/InputLocation.tsx:35 +#, c-format +msgid "Building name" +msgstr "" + +#: src/components/form/InputLocation.tsx:36 +#, c-format +msgid "Street" +msgstr "" + +#: src/components/form/InputLocation.tsx:37 +#, c-format +msgid "Post code" +msgstr "" + +#: src/components/form/InputLocation.tsx:38 +#, c-format +msgid "Town location" +msgstr "" + +#: src/components/form/InputLocation.tsx:39 +#, c-format +msgid "Town" +msgstr "" + +#: src/components/form/InputLocation.tsx:40 +#, c-format +msgid "District" +msgstr "" + +#: src/components/form/InputLocation.tsx:41 +#, c-format +msgid "Country subdivision" +msgstr "" + +#: src/components/form/InputSearchProduct.tsx:59 +#, c-format +msgid "Product id" +msgstr "" + +#: src/components/form/InputSearchProduct.tsx:60 +#: src/components/product/ProductForm.tsx:99 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:122 +#: src/paths/instance/orders/list/Table.tsx:227 +#: src/paths/instance/products/list/Table.tsx:86 +#, c-format +msgid "Description" +msgstr "" + +#: src/components/form/InputSearchProduct.tsx:73 +#: src/components/form/InputTaxes.tsx:81 +#: src/paths/admin/create/CreatePage.tsx:87 src/paths/admin/list/Table.tsx:110 +#: src/paths/instance/details/DetailPage.tsx:76 +#: src/paths/instance/update/UpdatePage.tsx:106 +#, c-format +msgid "Name" +msgstr "" + +#: src/components/form/InputSearchProduct.tsx:102 +#, c-format +msgid "loading..." +msgstr "" + +#: src/components/form/InputSearchProduct.tsx:108 +#, c-format +msgid "no products found" +msgstr "" + +#: src/components/form/InputSearchProduct.tsx:116 +#, c-format +msgid "no results" +msgstr "" + +#: src/components/form/InputSecured.tsx:33 +#, c-format +msgid "Deleting" +msgstr "" + +#: src/components/form/InputSecured.tsx:34 +#, c-format +msgid "Changing" +msgstr "" + +#: src/components/form/InputSecured.tsx:60 +#, c-format +msgid "Manage token" +msgstr "" + +#: src/components/form/InputSecured.tsx:83 +#, c-format +msgid "Update" +msgstr "" + +#: src/components/form/InputSecured.tsx:100 +#: src/paths/instance/orders/create/CreatePage.tsx:252 +#: src/paths/instance/orders/create/CreatePage.tsx:273 +#, c-format +msgid "Remove" +msgstr "" + +#: src/components/form/InputSecured.tsx:106 src/components/modal/index.tsx:52 +#: src/components/modal/index.tsx:73 src/paths/admin/create/CreatePage.tsx:114 +#: src/paths/instance/orders/create/CreatePage.tsx:324 +#: src/paths/instance/products/create/CreatePage.tsx:50 +#: src/paths/instance/products/list/Table.tsx:166 +#: src/paths/instance/products/list/Table.tsx:218 +#: src/paths/instance/products/update/UpdatePage.tsx:54 +#: src/paths/instance/transfers/create/CreatePage.tsx:88 +#: src/paths/instance/update/UpdatePage.tsx:133 +#, c-format +msgid "Cancel" +msgstr "" + +#: src/components/form/InputStock.tsx:91 +#, c-format +msgid "Manage stock" +msgstr "" + +#: src/components/form/InputStock.tsx:93 +#, c-format +msgid "Infinite" +msgstr "" + +#: src/components/form/InputStock.tsx:105 +#, c-format +msgid "lost cannot be greater that current + incoming (max %1$s)" +msgstr "" + +#: src/components/form/InputStock.tsx:111 +#, c-format +msgid "current stock will change from %1$s to %2$s" +msgstr "" + +#: src/components/form/InputStock.tsx:112 +#, c-format +msgid "current stock will stay at %1$s" +msgstr "" + +#: src/components/form/InputStock.tsx:129 +#: src/paths/instance/products/list/Table.tsx:204 +#, c-format +msgid "Incoming" +msgstr "" + +#: src/components/form/InputStock.tsx:130 +#: src/paths/instance/products/list/Table.tsx:205 +#, c-format +msgid "Lost" +msgstr "" + +#: src/components/form/InputStock.tsx:142 +#, c-format +msgid "Current" +msgstr "" + +#: src/components/form/InputStock.tsx:145 +#, c-format +msgid "without stock" +msgstr "" + +#: src/components/form/InputStock.tsx:150 +#, c-format +msgid "Next restock" +msgstr "" + +#: src/components/form/InputStock.tsx:152 +#, c-format +msgid "Delivery address" +msgstr "" + +#: src/components/form/InputTaxes.tsx:73 +#, c-format +msgid "this product has no taxes" +msgstr "" + +#: src/components/form/InputTaxes.tsx:77 +#: src/paths/instance/orders/details/DetailPage.tsx:145 +#: src/paths/instance/orders/details/DetailPage.tsx:296 +#: src/paths/instance/orders/list/Table.tsx:116 +#: src/paths/instance/transfers/create/CreatePage.tsx:84 +#, c-format +msgid "Amount" +msgstr "" + +#: src/components/form/InputTaxes.tsx:78 +#, c-format +msgid "currency and value separated with colon" +msgstr "" + +#: src/components/form/InputTaxes.tsx:84 +#: src/paths/instance/orders/create/InventoryProductForm.tsx:78 +#, c-format +msgid "Add" +msgstr "" + +#: src/components/menu/SideBar.tsx:53 +#, c-format +msgid "Instance" +msgstr "" + +#: src/components/menu/SideBar.tsx:59 +#, c-format +msgid "Settings" +msgstr "" + +#: src/components/menu/SideBar.tsx:65 +#: src/paths/instance/orders/list/Table.tsx:60 +#, c-format +msgid "Orders" +msgstr "" + +#: src/components/menu/SideBar.tsx:71 +#: src/paths/instance/orders/create/CreatePage.tsx:258 +#: src/paths/instance/products/list/Table.tsx:48 +#, c-format +msgid "Products" +msgstr "" + +#: src/components/menu/SideBar.tsx:77 +#: src/paths/instance/transfers/list/Table.tsx:65 +#, c-format +msgid "Transfers" +msgstr "" + +#: src/components/menu/SideBar.tsx:87 +#, c-format +msgid "Connection" +msgstr "" + +#: src/components/menu/SideBar.tsx:112 src/paths/admin/list/Table.tsx:57 +#, c-format +msgid "Instances" +msgstr "" + +#: src/components/menu/SideBar.tsx:116 +#, c-format +msgid "New" +msgstr "" + +#: src/components/menu/SideBar.tsx:122 +#, c-format +msgid "List" +msgstr "" + +#: src/components/menu/SideBar.tsx:129 +#, c-format +msgid "Log out" +msgstr "" + +#: src/components/modal/index.tsx:74 +#, c-format +msgid "Clear" +msgstr "" + +#: src/components/modal/index.tsx:110 src/components/modal/index.tsx:111 +#, c-format +msgid "should be the same" +msgstr "" + +#: src/components/modal/index.tsx:111 +#, c-format +msgid "cannot be the same as before" +msgstr "" + +#: src/components/modal/index.tsx:114 +#, c-format +msgid "" +"You are updating the authorization token from instance %1$s with id %2$s" +msgstr "" + +#: src/components/modal/index.tsx:124 +#, c-format +msgid "Old token" +msgstr "" + +#: src/components/modal/index.tsx:125 +#, c-format +msgid "New token" +msgstr "" + +#: src/components/modal/index.tsx:127 +#, c-format +msgid "Clearing the auth token will mean public access to the instance" +msgstr "" + +#: src/components/product/ProductForm.tsx:96 +#: src/paths/admin/create/CreatePage.tsx:85 src/paths/admin/list/Table.tsx:109 +#: src/paths/instance/transfers/list/Table.tsx:122 +#, c-format +msgid "ID" +msgstr "" + +#: src/components/product/ProductForm.tsx:98 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:121 +#: src/paths/instance/products/list/Table.tsx:85 +#, c-format +msgid "Image" +msgstr "" + +#: src/components/product/ProductForm.tsx:100 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:123 +#, c-format +msgid "Unit" +msgstr "" + +#: src/components/product/ProductForm.tsx:101 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:124 +#: src/paths/instance/products/list/Table.tsx:162 +#: src/paths/instance/products/list/Table.tsx:214 +#, c-format +msgid "Price" +msgstr "" + +#: src/components/product/ProductForm.tsx:103 +#: src/paths/instance/products/list/Table.tsx:90 +#, c-format +msgid "Stock" +msgstr "" + +#: src/components/product/ProductForm.tsx:105 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:128 +#: src/paths/instance/products/list/Table.tsx:88 +#, c-format +msgid "Taxes" +msgstr "" + +#: src/index.tsx:75 +#, c-format +msgid "Server not found" +msgstr "" + +#: src/index.tsx:85 +#, c-format +msgid "Couldn't access the server" +msgstr "" + +#: src/index.tsx:87 src/index.tsx:99 +#, c-format +msgid "Got message %1$s from %2$s" +msgstr "" + +#: src/index.tsx:97 +#, c-format +msgid "Unexpected Error" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:89 +#: src/paths/instance/update/UpdatePage.tsx:108 +#, c-format +msgid "Auth token" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:91 +#: src/paths/instance/details/DetailPage.tsx:77 +#: src/paths/instance/update/UpdatePage.tsx:110 +#, c-format +msgid "Account address" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:93 +#: src/paths/instance/update/UpdatePage.tsx:112 +#, c-format +msgid "Default max deposit fee" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:95 +#: src/paths/instance/update/UpdatePage.tsx:114 +#, c-format +msgid "Default max wire fee" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:97 +#: src/paths/instance/update/UpdatePage.tsx:116 +#, c-format +msgid "Default wire fee amortization" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:103 +#: src/paths/instance/update/UpdatePage.tsx:122 +#, c-format +msgid "Jurisdiction" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:107 +#: src/paths/instance/update/UpdatePage.tsx:126 +#, c-format +msgid "Default pay delay" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:109 +#: src/paths/instance/update/UpdatePage.tsx:128 +#, c-format +msgid "Default wire transfer delay" +msgstr "" + +#: src/paths/admin/create/index.tsx:58 +#, c-format +msgid "could not create instance" +msgstr "" + +#: src/paths/admin/list/Table.tsx:63 src/paths/admin/list/Table.tsx:131 +#: src/paths/instance/transfers/list/Table.tsx:71 +#, c-format +msgid "Delete" +msgstr "" + +#: src/paths/admin/list/Table.tsx:128 +#, c-format +msgid "Edit" +msgstr "" + +#: src/paths/admin/list/Table.tsx:149 +#: src/paths/instance/products/list/Table.tsx:245 +#, c-format +msgid "There is no instances yet, add more pressing the + sign" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:237 +#, c-format +msgid "Inventory products" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:286 +#, c-format +msgid "Total price" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:287 +#, c-format +msgid "Total tax" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:289 +#: src/paths/instance/orders/create/CreatePage.tsx:297 +#, c-format +msgid "Order price" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:295 +#, c-format +msgid "Net" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:300 +#: src/paths/instance/orders/details/DetailPage.tsx:144 +#: src/paths/instance/orders/details/DetailPage.tsx:295 +#: src/paths/instance/orders/list/Table.tsx:117 +#, c-format +msgid "Summary" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:302 +#, c-format +msgid "Payments options" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:303 +#, c-format +msgid "Auto refund deadline" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:304 +#, c-format +msgid "Refund deadline" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:305 +#, c-format +msgid "Pay deadline" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:307 +#, c-format +msgid "Delivery date" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:308 +#, c-format +msgid "Location" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:312 +#, c-format +msgid "Max fee" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:313 +#, c-format +msgid "Max wire fee" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:314 +#, c-format +msgid "Wire fee amortization" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:315 +#, c-format +msgid "Fullfilment url" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:318 +#, c-format +msgid "Extra information" +msgstr "" + +#: src/paths/instance/orders/create/InventoryProductForm.tsx:44 +#, c-format +msgid "select a product first" +msgstr "" + +#: src/paths/instance/orders/create/InventoryProductForm.tsx:51 +#, c-format +msgid "should be greater than 0" +msgstr "" + +#: src/paths/instance/orders/create/InventoryProductForm.tsx:58 +#, c-format +msgid "" +"cannot be greater than current stock and quantity previously added. max: %1$s" +msgstr "" + +#: src/paths/instance/orders/create/InventoryProductForm.tsx:64 +#, c-format +msgid "cannot be greater than current stock %1$s" +msgstr "" + +#: src/paths/instance/orders/create/InventoryProductForm.tsx:76 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:126 +#, c-format +msgid "Quantity" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:92 +#: src/paths/instance/orders/details/DetailPage.tsx:235 +#: src/paths/instance/orders/details/DetailPage.tsx:333 +#, c-format +msgid "Order" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:93 +#, c-format +msgid "claimed" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:110 +#: src/paths/instance/orders/details/DetailPage.tsx:261 +#: src/paths/instance/orders/list/Table.tsx:136 +#, c-format +msgid "copy url" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:126 +#: src/paths/instance/orders/details/DetailPage.tsx:349 +#, c-format +msgid "pay at" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:127 +#: src/paths/instance/orders/details/DetailPage.tsx:350 +#, c-format +msgid "created at" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:138 +#: src/paths/instance/orders/details/DetailPage.tsx:289 +#, c-format +msgid "Timeline" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:142 +#: src/paths/instance/orders/details/DetailPage.tsx:293 +#, c-format +msgid "Payment details" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:146 +#: src/paths/instance/orders/details/DetailPage.tsx:299 +#: src/paths/instance/orders/details/DetailPage.tsx:363 +#, c-format +msgid "Order status" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:156 +#: src/paths/instance/orders/details/DetailPage.tsx:308 +#, c-format +msgid "Product list" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:236 +#, c-format +msgid "paid" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:238 +#, c-format +msgid "wired" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:241 +#, c-format +msgid "refunded" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:258 +#, c-format +msgid "refund" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:297 +#, c-format +msgid "Refunded amount" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:298 +#, c-format +msgid "Deposit total" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:336 +#, c-format +msgid "unpaid" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:364 +#, c-format +msgid "Order status URL" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:365 +#, c-format +msgid "Pay URI" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:383 +#, c-format +msgid "" +"Unknown order status. This is an error, please contact the administrator." +msgstr "" + +#: src/paths/instance/orders/details/index.tsx:56 +#: src/paths/instance/orders/list/index.tsx:147 +#, c-format +msgid "refund created successfully" +msgstr "" + +#: src/paths/instance/orders/details/index.tsx:59 +#: src/paths/instance/orders/list/index.tsx:150 +#, c-format +msgid "could not create the refund" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:111 +#, c-format +msgid "load newer orders" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:115 +#, c-format +msgid "Date" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:131 +#: src/paths/instance/orders/list/Table.tsx:223 +#, c-format +msgid "Refund" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:145 +#, c-format +msgid "load older orders" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:154 +#, c-format +msgid "No orders has been found" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:202 +#, c-format +msgid "date" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:203 +#, c-format +msgid "amount" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:204 +#, c-format +msgid "reason" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:224 +#, c-format +msgid "Max refundable:" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:226 +#, c-format +msgid "Reason" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:226 +#, c-format +msgid "duplicated" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:226 +#, c-format +msgid "requested by the customer" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:226 +#, c-format +msgid "other" +msgstr "" + +#: src/paths/instance/orders/list/index.tsx:91 +#, c-format +msgid "go to order id" +msgstr "" + +#: src/paths/instance/orders/list/index.tsx:107 +#, c-format +msgid "Paid" +msgstr "" + +#: src/paths/instance/orders/list/index.tsx:108 +#, c-format +msgid "Refunded" +msgstr "" + +#: src/paths/instance/orders/list/index.tsx:109 +#, c-format +msgid "Not wired" +msgstr "" + +#: src/paths/instance/orders/list/index.tsx:110 +#, c-format +msgid "All" +msgstr "" + +#: src/paths/instance/products/create/index.tsx:48 +#: src/paths/instance/products/update/index.tsx:64 +#, c-format +msgid "could not create product" +msgstr "" + +#: src/paths/instance/products/list/Table.tsx:87 +#, c-format +msgid "Sell" +msgstr "" + +#: src/paths/instance/products/list/Table.tsx:89 +#, c-format +msgid "Profit" +msgstr "" + +#: src/paths/instance/products/list/Table.tsx:91 +#, c-format +msgid "Sold" +msgstr "" + +#: src/paths/instance/products/list/index.tsx:59 +#, c-format +msgid "product updated successfully" +msgstr "" + +#: src/paths/instance/products/list/index.tsx:62 +#, c-format +msgid "could not update the product" +msgstr "" + +#: src/paths/instance/products/list/index.tsx:70 +#, c-format +msgid "product delete successfully" +msgstr "" + +#: src/paths/instance/products/list/index.tsx:73 +#, c-format +msgid "could not delete the product" +msgstr "" + +#: src/paths/instance/tips/list/Table.tsx:59 +#, c-format +msgid "Tips" +msgstr "" + +#: src/paths/instance/tips/list/Table.tsx:111 +#, c-format +msgid "Committed amount" +msgstr "" + +#: src/paths/instance/tips/list/Table.tsx:112 +#, c-format +msgid "Exchange initial amount" +msgstr "" + +#: src/paths/instance/tips/list/Table.tsx:113 +#, c-format +msgid "Merchant initial amount" +msgstr "" + +#: src/paths/instance/tips/list/Table.tsx:148 +#, c-format +msgid "There is no tips yet, add more pressing the + sign" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:50 +#: src/paths/instance/transfers/create/CreatePage.tsx:54 +#: src/paths/instance/transfers/create/CreatePage.tsx:55 +#: src/paths/instance/transfers/create/CreatePage.tsx:56 +#, c-format +msgid "cannot be empty" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:51 +#, c-format +msgid "check the id, doest look valid" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:52 +#, c-format +msgid "should have 52 characters, current %1$s" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:57 +#, c-format +msgid "URL doesn't have the right format" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:74 +#, c-format +msgid "Transfer ID" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:76 +#, c-format +msgid "Account Address" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:82 +#: src/paths/instance/transfers/list/Table.tsx:125 +#, c-format +msgid "Exchange URL" +msgstr "" + +#: src/paths/instance/transfers/create/index.tsx:49 +#, c-format +msgid "could not inform transfer" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:118 +#, c-format +msgid "load newer transfers" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:123 +#, c-format +msgid "Credit" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:126 +#, c-format +msgid "Confirmed" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:127 +#: src/paths/instance/transfers/list/index.tsx:60 +#, c-format +msgid "Verified" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:128 +#, c-format +msgid "Executed at" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:138 +#: src/paths/instance/transfers/list/Table.tsx:139 +#, c-format +msgid "yes" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:138 +#: src/paths/instance/transfers/list/Table.tsx:139 +#, c-format +msgid "no" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:140 +#, c-format +msgid "unknown" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:145 +#, c-format +msgid "load older transfers" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:154 +#, c-format +msgid "There is no transfer yet, add more pressing the + sign" +msgstr "" diff --git a/packages/backend/src/i18n/poheader b/packages/backend/src/i18n/poheader new file mode 100644 index 0000000..ee3fcd7 --- /dev/null +++ b/packages/backend/src/i18n/poheader @@ -0,0 +1,27 @@ +# 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/> + +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Taler Wallet\n" +"Report-Msgid-Bugs-To: taler@gnu.org\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" diff --git a/packages/backend/src/i18n/strings-prelude b/packages/backend/src/i18n/strings-prelude new file mode 100644 index 0000000..cca13af --- /dev/null +++ b/packages/backend/src/i18n/strings-prelude @@ -0,0 +1,19 @@ +/* + 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/> + */ + +/*eslint quote-props: ["error", "consistent"]*/ +export const strings: {[s: string]: any} = {}; + diff --git a/packages/backend/src/i18n/strings.ts b/packages/backend/src/i18n/strings.ts new file mode 100644 index 0000000..63e9694 --- /dev/null +++ b/packages/backend/src/i18n/strings.ts @@ -0,0 +1,3445 @@ +/* + 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/> + */ + +/*eslint quote-props: ["error", "consistent"]*/ +export const strings: {[s: string]: any} = {}; + +strings['de'] = { + "domain": "messages", + "locale_data": { + "messages": { + "": { + "domain": "messages", + "plural_forms": "nplurals=2; plural=(n != 1);", + "lang": "" + }, + "Access denied": [ + "" + ], + "Check your token is valid": [ + "" + ], + "Couldn't access the server.": [ + "" + ], + "Could not infer instance id from url %1$s": [ + "" + ], + "HTTP status #%1$s: Server reported a problem": [ + "" + ], + "Got message: \"%1$s\" from: %2$s": [ + "" + ], + "No default instance": [ + "" + ], + "in order to use merchant backoffice, you should create the default instance": [ + "" + ], + "Server reported a problem: HTTP status #%1$s": [ + "" + ], + "Got message: %1$s from: %2$s": [ + "" + ], + "Login required": [ + "" + ], + "Please enter your auth token. Token should have \"secret-token:\" and start with Bearer or ApiKey": [ + "" + ], + "Confirm": [ + "" + ], + "The value %1$s is invalid for a payment url": [ + "" + ], + "pick a date": [ + "" + ], + "clear": [ + "" + ], + "never": [ + "" + ], + "Image should be smaller than 1 MB": [ + "" + ], + "Country": [ + "" + ], + "Address": [ + "" + ], + "Building number": [ + "" + ], + "Building name": [ + "" + ], + "Street": [ + "" + ], + "Post code": [ + "" + ], + "Town location": [ + "" + ], + "Town": [ + "" + ], + "District": [ + "" + ], + "Country subdivision": [ + "" + ], + "Product id": [ + "" + ], + "Description": [ + "" + ], + "Name": [ + "" + ], + "loading...": [ + "" + ], + "no products found": [ + "" + ], + "no results": [ + "" + ], + "Deleting": [ + "" + ], + "Changing": [ + "" + ], + "Manage token": [ + "" + ], + "Update": [ + "" + ], + "Remove": [ + "" + ], + "Cancel": [ + "" + ], + "Manage stock": [ + "" + ], + "Infinite": [ + "" + ], + "lost cannot be greater that current + incoming (max %1$s)": [ + "" + ], + "current stock will change from %1$s to %2$s": [ + "" + ], + "current stock will stay at %1$s": [ + "" + ], + "Incoming": [ + "" + ], + "Lost": [ + "" + ], + "Current": [ + "" + ], + "without stock": [ + "" + ], + "Next restock": [ + "" + ], + "Delivery address": [ + "" + ], + "this product has no taxes": [ + "" + ], + "Amount": [ + "" + ], + "currency and value separated with colon": [ + "" + ], + "Add": [ + "" + ], + "Instance": [ + "" + ], + "Settings": [ + "" + ], + "Orders": [ + "" + ], + "Products": [ + "" + ], + "Transfers": [ + "" + ], + "Connection": [ + "" + ], + "Instances": [ + "" + ], + "New": [ + "" + ], + "List": [ + "" + ], + "Log out": [ + "" + ], + "Clear": [ + "" + ], + "should be the same": [ + "" + ], + "cannot be the same as before": [ + "" + ], + "You are updating the authorization token from instance %1$s with id %2$s": [ + "" + ], + "Old token": [ + "" + ], + "New token": [ + "" + ], + "Clearing the auth token will mean public access to the instance": [ + "" + ], + "ID": [ + "" + ], + "Image": [ + "" + ], + "Unit": [ + "" + ], + "Price": [ + "" + ], + "Stock": [ + "" + ], + "Taxes": [ + "" + ], + "Server not found": [ + "" + ], + "Couldn't access the server": [ + "" + ], + "Got message %1$s from %2$s": [ + "" + ], + "Unexpected Error": [ + "" + ], + "Auth token": [ + "" + ], + "Account address": [ + "" + ], + "Default max deposit fee": [ + "" + ], + "Default max wire fee": [ + "" + ], + "Default wire fee amortization": [ + "" + ], + "Jurisdiction": [ + "" + ], + "Default pay delay": [ + "" + ], + "Default wire transfer delay": [ + "" + ], + "could not create instance": [ + "" + ], + "Delete": [ + "" + ], + "Edit": [ + "" + ], + "There is no instances yet, add more pressing the + sign": [ + "" + ], + "Inventory products": [ + "" + ], + "Total price": [ + "" + ], + "Total tax": [ + "" + ], + "Order price": [ + "" + ], + "Net": [ + "" + ], + "Summary": [ + "" + ], + "Payments options": [ + "" + ], + "Auto refund deadline": [ + "" + ], + "Refund deadline": [ + "" + ], + "Pay deadline": [ + "" + ], + "Delivery date": [ + "" + ], + "Location": [ + "" + ], + "Max fee": [ + "" + ], + "Max wire fee": [ + "" + ], + "Wire fee amortization": [ + "" + ], + "Fullfilment url": [ + "" + ], + "Extra information": [ + "" + ], + "select a product first": [ + "" + ], + "should be greater than 0": [ + "" + ], + "cannot be greater than current stock and quantity previously added. max: %1$s": [ + "" + ], + "cannot be greater than current stock %1$s": [ + "" + ], + "Quantity": [ + "" + ], + "Order": [ + "" + ], + "claimed": [ + "" + ], + "copy url": [ + "" + ], + "pay at": [ + "" + ], + "created at": [ + "" + ], + "Timeline": [ + "" + ], + "Payment details": [ + "" + ], + "Order status": [ + "" + ], + "Product list": [ + "" + ], + "paid": [ + "" + ], + "wired": [ + "" + ], + "refunded": [ + "" + ], + "refund": [ + "" + ], + "Refunded amount": [ + "" + ], + "Deposit total": [ + "" + ], + "unpaid": [ + "" + ], + "Order status URL": [ + "" + ], + "Pay URI": [ + "" + ], + "Unknown order status. This is an error, please contact the administrator.": [ + "" + ], + "refund created successfully": [ + "" + ], + "could not create the refund": [ + "" + ], + "load newer orders": [ + "" + ], + "Date": [ + "" + ], + "Refund": [ + "" + ], + "load older orders": [ + "" + ], + "No orders has been found": [ + "" + ], + "date": [ + "" + ], + "amount": [ + "" + ], + "reason": [ + "" + ], + "Max refundable:": [ + "" + ], + "Reason": [ + "" + ], + "duplicated": [ + "" + ], + "requested by the customer": [ + "" + ], + "other": [ + "" + ], + "go to order id": [ + "" + ], + "Paid": [ + "" + ], + "Refunded": [ + "" + ], + "Not wired": [ + "" + ], + "All": [ + "" + ], + "could not create product": [ + "" + ], + "Sell": [ + "" + ], + "Profit": [ + "" + ], + "Sold": [ + "" + ], + "product updated successfully": [ + "" + ], + "could not update the product": [ + "" + ], + "product delete successfully": [ + "" + ], + "could not delete the product": [ + "" + ], + "Tips": [ + "" + ], + "Committed amount": [ + "" + ], + "Exchange initial amount": [ + "" + ], + "Merchant initial amount": [ + "" + ], + "There is no tips yet, add more pressing the + sign": [ + "" + ], + "cannot be empty": [ + "" + ], + "check the id, doest look valid": [ + "" + ], + "should have 52 characters, current %1$s": [ + "" + ], + "URL doesn't have the right format": [ + "" + ], + "Transfer ID": [ + "" + ], + "Account Address": [ + "" + ], + "Exchange URL": [ + "" + ], + "could not inform transfer": [ + "" + ], + "load newer transfers": [ + "" + ], + "Credit": [ + "" + ], + "Confirmed": [ + "" + ], + "Verified": [ + "" + ], + "Executed at": [ + "" + ], + "yes": [ + "" + ], + "no": [ + "" + ], + "unknown": [ + "" + ], + "load older transfers": [ + "" + ], + "There is no transfer yet, add more pressing the + sign": [ + "" + ] + } + } +}; + +strings['en'] = { + "domain": "messages", + "locale_data": { + "messages": { + "": { + "domain": "messages", + "plural_forms": "nplurals=2; plural=(n != 1);", + "lang": "" + }, + "Access denied": [ + "" + ], + "Check your token is valid": [ + "" + ], + "Couldn't access the server.": [ + "" + ], + "Could not infer instance id from url %1$s": [ + "" + ], + "HTTP status #%1$s: Server reported a problem": [ + "" + ], + "Got message: \"%1$s\" from: %2$s": [ + "" + ], + "No default instance": [ + "" + ], + "in order to use merchant backoffice, you should create the default instance": [ + "" + ], + "Server reported a problem: HTTP status #%1$s": [ + "" + ], + "Got message: %1$s from: %2$s": [ + "" + ], + "Login required": [ + "" + ], + "Please enter your auth token. Token should have \"secret-token:\" and start with Bearer or ApiKey": [ + "" + ], + "Confirm": [ + "" + ], + "The value %1$s is invalid for a payment url": [ + "" + ], + "pick a date": [ + "" + ], + "clear": [ + "" + ], + "never": [ + "" + ], + "Image should be smaller than 1 MB": [ + "" + ], + "Country": [ + "" + ], + "Address": [ + "" + ], + "Building number": [ + "" + ], + "Building name": [ + "" + ], + "Street": [ + "" + ], + "Post code": [ + "" + ], + "Town location": [ + "" + ], + "Town": [ + "" + ], + "District": [ + "" + ], + "Country subdivision": [ + "" + ], + "Product id": [ + "" + ], + "Description": [ + "" + ], + "Name": [ + "" + ], + "loading...": [ + "" + ], + "no products found": [ + "" + ], + "no results": [ + "" + ], + "Deleting": [ + "" + ], + "Changing": [ + "" + ], + "Manage token": [ + "" + ], + "Update": [ + "" + ], + "Remove": [ + "" + ], + "Cancel": [ + "" + ], + "Manage stock": [ + "" + ], + "Infinite": [ + "" + ], + "lost cannot be greater that current + incoming (max %1$s)": [ + "" + ], + "current stock will change from %1$s to %2$s": [ + "" + ], + "current stock will stay at %1$s": [ + "" + ], + "Incoming": [ + "" + ], + "Lost": [ + "" + ], + "Current": [ + "" + ], + "without stock": [ + "" + ], + "Next restock": [ + "" + ], + "Delivery address": [ + "" + ], + "this product has no taxes": [ + "" + ], + "Amount": [ + "" + ], + "currency and value separated with colon": [ + "" + ], + "Add": [ + "" + ], + "Instance": [ + "" + ], + "Settings": [ + "" + ], + "Orders": [ + "" + ], + "Products": [ + "" + ], + "Transfers": [ + "" + ], + "Connection": [ + "" + ], + "Instances": [ + "" + ], + "New": [ + "" + ], + "List": [ + "" + ], + "Log out": [ + "" + ], + "Clear": [ + "" + ], + "should be the same": [ + "" + ], + "cannot be the same as before": [ + "" + ], + "You are updating the authorization token from instance %1$s with id %2$s": [ + "" + ], + "Old token": [ + "" + ], + "New token": [ + "" + ], + "Clearing the auth token will mean public access to the instance": [ + "" + ], + "ID": [ + "" + ], + "Image": [ + "" + ], + "Unit": [ + "" + ], + "Price": [ + "" + ], + "Stock": [ + "" + ], + "Taxes": [ + "" + ], + "Server not found": [ + "" + ], + "Couldn't access the server": [ + "" + ], + "Got message %1$s from %2$s": [ + "" + ], + "Unexpected Error": [ + "" + ], + "Auth token": [ + "" + ], + "Account address": [ + "" + ], + "Default max deposit fee": [ + "" + ], + "Default max wire fee": [ + "" + ], + "Default wire fee amortization": [ + "" + ], + "Jurisdiction": [ + "" + ], + "Default pay delay": [ + "" + ], + "Default wire transfer delay": [ + "" + ], + "could not create instance": [ + "" + ], + "Delete": [ + "" + ], + "Edit": [ + "" + ], + "There is no instances yet, add more pressing the + sign": [ + "" + ], + "Inventory products": [ + "" + ], + "Total price": [ + "" + ], + "Total tax": [ + "" + ], + "Order price": [ + "" + ], + "Net": [ + "" + ], + "Summary": [ + "" + ], + "Payments options": [ + "" + ], + "Auto refund deadline": [ + "" + ], + "Refund deadline": [ + "" + ], + "Pay deadline": [ + "" + ], + "Delivery date": [ + "" + ], + "Location": [ + "" + ], + "Max fee": [ + "" + ], + "Max wire fee": [ + "" + ], + "Wire fee amortization": [ + "" + ], + "Fullfilment url": [ + "" + ], + "Extra information": [ + "" + ], + "select a product first": [ + "" + ], + "should be greater than 0": [ + "" + ], + "cannot be greater than current stock and quantity previously added. max: %1$s": [ + "" + ], + "cannot be greater than current stock %1$s": [ + "" + ], + "Quantity": [ + "" + ], + "Order": [ + "" + ], + "claimed": [ + "" + ], + "copy url": [ + "" + ], + "pay at": [ + "" + ], + "created at": [ + "" + ], + "Timeline": [ + "" + ], + "Payment details": [ + "" + ], + "Order status": [ + "" + ], + "Product list": [ + "" + ], + "paid": [ + "" + ], + "wired": [ + "" + ], + "refunded": [ + "" + ], + "refund": [ + "" + ], + "Refunded amount": [ + "" + ], + "Deposit total": [ + "" + ], + "unpaid": [ + "" + ], + "Order status URL": [ + "" + ], + "Pay URI": [ + "" + ], + "Unknown order status. This is an error, please contact the administrator.": [ + "" + ], + "refund created successfully": [ + "" + ], + "could not create the refund": [ + "" + ], + "load newer orders": [ + "" + ], + "Date": [ + "" + ], + "Refund": [ + "" + ], + "load older orders": [ + "" + ], + "No orders has been found": [ + "" + ], + "date": [ + "" + ], + "amount": [ + "" + ], + "reason": [ + "" + ], + "Max refundable:": [ + "" + ], + "Reason": [ + "" + ], + "duplicated": [ + "" + ], + "requested by the customer": [ + "" + ], + "other": [ + "" + ], + "go to order id": [ + "" + ], + "Paid": [ + "" + ], + "Refunded": [ + "" + ], + "Not wired": [ + "" + ], + "All": [ + "" + ], + "could not create product": [ + "" + ], + "Sell": [ + "" + ], + "Profit": [ + "" + ], + "Sold": [ + "" + ], + "product updated successfully": [ + "" + ], + "could not update the product": [ + "" + ], + "product delete successfully": [ + "" + ], + "could not delete the product": [ + "" + ], + "Tips": [ + "" + ], + "Committed amount": [ + "" + ], + "Exchange initial amount": [ + "" + ], + "Merchant initial amount": [ + "" + ], + "There is no tips yet, add more pressing the + sign": [ + "" + ], + "cannot be empty": [ + "" + ], + "check the id, doest look valid": [ + "" + ], + "should have 52 characters, current %1$s": [ + "" + ], + "URL doesn't have the right format": [ + "" + ], + "Transfer ID": [ + "" + ], + "Account Address": [ + "" + ], + "Exchange URL": [ + "" + ], + "could not inform transfer": [ + "" + ], + "load newer transfers": [ + "" + ], + "Credit": [ + "" + ], + "Confirmed": [ + "" + ], + "Verified": [ + "" + ], + "Executed at": [ + "" + ], + "yes": [ + "" + ], + "no": [ + "" + ], + "unknown": [ + "" + ], + "load older transfers": [ + "" + ], + "There is no transfer yet, add more pressing the + sign": [ + "" + ] + } + } +}; + +strings['es'] = { + "domain": "messages", + "locale_data": { + "messages": { + "": { + "domain": "messages", + "plural_forms": "nplurals=2; plural=(n != 1);", + "lang": "" + }, + "Access denied": [ + "Acceso denegado" + ], + "Check your token is valid": [ + "Verifica que el token sea valido" + ], + "Couldn't access the server.": [ + "No se pudo acceder al servidor" + ], + "Could not infer instance id from url %1$s": [ + "No se pudo inferir el id de la instancia con la url %1$s" + ], + "HTTP status #%1$s: Server reported a problem": [ + "HTTP status #%1$s: Servidor reporto un problema" + ], + "Got message: \"%1$s\" from: %2$s": [ + "Recivimos el mensaje %1$s desde %2$s" + ], + "No default instance": [ + "Sin instancia default" + ], + "in order to use merchant backoffice, you should create the default instance": [ + "para usar el merchant backoffice, deberΓa crear la instancia default" + ], + "Server reported a problem: HTTP status #%1$s": [ + "Servidir reporto un problema: HTTP status #%1$s" + ], + "Got message: %1$s from: %2$s": [ + "Recivimos el mensaje %1$s desde %2$s" + ], + "Login required": [ + "Login necesario" + ], + "Please enter your auth token. Token should have \"secret-token:\" and start with Bearer or ApiKey": [ + "Por favor ingrese su token de autorizaciΓ³n. El token debe tener \"secret-token\" y comenzar con Bearer o ApiKey" + ], + "Confirm": [ + "Confirmar" + ], + "The value %1$s is invalid for a payment url": [ + "El valor %1$s es invalido para una URL de pago" + ], + "pick a date": [ + "elegir una fecha" + ], + "clear": [ + "Limpiar" + ], + "never": [ + "nunca" + ], + "Image should be smaller than 1 MB": [ + "La imagen debe ser mas chica que 1 MB" + ], + "Country": [ + "PaΓs" + ], + "Address": [ + "DirecciΓ³n" + ], + "Building number": [ + "NΓΊmero de edificio" + ], + "Building name": [ + "Nombre de edificio" + ], + "Street": [ + "Calle" + ], + "Post code": [ + "CΓ³digo postal" + ], + "Town location": [ + "UbicaciΓ³n de ciudad" + ], + "Town": [ + "Ciudad" + ], + "District": [ + "Distrito" + ], + "Country subdivision": [ + "Provincia" + ], + "Product id": [ + "Id de producto" + ], + "Description": [ + "Descripcion" + ], + "Name": [ + "Nombre" + ], + "loading...": [ + "Cargando..." + ], + "no products found": [ + "No se encontraron productos" + ], + "no results": [ + "Sin resultados" + ], + "Deleting": [ + "Borrando" + ], + "Changing": [ + "Cambiando" + ], + "Manage token": [ + "Administrar token" + ], + "Update": [ + "Actualizar" + ], + "Remove": [ + "Eliminar" + ], + "Cancel": [ + "Cancelar" + ], + "Manage stock": [ + "Administrar stock" + ], + "Infinite": [ + "Inifinito" + ], + "lost cannot be greater that current + incoming (max %1$s)": [ + "no puede ser mayor al stock actual %1$s" + ], + "current stock will change from %1$s to %2$s": [ + "stock actual cambiarΓ‘ desde %1$s a %2$s" + ], + "current stock will stay at %1$s": [ + "stock actual seguirΓ‘ en %1$s" + ], + "Incoming": [ + "Ingresando" + ], + "Lost": [ + "Perdido" + ], + "Current": [ + "Actual" + ], + "without stock": [ + "sin stock" + ], + "Next restock": [ + "PrΓ³ximo reabastecimiento" + ], + "Delivery address": [ + "DirecciΓ³n de entrega" + ], + "this product has no taxes": [ + "este producto no tiene impuestos" + ], + "Amount": [ + "Monto" + ], + "currency and value separated with colon": [ + "Moneda y valor separado por dos puntos" + ], + "Add": [ + "Agregar" + ], + "Instance": [ + "Instancia" + ], + "Settings": [ + "ConfiguraciΓ³n" + ], + "Orders": [ + "Ordenes" + ], + "Products": [ + "Productos" + ], + "Transfers": [ + "Transferencias" + ], + "Connection": [ + "ConexiΓ³n" + ], + "Instances": [ + "Instancias" + ], + "New": [ + "Nuevo" + ], + "List": [ + "Lista" + ], + "Log out": [ + "Salir" + ], + "Clear": [ + "Limpiar" + ], + "should be the same": [ + "deberΓan ser iguales" + ], + "cannot be the same as before": [ + "no puede ser igual al anterior" + ], + "You are updating the authorization token from instance %1$s with id %2$s": [ + "EstΓ‘ actualizando el token de autorizaciΓ³n para la instancia %1$s con id %2$s" + ], + "Old token": [ + "Viejo token" + ], + "New token": [ + "Nuevo token" + ], + "Clearing the auth token will mean public access to the instance": [ + "Limpiar el token de autorizaciΓ³n significa acceso publico a la instancia" + ], + "ID": [ + "ID" + ], + "Image": [ + "Imagen" + ], + "Unit": [ + "Unidad" + ], + "Price": [ + "Precio" + ], + "Stock": [ + "Stock" + ], + "Taxes": [ + "Impuesto" + ], + "Server not found": [ + "Servidor no encontrado" + ], + "Couldn't access the server": [ + "No se pudo aceder al servidor" + ], + "Got message %1$s from %2$s": [ + "Recivimos el mensaje %1$s desde %2$s" + ], + "Unexpected Error": [ + "Error inesperado" + ], + "Auth token": [ + "Token de autorizaciΓ³n" + ], + "Account address": [ + "DirecciΓ³n de cuenta" + ], + "Default max deposit fee": [ + "Impuesto mΓ‘ximo de deposito por omisiΓ³n" + ], + "Default max wire fee": [ + "Impuesto mΓ‘ximo de transferencia por omisiΓ³n" + ], + "Default wire fee amortization": [ + "AmortizaciΓ³n de impuesto de transferencia por omisiΓ³n" + ], + "Jurisdiction": [ + "JurisdicciΓ³n" + ], + "Default pay delay": [ + "Retrazo de pago por omisiΓ³n" + ], + "Default wire transfer delay": [ + "Retrazo de transferencia por omisiΓ³n" + ], + "could not create instance": [ + "no se pudo crear la instancia" + ], + "Delete": [ + "Borrando" + ], + "Edit": [ + "" + ], + "There is no instances yet, add more pressing the + sign": [ + "No hay instancias todavΓan, agregue mas presionando el signo +" + ], + "Inventory products": [ + "Productos de inventario" + ], + "Total price": [ + "Precio total" + ], + "Total tax": [ + "Impuesto total" + ], + "Order price": [ + "Precio de la orden" + ], + "Net": [ + "Neto" + ], + "Summary": [ + "Resumen" + ], + "Payments options": [ + "Opciones de pago" + ], + "Auto refund deadline": [ + "Plazo de reembolso automΓ‘tico" + ], + "Refund deadline": [ + "Plazo de reembolso" + ], + "Pay deadline": [ + "Plazo de pago" + ], + "Delivery date": [ + "Fecha de entrega" + ], + "Location": [ + "UbicaciΓ³n" + ], + "Max fee": [ + "Impuesto mΓ‘ximo" + ], + "Max wire fee": [ + "Impuesto de transferencia mΓ‘ximo" + ], + "Wire fee amortization": [ + "AmortizaciΓ³n de impuesto de transferencia" + ], + "Fullfilment url": [ + "URL de completitud" + ], + "Extra information": [ + "InformaciΓ³n extra" + ], + "select a product first": [ + "seleccione un producto primero" + ], + "should be greater than 0": [ + "La imagen debe ser mas chica que 1 MB" + ], + "cannot be greater than current stock and quantity previously added. max: %1$s": [ + "no puede ser mayor al stock actual y la cantidad previamente agregada. mΓ‘ximo: %1$s" + ], + "cannot be greater than current stock %1$s": [ + "no puede ser mayor al stock actual %1$s" + ], + "Quantity": [ + "Cantidad" + ], + "Order": [ + "Orden" + ], + "claimed": [ + "reclamado" + ], + "copy url": [ + "copiar url" + ], + "pay at": [ + "pagar en" + ], + "created at": [ + "creado" + ], + "Timeline": [ + "CronologΓa" + ], + "Payment details": [ + "Detalles de pago" + ], + "Order status": [ + "Estado de orden" + ], + "Product list": [ + "Lista de producto" + ], + "paid": [ + "pagados" + ], + "wired": [ + "transferido" + ], + "refunded": [ + "reembolzado" + ], + "refund": [ + "reembolzar" + ], + "Refunded amount": [ + "Monto reembolzado" + ], + "Deposit total": [ + "Total depositado" + ], + "unpaid": [ + "impago" + ], + "Order status URL": [ + "URL de estado de orden" + ], + "Pay URI": [ + "URI de pago" + ], + "Unknown order status. This is an error, please contact the administrator.": [ + "Estado de orden desconocido. Esto es un error, por favor contacte a su administrador" + ], + "refund created successfully": [ + "reembolzo creado satisfactoriamente" + ], + "could not create the refund": [ + "No se pudo aceder al servidor" + ], + "load newer orders": [ + "cargar nuevas ordenes" + ], + "Date": [ + "Fecha" + ], + "Refund": [ + "Reembolzar" + ], + "load older orders": [ + "cargar viejas ordenes" + ], + "No orders has been found": [ + "No se enconraron ordenes" + ], + "date": [ + "fecha" + ], + "amount": [ + "monto" + ], + "reason": [ + "razΓ³n" + ], + "Max refundable:": [ + "MΓ‘ximo reembolzable:" + ], + "Reason": [ + "RazΓ³n" + ], + "duplicated": [ + "duplicado" + ], + "requested by the customer": [ + "pedido por el consumidor" + ], + "other": [ + "otro" + ], + "go to order id": [ + "ir a id de orden" + ], + "Paid": [ + "Pagado" + ], + "Refunded": [ + "Reembolzado" + ], + "Not wired": [ + "No transferido" + ], + "All": [ + "Todo" + ], + "could not create product": [ + "no se pudo crear el producto" + ], + "Sell": [ + "Venta" + ], + "Profit": [ + "Ganancia" + ], + "Sold": [ + "Vendido" + ], + "product updated successfully": [ + "producto actualizado correctamente" + ], + "could not update the product": [ + "no se pudo actualizar el producto" + ], + "product delete successfully": [ + "producto fue eliminado correctamente" + ], + "could not delete the product": [ + "no se pudo eliminar el producto" + ], + "Tips": [ + "Propinas" + ], + "Committed amount": [ + "" + ], + "Exchange initial amount": [ + "" + ], + "Merchant initial amount": [ + "" + ], + "There is no tips yet, add more pressing the + sign": [ + "No hay propinas todavΓa, agregar mas presionando el signo +" + ], + "cannot be empty": [ + "no puede ser vacΓo" + ], + "check the id, doest look valid": [ + "verificar el id, no parece vΓ‘lido" + ], + "should have 52 characters, current %1$s": [ + "deberΓa tener 52 caracteres, actualmente %1$s" + ], + "URL doesn't have the right format": [ + "La URL no tiene el formato correcto" + ], + "Transfer ID": [ + "Transferencias" + ], + "Account Address": [ + "DirecciΓ³n de cuenta" + ], + "Exchange URL": [ + "URL del Exchange" + ], + "could not inform transfer": [ + "no se pudo crear la instancia" + ], + "load newer transfers": [ + "cargar nuevas ordenes" + ], + "Credit": [ + "CrΓ©dito" + ], + "Confirmed": [ + "Confirmar" + ], + "Verified": [ + "Verificado" + ], + "Executed at": [ + "creado" + ], + "yes": [ + "si" + ], + "no": [ + "no" + ], + "unknown": [ + "desconocido" + ], + "load older transfers": [ + "cargar viejas transferencias" + ], + "There is no transfer yet, add more pressing the + sign": [ + "No hay transferencias todavΓa, agregar mas presionando el signo +" + ] + } + } +}; + +strings['fr'] = { + "domain": "messages", + "locale_data": { + "messages": { + "": { + "domain": "messages", + "plural_forms": "nplurals=2; plural=(n != 1);", + "lang": "" + }, + "Access denied": [ + "" + ], + "Check your token is valid": [ + "" + ], + "Couldn't access the server.": [ + "" + ], + "Could not infer instance id from url %1$s": [ + "" + ], + "HTTP status #%1$s: Server reported a problem": [ + "" + ], + "Got message: \"%1$s\" from: %2$s": [ + "" + ], + "No default instance": [ + "" + ], + "in order to use merchant backoffice, you should create the default instance": [ + "" + ], + "Server reported a problem: HTTP status #%1$s": [ + "" + ], + "Got message: %1$s from: %2$s": [ + "" + ], + "Login required": [ + "" + ], + "Please enter your auth token. Token should have \"secret-token:\" and start with Bearer or ApiKey": [ + "" + ], + "Confirm": [ + "" + ], + "The value %1$s is invalid for a payment url": [ + "" + ], + "pick a date": [ + "" + ], + "clear": [ + "" + ], + "never": [ + "" + ], + "Image should be smaller than 1 MB": [ + "" + ], + "Country": [ + "" + ], + "Address": [ + "" + ], + "Building number": [ + "" + ], + "Building name": [ + "" + ], + "Street": [ + "" + ], + "Post code": [ + "" + ], + "Town location": [ + "" + ], + "Town": [ + "" + ], + "District": [ + "" + ], + "Country subdivision": [ + "" + ], + "Product id": [ + "" + ], + "Description": [ + "" + ], + "Name": [ + "" + ], + "loading...": [ + "" + ], + "no products found": [ + "" + ], + "no results": [ + "" + ], + "Deleting": [ + "" + ], + "Changing": [ + "" + ], + "Manage token": [ + "" + ], + "Update": [ + "" + ], + "Remove": [ + "" + ], + "Cancel": [ + "" + ], + "Manage stock": [ + "" + ], + "Infinite": [ + "" + ], + "lost cannot be greater that current + incoming (max %1$s)": [ + "" + ], + "current stock will change from %1$s to %2$s": [ + "" + ], + "current stock will stay at %1$s": [ + "" + ], + "Incoming": [ + "" + ], + "Lost": [ + "" + ], + "Current": [ + "" + ], + "without stock": [ + "" + ], + "Next restock": [ + "" + ], + "Delivery address": [ + "" + ], + "this product has no taxes": [ + "" + ], + "Amount": [ + "" + ], + "currency and value separated with colon": [ + "" + ], + "Add": [ + "" + ], + "Instance": [ + "" + ], + "Settings": [ + "" + ], + "Orders": [ + "" + ], + "Products": [ + "" + ], + "Transfers": [ + "" + ], + "Connection": [ + "" + ], + "Instances": [ + "" + ], + "New": [ + "" + ], + "List": [ + "" + ], + "Log out": [ + "" + ], + "Clear": [ + "" + ], + "should be the same": [ + "" + ], + "cannot be the same as before": [ + "" + ], + "You are updating the authorization token from instance %1$s with id %2$s": [ + "" + ], + "Old token": [ + "" + ], + "New token": [ + "" + ], + "Clearing the auth token will mean public access to the instance": [ + "" + ], + "ID": [ + "" + ], + "Image": [ + "" + ], + "Unit": [ + "" + ], + "Price": [ + "" + ], + "Stock": [ + "" + ], + "Taxes": [ + "" + ], + "Server not found": [ + "" + ], + "Couldn't access the server": [ + "" + ], + "Got message %1$s from %2$s": [ + "" + ], + "Unexpected Error": [ + "" + ], + "Auth token": [ + "" + ], + "Account address": [ + "" + ], + "Default max deposit fee": [ + "" + ], + "Default max wire fee": [ + "" + ], + "Default wire fee amortization": [ + "" + ], + "Jurisdiction": [ + "" + ], + "Default pay delay": [ + "" + ], + "Default wire transfer delay": [ + "" + ], + "could not create instance": [ + "" + ], + "Delete": [ + "" + ], + "Edit": [ + "" + ], + "There is no instances yet, add more pressing the + sign": [ + "" + ], + "Inventory products": [ + "" + ], + "Total price": [ + "" + ], + "Total tax": [ + "" + ], + "Order price": [ + "" + ], + "Net": [ + "" + ], + "Summary": [ + "" + ], + "Payments options": [ + "" + ], + "Auto refund deadline": [ + "" + ], + "Refund deadline": [ + "" + ], + "Pay deadline": [ + "" + ], + "Delivery date": [ + "" + ], + "Location": [ + "" + ], + "Max fee": [ + "" + ], + "Max wire fee": [ + "" + ], + "Wire fee amortization": [ + "" + ], + "Fullfilment url": [ + "" + ], + "Extra information": [ + "" + ], + "select a product first": [ + "" + ], + "should be greater than 0": [ + "" + ], + "cannot be greater than current stock and quantity previously added. max: %1$s": [ + "" + ], + "cannot be greater than current stock %1$s": [ + "" + ], + "Quantity": [ + "" + ], + "Order": [ + "" + ], + "claimed": [ + "" + ], + "copy url": [ + "" + ], + "pay at": [ + "" + ], + "created at": [ + "" + ], + "Timeline": [ + "" + ], + "Payment details": [ + "" + ], + "Order status": [ + "" + ], + "Product list": [ + "" + ], + "paid": [ + "" + ], + "wired": [ + "" + ], + "refunded": [ + "" + ], + "refund": [ + "" + ], + "Refunded amount": [ + "" + ], + "Deposit total": [ + "" + ], + "unpaid": [ + "" + ], + "Order status URL": [ + "" + ], + "Pay URI": [ + "" + ], + "Unknown order status. This is an error, please contact the administrator.": [ + "" + ], + "refund created successfully": [ + "" + ], + "could not create the refund": [ + "" + ], + "load newer orders": [ + "" + ], + "Date": [ + "" + ], + "Refund": [ + "" + ], + "load older orders": [ + "" + ], + "No orders has been found": [ + "" + ], + "date": [ + "" + ], + "amount": [ + "" + ], + "reason": [ + "" + ], + "Max refundable:": [ + "" + ], + "Reason": [ + "" + ], + "duplicated": [ + "" + ], + "requested by the customer": [ + "" + ], + "other": [ + "" + ], + "go to order id": [ + "" + ], + "Paid": [ + "" + ], + "Refunded": [ + "" + ], + "Not wired": [ + "" + ], + "All": [ + "" + ], + "could not create product": [ + "" + ], + "Sell": [ + "" + ], + "Profit": [ + "" + ], + "Sold": [ + "" + ], + "product updated successfully": [ + "" + ], + "could not update the product": [ + "" + ], + "product delete successfully": [ + "" + ], + "could not delete the product": [ + "" + ], + "Tips": [ + "" + ], + "Committed amount": [ + "" + ], + "Exchange initial amount": [ + "" + ], + "Merchant initial amount": [ + "" + ], + "There is no tips yet, add more pressing the + sign": [ + "" + ], + "cannot be empty": [ + "" + ], + "check the id, doest look valid": [ + "" + ], + "should have 52 characters, current %1$s": [ + "" + ], + "URL doesn't have the right format": [ + "" + ], + "Transfer ID": [ + "" + ], + "Account Address": [ + "" + ], + "Exchange URL": [ + "" + ], + "could not inform transfer": [ + "" + ], + "load newer transfers": [ + "" + ], + "Credit": [ + "" + ], + "Confirmed": [ + "" + ], + "Verified": [ + "" + ], + "Executed at": [ + "" + ], + "yes": [ + "" + ], + "no": [ + "" + ], + "unknown": [ + "" + ], + "load older transfers": [ + "" + ], + "There is no transfer yet, add more pressing the + sign": [ + "" + ] + } + } +}; + +strings['it'] = { + "domain": "messages", + "locale_data": { + "messages": { + "": { + "domain": "messages", + "plural_forms": "nplurals=2; plural=(n != 1);", + "lang": "" + }, + "Access denied": [ + "" + ], + "Check your token is valid": [ + "" + ], + "Couldn't access the server.": [ + "" + ], + "Could not infer instance id from url %1$s": [ + "" + ], + "HTTP status #%1$s: Server reported a problem": [ + "" + ], + "Got message: \"%1$s\" from: %2$s": [ + "" + ], + "No default instance": [ + "" + ], + "in order to use merchant backoffice, you should create the default instance": [ + "" + ], + "Server reported a problem: HTTP status #%1$s": [ + "" + ], + "Got message: %1$s from: %2$s": [ + "" + ], + "Login required": [ + "" + ], + "Please enter your auth token. Token should have \"secret-token:\" and start with Bearer or ApiKey": [ + "" + ], + "Confirm": [ + "" + ], + "The value %1$s is invalid for a payment url": [ + "" + ], + "pick a date": [ + "" + ], + "clear": [ + "" + ], + "never": [ + "" + ], + "Image should be smaller than 1 MB": [ + "" + ], + "Country": [ + "" + ], + "Address": [ + "" + ], + "Building number": [ + "" + ], + "Building name": [ + "" + ], + "Street": [ + "" + ], + "Post code": [ + "" + ], + "Town location": [ + "" + ], + "Town": [ + "" + ], + "District": [ + "" + ], + "Country subdivision": [ + "" + ], + "Product id": [ + "" + ], + "Description": [ + "" + ], + "Name": [ + "" + ], + "loading...": [ + "" + ], + "no products found": [ + "" + ], + "no results": [ + "" + ], + "Deleting": [ + "" + ], + "Changing": [ + "" + ], + "Manage token": [ + "" + ], + "Update": [ + "" + ], + "Remove": [ + "" + ], + "Cancel": [ + "" + ], + "Manage stock": [ + "" + ], + "Infinite": [ + "" + ], + "lost cannot be greater that current + incoming (max %1$s)": [ + "" + ], + "current stock will change from %1$s to %2$s": [ + "" + ], + "current stock will stay at %1$s": [ + "" + ], + "Incoming": [ + "" + ], + "Lost": [ + "" + ], + "Current": [ + "" + ], + "without stock": [ + "" + ], + "Next restock": [ + "" + ], + "Delivery address": [ + "" + ], + "this product has no taxes": [ + "" + ], + "Amount": [ + "" + ], + "currency and value separated with colon": [ + "" + ], + "Add": [ + "" + ], + "Instance": [ + "" + ], + "Settings": [ + "" + ], + "Orders": [ + "" + ], + "Products": [ + "" + ], + "Transfers": [ + "" + ], + "Connection": [ + "" + ], + "Instances": [ + "" + ], + "New": [ + "" + ], + "List": [ + "" + ], + "Log out": [ + "" + ], + "Clear": [ + "" + ], + "should be the same": [ + "" + ], + "cannot be the same as before": [ + "" + ], + "You are updating the authorization token from instance %1$s with id %2$s": [ + "" + ], + "Old token": [ + "" + ], + "New token": [ + "" + ], + "Clearing the auth token will mean public access to the instance": [ + "" + ], + "ID": [ + "" + ], + "Image": [ + "" + ], + "Unit": [ + "" + ], + "Price": [ + "" + ], + "Stock": [ + "" + ], + "Taxes": [ + "" + ], + "Server not found": [ + "" + ], + "Couldn't access the server": [ + "" + ], + "Got message %1$s from %2$s": [ + "" + ], + "Unexpected Error": [ + "" + ], + "Auth token": [ + "" + ], + "Account address": [ + "" + ], + "Default max deposit fee": [ + "" + ], + "Default max wire fee": [ + "" + ], + "Default wire fee amortization": [ + "" + ], + "Jurisdiction": [ + "" + ], + "Default pay delay": [ + "" + ], + "Default wire transfer delay": [ + "" + ], + "could not create instance": [ + "" + ], + "Delete": [ + "" + ], + "Edit": [ + "" + ], + "There is no instances yet, add more pressing the + sign": [ + "" + ], + "Inventory products": [ + "" + ], + "Total price": [ + "" + ], + "Total tax": [ + "" + ], + "Order price": [ + "" + ], + "Net": [ + "" + ], + "Summary": [ + "" + ], + "Payments options": [ + "" + ], + "Auto refund deadline": [ + "" + ], + "Refund deadline": [ + "" + ], + "Pay deadline": [ + "" + ], + "Delivery date": [ + "" + ], + "Location": [ + "" + ], + "Max fee": [ + "" + ], + "Max wire fee": [ + "" + ], + "Wire fee amortization": [ + "" + ], + "Fullfilment url": [ + "" + ], + "Extra information": [ + "" + ], + "select a product first": [ + "" + ], + "should be greater than 0": [ + "" + ], + "cannot be greater than current stock and quantity previously added. max: %1$s": [ + "" + ], + "cannot be greater than current stock %1$s": [ + "" + ], + "Quantity": [ + "" + ], + "Order": [ + "" + ], + "claimed": [ + "" + ], + "copy url": [ + "" + ], + "pay at": [ + "" + ], + "created at": [ + "" + ], + "Timeline": [ + "" + ], + "Payment details": [ + "" + ], + "Order status": [ + "" + ], + "Product list": [ + "" + ], + "paid": [ + "" + ], + "wired": [ + "" + ], + "refunded": [ + "" + ], + "refund": [ + "" + ], + "Refunded amount": [ + "" + ], + "Deposit total": [ + "" + ], + "unpaid": [ + "" + ], + "Order status URL": [ + "" + ], + "Pay URI": [ + "" + ], + "Unknown order status. This is an error, please contact the administrator.": [ + "" + ], + "refund created successfully": [ + "" + ], + "could not create the refund": [ + "" + ], + "load newer orders": [ + "" + ], + "Date": [ + "" + ], + "Refund": [ + "" + ], + "load older orders": [ + "" + ], + "No orders has been found": [ + "" + ], + "date": [ + "" + ], + "amount": [ + "" + ], + "reason": [ + "" + ], + "Max refundable:": [ + "" + ], + "Reason": [ + "" + ], + "duplicated": [ + "" + ], + "requested by the customer": [ + "" + ], + "other": [ + "" + ], + "go to order id": [ + "" + ], + "Paid": [ + "" + ], + "Refunded": [ + "" + ], + "Not wired": [ + "" + ], + "All": [ + "" + ], + "could not create product": [ + "" + ], + "Sell": [ + "" + ], + "Profit": [ + "" + ], + "Sold": [ + "" + ], + "product updated successfully": [ + "" + ], + "could not update the product": [ + "" + ], + "product delete successfully": [ + "" + ], + "could not delete the product": [ + "" + ], + "Tips": [ + "" + ], + "Committed amount": [ + "" + ], + "Exchange initial amount": [ + "" + ], + "Merchant initial amount": [ + "" + ], + "There is no tips yet, add more pressing the + sign": [ + "" + ], + "cannot be empty": [ + "" + ], + "check the id, doest look valid": [ + "" + ], + "should have 52 characters, current %1$s": [ + "" + ], + "URL doesn't have the right format": [ + "" + ], + "Transfer ID": [ + "" + ], + "Account Address": [ + "" + ], + "Exchange URL": [ + "" + ], + "could not inform transfer": [ + "" + ], + "load newer transfers": [ + "" + ], + "Credit": [ + "" + ], + "Confirmed": [ + "" + ], + "Verified": [ + "" + ], + "Executed at": [ + "" + ], + "yes": [ + "" + ], + "no": [ + "" + ], + "unknown": [ + "" + ], + "load older transfers": [ + "" + ], + "There is no transfer yet, add more pressing the + sign": [ + "" + ] + } + } +}; + +strings['sv'] = { + "domain": "messages", + "locale_data": { + "messages": { + "": { + "domain": "messages", + "plural_forms": "nplurals=2; plural=(n != 1);", + "lang": "" + }, + "Access denied": [ + "" + ], + "Check your token is valid": [ + "" + ], + "Couldn't access the server.": [ + "" + ], + "Could not infer instance id from url %1$s": [ + "" + ], + "HTTP status #%1$s: Server reported a problem": [ + "" + ], + "Got message: \"%1$s\" from: %2$s": [ + "" + ], + "No default instance": [ + "" + ], + "in order to use merchant backoffice, you should create the default instance": [ + "" + ], + "Server reported a problem: HTTP status #%1$s": [ + "" + ], + "Got message: %1$s from: %2$s": [ + "" + ], + "Login required": [ + "" + ], + "Please enter your auth token. Token should have \"secret-token:\" and start with Bearer or ApiKey": [ + "" + ], + "Confirm": [ + "" + ], + "The value %1$s is invalid for a payment url": [ + "" + ], + "pick a date": [ + "" + ], + "clear": [ + "" + ], + "never": [ + "" + ], + "Image should be smaller than 1 MB": [ + "" + ], + "Country": [ + "" + ], + "Address": [ + "" + ], + "Building number": [ + "" + ], + "Building name": [ + "" + ], + "Street": [ + "" + ], + "Post code": [ + "" + ], + "Town location": [ + "" + ], + "Town": [ + "" + ], + "District": [ + "" + ], + "Country subdivision": [ + "" + ], + "Product id": [ + "" + ], + "Description": [ + "" + ], + "Name": [ + "" + ], + "loading...": [ + "" + ], + "no products found": [ + "" + ], + "no results": [ + "" + ], + "Deleting": [ + "" + ], + "Changing": [ + "" + ], + "Manage token": [ + "" + ], + "Update": [ + "" + ], + "Remove": [ + "" + ], + "Cancel": [ + "" + ], + "Manage stock": [ + "" + ], + "Infinite": [ + "" + ], + "lost cannot be greater that current + incoming (max %1$s)": [ + "" + ], + "current stock will change from %1$s to %2$s": [ + "" + ], + "current stock will stay at %1$s": [ + "" + ], + "Incoming": [ + "" + ], + "Lost": [ + "" + ], + "Current": [ + "" + ], + "without stock": [ + "" + ], + "Next restock": [ + "" + ], + "Delivery address": [ + "" + ], + "this product has no taxes": [ + "" + ], + "Amount": [ + "" + ], + "currency and value separated with colon": [ + "" + ], + "Add": [ + "" + ], + "Instance": [ + "" + ], + "Settings": [ + "" + ], + "Orders": [ + "" + ], + "Products": [ + "" + ], + "Transfers": [ + "" + ], + "Connection": [ + "" + ], + "Instances": [ + "" + ], + "New": [ + "" + ], + "List": [ + "" + ], + "Log out": [ + "" + ], + "Clear": [ + "" + ], + "should be the same": [ + "" + ], + "cannot be the same as before": [ + "" + ], + "You are updating the authorization token from instance %1$s with id %2$s": [ + "" + ], + "Old token": [ + "" + ], + "New token": [ + "" + ], + "Clearing the auth token will mean public access to the instance": [ + "" + ], + "ID": [ + "" + ], + "Image": [ + "" + ], + "Unit": [ + "" + ], + "Price": [ + "" + ], + "Stock": [ + "" + ], + "Taxes": [ + "" + ], + "Server not found": [ + "" + ], + "Couldn't access the server": [ + "" + ], + "Got message %1$s from %2$s": [ + "" + ], + "Unexpected Error": [ + "" + ], + "Auth token": [ + "" + ], + "Account address": [ + "" + ], + "Default max deposit fee": [ + "" + ], + "Default max wire fee": [ + "" + ], + "Default wire fee amortization": [ + "" + ], + "Jurisdiction": [ + "" + ], + "Default pay delay": [ + "" + ], + "Default wire transfer delay": [ + "" + ], + "could not create instance": [ + "" + ], + "Delete": [ + "" + ], + "Edit": [ + "" + ], + "There is no instances yet, add more pressing the + sign": [ + "" + ], + "Inventory products": [ + "" + ], + "Total price": [ + "" + ], + "Total tax": [ + "" + ], + "Order price": [ + "" + ], + "Net": [ + "" + ], + "Summary": [ + "" + ], + "Payments options": [ + "" + ], + "Auto refund deadline": [ + "" + ], + "Refund deadline": [ + "" + ], + "Pay deadline": [ + "" + ], + "Delivery date": [ + "" + ], + "Location": [ + "" + ], + "Max fee": [ + "" + ], + "Max wire fee": [ + "" + ], + "Wire fee amortization": [ + "" + ], + "Fullfilment url": [ + "" + ], + "Extra information": [ + "" + ], + "select a product first": [ + "" + ], + "should be greater than 0": [ + "" + ], + "cannot be greater than current stock and quantity previously added. max: %1$s": [ + "" + ], + "cannot be greater than current stock %1$s": [ + "" + ], + "Quantity": [ + "" + ], + "Order": [ + "" + ], + "claimed": [ + "" + ], + "copy url": [ + "" + ], + "pay at": [ + "" + ], + "created at": [ + "" + ], + "Timeline": [ + "" + ], + "Payment details": [ + "" + ], + "Order status": [ + "" + ], + "Product list": [ + "" + ], + "paid": [ + "" + ], + "wired": [ + "" + ], + "refunded": [ + "" + ], + "refund": [ + "" + ], + "Refunded amount": [ + "" + ], + "Deposit total": [ + "" + ], + "unpaid": [ + "" + ], + "Order status URL": [ + "" + ], + "Pay URI": [ + "" + ], + "Unknown order status. This is an error, please contact the administrator.": [ + "" + ], + "refund created successfully": [ + "" + ], + "could not create the refund": [ + "" + ], + "load newer orders": [ + "" + ], + "Date": [ + "" + ], + "Refund": [ + "" + ], + "load older orders": [ + "" + ], + "No orders has been found": [ + "" + ], + "date": [ + "" + ], + "amount": [ + "" + ], + "reason": [ + "" + ], + "Max refundable:": [ + "" + ], + "Reason": [ + "" + ], + "duplicated": [ + "" + ], + "requested by the customer": [ + "" + ], + "other": [ + "" + ], + "go to order id": [ + "" + ], + "Paid": [ + "" + ], + "Refunded": [ + "" + ], + "Not wired": [ + "" + ], + "All": [ + "" + ], + "could not create product": [ + "" + ], + "Sell": [ + "" + ], + "Profit": [ + "" + ], + "Sold": [ + "" + ], + "product updated successfully": [ + "" + ], + "could not update the product": [ + "" + ], + "product delete successfully": [ + "" + ], + "could not delete the product": [ + "" + ], + "Tips": [ + "" + ], + "Committed amount": [ + "" + ], + "Exchange initial amount": [ + "" + ], + "Merchant initial amount": [ + "" + ], + "There is no tips yet, add more pressing the + sign": [ + "" + ], + "cannot be empty": [ + "" + ], + "check the id, doest look valid": [ + "" + ], + "should have 52 characters, current %1$s": [ + "" + ], + "URL doesn't have the right format": [ + "" + ], + "Transfer ID": [ + "" + ], + "Account Address": [ + "" + ], + "Exchange URL": [ + "" + ], + "could not inform transfer": [ + "" + ], + "load newer transfers": [ + "" + ], + "Credit": [ + "" + ], + "Confirmed": [ + "" + ], + "Verified": [ + "" + ], + "Executed at": [ + "" + ], + "yes": [ + "" + ], + "no": [ + "" + ], + "unknown": [ + "" + ], + "load older transfers": [ + "" + ], + "There is no transfer yet, add more pressing the + sign": [ + "" + ] + } + } +}; + diff --git a/packages/backend/src/i18n/sv.po b/packages/backend/src/i18n/sv.po new file mode 100644 index 0000000..6b35bd0 --- /dev/null +++ b/packages/backend/src/i18n/sv.po @@ -0,0 +1,1057 @@ +# This file is part of TALER +# (C) 2016 GNUnet e.V. +# +# 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. +# +# 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 +# TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/> +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Taler Wallet\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-23 00:00+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: src/ApplicationReadyRoutes.tsx:50 src/InstanceRoutes.tsx:118 +#: src/InstanceRoutes.tsx:299 +#, c-format +msgid "Access denied" +msgstr "" + +#: src/ApplicationReadyRoutes.tsx:51 src/InstanceRoutes.tsx:118 +#: src/InstanceRoutes.tsx:300 +#, c-format +msgid "Check your token is valid" +msgstr "" + +#: src/ApplicationReadyRoutes.tsx:72 +#, c-format +msgid "Couldn't access the server." +msgstr "" + +#: src/ApplicationReadyRoutes.tsx:73 +#, c-format +msgid "Could not infer instance id from url %1$s" +msgstr "" + +#: src/InstanceRoutes.tsx:109 +#, c-format +msgid "HTTP status #%1$s: Server reported a problem" +msgstr "" + +#: src/InstanceRoutes.tsx:110 +#, c-format +msgid "Got message: \"%1$s\" from: %2$s" +msgstr "" + +#: src/InstanceRoutes.tsx:127 +#, c-format +msgid "No default instance" +msgstr "" + +#: src/InstanceRoutes.tsx:128 +#, c-format +msgid "" +"in order to use merchant backoffice, you should create the default instance" +msgstr "" + +#: src/InstanceRoutes.tsx:288 +#, c-format +msgid "Server reported a problem: HTTP status #%1$s" +msgstr "" + +#: src/InstanceRoutes.tsx:289 +#, c-format +msgid "Got message: %1$s from: %2$s" +msgstr "" + +#: src/components/exception/login.tsx:46 +#, c-format +msgid "Login required" +msgstr "" + +#: src/components/exception/login.tsx:49 +#, c-format +msgid "" +"Please enter your auth token. Token should have \"secret-token:\" and start " +"with Bearer or ApiKey" +msgstr "" + +#: src/components/exception/login.tsx:86 src/components/modal/index.tsx:53 +#: src/components/modal/index.tsx:75 src/paths/admin/create/CreatePage.tsx:115 +#: src/paths/instance/orders/create/CreatePage.tsx:325 +#: src/paths/instance/products/create/CreatePage.tsx:51 +#: src/paths/instance/products/list/Table.tsx:174 +#: src/paths/instance/products/list/Table.tsx:228 +#: src/paths/instance/products/update/UpdatePage.tsx:55 +#: src/paths/instance/transfers/create/CreatePage.tsx:89 +#: src/paths/instance/update/UpdatePage.tsx:134 +#, c-format +msgid "Confirm" +msgstr "" + +#: src/components/form/InputArray.tsx:72 +#, c-format +msgid "The value %1$s is invalid for a payment url" +msgstr "" + +#: src/components/form/InputDate.tsx:67 +#: src/paths/instance/orders/list/index.tsx:123 +#, c-format +msgid "pick a date" +msgstr "" + +#: src/components/form/InputDate.tsx:81 +#, c-format +msgid "clear" +msgstr "" + +#: src/components/form/InputDate.tsx:83 +#: src/paths/instance/transfers/list/Table.tsx:140 +#, c-format +msgid "never" +msgstr "" + +#: src/components/form/InputImage.tsx:80 +#, c-format +msgid "Image should be smaller than 1 MB" +msgstr "" + +#: src/components/form/InputLocation.tsx:28 +#, c-format +msgid "Country" +msgstr "" + +#: src/components/form/InputLocation.tsx:30 +#: src/paths/admin/create/CreatePage.tsx:99 +#: src/paths/instance/transfers/list/Table.tsx:124 +#: src/paths/instance/update/UpdatePage.tsx:118 +#, c-format +msgid "Address" +msgstr "" + +#: src/components/form/InputLocation.tsx:34 +#, c-format +msgid "Building number" +msgstr "" + +#: src/components/form/InputLocation.tsx:35 +#, c-format +msgid "Building name" +msgstr "" + +#: src/components/form/InputLocation.tsx:36 +#, c-format +msgid "Street" +msgstr "" + +#: src/components/form/InputLocation.tsx:37 +#, c-format +msgid "Post code" +msgstr "" + +#: src/components/form/InputLocation.tsx:38 +#, c-format +msgid "Town location" +msgstr "" + +#: src/components/form/InputLocation.tsx:39 +#, c-format +msgid "Town" +msgstr "" + +#: src/components/form/InputLocation.tsx:40 +#, c-format +msgid "District" +msgstr "" + +#: src/components/form/InputLocation.tsx:41 +#, c-format +msgid "Country subdivision" +msgstr "" + +#: src/components/form/InputSearchProduct.tsx:59 +#, c-format +msgid "Product id" +msgstr "" + +#: src/components/form/InputSearchProduct.tsx:60 +#: src/components/product/ProductForm.tsx:99 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:122 +#: src/paths/instance/orders/list/Table.tsx:227 +#: src/paths/instance/products/list/Table.tsx:86 +#, c-format +msgid "Description" +msgstr "" + +#: src/components/form/InputSearchProduct.tsx:73 +#: src/components/form/InputTaxes.tsx:81 +#: src/paths/admin/create/CreatePage.tsx:87 src/paths/admin/list/Table.tsx:110 +#: src/paths/instance/details/DetailPage.tsx:76 +#: src/paths/instance/update/UpdatePage.tsx:106 +#, c-format +msgid "Name" +msgstr "" + +#: src/components/form/InputSearchProduct.tsx:102 +#, c-format +msgid "loading..." +msgstr "" + +#: src/components/form/InputSearchProduct.tsx:108 +#, c-format +msgid "no products found" +msgstr "" + +#: src/components/form/InputSearchProduct.tsx:116 +#, c-format +msgid "no results" +msgstr "" + +#: src/components/form/InputSecured.tsx:33 +#, c-format +msgid "Deleting" +msgstr "" + +#: src/components/form/InputSecured.tsx:34 +#, c-format +msgid "Changing" +msgstr "" + +#: src/components/form/InputSecured.tsx:60 +#, c-format +msgid "Manage token" +msgstr "" + +#: src/components/form/InputSecured.tsx:83 +#, c-format +msgid "Update" +msgstr "" + +#: src/components/form/InputSecured.tsx:100 +#: src/paths/instance/orders/create/CreatePage.tsx:252 +#: src/paths/instance/orders/create/CreatePage.tsx:273 +#, c-format +msgid "Remove" +msgstr "" + +#: src/components/form/InputSecured.tsx:106 src/components/modal/index.tsx:52 +#: src/components/modal/index.tsx:73 src/paths/admin/create/CreatePage.tsx:114 +#: src/paths/instance/orders/create/CreatePage.tsx:324 +#: src/paths/instance/products/create/CreatePage.tsx:50 +#: src/paths/instance/products/list/Table.tsx:166 +#: src/paths/instance/products/list/Table.tsx:218 +#: src/paths/instance/products/update/UpdatePage.tsx:54 +#: src/paths/instance/transfers/create/CreatePage.tsx:88 +#: src/paths/instance/update/UpdatePage.tsx:133 +#, c-format +msgid "Cancel" +msgstr "" + +#: src/components/form/InputStock.tsx:91 +#, c-format +msgid "Manage stock" +msgstr "" + +#: src/components/form/InputStock.tsx:93 +#, c-format +msgid "Infinite" +msgstr "" + +#: src/components/form/InputStock.tsx:105 +#, c-format +msgid "lost cannot be greater that current + incoming (max %1$s)" +msgstr "" + +#: src/components/form/InputStock.tsx:111 +#, c-format +msgid "current stock will change from %1$s to %2$s" +msgstr "" + +#: src/components/form/InputStock.tsx:112 +#, c-format +msgid "current stock will stay at %1$s" +msgstr "" + +#: src/components/form/InputStock.tsx:129 +#: src/paths/instance/products/list/Table.tsx:204 +#, c-format +msgid "Incoming" +msgstr "" + +#: src/components/form/InputStock.tsx:130 +#: src/paths/instance/products/list/Table.tsx:205 +#, c-format +msgid "Lost" +msgstr "" + +#: src/components/form/InputStock.tsx:142 +#, c-format +msgid "Current" +msgstr "" + +#: src/components/form/InputStock.tsx:145 +#, c-format +msgid "without stock" +msgstr "" + +#: src/components/form/InputStock.tsx:150 +#, c-format +msgid "Next restock" +msgstr "" + +#: src/components/form/InputStock.tsx:152 +#, c-format +msgid "Delivery address" +msgstr "" + +#: src/components/form/InputTaxes.tsx:73 +#, c-format +msgid "this product has no taxes" +msgstr "" + +#: src/components/form/InputTaxes.tsx:77 +#: src/paths/instance/orders/details/DetailPage.tsx:145 +#: src/paths/instance/orders/details/DetailPage.tsx:296 +#: src/paths/instance/orders/list/Table.tsx:116 +#: src/paths/instance/transfers/create/CreatePage.tsx:84 +#, c-format +msgid "Amount" +msgstr "" + +#: src/components/form/InputTaxes.tsx:78 +#, c-format +msgid "currency and value separated with colon" +msgstr "" + +#: src/components/form/InputTaxes.tsx:84 +#: src/paths/instance/orders/create/InventoryProductForm.tsx:78 +#, c-format +msgid "Add" +msgstr "" + +#: src/components/menu/SideBar.tsx:53 +#, c-format +msgid "Instance" +msgstr "" + +#: src/components/menu/SideBar.tsx:59 +#, c-format +msgid "Settings" +msgstr "" + +#: src/components/menu/SideBar.tsx:65 +#: src/paths/instance/orders/list/Table.tsx:60 +#, c-format +msgid "Orders" +msgstr "" + +#: src/components/menu/SideBar.tsx:71 +#: src/paths/instance/orders/create/CreatePage.tsx:258 +#: src/paths/instance/products/list/Table.tsx:48 +#, c-format +msgid "Products" +msgstr "" + +#: src/components/menu/SideBar.tsx:77 +#: src/paths/instance/transfers/list/Table.tsx:65 +#, c-format +msgid "Transfers" +msgstr "" + +#: src/components/menu/SideBar.tsx:87 +#, c-format +msgid "Connection" +msgstr "" + +#: src/components/menu/SideBar.tsx:112 src/paths/admin/list/Table.tsx:57 +#, c-format +msgid "Instances" +msgstr "" + +#: src/components/menu/SideBar.tsx:116 +#, c-format +msgid "New" +msgstr "" + +#: src/components/menu/SideBar.tsx:122 +#, c-format +msgid "List" +msgstr "" + +#: src/components/menu/SideBar.tsx:129 +#, c-format +msgid "Log out" +msgstr "" + +#: src/components/modal/index.tsx:74 +#, c-format +msgid "Clear" +msgstr "" + +#: src/components/modal/index.tsx:110 src/components/modal/index.tsx:111 +#, c-format +msgid "should be the same" +msgstr "" + +#: src/components/modal/index.tsx:111 +#, c-format +msgid "cannot be the same as before" +msgstr "" + +#: src/components/modal/index.tsx:114 +#, c-format +msgid "" +"You are updating the authorization token from instance %1$s with id %2$s" +msgstr "" + +#: src/components/modal/index.tsx:124 +#, c-format +msgid "Old token" +msgstr "" + +#: src/components/modal/index.tsx:125 +#, c-format +msgid "New token" +msgstr "" + +#: src/components/modal/index.tsx:127 +#, c-format +msgid "Clearing the auth token will mean public access to the instance" +msgstr "" + +#: src/components/product/ProductForm.tsx:96 +#: src/paths/admin/create/CreatePage.tsx:85 src/paths/admin/list/Table.tsx:109 +#: src/paths/instance/transfers/list/Table.tsx:122 +#, c-format +msgid "ID" +msgstr "" + +#: src/components/product/ProductForm.tsx:98 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:121 +#: src/paths/instance/products/list/Table.tsx:85 +#, c-format +msgid "Image" +msgstr "" + +#: src/components/product/ProductForm.tsx:100 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:123 +#, c-format +msgid "Unit" +msgstr "" + +#: src/components/product/ProductForm.tsx:101 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:124 +#: src/paths/instance/products/list/Table.tsx:162 +#: src/paths/instance/products/list/Table.tsx:214 +#, c-format +msgid "Price" +msgstr "" + +#: src/components/product/ProductForm.tsx:103 +#: src/paths/instance/products/list/Table.tsx:90 +#, c-format +msgid "Stock" +msgstr "" + +#: src/components/product/ProductForm.tsx:105 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:128 +#: src/paths/instance/products/list/Table.tsx:88 +#, c-format +msgid "Taxes" +msgstr "" + +#: src/index.tsx:75 +#, c-format +msgid "Server not found" +msgstr "" + +#: src/index.tsx:85 +#, c-format +msgid "Couldn't access the server" +msgstr "" + +#: src/index.tsx:87 src/index.tsx:99 +#, c-format +msgid "Got message %1$s from %2$s" +msgstr "" + +#: src/index.tsx:97 +#, c-format +msgid "Unexpected Error" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:89 +#: src/paths/instance/update/UpdatePage.tsx:108 +#, c-format +msgid "Auth token" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:91 +#: src/paths/instance/details/DetailPage.tsx:77 +#: src/paths/instance/update/UpdatePage.tsx:110 +#, c-format +msgid "Account address" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:93 +#: src/paths/instance/update/UpdatePage.tsx:112 +#, c-format +msgid "Default max deposit fee" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:95 +#: src/paths/instance/update/UpdatePage.tsx:114 +#, c-format +msgid "Default max wire fee" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:97 +#: src/paths/instance/update/UpdatePage.tsx:116 +#, c-format +msgid "Default wire fee amortization" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:103 +#: src/paths/instance/update/UpdatePage.tsx:122 +#, c-format +msgid "Jurisdiction" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:107 +#: src/paths/instance/update/UpdatePage.tsx:126 +#, c-format +msgid "Default pay delay" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:109 +#: src/paths/instance/update/UpdatePage.tsx:128 +#, c-format +msgid "Default wire transfer delay" +msgstr "" + +#: src/paths/admin/create/index.tsx:58 +#, c-format +msgid "could not create instance" +msgstr "" + +#: src/paths/admin/list/Table.tsx:63 src/paths/admin/list/Table.tsx:131 +#: src/paths/instance/transfers/list/Table.tsx:71 +#, c-format +msgid "Delete" +msgstr "" + +#: src/paths/admin/list/Table.tsx:128 +#, c-format +msgid "Edit" +msgstr "" + +#: src/paths/admin/list/Table.tsx:149 +#: src/paths/instance/products/list/Table.tsx:245 +#, c-format +msgid "There is no instances yet, add more pressing the + sign" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:237 +#, c-format +msgid "Inventory products" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:286 +#, c-format +msgid "Total price" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:287 +#, c-format +msgid "Total tax" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:289 +#: src/paths/instance/orders/create/CreatePage.tsx:297 +#, c-format +msgid "Order price" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:295 +#, c-format +msgid "Net" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:300 +#: src/paths/instance/orders/details/DetailPage.tsx:144 +#: src/paths/instance/orders/details/DetailPage.tsx:295 +#: src/paths/instance/orders/list/Table.tsx:117 +#, c-format +msgid "Summary" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:302 +#, c-format +msgid "Payments options" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:303 +#, c-format +msgid "Auto refund deadline" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:304 +#, c-format +msgid "Refund deadline" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:305 +#, c-format +msgid "Pay deadline" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:307 +#, c-format +msgid "Delivery date" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:308 +#, c-format +msgid "Location" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:312 +#, c-format +msgid "Max fee" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:313 +#, c-format +msgid "Max wire fee" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:314 +#, c-format +msgid "Wire fee amortization" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:315 +#, c-format +msgid "Fullfilment url" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:318 +#, c-format +msgid "Extra information" +msgstr "" + +#: src/paths/instance/orders/create/InventoryProductForm.tsx:44 +#, c-format +msgid "select a product first" +msgstr "" + +#: src/paths/instance/orders/create/InventoryProductForm.tsx:51 +#, c-format +msgid "should be greater than 0" +msgstr "" + +#: src/paths/instance/orders/create/InventoryProductForm.tsx:58 +#, c-format +msgid "" +"cannot be greater than current stock and quantity previously added. max: %1$s" +msgstr "" + +#: src/paths/instance/orders/create/InventoryProductForm.tsx:64 +#, c-format +msgid "cannot be greater than current stock %1$s" +msgstr "" + +#: src/paths/instance/orders/create/InventoryProductForm.tsx:76 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:126 +#, c-format +msgid "Quantity" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:92 +#: src/paths/instance/orders/details/DetailPage.tsx:235 +#: src/paths/instance/orders/details/DetailPage.tsx:333 +#, c-format +msgid "Order" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:93 +#, c-format +msgid "claimed" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:110 +#: src/paths/instance/orders/details/DetailPage.tsx:261 +#: src/paths/instance/orders/list/Table.tsx:136 +#, c-format +msgid "copy url" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:126 +#: src/paths/instance/orders/details/DetailPage.tsx:349 +#, c-format +msgid "pay at" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:127 +#: src/paths/instance/orders/details/DetailPage.tsx:350 +#, c-format +msgid "created at" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:138 +#: src/paths/instance/orders/details/DetailPage.tsx:289 +#, c-format +msgid "Timeline" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:142 +#: src/paths/instance/orders/details/DetailPage.tsx:293 +#, c-format +msgid "Payment details" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:146 +#: src/paths/instance/orders/details/DetailPage.tsx:299 +#: src/paths/instance/orders/details/DetailPage.tsx:363 +#, c-format +msgid "Order status" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:156 +#: src/paths/instance/orders/details/DetailPage.tsx:308 +#, c-format +msgid "Product list" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:236 +#, c-format +msgid "paid" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:238 +#, c-format +msgid "wired" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:241 +#, c-format +msgid "refunded" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:258 +#, c-format +msgid "refund" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:297 +#, c-format +msgid "Refunded amount" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:298 +#, c-format +msgid "Deposit total" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:336 +#, c-format +msgid "unpaid" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:364 +#, c-format +msgid "Order status URL" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:365 +#, c-format +msgid "Pay URI" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:383 +#, c-format +msgid "" +"Unknown order status. This is an error, please contact the administrator." +msgstr "" + +#: src/paths/instance/orders/details/index.tsx:56 +#: src/paths/instance/orders/list/index.tsx:147 +#, c-format +msgid "refund created successfully" +msgstr "" + +#: src/paths/instance/orders/details/index.tsx:59 +#: src/paths/instance/orders/list/index.tsx:150 +#, c-format +msgid "could not create the refund" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:111 +#, c-format +msgid "load newer orders" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:115 +#, c-format +msgid "Date" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:131 +#: src/paths/instance/orders/list/Table.tsx:223 +#, c-format +msgid "Refund" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:145 +#, c-format +msgid "load older orders" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:154 +#, c-format +msgid "No orders has been found" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:202 +#, c-format +msgid "date" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:203 +#, c-format +msgid "amount" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:204 +#, c-format +msgid "reason" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:224 +#, c-format +msgid "Max refundable:" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:226 +#, c-format +msgid "Reason" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:226 +#, c-format +msgid "duplicated" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:226 +#, c-format +msgid "requested by the customer" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:226 +#, c-format +msgid "other" +msgstr "" + +#: src/paths/instance/orders/list/index.tsx:91 +#, c-format +msgid "go to order id" +msgstr "" + +#: src/paths/instance/orders/list/index.tsx:107 +#, c-format +msgid "Paid" +msgstr "" + +#: src/paths/instance/orders/list/index.tsx:108 +#, c-format +msgid "Refunded" +msgstr "" + +#: src/paths/instance/orders/list/index.tsx:109 +#, c-format +msgid "Not wired" +msgstr "" + +#: src/paths/instance/orders/list/index.tsx:110 +#, c-format +msgid "All" +msgstr "" + +#: src/paths/instance/products/create/index.tsx:48 +#: src/paths/instance/products/update/index.tsx:64 +#, c-format +msgid "could not create product" +msgstr "" + +#: src/paths/instance/products/list/Table.tsx:87 +#, c-format +msgid "Sell" +msgstr "" + +#: src/paths/instance/products/list/Table.tsx:89 +#, c-format +msgid "Profit" +msgstr "" + +#: src/paths/instance/products/list/Table.tsx:91 +#, c-format +msgid "Sold" +msgstr "" + +#: src/paths/instance/products/list/index.tsx:59 +#, c-format +msgid "product updated successfully" +msgstr "" + +#: src/paths/instance/products/list/index.tsx:62 +#, c-format +msgid "could not update the product" +msgstr "" + +#: src/paths/instance/products/list/index.tsx:70 +#, c-format +msgid "product delete successfully" +msgstr "" + +#: src/paths/instance/products/list/index.tsx:73 +#, c-format +msgid "could not delete the product" +msgstr "" + +#: src/paths/instance/tips/list/Table.tsx:59 +#, c-format +msgid "Tips" +msgstr "" + +#: src/paths/instance/tips/list/Table.tsx:111 +#, c-format +msgid "Committed amount" +msgstr "" + +#: src/paths/instance/tips/list/Table.tsx:112 +#, c-format +msgid "Exchange initial amount" +msgstr "" + +#: src/paths/instance/tips/list/Table.tsx:113 +#, c-format +msgid "Merchant initial amount" +msgstr "" + +#: src/paths/instance/tips/list/Table.tsx:148 +#, c-format +msgid "There is no tips yet, add more pressing the + sign" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:50 +#: src/paths/instance/transfers/create/CreatePage.tsx:54 +#: src/paths/instance/transfers/create/CreatePage.tsx:55 +#: src/paths/instance/transfers/create/CreatePage.tsx:56 +#, c-format +msgid "cannot be empty" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:51 +#, c-format +msgid "check the id, doest look valid" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:52 +#, c-format +msgid "should have 52 characters, current %1$s" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:57 +#, c-format +msgid "URL doesn't have the right format" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:74 +#, c-format +msgid "Transfer ID" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:76 +#, c-format +msgid "Account Address" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:82 +#: src/paths/instance/transfers/list/Table.tsx:125 +#, c-format +msgid "Exchange URL" +msgstr "" + +#: src/paths/instance/transfers/create/index.tsx:49 +#, c-format +msgid "could not inform transfer" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:118 +#, c-format +msgid "load newer transfers" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:123 +#, c-format +msgid "Credit" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:126 +#, c-format +msgid "Confirmed" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:127 +#: src/paths/instance/transfers/list/index.tsx:60 +#, c-format +msgid "Verified" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:128 +#, c-format +msgid "Executed at" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:138 +#: src/paths/instance/transfers/list/Table.tsx:139 +#, c-format +msgid "yes" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:138 +#: src/paths/instance/transfers/list/Table.tsx:139 +#, c-format +msgid "no" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:140 +#, c-format +msgid "unknown" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:145 +#, c-format +msgid "load older transfers" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:154 +#, c-format +msgid "There is no transfer yet, add more pressing the + sign" +msgstr "" diff --git a/packages/backend/src/i18n/taler-merchant-backoffice.pot b/packages/backend/src/i18n/taler-merchant-backoffice.pot new file mode 100644 index 0000000..21fd863 --- /dev/null +++ b/packages/backend/src/i18n/taler-merchant-backoffice.pot @@ -0,0 +1,1054 @@ +# 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/> +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Taler Wallet\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-23 00:00+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: src/ApplicationReadyRoutes.tsx:50 src/InstanceRoutes.tsx:118 +#: src/InstanceRoutes.tsx:299 +#, c-format +msgid "Access denied" +msgstr "" + +#: src/ApplicationReadyRoutes.tsx:51 src/InstanceRoutes.tsx:118 +#: src/InstanceRoutes.tsx:300 +#, c-format +msgid "Check your token is valid" +msgstr "" + +#: src/ApplicationReadyRoutes.tsx:72 +#, c-format +msgid "Couldn't access the server." +msgstr "" + +#: src/ApplicationReadyRoutes.tsx:73 +#, c-format +msgid "Could not infer instance id from url %1$s" +msgstr "" + +#: src/InstanceRoutes.tsx:109 +#, c-format +msgid "HTTP status #%1$s: Server reported a problem" +msgstr "" + +#: src/InstanceRoutes.tsx:110 +#, c-format +msgid "Got message: \"%1$s\" from: %2$s" +msgstr "" + +#: src/InstanceRoutes.tsx:127 +#, c-format +msgid "No default instance" +msgstr "" + +#: src/InstanceRoutes.tsx:128 +#, c-format +msgid "" +"in order to use merchant backoffice, you should create the default instance" +msgstr "" + +#: src/InstanceRoutes.tsx:288 +#, c-format +msgid "Server reported a problem: HTTP status #%1$s" +msgstr "" + +#: src/InstanceRoutes.tsx:289 +#, c-format +msgid "Got message: %1$s from: %2$s" +msgstr "" + +#: src/components/exception/login.tsx:46 +#, c-format +msgid "Login required" +msgstr "" + +#: src/components/exception/login.tsx:49 +#, c-format +msgid "" +"Please enter your auth token. Token should have \"secret-token:\" and start " +"with Bearer or ApiKey" +msgstr "" + +#: src/components/exception/login.tsx:86 src/components/modal/index.tsx:53 +#: src/components/modal/index.tsx:75 src/paths/admin/create/CreatePage.tsx:115 +#: src/paths/instance/orders/create/CreatePage.tsx:325 +#: src/paths/instance/products/create/CreatePage.tsx:51 +#: src/paths/instance/products/list/Table.tsx:174 +#: src/paths/instance/products/list/Table.tsx:228 +#: src/paths/instance/products/update/UpdatePage.tsx:55 +#: src/paths/instance/transfers/create/CreatePage.tsx:89 +#: src/paths/instance/update/UpdatePage.tsx:134 +#, c-format +msgid "Confirm" +msgstr "" + +#: src/components/form/InputArray.tsx:72 +#, c-format +msgid "The value %1$s is invalid for a payment url" +msgstr "" + +#: src/components/form/InputDate.tsx:67 +#: src/paths/instance/orders/list/index.tsx:123 +#, c-format +msgid "pick a date" +msgstr "" + +#: src/components/form/InputDate.tsx:81 +#, c-format +msgid "clear" +msgstr "" + +#: src/components/form/InputDate.tsx:83 +#: src/paths/instance/transfers/list/Table.tsx:140 +#, c-format +msgid "never" +msgstr "" + +#: src/components/form/InputImage.tsx:80 +#, c-format +msgid "Image should be smaller than 1 MB" +msgstr "" + +#: src/components/form/InputLocation.tsx:28 +#, c-format +msgid "Country" +msgstr "" + +#: src/components/form/InputLocation.tsx:30 +#: src/paths/admin/create/CreatePage.tsx:99 +#: src/paths/instance/transfers/list/Table.tsx:124 +#: src/paths/instance/update/UpdatePage.tsx:118 +#, c-format +msgid "Address" +msgstr "" + +#: src/components/form/InputLocation.tsx:34 +#, c-format +msgid "Building number" +msgstr "" + +#: src/components/form/InputLocation.tsx:35 +#, c-format +msgid "Building name" +msgstr "" + +#: src/components/form/InputLocation.tsx:36 +#, c-format +msgid "Street" +msgstr "" + +#: src/components/form/InputLocation.tsx:37 +#, c-format +msgid "Post code" +msgstr "" + +#: src/components/form/InputLocation.tsx:38 +#, c-format +msgid "Town location" +msgstr "" + +#: src/components/form/InputLocation.tsx:39 +#, c-format +msgid "Town" +msgstr "" + +#: src/components/form/InputLocation.tsx:40 +#, c-format +msgid "District" +msgstr "" + +#: src/components/form/InputLocation.tsx:41 +#, c-format +msgid "Country subdivision" +msgstr "" + +#: src/components/form/InputSearchProduct.tsx:59 +#, c-format +msgid "Product id" +msgstr "" + +#: src/components/form/InputSearchProduct.tsx:60 +#: src/components/product/ProductForm.tsx:99 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:122 +#: src/paths/instance/orders/list/Table.tsx:227 +#: src/paths/instance/products/list/Table.tsx:86 +#, c-format +msgid "Description" +msgstr "" + +#: src/components/form/InputSearchProduct.tsx:73 +#: src/components/form/InputTaxes.tsx:81 +#: src/paths/admin/create/CreatePage.tsx:87 src/paths/admin/list/Table.tsx:110 +#: src/paths/instance/details/DetailPage.tsx:76 +#: src/paths/instance/update/UpdatePage.tsx:106 +#, c-format +msgid "Name" +msgstr "" + +#: src/components/form/InputSearchProduct.tsx:102 +#, c-format +msgid "loading..." +msgstr "" + +#: src/components/form/InputSearchProduct.tsx:108 +#, c-format +msgid "no products found" +msgstr "" + +#: src/components/form/InputSearchProduct.tsx:116 +#, c-format +msgid "no results" +msgstr "" + +#: src/components/form/InputSecured.tsx:33 +#, c-format +msgid "Deleting" +msgstr "" + +#: src/components/form/InputSecured.tsx:34 +#, c-format +msgid "Changing" +msgstr "" + +#: src/components/form/InputSecured.tsx:60 +#, c-format +msgid "Manage token" +msgstr "" + +#: src/components/form/InputSecured.tsx:83 +#, c-format +msgid "Update" +msgstr "" + +#: src/components/form/InputSecured.tsx:100 +#: src/paths/instance/orders/create/CreatePage.tsx:252 +#: src/paths/instance/orders/create/CreatePage.tsx:273 +#, c-format +msgid "Remove" +msgstr "" + +#: src/components/form/InputSecured.tsx:106 src/components/modal/index.tsx:52 +#: src/components/modal/index.tsx:73 src/paths/admin/create/CreatePage.tsx:114 +#: src/paths/instance/orders/create/CreatePage.tsx:324 +#: src/paths/instance/products/create/CreatePage.tsx:50 +#: src/paths/instance/products/list/Table.tsx:166 +#: src/paths/instance/products/list/Table.tsx:218 +#: src/paths/instance/products/update/UpdatePage.tsx:54 +#: src/paths/instance/transfers/create/CreatePage.tsx:88 +#: src/paths/instance/update/UpdatePage.tsx:133 +#, c-format +msgid "Cancel" +msgstr "" + +#: src/components/form/InputStock.tsx:91 +#, c-format +msgid "Manage stock" +msgstr "" + +#: src/components/form/InputStock.tsx:93 +#, c-format +msgid "Infinite" +msgstr "" + +#: src/components/form/InputStock.tsx:105 +#, c-format +msgid "lost cannot be greater that current + incoming (max %1$s)" +msgstr "" + +#: src/components/form/InputStock.tsx:111 +#, c-format +msgid "current stock will change from %1$s to %2$s" +msgstr "" + +#: src/components/form/InputStock.tsx:112 +#, c-format +msgid "current stock will stay at %1$s" +msgstr "" + +#: src/components/form/InputStock.tsx:129 +#: src/paths/instance/products/list/Table.tsx:204 +#, c-format +msgid "Incoming" +msgstr "" + +#: src/components/form/InputStock.tsx:130 +#: src/paths/instance/products/list/Table.tsx:205 +#, c-format +msgid "Lost" +msgstr "" + +#: src/components/form/InputStock.tsx:142 +#, c-format +msgid "Current" +msgstr "" + +#: src/components/form/InputStock.tsx:145 +#, c-format +msgid "without stock" +msgstr "" + +#: src/components/form/InputStock.tsx:150 +#, c-format +msgid "Next restock" +msgstr "" + +#: src/components/form/InputStock.tsx:152 +#, c-format +msgid "Delivery address" +msgstr "" + +#: src/components/form/InputTaxes.tsx:73 +#, c-format +msgid "this product has no taxes" +msgstr "" + +#: src/components/form/InputTaxes.tsx:77 +#: src/paths/instance/orders/details/DetailPage.tsx:145 +#: src/paths/instance/orders/details/DetailPage.tsx:296 +#: src/paths/instance/orders/list/Table.tsx:116 +#: src/paths/instance/transfers/create/CreatePage.tsx:84 +#, c-format +msgid "Amount" +msgstr "" + +#: src/components/form/InputTaxes.tsx:78 +#, c-format +msgid "currency and value separated with colon" +msgstr "" + +#: src/components/form/InputTaxes.tsx:84 +#: src/paths/instance/orders/create/InventoryProductForm.tsx:78 +#, c-format +msgid "Add" +msgstr "" + +#: src/components/menu/SideBar.tsx:53 +#, c-format +msgid "Instance" +msgstr "" + +#: src/components/menu/SideBar.tsx:59 +#, c-format +msgid "Settings" +msgstr "" + +#: src/components/menu/SideBar.tsx:65 +#: src/paths/instance/orders/list/Table.tsx:60 +#, c-format +msgid "Orders" +msgstr "" + +#: src/components/menu/SideBar.tsx:71 +#: src/paths/instance/orders/create/CreatePage.tsx:258 +#: src/paths/instance/products/list/Table.tsx:48 +#, c-format +msgid "Products" +msgstr "" + +#: src/components/menu/SideBar.tsx:77 +#: src/paths/instance/transfers/list/Table.tsx:65 +#, c-format +msgid "Transfers" +msgstr "" + +#: src/components/menu/SideBar.tsx:87 +#, c-format +msgid "Connection" +msgstr "" + +#: src/components/menu/SideBar.tsx:112 src/paths/admin/list/Table.tsx:57 +#, c-format +msgid "Instances" +msgstr "" + +#: src/components/menu/SideBar.tsx:116 +#, c-format +msgid "New" +msgstr "" + +#: src/components/menu/SideBar.tsx:122 +#, c-format +msgid "List" +msgstr "" + +#: src/components/menu/SideBar.tsx:129 +#, c-format +msgid "Log out" +msgstr "" + +#: src/components/modal/index.tsx:74 +#, c-format +msgid "Clear" +msgstr "" + +#: src/components/modal/index.tsx:110 src/components/modal/index.tsx:111 +#, c-format +msgid "should be the same" +msgstr "" + +#: src/components/modal/index.tsx:111 +#, c-format +msgid "cannot be the same as before" +msgstr "" + +#: src/components/modal/index.tsx:114 +#, c-format +msgid "" +"You are updating the authorization token from instance %1$s with id %2$s" +msgstr "" + +#: src/components/modal/index.tsx:124 +#, c-format +msgid "Old token" +msgstr "" + +#: src/components/modal/index.tsx:125 +#, c-format +msgid "New token" +msgstr "" + +#: src/components/modal/index.tsx:127 +#, c-format +msgid "Clearing the auth token will mean public access to the instance" +msgstr "" + +#: src/components/product/ProductForm.tsx:96 +#: src/paths/admin/create/CreatePage.tsx:85 src/paths/admin/list/Table.tsx:109 +#: src/paths/instance/transfers/list/Table.tsx:122 +#, c-format +msgid "ID" +msgstr "" + +#: src/components/product/ProductForm.tsx:98 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:121 +#: src/paths/instance/products/list/Table.tsx:85 +#, c-format +msgid "Image" +msgstr "" + +#: src/components/product/ProductForm.tsx:100 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:123 +#, c-format +msgid "Unit" +msgstr "" + +#: src/components/product/ProductForm.tsx:101 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:124 +#: src/paths/instance/products/list/Table.tsx:162 +#: src/paths/instance/products/list/Table.tsx:214 +#, c-format +msgid "Price" +msgstr "" + +#: src/components/product/ProductForm.tsx:103 +#: src/paths/instance/products/list/Table.tsx:90 +#, c-format +msgid "Stock" +msgstr "" + +#: src/components/product/ProductForm.tsx:105 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:128 +#: src/paths/instance/products/list/Table.tsx:88 +#, c-format +msgid "Taxes" +msgstr "" + +#: src/index.tsx:75 +#, c-format +msgid "Server not found" +msgstr "" + +#: src/index.tsx:85 +#, c-format +msgid "Couldn't access the server" +msgstr "" + +#: src/index.tsx:87 src/index.tsx:99 +#, c-format +msgid "Got message %1$s from %2$s" +msgstr "" + +#: src/index.tsx:97 +#, c-format +msgid "Unexpected Error" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:89 +#: src/paths/instance/update/UpdatePage.tsx:108 +#, c-format +msgid "Auth token" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:91 +#: src/paths/instance/details/DetailPage.tsx:77 +#: src/paths/instance/update/UpdatePage.tsx:110 +#, c-format +msgid "Account address" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:93 +#: src/paths/instance/update/UpdatePage.tsx:112 +#, c-format +msgid "Default max deposit fee" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:95 +#: src/paths/instance/update/UpdatePage.tsx:114 +#, c-format +msgid "Default max wire fee" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:97 +#: src/paths/instance/update/UpdatePage.tsx:116 +#, c-format +msgid "Default wire fee amortization" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:103 +#: src/paths/instance/update/UpdatePage.tsx:122 +#, c-format +msgid "Jurisdiction" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:107 +#: src/paths/instance/update/UpdatePage.tsx:126 +#, c-format +msgid "Default pay delay" +msgstr "" + +#: src/paths/admin/create/CreatePage.tsx:109 +#: src/paths/instance/update/UpdatePage.tsx:128 +#, c-format +msgid "Default wire transfer delay" +msgstr "" + +#: src/paths/admin/create/index.tsx:58 +#, c-format +msgid "could not create instance" +msgstr "" + +#: src/paths/admin/list/Table.tsx:63 src/paths/admin/list/Table.tsx:131 +#: src/paths/instance/transfers/list/Table.tsx:71 +#, c-format +msgid "Delete" +msgstr "" + +#: src/paths/admin/list/Table.tsx:128 +#, c-format +msgid "Edit" +msgstr "" + +#: src/paths/admin/list/Table.tsx:149 +#: src/paths/instance/products/list/Table.tsx:245 +#, c-format +msgid "There is no instances yet, add more pressing the + sign" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:237 +#, c-format +msgid "Inventory products" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:286 +#, c-format +msgid "Total price" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:287 +#, c-format +msgid "Total tax" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:289 +#: src/paths/instance/orders/create/CreatePage.tsx:297 +#, c-format +msgid "Order price" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:295 +#, c-format +msgid "Net" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:300 +#: src/paths/instance/orders/details/DetailPage.tsx:144 +#: src/paths/instance/orders/details/DetailPage.tsx:295 +#: src/paths/instance/orders/list/Table.tsx:117 +#, c-format +msgid "Summary" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:302 +#, c-format +msgid "Payments options" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:303 +#, c-format +msgid "Auto refund deadline" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:304 +#, c-format +msgid "Refund deadline" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:305 +#, c-format +msgid "Pay deadline" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:307 +#, c-format +msgid "Delivery date" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:308 +#, c-format +msgid "Location" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:312 +#, c-format +msgid "Max fee" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:313 +#, c-format +msgid "Max wire fee" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:314 +#, c-format +msgid "Wire fee amortization" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:315 +#, c-format +msgid "Fullfilment url" +msgstr "" + +#: src/paths/instance/orders/create/CreatePage.tsx:318 +#, c-format +msgid "Extra information" +msgstr "" + +#: src/paths/instance/orders/create/InventoryProductForm.tsx:44 +#, c-format +msgid "select a product first" +msgstr "" + +#: src/paths/instance/orders/create/InventoryProductForm.tsx:51 +#, c-format +msgid "should be greater than 0" +msgstr "" + +#: src/paths/instance/orders/create/InventoryProductForm.tsx:58 +#, c-format +msgid "" +"cannot be greater than current stock and quantity previously added. max: %1$s" +msgstr "" + +#: src/paths/instance/orders/create/InventoryProductForm.tsx:64 +#, c-format +msgid "cannot be greater than current stock %1$s" +msgstr "" + +#: src/paths/instance/orders/create/InventoryProductForm.tsx:76 +#: src/paths/instance/orders/create/NonInventoryProductForm.tsx:126 +#, c-format +msgid "Quantity" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:92 +#: src/paths/instance/orders/details/DetailPage.tsx:235 +#: src/paths/instance/orders/details/DetailPage.tsx:333 +#, c-format +msgid "Order" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:93 +#, c-format +msgid "claimed" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:110 +#: src/paths/instance/orders/details/DetailPage.tsx:261 +#: src/paths/instance/orders/list/Table.tsx:136 +#, c-format +msgid "copy url" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:126 +#: src/paths/instance/orders/details/DetailPage.tsx:349 +#, c-format +msgid "pay at" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:127 +#: src/paths/instance/orders/details/DetailPage.tsx:350 +#, c-format +msgid "created at" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:138 +#: src/paths/instance/orders/details/DetailPage.tsx:289 +#, c-format +msgid "Timeline" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:142 +#: src/paths/instance/orders/details/DetailPage.tsx:293 +#, c-format +msgid "Payment details" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:146 +#: src/paths/instance/orders/details/DetailPage.tsx:299 +#: src/paths/instance/orders/details/DetailPage.tsx:363 +#, c-format +msgid "Order status" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:156 +#: src/paths/instance/orders/details/DetailPage.tsx:308 +#, c-format +msgid "Product list" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:236 +#, c-format +msgid "paid" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:238 +#, c-format +msgid "wired" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:241 +#, c-format +msgid "refunded" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:258 +#, c-format +msgid "refund" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:297 +#, c-format +msgid "Refunded amount" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:298 +#, c-format +msgid "Deposit total" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:336 +#, c-format +msgid "unpaid" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:364 +#, c-format +msgid "Order status URL" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:365 +#, c-format +msgid "Pay URI" +msgstr "" + +#: src/paths/instance/orders/details/DetailPage.tsx:383 +#, c-format +msgid "" +"Unknown order status. This is an error, please contact the administrator." +msgstr "" + +#: src/paths/instance/orders/details/index.tsx:56 +#: src/paths/instance/orders/list/index.tsx:147 +#, c-format +msgid "refund created successfully" +msgstr "" + +#: src/paths/instance/orders/details/index.tsx:59 +#: src/paths/instance/orders/list/index.tsx:150 +#, c-format +msgid "could not create the refund" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:111 +#, c-format +msgid "load newer orders" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:115 +#, c-format +msgid "Date" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:131 +#: src/paths/instance/orders/list/Table.tsx:223 +#, c-format +msgid "Refund" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:145 +#, c-format +msgid "load older orders" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:154 +#, c-format +msgid "No orders has been found" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:202 +#, c-format +msgid "date" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:203 +#, c-format +msgid "amount" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:204 +#, c-format +msgid "reason" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:224 +#, c-format +msgid "Max refundable:" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:226 +#, c-format +msgid "Reason" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:226 +#, c-format +msgid "duplicated" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:226 +#, c-format +msgid "requested by the customer" +msgstr "" + +#: src/paths/instance/orders/list/Table.tsx:226 +#, c-format +msgid "other" +msgstr "" + +#: src/paths/instance/orders/list/index.tsx:91 +#, c-format +msgid "go to order id" +msgstr "" + +#: src/paths/instance/orders/list/index.tsx:107 +#, c-format +msgid "Paid" +msgstr "" + +#: src/paths/instance/orders/list/index.tsx:108 +#, c-format +msgid "Refunded" +msgstr "" + +#: src/paths/instance/orders/list/index.tsx:109 +#, c-format +msgid "Not wired" +msgstr "" + +#: src/paths/instance/orders/list/index.tsx:110 +#, c-format +msgid "All" +msgstr "" + +#: src/paths/instance/products/create/index.tsx:48 +#: src/paths/instance/products/update/index.tsx:64 +#, c-format +msgid "could not create product" +msgstr "" + +#: src/paths/instance/products/list/Table.tsx:87 +#, c-format +msgid "Sell" +msgstr "" + +#: src/paths/instance/products/list/Table.tsx:89 +#, c-format +msgid "Profit" +msgstr "" + +#: src/paths/instance/products/list/Table.tsx:91 +#, c-format +msgid "Sold" +msgstr "" + +#: src/paths/instance/products/list/index.tsx:59 +#, c-format +msgid "product updated successfully" +msgstr "" + +#: src/paths/instance/products/list/index.tsx:62 +#, c-format +msgid "could not update the product" +msgstr "" + +#: src/paths/instance/products/list/index.tsx:70 +#, c-format +msgid "product delete successfully" +msgstr "" + +#: src/paths/instance/products/list/index.tsx:73 +#, c-format +msgid "could not delete the product" +msgstr "" + +#: src/paths/instance/tips/list/Table.tsx:59 +#, c-format +msgid "Tips" +msgstr "" + +#: src/paths/instance/tips/list/Table.tsx:111 +#, c-format +msgid "Committed amount" +msgstr "" + +#: src/paths/instance/tips/list/Table.tsx:112 +#, c-format +msgid "Exchange initial amount" +msgstr "" + +#: src/paths/instance/tips/list/Table.tsx:113 +#, c-format +msgid "Merchant initial amount" +msgstr "" + +#: src/paths/instance/tips/list/Table.tsx:148 +#, c-format +msgid "There is no tips yet, add more pressing the + sign" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:50 +#: src/paths/instance/transfers/create/CreatePage.tsx:54 +#: src/paths/instance/transfers/create/CreatePage.tsx:55 +#: src/paths/instance/transfers/create/CreatePage.tsx:56 +#, c-format +msgid "cannot be empty" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:51 +#, c-format +msgid "check the id, doest look valid" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:52 +#, c-format +msgid "should have 52 characters, current %1$s" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:57 +#, c-format +msgid "URL doesn't have the right format" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:74 +#, c-format +msgid "Transfer ID" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:76 +#, c-format +msgid "Account Address" +msgstr "" + +#: src/paths/instance/transfers/create/CreatePage.tsx:82 +#: src/paths/instance/transfers/list/Table.tsx:125 +#, c-format +msgid "Exchange URL" +msgstr "" + +#: src/paths/instance/transfers/create/index.tsx:49 +#, c-format +msgid "could not inform transfer" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:118 +#, c-format +msgid "load newer transfers" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:123 +#, c-format +msgid "Credit" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:126 +#, c-format +msgid "Confirmed" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:127 +#: src/paths/instance/transfers/list/index.tsx:60 +#, c-format +msgid "Verified" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:128 +#, c-format +msgid "Executed at" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:138 +#: src/paths/instance/transfers/list/Table.tsx:139 +#, c-format +msgid "yes" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:138 +#: src/paths/instance/transfers/list/Table.tsx:139 +#, c-format +msgid "no" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:140 +#, c-format +msgid "unknown" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:145 +#, c-format +msgid "load older transfers" +msgstr "" + +#: src/paths/instance/transfers/list/Table.tsx:154 +#, c-format +msgid "There is no transfer yet, add more pressing the + sign" +msgstr "" diff --git a/packages/backend/src/index.tsx b/packages/backend/src/index.tsx new file mode 100644 index 0000000..0babb26 --- /dev/null +++ b/packages/backend/src/index.tsx @@ -0,0 +1,67 @@ +/* + 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/> + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ + +import { h, VNode, Fragment } from 'preact'; +import { BackendContextProvider } from './context/backend'; +import { TranslationProvider } from './context/translation'; +// import { Page as RequestPayment } from './RequestPayment'; +import "./css/pure-min.css" +import { Route, Router } from 'preact-router'; +// import OfferTip from './pages/OfferTip'; +// import {OfferRefund} from './pages/OfferRefund'; +// import DepletedTip from './pages/DepletedTip'; +// import RequestPayment from './pages/RequestPayment'; +// import ShowOrderDetails from './pages/ShowOrderDetails'; + +export default function Application(): VNode { + return ( + // <FetchContextProvider> + <BackendContextProvider> + <TranslationProvider> + <ApplicationStatusRoutes /> + </TranslationProvider> + </BackendContextProvider> + // </FetchContextProvider> + ); +} + +function Footer() { + return <div class="talerbar"> + <p>You can learn more about GNU Taler on our <a href="https://taler.net/">website</a>.<br /> + Copyright © 2014—2021 Taler Systems SA</p> + </div> +} + +function ApplicationStatusRoutes(): VNode { + return <Fragment> + <Router> + {/* <Route path="offer_tip" component={OfferTip} /> + <Route path="offer_refund" component={OfferRefund} /> + <Route path="depleted_tip" component={DepletedTip} /> + <Route path="request_payment" component={RequestPayment} /> + <Route path="show_order_details" component={ShowOrderDetails} /> */} + <Route default component={() => <div> + hello! + </div>} /> + </Router> + <Footer /> + </Fragment> +} diff --git a/packages/backend/src/pages/DepletedTip.stories.tsx b/packages/backend/src/pages/DepletedTip.stories.tsx new file mode 100644 index 0000000..c20f6dc --- /dev/null +++ b/packages/backend/src/pages/DepletedTip.stories.tsx @@ -0,0 +1,40 @@ +/* + 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/> + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ + +import { h, VNode, FunctionalComponent } from 'preact'; +import { DepletedTip as TestedComponent } from './DepletedTip'; + + +export default { + title: 'DepletedTip', + component: TestedComponent, + argTypes: { + }, +}; + +function createExample<Props>(Component: FunctionalComponent<Props>, props: Partial<Props>) { + const r = (args: any) => <Component {...args} /> + r.args = props + return r +} + +export const Example = createExample(TestedComponent, { +}); diff --git a/packages/backend/src/pages/DepletedTip.tsx b/packages/backend/src/pages/DepletedTip.tsx new file mode 100644 index 0000000..f9cf9bb --- /dev/null +++ b/packages/backend/src/pages/DepletedTip.tsx @@ -0,0 +1,45 @@ +/* + 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/> + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ +import { h, render, VNode } from 'preact'; + +export function DepletedTip(): VNode { + return <div> + You have already collected this tip. + </div> +} + +export function Title(): VNode { + return <title>Status of your tip</title> +} + + +export function mountIntoBody(): void { + try { + const params = new URL(window.location.href).searchParams + render(<DepletedTip + // taler_refund_uri={params.get('taler_refund_uri') || undefined} + />, document.body); + } catch (e) { + console.error("got error", e); + document.body.innerText = `Fatal error: "${e.message}". Please report this bug at https://bugs.gnunet.org/.`; + } +} + diff --git a/packages/backend/src/pages/OfferRefund.stories.tsx b/packages/backend/src/pages/OfferRefund.stories.tsx new file mode 100644 index 0000000..f1b2f3a --- /dev/null +++ b/packages/backend/src/pages/OfferRefund.stories.tsx @@ -0,0 +1,40 @@ +/* + 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/> + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ + +import { h, VNode, FunctionalComponent } from 'preact'; +import { OfferRefund as TestedComponent } from './OfferRefund'; + + +export default { + title: 'OfferRefund', + component: TestedComponent, + argTypes: { + }, +}; + +function createExample<Props>(Component: FunctionalComponent<Props>, props: Partial<Props>) { + const r = (args: any) => <Component {...args} /> + r.args = props + return r +} + +export const Example = createExample(TestedComponent, { +}); diff --git a/packages/backend/src/pages/OfferRefund.tsx b/packages/backend/src/pages/OfferRefund.tsx new file mode 100644 index 0000000..6c6b77e --- /dev/null +++ b/packages/backend/src/pages/OfferRefund.tsx @@ -0,0 +1,103 @@ +/* + 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/> + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ +import { render, h, VNode } from 'preact'; +import { useEffect } from 'preact/hooks'; + +export function OfferRefund(): VNode { + useEffect(() => { + const checkUrl = new URL("{{& order_status_url }}"); + checkUrl.searchParams.set("await_refund_obtained", "yes"); + const delayMs = 500; + function check() { + let retried = false; + function retryOnce() { + if (!retried) { + retried = true; + check(); + } + } + const req = new XMLHttpRequest(); + req.onreadystatechange = function () { + if (req.readyState === XMLHttpRequest.DONE) { + if (req.status === 200) { + try { + const resp = JSON.parse(req.responseText); + if (!resp.refund_pending) { + window.location.reload(true); + } + } catch (e) { + console.error("could not parse response:", e); + } + } + setTimeout(retryOnce, delayMs); + } + }; + req.onerror = function () { + setTimeout(retryOnce, delayMs); + } + req.open("GET", checkUrl.href); + req.send(); + } + + setTimeout(check, delayMs); + }) + return <section id="main" class="content"> + <h1 >Collect Taler refund</h1> + <div class="taler-installed-hide"> + <p> + Scan this QR code with your Taler mobile wallet: + </p> + <div class="qr"> + {/* {{{taler_refund_qrcode_svg}}} */} + </div> + <p> + <button onClick={() => { + window.location.href = '{{taler_refund_uri}}' + }}> + Or open your Taller wallet + </button> + </p> + <p> + <a href="https://wallet.taler.net/">Don't have a Taler wallet yet? Install it!</a> + </p> + </div> + <hr /> + </section> +} + +export function Title(): VNode { + return <title>Refund available for {`{order_summary}`}</title> +} + +export function mountIntoBody(): void { + try { + const params = new URL(window.location.href).searchParams + render(<OfferRefund + // taler_refund_uri={params.get('taler_refund_uri') || undefined} + />, document.body); + } catch (e) { + console.error("got error", e); + document.body.innerText = `Fatal error: "${e.message}". Please report this bug at https://bugs.gnunet.org/.`; + } +} + + + diff --git a/packages/backend/src/pages/OfferTip.stories.tsx b/packages/backend/src/pages/OfferTip.stories.tsx new file mode 100644 index 0000000..09bffb8 --- /dev/null +++ b/packages/backend/src/pages/OfferTip.stories.tsx @@ -0,0 +1,40 @@ +/* + 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/> + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ + +import { h, VNode, FunctionalComponent } from 'preact'; +import { OfferTip as TestedComponent } from './OfferTip'; + + +export default { + title: 'OfferTip', + component: TestedComponent, + argTypes: { + }, +}; + +function createExample<Props>(Component: FunctionalComponent<Props>, props: Partial<Props>) { + const r = (args: any) => <Component {...args} /> + r.args = props + return r +} + +export const Example = createExample(TestedComponent, { +}); diff --git a/packages/backend/src/pages/OfferTip.tsx b/packages/backend/src/pages/OfferTip.tsx new file mode 100644 index 0000000..fd14354 --- /dev/null +++ b/packages/backend/src/pages/OfferTip.tsx @@ -0,0 +1,113 @@ +/* + 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/> + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ +import { render, h, VNode, Fragment } from 'preact'; +import { useEffect } from 'preact/hooks'; +import { styled } from "@linaria/react" +import "../css/pure-min.css" +import "../css/style.css" + +interface Props { + taler_refund_uri?: string, + tip_status_url?: string, + taler_tip_qrcode_svg?: string, +} +export function OfferTip({ taler_refund_uri, tip_status_url, taler_tip_qrcode_svg }: Props): VNode { + useEffect(() => { + const delayMs = 500; + function check() { + let retried = false; + function retryOnce() { + if (!retried) { + retried = true; + check(); + } + } + const req = new XMLHttpRequest(); + req.onreadystatechange = function () { + if (req.readyState === XMLHttpRequest.DONE) { + if (req.status === 410) { + window.location.reload(true); + } + setTimeout(retryOnce, delayMs); + } + }; + req.onerror = function () { + setTimeout(retryOnce, delayMs); + } + req.open("GET", taler_refund_uri || ''); + req.send(); + } + + setTimeout(check, delayMs); + }) + return <Fragment> + <section id="main" class="content"> + <h1>Collect Taler tip</h1> + <div class="taler-installed-hide"> + <p> + Scan this QR code with your Taler mobile wallet: + </p> + <div class="qr"> + {taler_tip_qrcode_svg} + </div> + <p> + <button onClick={() => { + window.location.href = tip_status_url || '#' + }}> + Or open your Taller wallet + </button> + </p> + <p> + <a href="https://wallet.taler.net/">Don't have a Taler wallet yet? Install it!</a> + </p> + </div> + <hr /> + </section> + <Footer /> + </Fragment> +} + +function Footer() { + return <div class="talerbar"> + <p>You can learn more about GNU Taler on our <a href="https://taler.net/">website</a>.<br /> + Copyright © 2014—2021 Taler Systems SA</p> + </div> +} + + +export function Title(): VNode { + return <title>Tip available</title> +} + +export function mountIntoBody(): void { + try { + const params = new URL(window.location.href).searchParams + render(<OfferTip + taler_refund_uri={params.get('taler_refund_uri') || undefined} + taler_tip_qrcode_svg={params.get('taler_tip_qrcode_svg') || undefined} + tip_status_url={params.get('tip_status_url') || undefined} + />, document.body); + } catch (e) { + console.error("got error", e); + document.body.innerText = `Fatal error: "${e.message}". Please report this bug at https://bugs.gnunet.org/.`; + } +} + diff --git a/packages/backend/src/pages/RequestPayment.stories.tsx b/packages/backend/src/pages/RequestPayment.stories.tsx new file mode 100644 index 0000000..1aed570 --- /dev/null +++ b/packages/backend/src/pages/RequestPayment.stories.tsx @@ -0,0 +1,40 @@ +/* + 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/> + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ + +import { h, VNode, FunctionalComponent } from 'preact'; +import { RequestPayment as TestedComponent } from './RequestPayment'; + + +export default { + title: 'RequestPayment', + component: TestedComponent, + argTypes: { + }, +}; + +function createExample<Props>(Component: FunctionalComponent<Props>, props: Partial<Props>) { + const r = (args: any) => <Component {...args} /> + r.args = props + return r +} + +export const Example = createExample(TestedComponent, { +}); diff --git a/packages/backend/src/pages/RequestPayment.tsx b/packages/backend/src/pages/RequestPayment.tsx new file mode 100644 index 0000000..d1fb8d4 --- /dev/null +++ b/packages/backend/src/pages/RequestPayment.tsx @@ -0,0 +1,125 @@ +/* + 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/> + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ +import { h, render, VNode } from 'preact'; +import { useEffect } from 'preact/hooks'; + +export function RequestPayment(): VNode { + useEffect(() => { + const longpollDelayMs = 60000; + const checkUrl = new URL("{{& order_status_url }}"); + checkUrl.searchParams.set("timeout_ms", longpollDelayMs.toString()); + function check() { + let retried = false; + function retryOnce() { + if (!retried) { + retried = true; + check(); + } + } + const req = new XMLHttpRequest(); + req.onreadystatechange = function () { + if (req.readyState === XMLHttpRequest.DONE) { + if (req.status === 200) { + try { + const resp = JSON.parse(req.responseText); + if (resp.fulfillment_url) { + window.location.replace(resp.fulfillment_url); + } + } catch (e) { + console.error("could not parse response:", e); + } + } + if (req.status === 202) { + try { + const resp = JSON.parse(req.responseText); + if (resp.fulfillment_url) { + window.location.replace(resp.fulfillment_url); + } + } catch (e) { + console.error("could not parse response:", e); + } + } + if (req.status === 402) { + try { + const resp = JSON.parse(req.responseText); + if (resp.already_paid_order_id && resp.fulfillment_url) { + window.location.replace(resp.fulfillment_url); + } + } catch (e) { + console.error("could not parse response:", e); + } + } + setTimeout(retryOnce, 500); + } + }; + req.onerror = function () { + setTimeout(retryOnce, 500); + } + req.ontimeout = function () { + setTimeout(retryOnce, 500); + } + req.timeout = longpollDelayMs; + req.open("GET", checkUrl.href); + req.send(); + } + setTimeout(check, 500); + }) + return <section id="main" class="content"> + <h1>Pay with Taler</h1> + <div class="taler-installed-hide"> + <p> + Scan this QR code with your mobile wallet: + </p> + <div class="qr"> + {/* {{{taler_pay_qrcode_svg}}} */} + </div> + <p> + <button onClick={() => { + window.location.href = '{{taler_refund_uri}}' + }}> + Or open your Taller wallet + </button> + </p> + <p> + <a href="https://wallet.taler.net/">Don't have a Taler wallet yet? Install it!</a> + </p> + </div> + <hr /> + </section> + +} +export function Title(): VNode { + return <title>Payment requested for {`{order_summary}`}</title> +} + +export function mountIntoBody(): void { + try { + const params = new URL(window.location.href).searchParams + render(<RequestPayment + // taler_refund_uri={params.get('taler_refund_uri') || undefined} + />, document.body); + } catch (e) { + console.error("got error", e); + document.body.innerText = `Fatal error: "${e.message}". Please report this bug at https://bugs.gnunet.org/.`; + } +} + + diff --git a/packages/backend/src/pages/ShowOrderDetails.stories.tsx b/packages/backend/src/pages/ShowOrderDetails.stories.tsx new file mode 100644 index 0000000..88fa393 --- /dev/null +++ b/packages/backend/src/pages/ShowOrderDetails.stories.tsx @@ -0,0 +1,40 @@ +/* + 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/> + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ + +import { h, VNode, FunctionalComponent } from 'preact'; +import { ShowOrderDetails as TestedComponent } from './ShowOrderDetails'; + + +export default { + title: 'ShowOrderDetails', + component: TestedComponent, + argTypes: { + }, +}; + +function createExample<Props>(Component: FunctionalComponent<Props>, props: Partial<Props>) { + const r = (args: any) => <Component {...args} /> + r.args = props + return r +} + +export const Example = createExample(TestedComponent, { +}); diff --git a/packages/backend/src/pages/ShowOrderDetails.tsx b/packages/backend/src/pages/ShowOrderDetails.tsx new file mode 100644 index 0000000..4aae556 --- /dev/null +++ b/packages/backend/src/pages/ShowOrderDetails.tsx @@ -0,0 +1,125 @@ +/* + 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/> + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ +import { Fragment, render, h, VNode } from 'preact'; +import { useEffect } from 'preact/hooks'; + +export function ShowOrderDetails(): VNode { + useEffect(() => { + const longpollDelayMs = 60000; + const checkUrl = new URL("{{& order_status_url }}"); + checkUrl.searchParams.set("timeout_ms", longpollDelayMs.toString()); + function check() { + let retried = false; + function retryOnce() { + + if (!retried) { + retried = true; + check(); + } + } + const req = new XMLHttpRequest(); + req.onreadystatechange = function () { + if (req.readyState === XMLHttpRequest.DONE) { + if (req.status === 200) { + try { + const resp = JSON.parse(req.responseText); + if (resp.fulfillment_url) { + window.location.replace(resp.fulfillment_url); + } + } catch (e) { + console.error("could not parse response:", e); + } + } + if (req.status === 202) { + try { + const resp = JSON.parse(req.responseText); + if (resp.fulfillment_url) { + window.location.replace(resp.fulfillment_url); + } + } catch (e) { + console.error("could not parse response:", e); + } + } + if (req.status === 402) { + try { + const resp = JSON.parse(req.responseText); + if (resp.already_paid_order_id && resp.fulfillment_url) { + window.location.replace(resp.fulfillment_url); + } + } catch (e) { + console.error("could not parse response:", e); + } + } + setTimeout(retryOnce, 500); + } + }; + req.onerror = function () { + setTimeout(retryOnce, 500); + } + req.ontimeout = function () { + setTimeout(retryOnce, 500); + } + req.timeout = longpollDelayMs; + req.open("GET", checkUrl.href); + req.send(); + } + setTimeout(check, 500); + }) + return <Fragment> + <h1>Order details</h1> + + <div> + This is the default status page for your order for <b>{`{ order_summary }`}</b>. + </div> + + + <h2>Refund status</h2> + <div> + The merchant has granted you refunds on the purchase of <b>{`{ refund_amount }`}</b>. + </div> + + <h2>Full contract details</h2> + + {/* <!-- FIXME #6459: expand the contract JSON in all its glory here --> */} + <pre> + {/* {{{contract_terms!stringify }}} */} + </pre> + + </Fragment> + +} + +function Title(): VNode { + return <title>Status of your order for {`{order_summary}`}</title> +} + +export function mountIntoBody(): void { + try { + const params = new URL(window.location.href).searchParams + render(<ShowOrderDetails + // taler_refund_uri={params.get('taler_refund_uri') || undefined} + />, document.body); + } catch (e) { + console.error("got error", e); + document.body.innerText = `Fatal error: "${e.message}". Please report this bug at https://bugs.gnunet.org/.`; + } +} + diff --git a/packages/backend/src/utils/amount.ts b/packages/backend/src/utils/amount.ts new file mode 100644 index 0000000..062ddaf --- /dev/null +++ b/packages/backend/src/utils/amount.ts @@ -0,0 +1,69 @@ +/* + 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/> + */ +import { amountFractionalBase, AmountJson, Amounts } from "@gnu-taler/taler-util"; +import { MerchantBackend } from "../declaration"; + +/** + * sums two prices, + * @param one + * @param two + * @returns + */ +const sumPrices = (one: string, two: string) => { + const [currency, valueOne] = one.split(':') + const [, valueTwo] = two.split(':') + return `${currency}:${parseInt(valueOne, 10) + parseInt(valueTwo, 10)}` +} + +/** + * merge refund with the same description and a difference less than one minute + * @param prev list of refunds that will hold the merged refunds + * @param cur new refund to add to the list + * @returns list with the new refund, may be merged with the last + */ +export function mergeRefunds(prev: MerchantBackend.Orders.RefundDetails[], cur: MerchantBackend.Orders.RefundDetails) { + let tail; + + if (prev.length === 0 || //empty list + cur.timestamp.t_ms === 'never' || //current doesnt have timestamp + (tail = prev[prev.length - 1]).timestamp.t_ms === 'never' || // last doesnt have timestamp + cur.reason !== tail.reason || //different reason + Math.abs(cur.timestamp.t_ms - tail.timestamp.t_ms) > 1000 * 60) {//more than 1 minute difference + + prev.push(cur) + return prev + } + + prev[prev.length - 1] = { + ...tail, + amount: sumPrices(tail.amount, cur.amount) + } + + return prev +} + +export const rate = (one: string, two: string) => { + const a = Amounts.parseOrThrow(one) + const b = Amounts.parseOrThrow(two) + const af = toFloat(a) + const bf = toFloat(b) + if (bf === 0) return 0 + return af / bf +} + +function toFloat(amount: AmountJson) { + return amount.value + (amount.fraction / amountFractionalBase); +} diff --git a/packages/backend/src/utils/constants.ts b/packages/backend/src/utils/constants.ts new file mode 100644 index 0000000..37c46e4 --- /dev/null +++ b/packages/backend/src/utils/constants.ts @@ -0,0 +1,47 @@ +/* + 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/> + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ + +//https://tools.ietf.org/html/rfc8905 +export const PAYTO_REGEX = /^payto:\/\/[a-zA-Z][a-zA-Z0-9-.]+(\/[a-zA-Z0-9\-\.\~\(\)@_%:!$&'*+,;=]*)*\??((amount|receiver-name|sender-name|instruction|message)=[a-zA-Z0-9\-\.\~\(\)@_%:!$'*+,;=]*&?)*$/ +export const PAYTO_WIRE_METHOD_LOOKUP = /payto:\/\/([a-zA-Z][a-zA-Z0-9-.]+)\/.*/ + +export const AMOUNT_REGEX = /^[a-zA-Z][a-zA-Z]*:[0-9][0-9,]*\.?[0-9,]*$/ + +export const INSTANCE_ID_LOOKUP = /^\/instances\/([^/]*)\/?$/ + +export const AMOUNT_ZERO_REGEX = /^[a-zA-Z][a-zA-Z]*:0$/ + +export const CROCKFORD_BASE32_REGEX = /^[0123456789ABCDEFGHJKMNPQRSTVWXYZ]+[*~$=U]*$/ + +export const URL_REGEX = /^((https?:)(\/\/\/?)([\w]*(?::[\w]*)?@)?([\d\w\.-]+)(?::(\d+))?)\/$/ + +// how much rows we add every time user hit load more +export const PAGE_SIZE = 20 +// how bigger can be the result set +// after this threshold, load more with move the cursor +export const MAX_RESULT_SIZE = PAGE_SIZE * 2 - 1; + +// how much we will wait for all request, in seconds +export const DEFAULT_REQUEST_TIMEOUT = 10; + +export const MAX_IMAGE_SIZE = 1024 * 1024; + +export const INSTANCE_ID_REGEX = /^[a-zA-Z0-9][a-zA-Z0-9_.@-]+$/ diff --git a/packages/backend/src/utils/table.ts b/packages/backend/src/utils/table.ts new file mode 100644 index 0000000..3d713a6 --- /dev/null +++ b/packages/backend/src/utils/table.ts @@ -0,0 +1,37 @@ +/* + 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/> + */ + +import { WithId } from "../declaration"; + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ + +export interface Actions<T extends WithId> { + element: T; + type: 'DELETE' | 'UPDATE'; +} + +function notEmpty<TValue>(value: TValue | null | undefined): value is TValue { + return value !== null && value !== undefined; +} + +export function buildActions<T extends WithId>(intances: T[], selected: string[], action: 'DELETE'): Actions<T>[] { + return selected.map(id => intances.find(i => i.id === id)) + .filter(notEmpty) + .map(id => ({ element: id, type: action })) +} diff --git a/packages/backend/src/utils/types.ts b/packages/backend/src/utils/types.ts new file mode 100644 index 0000000..9e49d39 --- /dev/null +++ b/packages/backend/src/utils/types.ts @@ -0,0 +1,31 @@ +/* + 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/> + */ + +import { VNode } from "preact" + +export interface KeyValue { + [key: string]: string; +} + +export interface Notification { + message: string; + description?: string | VNode; + type: MessageType; +} + +export type ValueOrFunction<T> = T | ((p: T) => T) +export type MessageType = 'INFO' | 'WARN' | 'ERROR' | 'SUCCESS' + diff --git a/packages/backend/tests/__mocks__/browserMocks.ts b/packages/backend/tests/__mocks__/browserMocks.ts new file mode 100644 index 0000000..ee6bba5 --- /dev/null +++ b/packages/backend/tests/__mocks__/browserMocks.ts @@ -0,0 +1,42 @@ +/* + 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/> + */ + + /** + * + * @author Sebastian Javier Marchano (sebasjm) + */ + +// Mock Browser API's which are not supported by JSDOM, e.g. ServiceWorker, LocalStorage +/** + * An example how to mock localStorage is given below π + */ + +/* +// Mocks localStorage +const localStorageMock = (function() { + let store = {}; + + return { + getItem: (key) => store[key] || null, + setItem: (key, value) => store[key] = value.toString(), + clear: () => store = {} + }; + +})(); + +Object.defineProperty(window, 'localStorage', { + value: localStorageMock +}); */ diff --git a/packages/backend/tests/__mocks__/fileMocks.ts b/packages/backend/tests/__mocks__/fileMocks.ts new file mode 100644 index 0000000..0c045e9 --- /dev/null +++ b/packages/backend/tests/__mocks__/fileMocks.ts @@ -0,0 +1,24 @@ +/* + 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/> + */ + + /** + * + * @author Sebastian Javier Marchano (sebasjm) + */ + +// This fixed an error related to the CSS and loading gif breaking my Jest test +// See https://facebook.github.io/jest/docs/en/webpack.html#handling-static-assets +export default 'test-file-stub'; diff --git a/packages/backend/tests/__mocks__/fileTransformer.js b/packages/backend/tests/__mocks__/fileTransformer.js new file mode 100644 index 0000000..e6193f8 --- /dev/null +++ b/packages/backend/tests/__mocks__/fileTransformer.js @@ -0,0 +1,31 @@ +/* + 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/> + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ +// fileTransformer.js + +// eslint-disable-next-line @typescript-eslint/no-var-requires +const path = require('path'); + +module.exports = { + process(src, filename, config, options) { + return 'module.exports = ' + JSON.stringify(path.basename(filename)) + ';'; + }, +}; + diff --git a/packages/backend/tests/__mocks__/setupTests.ts b/packages/backend/tests/__mocks__/setupTests.ts new file mode 100644 index 0000000..ab0f08b --- /dev/null +++ b/packages/backend/tests/__mocks__/setupTests.ts @@ -0,0 +1,28 @@ +/* + 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/> + */ + + /** + * + * @author Sebastian Javier Marchano (sebasjm) + */ + +import 'regenerator-runtime/runtime' +import { configure } from 'enzyme'; +import Adapter from 'enzyme-adapter-preact-pure'; + +configure({ + adapter: new Adapter() +}); diff --git a/packages/backend/tests/funcitons/regex.test.ts b/packages/backend/tests/funcitons/regex.test.ts new file mode 100644 index 0000000..fc8a6a4 --- /dev/null +++ b/packages/backend/tests/funcitons/regex.test.ts @@ -0,0 +1,87 @@ +/* + 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/> + */ + + /** + * + * @author Sebastian Javier Marchano (sebasjm) + */ + +import { AMOUNT_REGEX, PAYTO_REGEX } from "../../src/utils/constants"; + +describe('payto uri format', () => { + const valids = [ + 'payto://iban/DE75512108001245126199?amount=EUR:200.0&message=hello', + 'payto://ach/122000661/1234', + 'payto://upi/alice@example.com?receiver-name=Alice&amount=INR:200', + 'payto://void/?amount=EUR:10.5', + 'payto://ilp/g.acme.bob' + ] + + test('should be valid', () => { + valids.forEach(v => expect(v).toMatch(PAYTO_REGEX)) + }); + + const invalids = [ + // has two question marks + 'payto://iban/DE75?512108001245126199?amount=EUR:200.0&message=hello', + // has a space + 'payto://ach /122000661/1234', + // has a space + 'payto://upi/alice@ example.com?receiver-name=Alice&amount=INR:200', + // invalid field name (mount instead of amount) + 'payto://void/?mount=EUR:10.5', + // payto:// is incomplete + 'payto: //ilp/g.acme.bob' + ] + + test('should not be valid', () => { + invalids.forEach(v => expect(v).not.toMatch(PAYTO_REGEX)) + }); +}) + +describe('amount format', () => { + const valids = [ + 'ARS:10', + 'COL:10.2', + 'UY:1,000.2', + 'ARS:10.123,123', + 'ARS:1,000,000', + 'ARSCOL:10', + 'THISISTHEMOTHERCOIN:1,000,000.123,123', + ] + + test('should be valid', () => { + valids.forEach(v => expect(v).toMatch(AMOUNT_REGEX)) + }); + + const invalids = [ + //no currency name + ':10', + //use . instead of , + 'ARS:1.000.000', + //currency name with numbers + '1ARS:10', + //currency name with numbers + 'AR5:10', + //missing value + 'USD:', + ] + + test('should not be valid', () => { + invalids.forEach(v => expect(v).not.toMatch(AMOUNT_REGEX)) + }); + +})
\ No newline at end of file diff --git a/packages/backend/tests/util.ts b/packages/backend/tests/util.ts new file mode 100644 index 0000000..14b82b5 --- /dev/null +++ b/packages/backend/tests/util.ts @@ -0,0 +1,62 @@ +/* + 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/> + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ +import * as axios from 'axios'; + +type Query<Req, Res> = (GetQuery | PostQuery | DeleteQuery | PatchQuery) & RequestResponse<Req, Res> + +interface RequestResponse<Req, Res> { + request?: Req, + params?: any, + response?: Res, +} +interface GetQuery { get: string } +interface PostQuery { post: string } +interface DeleteQuery { delete: string } +interface PatchQuery { patch: string } + +export function simulateBackendResponse<R, T>(query: Query<R, T>): void { + (axios.default as jest.MockedFunction<axios.AxiosStatic>).mockImplementationOnce(function (opt?: axios.AxiosRequestConfig): axios.AxiosPromise { + // console.log(opt, JSON.stringify(query,undefined,2)) + expect(opt).toBeDefined(); + if (!opt) + return Promise.reject(); + + // expect(query.request).toStrictEqual(opt.data); + // expect(query.params).toStrictEqual(opt.params); + if ('get' in query) { + expect(opt.method).toBe('get'); + expect(opt.url).toBe(query.get); + } + if ('post' in query) { + expect(opt.method).toBe('post'); + expect(opt.url).toBe(query.post); + } + if ('delete' in query) { + expect(opt.method).toBe('delete'); + expect(opt.url).toBe(query.delete); + } + if ('patch' in query) { + expect(opt.method).toBe('patch'); + expect(opt.url).toBe(query.patch); + } + return ({ data: query.response, config: {} } as any); + } as any) +} diff --git a/packages/backend/tsconfig.back.json b/packages/backend/tsconfig.back.json new file mode 100644 index 0000000..9ac5a3c --- /dev/null +++ b/packages/backend/tsconfig.back.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "composite": true, + "lib": ["es6", "DOM"], + "jsx": "react", + "jsxFactory": "h", + "jsxFragmentFactory": "Fragment", + "moduleResolution": "Node", + "module": "ESNext", + "target": "ES6", + "noImplicitAny": true, + "noEmitOnError": true, + "strict": true, + "incremental": true, + "sourceMap": true, + "esModuleInterop": true, + "importHelpers": true, + "rootDir": "./src", + "typeRoots": ["./node_modules/@types"] + }, + "include": ["src/**/*"] + } +
\ No newline at end of file diff --git a/packages/backend/tsconfig.json b/packages/backend/tsconfig.json new file mode 100644 index 0000000..7a4d70a --- /dev/null +++ b/packages/backend/tsconfig.json @@ -0,0 +1,61 @@ +{ + "compilerOptions": { + /* Basic Options */ + "target": "ES6", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', or 'ESNEXT'. */ + "module": "ESNext", /* Specify module code generation: 'none', commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ + // "lib": [], /* Specify library files to be included in the compilation: */ + "allowJs": true, /* Allow javascript files to be compiled. */ + // "checkJs": true, /* Report errors in .js files. */ + "jsx": "react", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ + "jsxFactory": "h", /* Specify the JSX factory function to use when targeting react JSX emit, e.g. React.createElement or h. */ + "jsxFragmentFactory": "Fragment", // https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-0.html#custom-jsx-factories + // "declaration": true, /* Generates corresponding '.d.ts' file. */ + // "sourceMap": true, /* Generates corresponding '.map' file. */ + // "outFile": "./", /* Concatenate and emit output to single file. */ + // "outDir": "./", /* Redirect output structure to the directory. */ + // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ + // "removeComments": true, /* Do not emit comments to output. */ + "noEmit": true, /* Do not emit outputs. */ + // "importHelpers": true, /* Import emit helpers from 'tslib'. */ + // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ + // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ + + /* Strict Type-Checking Options */ + "strict": true, /* Enable all strict type-checking options. */ + // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* Enable strict null checks. */ + // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ + + /* Additional Checks */ + // "noUnusedLocals": true, /* Report errors on unused locals. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + + /* Module Resolution Options */ + "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ + "esModuleInterop": true, /* */ + // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ + // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ + // "typeRoots": [], /* List of folders to include type definitions from. */ + // "types": [], /* Type declaration files to be included in compilation. */ + // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ + // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ + + /* Source Map Options */ + // "sourceRoot": "./", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ + // "mapRoot": "./", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ + // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ + + /* Experimental Options */ + // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ + // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + + /* Advanced Options */ + "skipLibCheck": true /* Skip type checking of declaration files. */ + }, + "include": ["src/**/*", "tests/**/*"] +} diff --git a/packages/backend/tsconfig.tsbuildinfo b/packages/backend/tsconfig.tsbuildinfo new file mode 100644 index 0000000..625b637 --- /dev/null +++ b/packages/backend/tsconfig.tsbuildinfo @@ -0,0 +1,2147 @@ +{ + "program": { + "fileInfos": { + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es5.d.ts": { + "version": "b3584bc5798ed422ce2516df360ffa9cf2d80b5eae852867db9ba3743145f895", + "signature": "b3584bc5798ed422ce2516df360ffa9cf2d80b5eae852867db9ba3743145f895", + "affectsGlobalScope": true + }, + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2015.d.ts": { + "version": "dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6", + "signature": "dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2016.d.ts": { + "version": "7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467", + "signature": "7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2017.d.ts": { + "version": "8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9", + "signature": "8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2018.d.ts": { + "version": "5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06", + "signature": "5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.dom.d.ts": { + "version": "feeeb1dd8a80fb76be42b0426e8f3ffa9bdef3c2f3c12c147e7660b1c5ba8b3b", + "signature": "feeeb1dd8a80fb76be42b0426e8f3ffa9bdef3c2f3c12c147e7660b1c5ba8b3b", + "affectsGlobalScope": true + }, + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2015.core.d.ts": { + "version": "46ee15e9fefa913333b61eaf6b18885900b139867d89832a515059b62cf16a17", + "signature": "46ee15e9fefa913333b61eaf6b18885900b139867d89832a515059b62cf16a17", + "affectsGlobalScope": true + }, + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2015.collection.d.ts": { + "version": "43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c", + "signature": "43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c", + "affectsGlobalScope": true + }, + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2015.generator.d.ts": { + "version": "cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a", + "signature": "cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a", + "affectsGlobalScope": true + }, + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2015.iterable.d.ts": { + "version": "8b2a5df1ce95f78f6b74f1a555ccdb6baab0486b42d8345e0871dd82811f9b9a", + "signature": "8b2a5df1ce95f78f6b74f1a555ccdb6baab0486b42d8345e0871dd82811f9b9a", + "affectsGlobalScope": true + }, + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2015.promise.d.ts": { + "version": "2bb4b3927299434052b37851a47bf5c39764f2ba88a888a107b32262e9292b7c", + "signature": "2bb4b3927299434052b37851a47bf5c39764f2ba88a888a107b32262e9292b7c", + "affectsGlobalScope": true + }, + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2015.proxy.d.ts": { + "version": "810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357", + "signature": "810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357", + "affectsGlobalScope": true + }, + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2015.reflect.d.ts": { + "version": "62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6", + "signature": "62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6", + "affectsGlobalScope": true + }, + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2015.symbol.d.ts": { + "version": "3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93", + "signature": "3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93", + "affectsGlobalScope": true + }, + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts": { + "version": "9d122b7e8c1a5c72506eea50c0973cba55b92b5532d5cafa8a6ce2c547d57551", + "signature": "9d122b7e8c1a5c72506eea50c0973cba55b92b5532d5cafa8a6ce2c547d57551", + "affectsGlobalScope": true + }, + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2016.array.include.d.ts": { + "version": "3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006", + "signature": "3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006", + "affectsGlobalScope": true + }, + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2017.object.d.ts": { + "version": "17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a", + "signature": "17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a", + "affectsGlobalScope": true + }, + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts": { + "version": "7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98", + "signature": "7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98", + "affectsGlobalScope": true + }, + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2017.string.d.ts": { + "version": "6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577", + "signature": "6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577", + "affectsGlobalScope": true + }, + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2017.intl.d.ts": { + "version": "12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d", + "signature": "12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d", + "affectsGlobalScope": true + }, + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts": { + "version": "b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e", + "signature": "b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e", + "affectsGlobalScope": true + }, + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts": { + "version": "0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a", + "signature": "0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a", + "affectsGlobalScope": true + }, + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts": { + "version": "a40c4d82bf13fcded295ac29f354eb7d40249613c15e07b53f2fc75e45e16359", + "signature": "a40c4d82bf13fcded295ac29f354eb7d40249613c15e07b53f2fc75e45e16359", + "affectsGlobalScope": true + }, + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2018.intl.d.ts": { + "version": "df9c8a72ca8b0ed62f5470b41208a0587f0f73f0a7db28e5a1272cf92537518e", + "signature": "df9c8a72ca8b0ed62f5470b41208a0587f0f73f0a7db28e5a1272cf92537518e", + "affectsGlobalScope": true + }, + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2018.promise.d.ts": { + "version": "bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c", + "signature": "bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c", + "affectsGlobalScope": true + }, + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2018.regexp.d.ts": { + "version": "c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8", + "signature": "c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8", + "affectsGlobalScope": true + }, + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2020.bigint.d.ts": { + "version": "7b5a10e3c897fabece5a51aa85b4111727d7adb53c2734b5d37230ff96802a09", + "signature": "7b5a10e3c897fabece5a51aa85b4111727d7adb53c2734b5d37230ff96802a09", + "affectsGlobalScope": true + }, + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.esnext.intl.d.ts": { + "version": "506b80b9951c9381dc5f11897b31fca5e2a65731d96ddefa19687fbc26b23c6e", + "signature": "506b80b9951c9381dc5f11897b31fca5e2a65731d96ddefa19687fbc26b23c6e", + "affectsGlobalScope": true + }, + "./src/custom.d.ts": { + "version": "3ead1762961f8a6387850c685954ebfda45a699b35ecc4be8b74b1d30418e346", + "signature": "3ead1762961f8a6387850c685954ebfda45a699b35ecc4be8b74b1d30418e346", + "affectsGlobalScope": false + }, + "./src/declaration.d.ts": { + "version": "1dc27e1406e72863144904ab53e62fb3cb398b58afdce89482ff38b0d017f5a6", + "signature": "1dc27e1406e72863144904ab53e62fb3cb398b58afdce89482ff38b0d017f5a6", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/tslib@2.3.1/node_modules/tslib/tslib.d.ts": { + "version": "12f4cfe2fe60b810c3174537bc2ddb20c1067b7768643d12cb1266fd183afb75", + "signature": "12f4cfe2fe60b810c3174537bc2ddb20c1067b7768643d12cb1266fd183afb75", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/src/jsx.d.ts": { + "version": "4df92626badc45649b66f8580e9c1c2b558ee378429c6b057f7b9a059847ead4", + "signature": "4df92626badc45649b66f8580e9c1c2b558ee378429c6b057f7b9a059847ead4", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/src/index.d.ts": { + "version": "8644215eab976590c24dc61e1ebdc2190725dcb3768d21b76ce703256857f9e6", + "signature": "8644215eab976590c24dc61e1ebdc2190725dcb3768d21b76ce703256857f9e6", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/hooks/src/index.d.ts": { + "version": "c405ed0b2c7156d552b198b93442d893772c6d273cde8f1e475670cbbcf2f3b3", + "signature": "c405ed0b2c7156d552b198b93442d893772c6d273cde8f1e475670cbbcf2f3b3", + "affectsGlobalScope": false + }, + "./src/utils/types.ts": { + "version": "c11363a75a256fa1acaf10aca90c97f9623716967cec356965980f2fd610b493", + "signature": "2ab3afb32269a6fe4b75a2abe5036be8b4bbcf7d3b73b91869729692ed073971", + "affectsGlobalScope": false + }, + "./src/hooks/index.ts": { + "version": "096f1bb5bebb122698637e9e8abfc7d055f922c779248ccd9cfacfeb2dac7302", + "signature": "207bfc50245ab47e02f8854fba1c7a0ae7b010dd05bcaa60c687ed3e9b5d8a0c", + "affectsGlobalScope": false + }, + "./src/context/backend.ts": { + "version": "c312a3d59f926836242252819296a6af1e969e3a6c8f34a58cca90a4a7024db9", + "signature": "397025dd1712c07363bed3285b5dd05010f5c19a2246a28b3fda9be2db8f8d2b", + "affectsGlobalScope": false + }, + "./src/i18n/strings.ts": { + "version": "029f6eeb6fcec971eeb8c743a214eb9bb62b51fec07408d95b41a4feaa04fa6c", + "signature": "f2255859ce54a5a7de8498611e5264964df4b46060aa847e04b96b57318001f2", + "affectsGlobalScope": false + }, + "./src/context/translation.ts": { + "version": "c157e86196fb6ea61ef2067ffbc65d51f3a6f771ce4458ef3eca0fbef14905b9", + "signature": "f778768280b324deca5625c8163cdfce55ebbb0988a68c7a676b0ba9e5d983ae", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/preact-router@3.2.1_preact@10.5.13/node_modules/preact-router/index.d.ts": { + "version": "934298f9c4b63b480efa1cb8055958ccd79166ff4788290c242a0ba9c8bc371b", + "signature": "934298f9c4b63b480efa1cb8055958ccd79166ff4788290c242a0ba9c8bc371b", + "affectsGlobalScope": false + }, + "./src/index.tsx": { + "version": "c1f1a0bd7293562a69579f48a6588c03bfa946edb7887c9f22ed832cdb67b57c", + "signature": "ad890ac8f5c2749920f3e25738c791781081a113205bd5bb777bad6e83af5872", + "affectsGlobalScope": false + }, + "./src/context/config.ts": { + "version": "818e52cb36b58a10c2345180f0097888dddf3e4fe657184818cf6d1c9d138f46", + "signature": "f3053b202e6fc97a98894ccc3761b320e8bdf2cdfc8929c14e0069494d3a0f95", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/types.d.ts": { + "version": "4620a98b47b2a31a62ffcb5337e0d525c43fceb48971bcb083f5d64fe3eab82b", + "signature": "4620a98b47b2a31a62ffcb5337e0d525c43fceb48971bcb083f5d64fe3eab82b", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+react@17.0.4/node_modules/@types/react/global.d.ts": { + "version": "ecf78e637f710f340ec08d5d92b3f31b134a46a4fcf2e758690d8c46ce62cba6", + "signature": "ecf78e637f710f340ec08d5d92b3f31b134a46a4fcf2e758690d8c46ce62cba6", + "affectsGlobalScope": true + }, + "../../node_modules/.pnpm/csstype@3.0.8/node_modules/csstype/index.d.ts": { + "version": "4ee363f83d7be2202f34fcd84c44da71bf3a9329fee8a05f976f75083a52ea94", + "signature": "4ee363f83d7be2202f34fcd84c44da71bf3a9329fee8a05f976f75083a52ea94", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+prop-types@15.7.3/node_modules/@types/prop-types/index.d.ts": { + "version": "a7e32dcb90bf0c1b7a1e4ac89b0f7747cbcba25e7beddc1ebf17be1e161842ad", + "signature": "a7e32dcb90bf0c1b7a1e4ac89b0f7747cbcba25e7beddc1ebf17be1e161842ad", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+scheduler@0.16.1/node_modules/@types/scheduler/tracing.d.ts": { + "version": "f5a8b384f182b3851cec3596ccc96cb7464f8d3469f48c74bf2befb782a19de5", + "signature": "f5a8b384f182b3851cec3596ccc96cb7464f8d3469f48c74bf2befb782a19de5", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+react@17.0.4/node_modules/@types/react/index.d.ts": { + "version": "5d708266116e778d6a4140fca2ac36f71d99b4c68bc3be63a45ba8bf5ade5348", + "signature": "5d708266116e778d6a4140fca2ac36f71d99b4c68bc3be63a45ba8bf5ade5348", + "affectsGlobalScope": true + }, + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/use-swr.d.ts": { + "version": "5f128915c2b4262a78770fc5e48b950276e512435b3ec12901aa8f52b989c2f3", + "signature": "5f128915c2b4262a78770fc5e48b950276e512435b3ec12901aa8f52b989c2f3", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/use-swr-infinite.d.ts": { + "version": "acbaa225ae58e247b0d882636a10b8d4e8d8c8a3afe3b3b84b4569d9bdc0d8cc", + "signature": "acbaa225ae58e247b0d882636a10b8d4e8d8c8a3afe3b3b84b4569d9bdc0d8cc", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/dequal@2.0.2/node_modules/dequal/lite/index.d.ts": { + "version": "41a5ae482e864a6128e6054e88f1c0e06884793f92aff5c67144fb02d2373079", + "signature": "41a5ae482e864a6128e6054e88f1c0e06884793f92aff5c67144fb02d2373079", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/cache.d.ts": { + "version": "2e8e9b7d35291ee9d6c40f94f0f9b15e37565cbecf694c926737e1e5cf22f1ca", + "signature": "2e8e9b7d35291ee9d6c40f94f0f9b15e37565cbecf694c926737e1e5cf22f1ca", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/config.d.ts": { + "version": "5148074c9e3937b8c251521ae25322257d672ff80a65556c866cc40ad58e93bf", + "signature": "5148074c9e3937b8c251521ae25322257d672ff80a65556c866cc40ad58e93bf", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/index.d.ts": { + "version": "0e2173eeb5f884769801cdaa741ebb92bd70beb397eb31355f87000e4b09fb78", + "signature": "0e2173eeb5f884769801cdaa741ebb92bd70beb397eb31355f87000e4b09fb78", + "affectsGlobalScope": false + }, + "./src/context/fetch.ts": { + "version": "860378ceb989d1ead99e3c6eb6880825d500fe54af37591d32ba162049973eb4", + "signature": "5714aa731be71fded434162842dc4c1843e2702cb1675dbc110709a7fca8e807", + "affectsGlobalScope": false + }, + "./src/context/instance.ts": { + "version": "032bbb0efa80f64179fc565a94dcb6917eda2e889879c7746c3d323b522a6d97", + "signature": "2aa83f05978ffeb855677d1d949bfd3bda6bf4c0a843c61b6506fac6ad1814e3", + "affectsGlobalScope": false + }, + "./src/context/listener.ts": { + "version": "e5a49e5fca1091640fba5d86d39d9468f4071ef5a26a1711a07066d939d8211f", + "signature": "c8de4d2a55470bc8334ff0a25097908bdfa91a903c5e8ef6ae554e8bbf95c6a9", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/axios@0.21.1/node_modules/axios/index.d.ts": { + "version": "0d892f035dbee4534f0ba096407136877595ca592f67ec9bb8a5c912b9c967e8", + "signature": "0d892f035dbee4534f0ba096407136877595ca592f67ec9bb8a5c912b9c967e8", + "affectsGlobalScope": false + }, + "./src/utils/constants.ts": { + "version": "76c0c50519f341c32ed665cdd5ad02f20a833e84096de4953fe6a545b63a1677", + "signature": "7bc253933a00f6c7fd51e68636b1bb0dd85b6cd29f0fff27e005e49c00c07e73", + "affectsGlobalScope": false + }, + "./src/hooks/backend.ts": { + "version": "9b17e7e527224eed40c2dfd27db6479a01233b6f2c8dfa59de11a4eb8ed254c8", + "signature": "9cceb6c1909fb47340f428fd444c924f974aa49740d4e8245e7ccaac6a1cc6bf", + "affectsGlobalScope": false + }, + "./src/hooks/async.ts": { + "version": "d010edbf34a97c5b1f8837e429433ca097372d0decf69bbe49b540bc27fa82fd", + "signature": "88069e8a2f9667a985c777d6d72be006095e545072bf36d7d7f481dd32397854", + "affectsGlobalScope": false + }, + "./src/hooks/instance.ts": { + "version": "29914aebad9fffb68717e16a9699fe26beeedda2337b1033ed14deef98e9d692", + "signature": "100a8c92d7faf34f6b60170d298b78246f675f6b042453e92380a64f1439f6b3", + "affectsGlobalScope": false + }, + "./src/hooks/listener.ts": { + "version": "3f8194b8f56b1518865e6eb0978d64716887dd6f372b64e0a493e1adfe0eac53", + "signature": "b7fa11a29212b20267d66c7aa6d9d6c4b7321152dcfe5fea8b97cbba6b06eb8c", + "affectsGlobalScope": false + }, + "./src/hooks/notification.ts": { + "version": "23da51c3574ae4a4eafe4dc36cb44b098105d763c0ad105ec05cb67368080bab", + "signature": "7addb846a4bb53a1b25ac8900334fd6b73340c134a1be1effc9267347f1c9555", + "affectsGlobalScope": false + }, + "./src/hooks/notifications.ts": { + "version": "590300a89ef4719ad2b69908057b65901991580588fcb4ca998b5efb97461469", + "signature": "2137b357069b96c9ec9afd2a70140e74a8c97d3fddc503b3e5943940be272c0a", + "affectsGlobalScope": false + }, + "./src/hooks/order.ts": { + "version": "0f74614b3539f8d76f6cc9be337b14eaa59bce0b519b3ab6284e1e9895fd96f9", + "signature": "e221b2a7e9092966d245443db820f4059462bc71bcf7f547d0844c2445fe7f10", + "affectsGlobalScope": false + }, + "./src/hooks/product.ts": { + "version": "a6837709e078ffc860f4b166ed06a6592e1a3d8ae30ba28f9cbdd364f1383fa8", + "signature": "2a9eed2d24bd3af773eb764df4aa19fee0119602439eb172872281be9fd0d8ff", + "affectsGlobalScope": false + }, + "./src/hooks/tips.ts": { + "version": "6dd3685ea439b7e06531cb3db0bab85d0fe71b466349afd3a65cf0dff3322a01", + "signature": "0ab04f7e8a3f649db8a7ce73882b40c6e88761faabebfab4126a4bcf584708d7", + "affectsGlobalScope": false + }, + "./src/hooks/transfer.ts": { + "version": "3bf2a213bde75a180c3f4f09d1e8bae5db7e4c6c4e25a8f53fe529ed400a44ac", + "signature": "c599ccb25328c84661aa3eab931b36a1fbcaaf660b7607b7cab8aec7f538fb63", + "affectsGlobalScope": false + }, + "./src/i18n/index.tsx": { + "version": "7327d1c0f26a31a60c6957e245ee5ac5e6c3e3f92a1ee1f0552dad2343dfd9ce", + "signature": "06d2b1bcf20ad5341a4f9a82b6804be059e5f5d0aed17ae8b1c3d4bba74b867f", + "affectsGlobalScope": false + }, + "./src/pages/DepletedTip.tsx": { + "version": "33cbfc54d746eb9e53ee0c797eb80f144b69fb06c04e99f2ec71009882c29cdc", + "signature": "97f36a2ceb55edc9b749d00f5cdb54eaed31e83d69772fe64e1f54f6d35f07c0", + "affectsGlobalScope": false + }, + "./src/pages/OfferRefund.tsx": { + "version": "7c2849f13472f95105312514aee7aeca2d24a772cdf1c883fbc0d81f5d458980", + "signature": "365555b8b6815afadbaed23c1e87d4dfb71ca4e94c1fdab26291eecb784420a7", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@linaria+core@3.0.0-beta.4/node_modules/@linaria/core/types/CSSProperties.d.ts": { + "version": "278b91531540f4d1d4b4f9e065e733d057d70dc8fa7d995aba6077567e541e8f", + "signature": "278b91531540f4d1d4b4f9e065e733d057d70dc8fa7d995aba6077567e541e8f", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@linaria+core@3.0.0-beta.4/node_modules/@linaria/core/types/StyledMeta.d.ts": { + "version": "cfd5cd3560f111d6025dd6ed498fc9f6d6f4463018b4b0f1418bf2dc5a4655ea", + "signature": "cfd5cd3560f111d6025dd6ed498fc9f6d6f4463018b4b0f1418bf2dc5a4655ea", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@linaria+core@3.0.0-beta.4/node_modules/@linaria/core/types/css.d.ts": { + "version": "d6dbc3dc9f8dabbe2a51472c60be357ee7a0d908543fe56610ad3eda1b216ff9", + "signature": "d6dbc3dc9f8dabbe2a51472c60be357ee7a0d908543fe56610ad3eda1b216ff9", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@linaria+core@3.0.0-beta.4/node_modules/@linaria/core/types/cx.d.ts": { + "version": "db99d48b25ff0ffa61a6825514a6b5debf0760aee74785f2230e8b35dbb8c358", + "signature": "db99d48b25ff0ffa61a6825514a6b5debf0760aee74785f2230e8b35dbb8c358", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@linaria+core@3.0.0-beta.4/node_modules/@linaria/core/types/index.d.ts": { + "version": "29cbfb141e67f9b2d56bc918e3e193b4ecb2735e8e4d563e5401f12e8dbd5723", + "signature": "29cbfb141e67f9b2d56bc918e3e193b4ecb2735e8e4d563e5401f12e8dbd5723", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@linaria+react@3.0.0-beta.7/node_modules/@linaria/react/types/styled.d.ts": { + "version": "d181b3ad1cb0259b249d63c3cd51035fed2698be8ad509dd737b70f39aad8916", + "signature": "d181b3ad1cb0259b249d63c3cd51035fed2698be8ad509dd737b70f39aad8916", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@linaria+react@3.0.0-beta.7/node_modules/@linaria/react/types/index.d.ts": { + "version": "7b09387e5fa8f5b95206daa783134b237c0fce0e5c330403df317361286de23f", + "signature": "7b09387e5fa8f5b95206daa783134b237c0fce0e5c330403df317361286de23f", + "affectsGlobalScope": false + }, + "./src/pages/OfferTip.tsx": { + "version": "4b3c27749fee337c302e7d80a41fbcc9d0acb77b19151e91f7bc97ef435108d1", + "signature": "bbf15d4b62bce6a370e8cd72d84103331eb524e5d59eb323baeb53df0a999227", + "affectsGlobalScope": false + }, + "./src/pages/RequestPayment.tsx": { + "version": "084a4bf65592b83618772118de5a1a7d97ef48207c44b010777826841d892e2c", + "signature": "bf0817a3d2d34b81564e8c8e74541ec410d5377ba8672c7fe60c49a099e6cce1", + "affectsGlobalScope": false + }, + "./src/pages/ShowOrderDetails.tsx": { + "version": "12ce47dd0a5087aa7f29a4e53b9e4687424a87f5537f779ad38ea21b375c39ce", + "signature": "d948db2f7c1a3d5ae10b080688287439a49723e513431142e9b2ecd117855c0f", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/taler-error-codes.d.ts": { + "version": "009a10f64712ba2639bc4072fe7886e9c22c802ec27720d60a0f2ef77763b0b9", + "signature": "009a10f64712ba2639bc4072fe7886e9c22c802ec27720d60a0f2ef77763b0b9", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/codec.d.ts": { + "version": "44025fa8aaf8e2fdb65fb8eeec70227398a80f1c1a388f4690028ce9d17e374a", + "signature": "44025fa8aaf8e2fdb65fb8eeec70227398a80f1c1a388f4690028ce9d17e374a", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/time.d.ts": { + "version": "da7b209579d85b9438ffd90f654fceb0799e28d87116f05a4fc688fb30c0ce2d", + "signature": "da7b209579d85b9438ffd90f654fceb0799e28d87116f05a4fc688fb30c0ce2d", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/talerTypes.d.ts": { + "version": "f41a1dca362892daf45164a67d9c127617bfb09fa993df5c0966f53e5ccd3c56", + "signature": "f41a1dca362892daf45164a67d9c127617bfb09fa993df5c0966f53e5ccd3c56", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/amounts.d.ts": { + "version": "cd3723cb54f9f94943b53d81371b1aa02db3e0aa1e03784d94a7f5e5473eb244", + "signature": "cd3723cb54f9f94943b53d81371b1aa02db3e0aa1e03784d94a7f5e5473eb244", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/backupTypes.d.ts": { + "version": "28c3383d158e6c4c9b4daded129e37353ca5bb9ec07f8c6c81b713b5c93c814f", + "signature": "28c3383d158e6c4c9b4daded129e37353ca5bb9ec07f8c6c81b713b5c93c814f", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/helpers.d.ts": { + "version": "379cdf766e9f8d4b7e7841361c16acd82f6c76a29f00750b20b121ee32e6b770", + "signature": "379cdf766e9f8d4b7e7841361c16acd82f6c76a29f00750b20b121ee32e6b770", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/libtool-version.d.ts": { + "version": "2c676bd1a351c303871a4fd861a0142a21cb2a6ed6e9d3238410721dea5b3a69", + "signature": "2c676bd1a351c303871a4fd861a0142a21cb2a6ed6e9d3238410721dea5b3a69", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/transactionsTypes.d.ts": { + "version": "6fd1a054f1c9449e1fbc77676c81a1b6059dab821de9c94feb45d1938961209a", + "signature": "6fd1a054f1c9449e1fbc77676c81a1b6059dab821de9c94feb45d1938961209a", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/walletTypes.d.ts": { + "version": "9db38041d762025587496aae9fc4392a4728f988be77bca5ecc84b2c25ec27c7", + "signature": "9db38041d762025587496aae9fc4392a4728f988be77bca5ecc84b2c25ec27c7", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/notifications.d.ts": { + "version": "116ebb1f7fb8b3d223accd0dee0aa62e6f9cc4236d8400052d95e5b40908de2e", + "signature": "116ebb1f7fb8b3d223accd0dee0aa62e6f9cc4236d8400052d95e5b40908de2e", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/payto.d.ts": { + "version": "0f33fd5b5cff9ab40543b85ba6ea596042197a0470ee184414e2d415aae675fe", + "signature": "0f33fd5b5cff9ab40543b85ba6ea596042197a0470ee184414e2d415aae675fe", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/ReserveTransaction.d.ts": { + "version": "d12aa80a7e59c6a9d63460d432a913609716648159c4fa944718faec1e1b90b1", + "signature": "d12aa80a7e59c6a9d63460d432a913609716648159c4fa944718faec1e1b90b1", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/ReserveStatus.d.ts": { + "version": "931ab7a592ba3a7552a4448c4c050146d9ef43bb3d927bea32f9b367b1a3c98e", + "signature": "931ab7a592ba3a7552a4448c4c050146d9ef43bb3d927bea32f9b367b1a3c98e", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/talerconfig.d.ts": { + "version": "1c47a1ac8c41daf679dfaf8b907c194df2189edcbe3731a530b0c4687047ce12", + "signature": "1c47a1ac8c41daf679dfaf8b907c194df2189edcbe3731a530b0c4687047ce12", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/taleruri.d.ts": { + "version": "cc9041b68cd6a78284d03b39784e776bbc53cbde50c68d0e48feb406eef0f9e3", + "signature": "cc9041b68cd6a78284d03b39784e776bbc53cbde50c68d0e48feb406eef0f9e3", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/index.d.ts": { + "version": "c6f035fa8650966b9ba22e26649017134da40f67b59de5d7d3a8ecaa853e1aa9", + "signature": "c6f035fa8650966b9ba22e26649017134da40f67b59de5d7d3a8ecaa853e1aa9", + "affectsGlobalScope": false + }, + "./src/utils/amount.ts": { + "version": "8c9970197739230e71cf2d4eb51d8d04dc6b2ffc9292c61ed946583eb85867d2", + "signature": "2aebde42f8ba9480ec22ab05c122c7e5a3ddeb973e0d994b898e9d4da35e3cd6", + "affectsGlobalScope": false + }, + "./src/utils/table.ts": { + "version": "15bdc778277e379ef966214ea8d21791a178b5f38b4e862b940de61ca28768fd", + "signature": "3e5f5d10406b5b10d670eea723e36ccad043afd9edda3508108d989137dea3bf", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/assert/strict.d.ts": { + "version": "c7bdc99177a2a94d25fb13722adaaf5b3291bf70b4d1b27584ba189dd3889ba3", + "signature": "c7bdc99177a2a94d25fb13722adaaf5b3291bf70b4d1b27584ba189dd3889ba3", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/globals.d.ts": { + "version": "5402314c88d0127f63f94a0272f79e04ea0fc010ff6da6613807504c4163a1ad", + "signature": "5402314c88d0127f63f94a0272f79e04ea0fc010ff6da6613807504c4163a1ad", + "affectsGlobalScope": true + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/async_hooks.d.ts": { + "version": "d20f08527645f62facb2d66c2b7bd31ea964b59c897d00bddb1efe8c13890b72", + "signature": "d20f08527645f62facb2d66c2b7bd31ea964b59c897d00bddb1efe8c13890b72", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/buffer.d.ts": { + "version": "5726b5ce952dc5beaeb08d5f64236632501568a54a390363d2339ba1dc5393b1", + "signature": "5726b5ce952dc5beaeb08d5f64236632501568a54a390363d2339ba1dc5393b1", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/child_process.d.ts": { + "version": "674bedbfd2004e233e2a266a3d2286e524f0d58787a98522d834d6ccda1d215a", + "signature": "674bedbfd2004e233e2a266a3d2286e524f0d58787a98522d834d6ccda1d215a", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/cluster.d.ts": { + "version": "714637d594e1a38a075091fe464ca91c6abc0b154784b4287f6883200e28ccef", + "signature": "714637d594e1a38a075091fe464ca91c6abc0b154784b4287f6883200e28ccef", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/console.d.ts": { + "version": "23edba5f47d3409810c563fe8034ae2c59e718e1ef8570f4152ccdde1915a096", + "signature": "23edba5f47d3409810c563fe8034ae2c59e718e1ef8570f4152ccdde1915a096", + "affectsGlobalScope": true + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/constants.d.ts": { + "version": "0e9c55f894ca2d9cf63b5b0d43a8cec1772dd560233fd16275bc7a485eb82f83", + "signature": "0e9c55f894ca2d9cf63b5b0d43a8cec1772dd560233fd16275bc7a485eb82f83", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/crypto.d.ts": { + "version": "4105385afd60b90ebac359d02a186250885839122850d776c0ad0e327c1afb65", + "signature": "4105385afd60b90ebac359d02a186250885839122850d776c0ad0e327c1afb65", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/dgram.d.ts": { + "version": "5f0a09de75bd965c21dc6d73671ba88830272f9ed62897bb0aa9754b369b1eed", + "signature": "5f0a09de75bd965c21dc6d73671ba88830272f9ed62897bb0aa9754b369b1eed", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/dns.d.ts": { + "version": "12b2ab05a3ededc0e8938f2e16e4e2e30fc82b6d97b414067c26253f26fce69a", + "signature": "12b2ab05a3ededc0e8938f2e16e4e2e30fc82b6d97b414067c26253f26fce69a", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/dns/promises.d.ts": { + "version": "e4ab7077b5adff3156d258a284986dc85e0bcf0fff1670df5c7f83efc25d4cc6", + "signature": "e4ab7077b5adff3156d258a284986dc85e0bcf0fff1670df5c7f83efc25d4cc6", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/domain.d.ts": { + "version": "06d2be99c3dd2ff52114d02ee443ba486ab482423df1941d3c97d6a92e924d70", + "signature": "06d2be99c3dd2ff52114d02ee443ba486ab482423df1941d3c97d6a92e924d70", + "affectsGlobalScope": true + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/events.d.ts": { + "version": "eb15e56611c2a853526a2e202234dd1676bd37cc2fcdbd9843470f7dafb37f15", + "signature": "eb15e56611c2a853526a2e202234dd1676bd37cc2fcdbd9843470f7dafb37f15", + "affectsGlobalScope": true + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/fs.d.ts": { + "version": "2e0b4284620082f63b144da8096b207e9e9590c0e599834332b90624db0cc4a8", + "signature": "2e0b4284620082f63b144da8096b207e9e9590c0e599834332b90624db0cc4a8", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/fs/promises.d.ts": { + "version": "c98ce957db9eebd75f53edda3f6893e05ab2d2283b5667b18e31bcdb6427ed10", + "signature": "c98ce957db9eebd75f53edda3f6893e05ab2d2283b5667b18e31bcdb6427ed10", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/http.d.ts": { + "version": "37eed30fc8318b8ac76eac6f41d0758a9d0bffd8f3ff353e3ad0f8717dd08d92", + "signature": "37eed30fc8318b8ac76eac6f41d0758a9d0bffd8f3ff353e3ad0f8717dd08d92", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/http2.d.ts": { + "version": "2f69728fd1ca1f381879bbf20a42ae47a8f7286e000afd138c6cf870d90d882f", + "signature": "2f69728fd1ca1f381879bbf20a42ae47a8f7286e000afd138c6cf870d90d882f", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/https.d.ts": { + "version": "1978992206803f5761e99e893d93b25abc818c5fe619674fdf2ae02b29f641ba", + "signature": "1978992206803f5761e99e893d93b25abc818c5fe619674fdf2ae02b29f641ba", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/inspector.d.ts": { + "version": "05fbe81f09fc455a2c343d2458d2b3c600c90b92b22926be765ee79326be9466", + "signature": "05fbe81f09fc455a2c343d2458d2b3c600c90b92b22926be765ee79326be9466", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/module.d.ts": { + "version": "8e7d6dae9e19bbe47600dcfd4418db85b30ae7351474ea0aad5e628f9845d340", + "signature": "8e7d6dae9e19bbe47600dcfd4418db85b30ae7351474ea0aad5e628f9845d340", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/net.d.ts": { + "version": "2c381d36201776828c67a307ad5fd8cbcf9ecaffb1fc7f77f7ce433d1a632b7f", + "signature": "2c381d36201776828c67a307ad5fd8cbcf9ecaffb1fc7f77f7ce433d1a632b7f", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/os.d.ts": { + "version": "32542c4660ecda892a333a533feedba31738ee538ef6a78eb73af647137bc3fc", + "signature": "32542c4660ecda892a333a533feedba31738ee538ef6a78eb73af647137bc3fc", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/path.d.ts": { + "version": "0ecacea5047d1a7d350e7049dbd22f26435be5e8736a81a56afec5b3264db1ca", + "signature": "0ecacea5047d1a7d350e7049dbd22f26435be5e8736a81a56afec5b3264db1ca", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/perf_hooks.d.ts": { + "version": "ffcb4ebde21f83370ed402583888b28651d2eb7f05bfec9482eb46d82adedd7f", + "signature": "ffcb4ebde21f83370ed402583888b28651d2eb7f05bfec9482eb46d82adedd7f", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/process.d.ts": { + "version": "fcb95c45150c717706119f12f2a3639d51baa041cd5bb441eb8501e04b52c501", + "signature": "fcb95c45150c717706119f12f2a3639d51baa041cd5bb441eb8501e04b52c501", + "affectsGlobalScope": true + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/punycode.d.ts": { + "version": "a7b43c69f9602d198825e403ee34e5d64f83c48b391b2897e8c0e6f72bca35f8", + "signature": "a7b43c69f9602d198825e403ee34e5d64f83c48b391b2897e8c0e6f72bca35f8", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/querystring.d.ts": { + "version": "f4a3fc4efc6944e7b7bd4ccfa45e0df68b6359808e6cf9d061f04fd964a7b2d3", + "signature": "f4a3fc4efc6944e7b7bd4ccfa45e0df68b6359808e6cf9d061f04fd964a7b2d3", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/readline.d.ts": { + "version": "73cad675aead7a2c05cf934e7e700c61d84b2037ac1d576c3f751199b25331da", + "signature": "73cad675aead7a2c05cf934e7e700c61d84b2037ac1d576c3f751199b25331da", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/repl.d.ts": { + "version": "8c3137ba3583ec18484429ec1c8eff89efdc42730542f157b38b102fdccc0c71", + "signature": "8c3137ba3583ec18484429ec1c8eff89efdc42730542f157b38b102fdccc0c71", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/stream.d.ts": { + "version": "2b6906b19436e07d874a51a5829d94ab690337c4ee652735ab422a8f102168be", + "signature": "2b6906b19436e07d874a51a5829d94ab690337c4ee652735ab422a8f102168be", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/stream/promises.d.ts": { + "version": "1b98a8704d0c68520ccb02ac44782b7ffdaab40d23d2fa00e13923b528587f8b", + "signature": "1b98a8704d0c68520ccb02ac44782b7ffdaab40d23d2fa00e13923b528587f8b", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/string_decoder.d.ts": { + "version": "94ca7beec4e274d32362b54e0133152f7b4be9487db7b005070c03880b6363aa", + "signature": "94ca7beec4e274d32362b54e0133152f7b4be9487db7b005070c03880b6363aa", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/timers.d.ts": { + "version": "911175d5a29fce5f6f471bcab94524474a1f99eec9cb86fe96505a40ce75f972", + "signature": "911175d5a29fce5f6f471bcab94524474a1f99eec9cb86fe96505a40ce75f972", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/timers/promises.d.ts": { + "version": "8b4f4519834b57645d2483af74d6f5d1675260a5b0e9aa6026f3e021edd2c5e9", + "signature": "8b4f4519834b57645d2483af74d6f5d1675260a5b0e9aa6026f3e021edd2c5e9", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/tls.d.ts": { + "version": "bbf21f210782db4193359010a4710786add43e3b50aa42fc0d371f45b4e4d8d3", + "signature": "bbf21f210782db4193359010a4710786add43e3b50aa42fc0d371f45b4e4d8d3", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/trace_events.d.ts": { + "version": "0b7733d83619ac4e3963e2a9f7c75dc1e9af6850cb2354c9554977813092c10a", + "signature": "0b7733d83619ac4e3963e2a9f7c75dc1e9af6850cb2354c9554977813092c10a", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/tty.d.ts": { + "version": "3ce933f0c3955f67f67eb7d6b5c83c2c54a18472c1d6f2bb651e51dd40c84837", + "signature": "3ce933f0c3955f67f67eb7d6b5c83c2c54a18472c1d6f2bb651e51dd40c84837", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/url.d.ts": { + "version": "631e96db896d645f7132c488ad34a16d71fd2be9f44696f8c98289ee1c8cbfa9", + "signature": "631e96db896d645f7132c488ad34a16d71fd2be9f44696f8c98289ee1c8cbfa9", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/util.d.ts": { + "version": "2c77230d381cba81eb6f87cda2fbfff6c0427c6546c2e2590110effff37c58f7", + "signature": "2c77230d381cba81eb6f87cda2fbfff6c0427c6546c2e2590110effff37c58f7", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/v8.d.ts": { + "version": "da86ee9a2f09a4583db1d5e37815894967e1f694ad9f3c25e84e0e4d40411e14", + "signature": "da86ee9a2f09a4583db1d5e37815894967e1f694ad9f3c25e84e0e4d40411e14", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/vm.d.ts": { + "version": "141a943e5690105898a67537a470f70b56d0e183441b56051d929e902376b7b2", + "signature": "141a943e5690105898a67537a470f70b56d0e183441b56051d929e902376b7b2", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/worker_threads.d.ts": { + "version": "0124e458b12ba82b08c87220a1c9d4fb7701dcda8f11e28f7d7266281501bcba", + "signature": "0124e458b12ba82b08c87220a1c9d4fb7701dcda8f11e28f7d7266281501bcba", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/zlib.d.ts": { + "version": "515ef1d99036ff0dafa5bf738e02222edea94e0d97a0aa0ff277ac5e96b57977", + "signature": "515ef1d99036ff0dafa5bf738e02222edea94e0d97a0aa0ff277ac5e96b57977", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/globals.global.d.ts": { + "version": "2708349d5a11a5c2e5f3a0765259ebe7ee00cdcc8161cb9990cb4910328442a1", + "signature": "2708349d5a11a5c2e5f3a0765259ebe7ee00cdcc8161cb9990cb4910328442a1", + "affectsGlobalScope": true + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/wasi.d.ts": { + "version": "780058f4a804c8bdcdd2f60e7af64b2bc57d149c1586ee3db732a84d659a50bf", + "signature": "780058f4a804c8bdcdd2f60e7af64b2bc57d149c1586ee3db732a84d659a50bf", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/ts3.6/base.d.ts": { + "version": "210ef68f34baca2a4499c07a51f05d51b4f0ef01d64efea3017cb3bc31c37e33", + "signature": "210ef68f34baca2a4499c07a51f05d51b4f0ef01d64efea3017cb3bc31c37e33", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/assert.d.ts": { + "version": "19d580a3b42ad5caeaee266ae958260e23f2df0549ee201c886c8bd7a4f01d4e", + "signature": "19d580a3b42ad5caeaee266ae958260e23f2df0549ee201c886c8bd7a4f01d4e", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/base.d.ts": { + "version": "e61a21e9418f279bc480394a94d1581b2dee73747adcbdef999b6737e34d721b", + "signature": "e61a21e9418f279bc480394a94d1581b2dee73747adcbdef999b6737e34d721b", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/index.d.ts": { + "version": "6c9c7e459e013ddf52c70b90f88bbdd925e483ef984d80f9bffb501029974e82", + "signature": "6c9c7e459e013ddf52c70b90f88bbdd925e483ef984d80f9bffb501029974e82", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+cheerio@0.22.28/node_modules/@types/cheerio/index.d.ts": { + "version": "496086e48c978c6410a7dd1fee3c2c8f7abf297ed9f32e92672358c5ff9d1035", + "signature": "496086e48c978c6410a7dd1fee3c2c8f7abf297ed9f32e92672358c5ff9d1035", + "affectsGlobalScope": true + }, + "../../node_modules/.pnpm/@types+enzyme@3.10.8/node_modules/@types/enzyme/index.d.ts": { + "version": "c9f092fa413eb709080f1494dcbb4a18757e84eb5d2b8bb0cc84f73d84a70dd7", + "signature": "c9f092fa413eb709080f1494dcbb4a18757e84eb5d2b8bb0cc84f73d84a70dd7", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/DOMUtils.d.ts": { + "version": "271cde49dfd9b398ccc91bb3aaa43854cf76f4d14e10fed91cbac649aa6cbc63", + "signature": "271cde49dfd9b398ccc91bb3aaa43854cf76f4d14e10fed91cbac649aa6cbc63", + "affectsGlobalScope": true + }, + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/createBrowserHistory.d.ts": { + "version": "c6f2572e21f626260d2e4a65e4e1e42b9b273b6f43b5c3bc115c2926417d3eca", + "signature": "c6f2572e21f626260d2e4a65e4e1e42b9b273b6f43b5c3bc115c2926417d3eca", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/createHashHistory.d.ts": { + "version": "374ab77e05e0bf5a52acad6d65121d4bd31068108f23d70186dba5fcd7d6a1a3", + "signature": "374ab77e05e0bf5a52acad6d65121d4bd31068108f23d70186dba5fcd7d6a1a3", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/createMemoryHistory.d.ts": { + "version": "a4ecd4bb653aa71093375845fba6250ca0f3c633d0e933fc9bf4b301834eab27", + "signature": "a4ecd4bb653aa71093375845fba6250ca0f3c633d0e933fc9bf4b301834eab27", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/LocationUtils.d.ts": { + "version": "25d91fb9ed77a828cc6c7a863236fb712dafcd52f816eec481bd0c1f589f4404", + "signature": "25d91fb9ed77a828cc6c7a863236fb712dafcd52f816eec481bd0c1f589f4404", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/PathUtils.d.ts": { + "version": "4cd14cea22eed1bfb0dc76183e56989f897ac5b14c0e2a819e5162eafdcfe243", + "signature": "4cd14cea22eed1bfb0dc76183e56989f897ac5b14c0e2a819e5162eafdcfe243", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/index.d.ts": { + "version": "cc53cba64efb30576f2a36f1d7107e4453e84cbd0f371d49cd1dfd208e11233b", + "signature": "cc53cba64efb30576f2a36f1d7107e4453e84cbd0f371d49cd1dfd208e11233b", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/jest-diff@26.6.2/node_modules/jest-diff/build/cleanupSemantic.d.ts": { + "version": "d8aab31ba8e618cc3eea10b0945de81cb93b7e8150a013a482332263b9305322", + "signature": "d8aab31ba8e618cc3eea10b0945de81cb93b7e8150a013a482332263b9305322", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/jest-diff@26.6.2/node_modules/jest-diff/build/types.d.ts": { + "version": "69da61a7b5093dac77fa3bec8be95dcf9a74c95a0e9161edb98bb24e30e439d2", + "signature": "69da61a7b5093dac77fa3bec8be95dcf9a74c95a0e9161edb98bb24e30e439d2", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/jest-diff@26.6.2/node_modules/jest-diff/build/diffLines.d.ts": { + "version": "561eca7a381b96d6ccac6e4061e6d2ae53f5bc44203f3fd9f5b26864c32ae6e9", + "signature": "561eca7a381b96d6ccac6e4061e6d2ae53f5bc44203f3fd9f5b26864c32ae6e9", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/jest-diff@26.6.2/node_modules/jest-diff/build/printDiffs.d.ts": { + "version": "62ea38627e3ebab429f7616812a9394d327c2bc271003dfba985de9b4137369f", + "signature": "62ea38627e3ebab429f7616812a9394d327c2bc271003dfba985de9b4137369f", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/jest-diff@26.6.2/node_modules/jest-diff/build/index.d.ts": { + "version": "b4439890c168d646357928431100daac5cbdee1d345a34e6bf6eca9f3abe22bc", + "signature": "b4439890c168d646357928431100daac5cbdee1d345a34e6bf6eca9f3abe22bc", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/pretty-format@26.6.2/node_modules/pretty-format/build/types.d.ts": { + "version": "5d72971a459517c44c1379dab9ed248e87a61ba0a1e0f25c9d67e1e640cd9a09", + "signature": "5d72971a459517c44c1379dab9ed248e87a61ba0a1e0f25c9d67e1e640cd9a09", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/pretty-format@26.6.2/node_modules/pretty-format/build/index.d.ts": { + "version": "02d734976af36f4273d930bea88b3e62adf6b078cf120c1c63d49aa8d8427c5c", + "signature": "02d734976af36f4273d930bea88b3e62adf6b078cf120c1c63d49aa8d8427c5c", + "affectsGlobalScope": false + }, + "../../node_modules/.pnpm/@types+jest@26.0.23/node_modules/@types/jest/index.d.ts": { + "version": "bbc19287f48d4b3c753bd2c82dd9326af19cccbfa1506f859029dfcedc7c5522", + "signature": "bbc19287f48d4b3c753bd2c82dd9326af19cccbfa1506f859029dfcedc7c5522", + "affectsGlobalScope": true + }, + "../../node_modules/.pnpm/@types+mocha@8.2.2/node_modules/@types/mocha/index.d.ts": { + "version": "0359800d3b440f8515001431cde1500944e156040577425eb3f7b80af0846612", + "signature": "0359800d3b440f8515001431cde1500944e156040577425eb3f7b80af0846612", + "affectsGlobalScope": true + } + }, + "options": { + "module": 99, + "skipLibCheck": true, + "composite": true, + "lib": [ + "lib.es2015.d.ts", + "lib.dom.d.ts" + ], + "jsx": 2, + "jsxFactory": "h", + "jsxFragmentFactory": "Fragment", + "moduleResolution": 2, + "target": 2, + "noImplicitAny": true, + "outDir": "./lib", + "noEmitOnError": true, + "strict": true, + "incremental": true, + "sourceMap": true, + "esModuleInterop": true, + "importHelpers": true, + "rootDir": "./src", + "typeRoots": [ + "./node_modules/@types" + ], + "configFilePath": "./tsconfig.json", + "noEmitHelpers": true, + "noEmit": false, + "emitDeclarationOnly": false, + "noResolve": false + }, + "referencedMap": { + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/ReserveStatus.d.ts": [ + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/ReserveTransaction.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/codec.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/talerTypes.d.ts" + ], + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/ReserveTransaction.d.ts": [ + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/codec.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/talerTypes.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/time.d.ts" + ], + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/amounts.d.ts": [ + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/codec.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/talerTypes.d.ts" + ], + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/backupTypes.d.ts": [ + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/time.d.ts" + ], + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/helpers.d.ts": [ + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/amounts.d.ts" + ], + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/index.d.ts": [ + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/ReserveStatus.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/ReserveTransaction.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/amounts.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/backupTypes.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/codec.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/helpers.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/libtool-version.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/notifications.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/payto.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/taler-error-codes.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/talerTypes.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/talerconfig.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/taleruri.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/time.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/transactionsTypes.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/walletTypes.d.ts" + ], + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/notifications.d.ts": [ + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/walletTypes.d.ts" + ], + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/talerTypes.d.ts": [ + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/codec.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/time.d.ts" + ], + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/talerconfig.d.ts": [ + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/amounts.d.ts" + ], + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/time.d.ts": [ + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/codec.d.ts" + ], + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/transactionsTypes.d.ts": [ + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/codec.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/talerTypes.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/time.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/walletTypes.d.ts" + ], + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/walletTypes.d.ts": [ + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/amounts.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/backupTypes.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/codec.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/talerTypes.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/time.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/transactionsTypes.d.ts" + ], + "../../node_modules/.pnpm/@linaria+core@3.0.0-beta.4/node_modules/@linaria/core/types/css.d.ts": [ + "../../node_modules/.pnpm/@linaria+core@3.0.0-beta.4/node_modules/@linaria/core/types/CSSProperties.d.ts", + "../../node_modules/.pnpm/@linaria+core@3.0.0-beta.4/node_modules/@linaria/core/types/StyledMeta.d.ts" + ], + "../../node_modules/.pnpm/@linaria+core@3.0.0-beta.4/node_modules/@linaria/core/types/index.d.ts": [ + "../../node_modules/.pnpm/@linaria+core@3.0.0-beta.4/node_modules/@linaria/core/types/CSSProperties.d.ts", + "../../node_modules/.pnpm/@linaria+core@3.0.0-beta.4/node_modules/@linaria/core/types/StyledMeta.d.ts", + "../../node_modules/.pnpm/@linaria+core@3.0.0-beta.4/node_modules/@linaria/core/types/css.d.ts", + "../../node_modules/.pnpm/@linaria+core@3.0.0-beta.4/node_modules/@linaria/core/types/cx.d.ts" + ], + "../../node_modules/.pnpm/@linaria+react@3.0.0-beta.7/node_modules/@linaria/react/types/index.d.ts": [ + "../../node_modules/.pnpm/@linaria+core@3.0.0-beta.4/node_modules/@linaria/core/types/index.d.ts", + "../../node_modules/.pnpm/@linaria+react@3.0.0-beta.7/node_modules/@linaria/react/types/styled.d.ts" + ], + "../../node_modules/.pnpm/@linaria+react@3.0.0-beta.7/node_modules/@linaria/react/types/styled.d.ts": [ + "../../node_modules/.pnpm/@linaria+core@3.0.0-beta.4/node_modules/@linaria/core/types/index.d.ts", + "../../node_modules/.pnpm/@types+react@17.0.4/node_modules/@types/react/index.d.ts" + ], + "../../node_modules/.pnpm/@types+cheerio@0.22.28/node_modules/@types/cheerio/index.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/index.d.ts" + ], + "../../node_modules/.pnpm/@types+enzyme@3.10.8/node_modules/@types/enzyme/index.d.ts": [ + "../../node_modules/.pnpm/@types+cheerio@0.22.28/node_modules/@types/cheerio/index.d.ts", + "../../node_modules/.pnpm/@types+react@17.0.4/node_modules/@types/react/index.d.ts" + ], + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/LocationUtils.d.ts": [ + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/index.d.ts" + ], + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/PathUtils.d.ts": [ + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/index.d.ts" + ], + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/createBrowserHistory.d.ts": [ + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/DOMUtils.d.ts", + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/index.d.ts" + ], + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/createHashHistory.d.ts": [ + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/DOMUtils.d.ts", + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/index.d.ts" + ], + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/createMemoryHistory.d.ts": [ + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/DOMUtils.d.ts", + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/index.d.ts" + ], + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/index.d.ts": [ + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/LocationUtils.d.ts", + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/PathUtils.d.ts", + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/createBrowserHistory.d.ts", + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/createHashHistory.d.ts", + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/createMemoryHistory.d.ts" + ], + "../../node_modules/.pnpm/@types+jest@26.0.23/node_modules/@types/jest/index.d.ts": [ + "../../node_modules/.pnpm/jest-diff@26.6.2/node_modules/jest-diff/build/index.d.ts", + "../../node_modules/.pnpm/pretty-format@26.6.2/node_modules/pretty-format/build/index.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/assert.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/assert.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/assert/strict.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/assert.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/async_hooks.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/async_hooks.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/base.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/assert.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/ts3.6/base.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/buffer.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/buffer.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/child_process.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/child_process.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/events.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/fs.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/net.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/stream.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/cluster.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/child_process.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/cluster.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/events.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/net.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/console.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/util.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/constants.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/constants.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/crypto.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/fs.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/os.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/crypto.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/crypto.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/stream.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/dgram.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/dgram.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/dns.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/events.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/net.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/dns.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/dns.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/dns/promises.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/dns/promises.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/dns.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/dns/promises.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/domain.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/domain.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/events.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/events.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/events.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/fs.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/events.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/fs.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/fs/promises.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/stream.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/url.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/fs/promises.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/fs.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/fs/promises.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/http.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/http.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/net.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/stream.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/url.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/http2.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/events.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/fs.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/http.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/http2.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/net.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/stream.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/tls.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/url.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/https.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/http.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/https.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/tls.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/url.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/index.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/base.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/inspector.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/events.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/inspector.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/module.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/module.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/url.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/net.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/dns.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/events.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/net.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/stream.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/os.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/os.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/path.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/path.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/perf_hooks.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/async_hooks.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/perf_hooks.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/process.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/tty.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/punycode.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/punycode.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/querystring.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/querystring.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/readline.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/events.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/readline.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/repl.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/readline.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/repl.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/util.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/vm.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/stream.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/events.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/stream.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/stream/promises.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/stream/promises.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/stream.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/stream/promises.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/string_decoder.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/string_decoder.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/timers.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/timers.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/timers/promises.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/timers.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/timers/promises.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/tls.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/net.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/tls.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/trace_events.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/trace_events.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/ts3.6/base.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/assert/strict.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/async_hooks.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/buffer.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/child_process.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/cluster.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/console.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/constants.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/crypto.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/dgram.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/dns.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/dns/promises.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/domain.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/events.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/fs.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/fs/promises.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/globals.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/globals.global.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/http.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/http2.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/https.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/inspector.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/module.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/net.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/os.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/path.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/perf_hooks.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/process.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/punycode.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/querystring.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/readline.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/repl.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/stream.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/stream/promises.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/string_decoder.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/timers.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/timers/promises.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/tls.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/trace_events.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/tty.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/url.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/util.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/v8.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/vm.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/wasi.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/worker_threads.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/zlib.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/tty.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/net.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/tty.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/url.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/querystring.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/url.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/util.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/util.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/v8.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/stream.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/v8.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/vm.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/vm.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/wasi.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/wasi.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/worker_threads.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/events.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/fs/promises.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/stream.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/url.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/vm.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/worker_threads.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/zlib.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/stream.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/zlib.d.ts" + ], + "../../node_modules/.pnpm/@types+react@17.0.4/node_modules/@types/react/index.d.ts": [ + "../../node_modules/.pnpm/@types+prop-types@15.7.3/node_modules/@types/prop-types/index.d.ts", + "../../node_modules/.pnpm/@types+react@17.0.4/node_modules/@types/react/global.d.ts", + "../../node_modules/.pnpm/@types+scheduler@0.16.1/node_modules/@types/scheduler/tracing.d.ts", + "../../node_modules/.pnpm/csstype@3.0.8/node_modules/csstype/index.d.ts" + ], + "../../node_modules/.pnpm/jest-diff@26.6.2/node_modules/jest-diff/build/diffLines.d.ts": [ + "../../node_modules/.pnpm/jest-diff@26.6.2/node_modules/jest-diff/build/cleanupSemantic.d.ts", + "../../node_modules/.pnpm/jest-diff@26.6.2/node_modules/jest-diff/build/types.d.ts" + ], + "../../node_modules/.pnpm/jest-diff@26.6.2/node_modules/jest-diff/build/index.d.ts": [ + "../../node_modules/.pnpm/jest-diff@26.6.2/node_modules/jest-diff/build/cleanupSemantic.d.ts", + "../../node_modules/.pnpm/jest-diff@26.6.2/node_modules/jest-diff/build/diffLines.d.ts", + "../../node_modules/.pnpm/jest-diff@26.6.2/node_modules/jest-diff/build/printDiffs.d.ts", + "../../node_modules/.pnpm/jest-diff@26.6.2/node_modules/jest-diff/build/types.d.ts" + ], + "../../node_modules/.pnpm/jest-diff@26.6.2/node_modules/jest-diff/build/printDiffs.d.ts": [ + "../../node_modules/.pnpm/jest-diff@26.6.2/node_modules/jest-diff/build/cleanupSemantic.d.ts", + "../../node_modules/.pnpm/jest-diff@26.6.2/node_modules/jest-diff/build/types.d.ts" + ], + "../../node_modules/.pnpm/preact-router@3.2.1_preact@10.5.13/node_modules/preact-router/index.d.ts": [ + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/src/index.d.ts" + ], + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/hooks/src/index.d.ts": [ + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/src/index.d.ts" + ], + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/src/index.d.ts": [ + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/src/jsx.d.ts" + ], + "../../node_modules/.pnpm/pretty-format@26.6.2/node_modules/pretty-format/build/index.d.ts": [ + "../../node_modules/.pnpm/pretty-format@26.6.2/node_modules/pretty-format/build/types.d.ts" + ], + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/cache.d.ts": [ + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/types.d.ts" + ], + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/config.d.ts": [ + "../../node_modules/.pnpm/dequal@2.0.2/node_modules/dequal/lite/index.d.ts", + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/cache.d.ts", + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/types.d.ts" + ], + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/index.d.ts": [ + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/config.d.ts", + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/types.d.ts", + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/use-swr-infinite.d.ts", + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/use-swr.d.ts" + ], + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/use-swr-infinite.d.ts": [ + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/types.d.ts" + ], + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/use-swr.d.ts": [ + "../../node_modules/.pnpm/@types+react@17.0.4/node_modules/@types/react/index.d.ts", + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/types.d.ts" + ], + "./src/context/backend.ts": [ + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/hooks/src/index.d.ts", + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/src/index.d.ts", + "../../node_modules/.pnpm/tslib@2.3.1/node_modules/tslib/tslib.d.ts", + "./src/hooks/index.ts" + ], + "./src/context/config.ts": [ + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/hooks/src/index.d.ts", + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/src/index.d.ts", + "../../node_modules/.pnpm/tslib@2.3.1/node_modules/tslib/tslib.d.ts" + ], + "./src/context/fetch.ts": [ + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/hooks/src/index.d.ts", + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/src/index.d.ts", + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/index.d.ts", + "../../node_modules/.pnpm/tslib@2.3.1/node_modules/tslib/tslib.d.ts" + ], + "./src/context/instance.ts": [ + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/hooks/src/index.d.ts", + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/src/index.d.ts", + "../../node_modules/.pnpm/tslib@2.3.1/node_modules/tslib/tslib.d.ts" + ], + "./src/context/listener.ts": [ + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/hooks/src/index.d.ts", + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/src/index.d.ts", + "../../node_modules/.pnpm/tslib@2.3.1/node_modules/tslib/tslib.d.ts" + ], + "./src/context/translation.ts": [ + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/hooks/src/index.d.ts", + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/src/index.d.ts", + "../../node_modules/.pnpm/tslib@2.3.1/node_modules/tslib/tslib.d.ts", + "./src/custom.d.ts", + "./src/hooks/index.ts", + "./src/i18n/strings.ts" + ], + "./src/hooks/async.ts": [ + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/hooks/src/index.d.ts", + "../../node_modules/.pnpm/tslib@2.3.1/node_modules/tslib/tslib.d.ts", + "./src/hooks/backend.ts" + ], + "./src/hooks/backend.ts": [ + "../../node_modules/.pnpm/axios@0.21.1/node_modules/axios/index.d.ts", + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/hooks/src/index.d.ts", + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/index.d.ts", + "../../node_modules/.pnpm/tslib@2.3.1/node_modules/tslib/tslib.d.ts", + "./src/context/backend.ts", + "./src/declaration.d.ts", + "./src/utils/constants.ts" + ], + "./src/hooks/index.ts": [ + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/hooks/src/index.d.ts", + "../../node_modules/.pnpm/tslib@2.3.1/node_modules/tslib/tslib.d.ts", + "./src/utils/types.ts" + ], + "./src/hooks/instance.ts": [ + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/index.d.ts", + "../../node_modules/.pnpm/tslib@2.3.1/node_modules/tslib/tslib.d.ts", + "./src/context/backend.ts", + "./src/context/instance.ts", + "./src/declaration.d.ts", + "./src/hooks/backend.ts" + ], + "./src/hooks/listener.ts": [ + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/hooks/src/index.d.ts", + "../../node_modules/.pnpm/tslib@2.3.1/node_modules/tslib/tslib.d.ts" + ], + "./src/hooks/notification.ts": [ + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/hooks/src/index.d.ts", + "../../node_modules/.pnpm/tslib@2.3.1/node_modules/tslib/tslib.d.ts", + "./src/utils/types.ts" + ], + "./src/hooks/notifications.ts": [ + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/hooks/src/index.d.ts", + "../../node_modules/.pnpm/tslib@2.3.1/node_modules/tslib/tslib.d.ts", + "./src/utils/types.ts" + ], + "./src/hooks/order.ts": [ + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/hooks/src/index.d.ts", + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/index.d.ts", + "../../node_modules/.pnpm/tslib@2.3.1/node_modules/tslib/tslib.d.ts", + "./src/context/backend.ts", + "./src/context/instance.ts", + "./src/declaration.d.ts", + "./src/hooks/backend.ts", + "./src/utils/constants.ts" + ], + "./src/hooks/product.ts": [ + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/hooks/src/index.d.ts", + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/index.d.ts", + "../../node_modules/.pnpm/tslib@2.3.1/node_modules/tslib/tslib.d.ts", + "./src/context/backend.ts", + "./src/context/instance.ts", + "./src/declaration.d.ts", + "./src/hooks/backend.ts" + ], + "./src/hooks/tips.ts": [ + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/index.d.ts", + "../../node_modules/.pnpm/tslib@2.3.1/node_modules/tslib/tslib.d.ts", + "./src/context/backend.ts", + "./src/context/instance.ts", + "./src/declaration.d.ts", + "./src/hooks/backend.ts" + ], + "./src/hooks/transfer.ts": [ + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/hooks/src/index.d.ts", + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/index.d.ts", + "../../node_modules/.pnpm/tslib@2.3.1/node_modules/tslib/tslib.d.ts", + "./src/context/backend.ts", + "./src/context/instance.ts", + "./src/declaration.d.ts", + "./src/hooks/backend.ts", + "./src/utils/constants.ts" + ], + "./src/i18n/index.tsx": [ + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/src/index.d.ts", + "../../node_modules/.pnpm/tslib@2.3.1/node_modules/tslib/tslib.d.ts", + "./src/context/translation.ts" + ], + "./src/i18n/strings.ts": [ + "../../node_modules/.pnpm/tslib@2.3.1/node_modules/tslib/tslib.d.ts" + ], + "./src/index.tsx": [ + "../../node_modules/.pnpm/preact-router@3.2.1_preact@10.5.13/node_modules/preact-router/index.d.ts", + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/src/index.d.ts", + "../../node_modules/.pnpm/tslib@2.3.1/node_modules/tslib/tslib.d.ts", + "./src/context/backend.ts", + "./src/context/translation.ts" + ], + "./src/pages/DepletedTip.tsx": [ + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/src/index.d.ts", + "../../node_modules/.pnpm/tslib@2.3.1/node_modules/tslib/tslib.d.ts" + ], + "./src/pages/OfferRefund.tsx": [ + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/hooks/src/index.d.ts", + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/src/index.d.ts", + "../../node_modules/.pnpm/tslib@2.3.1/node_modules/tslib/tslib.d.ts" + ], + "./src/pages/OfferTip.tsx": [ + "../../node_modules/.pnpm/@linaria+react@3.0.0-beta.7/node_modules/@linaria/react/types/index.d.ts", + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/hooks/src/index.d.ts", + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/src/index.d.ts", + "../../node_modules/.pnpm/tslib@2.3.1/node_modules/tslib/tslib.d.ts" + ], + "./src/pages/RequestPayment.tsx": [ + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/hooks/src/index.d.ts", + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/src/index.d.ts", + "../../node_modules/.pnpm/tslib@2.3.1/node_modules/tslib/tslib.d.ts" + ], + "./src/pages/ShowOrderDetails.tsx": [ + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/hooks/src/index.d.ts", + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/src/index.d.ts", + "../../node_modules/.pnpm/tslib@2.3.1/node_modules/tslib/tslib.d.ts" + ], + "./src/utils/amount.ts": [ + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/index.d.ts", + "../../node_modules/.pnpm/tslib@2.3.1/node_modules/tslib/tslib.d.ts", + "./src/declaration.d.ts" + ], + "./src/utils/constants.ts": [ + "../../node_modules/.pnpm/tslib@2.3.1/node_modules/tslib/tslib.d.ts" + ], + "./src/utils/table.ts": [ + "../../node_modules/.pnpm/tslib@2.3.1/node_modules/tslib/tslib.d.ts", + "./src/declaration.d.ts" + ], + "./src/utils/types.ts": [ + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/src/index.d.ts", + "../../node_modules/.pnpm/tslib@2.3.1/node_modules/tslib/tslib.d.ts" + ] + }, + "exportedModulesMap": { + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/ReserveStatus.d.ts": [ + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/ReserveTransaction.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/codec.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/talerTypes.d.ts" + ], + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/ReserveTransaction.d.ts": [ + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/codec.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/talerTypes.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/time.d.ts" + ], + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/amounts.d.ts": [ + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/codec.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/talerTypes.d.ts" + ], + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/backupTypes.d.ts": [ + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/time.d.ts" + ], + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/helpers.d.ts": [ + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/amounts.d.ts" + ], + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/index.d.ts": [ + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/ReserveStatus.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/ReserveTransaction.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/amounts.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/backupTypes.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/codec.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/helpers.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/libtool-version.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/notifications.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/payto.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/taler-error-codes.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/talerTypes.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/talerconfig.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/taleruri.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/time.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/transactionsTypes.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/walletTypes.d.ts" + ], + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/notifications.d.ts": [ + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/walletTypes.d.ts" + ], + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/talerTypes.d.ts": [ + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/codec.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/time.d.ts" + ], + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/talerconfig.d.ts": [ + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/amounts.d.ts" + ], + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/time.d.ts": [ + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/codec.d.ts" + ], + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/transactionsTypes.d.ts": [ + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/codec.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/talerTypes.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/time.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/walletTypes.d.ts" + ], + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/walletTypes.d.ts": [ + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/amounts.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/backupTypes.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/codec.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/talerTypes.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/time.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/transactionsTypes.d.ts" + ], + "../../node_modules/.pnpm/@linaria+core@3.0.0-beta.4/node_modules/@linaria/core/types/css.d.ts": [ + "../../node_modules/.pnpm/@linaria+core@3.0.0-beta.4/node_modules/@linaria/core/types/CSSProperties.d.ts", + "../../node_modules/.pnpm/@linaria+core@3.0.0-beta.4/node_modules/@linaria/core/types/StyledMeta.d.ts" + ], + "../../node_modules/.pnpm/@linaria+core@3.0.0-beta.4/node_modules/@linaria/core/types/index.d.ts": [ + "../../node_modules/.pnpm/@linaria+core@3.0.0-beta.4/node_modules/@linaria/core/types/CSSProperties.d.ts", + "../../node_modules/.pnpm/@linaria+core@3.0.0-beta.4/node_modules/@linaria/core/types/StyledMeta.d.ts", + "../../node_modules/.pnpm/@linaria+core@3.0.0-beta.4/node_modules/@linaria/core/types/css.d.ts", + "../../node_modules/.pnpm/@linaria+core@3.0.0-beta.4/node_modules/@linaria/core/types/cx.d.ts" + ], + "../../node_modules/.pnpm/@linaria+react@3.0.0-beta.7/node_modules/@linaria/react/types/index.d.ts": [ + "../../node_modules/.pnpm/@linaria+core@3.0.0-beta.4/node_modules/@linaria/core/types/index.d.ts", + "../../node_modules/.pnpm/@linaria+react@3.0.0-beta.7/node_modules/@linaria/react/types/styled.d.ts" + ], + "../../node_modules/.pnpm/@linaria+react@3.0.0-beta.7/node_modules/@linaria/react/types/styled.d.ts": [ + "../../node_modules/.pnpm/@linaria+core@3.0.0-beta.4/node_modules/@linaria/core/types/index.d.ts", + "../../node_modules/.pnpm/@types+react@17.0.4/node_modules/@types/react/index.d.ts" + ], + "../../node_modules/.pnpm/@types+cheerio@0.22.28/node_modules/@types/cheerio/index.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/index.d.ts" + ], + "../../node_modules/.pnpm/@types+enzyme@3.10.8/node_modules/@types/enzyme/index.d.ts": [ + "../../node_modules/.pnpm/@types+cheerio@0.22.28/node_modules/@types/cheerio/index.d.ts", + "../../node_modules/.pnpm/@types+react@17.0.4/node_modules/@types/react/index.d.ts" + ], + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/LocationUtils.d.ts": [ + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/index.d.ts" + ], + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/PathUtils.d.ts": [ + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/index.d.ts" + ], + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/createBrowserHistory.d.ts": [ + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/DOMUtils.d.ts", + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/index.d.ts" + ], + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/createHashHistory.d.ts": [ + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/DOMUtils.d.ts", + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/index.d.ts" + ], + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/createMemoryHistory.d.ts": [ + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/DOMUtils.d.ts", + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/index.d.ts" + ], + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/index.d.ts": [ + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/LocationUtils.d.ts", + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/PathUtils.d.ts", + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/createBrowserHistory.d.ts", + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/createHashHistory.d.ts", + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/createMemoryHistory.d.ts" + ], + "../../node_modules/.pnpm/@types+jest@26.0.23/node_modules/@types/jest/index.d.ts": [ + "../../node_modules/.pnpm/jest-diff@26.6.2/node_modules/jest-diff/build/index.d.ts", + "../../node_modules/.pnpm/pretty-format@26.6.2/node_modules/pretty-format/build/index.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/assert.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/assert.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/assert/strict.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/assert.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/async_hooks.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/async_hooks.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/base.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/assert.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/ts3.6/base.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/buffer.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/buffer.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/child_process.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/child_process.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/events.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/fs.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/net.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/stream.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/cluster.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/child_process.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/cluster.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/events.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/net.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/console.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/util.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/constants.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/constants.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/crypto.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/fs.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/os.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/crypto.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/crypto.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/stream.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/dgram.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/dgram.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/dns.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/events.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/net.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/dns.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/dns.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/dns/promises.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/dns/promises.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/dns.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/dns/promises.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/domain.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/domain.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/events.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/events.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/events.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/fs.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/events.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/fs.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/fs/promises.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/stream.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/url.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/fs/promises.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/fs.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/fs/promises.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/http.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/http.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/net.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/stream.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/url.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/http2.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/events.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/fs.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/http.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/http2.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/net.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/stream.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/tls.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/url.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/https.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/http.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/https.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/tls.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/url.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/index.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/base.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/inspector.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/events.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/inspector.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/module.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/module.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/url.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/net.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/dns.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/events.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/net.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/stream.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/os.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/os.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/path.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/path.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/perf_hooks.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/async_hooks.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/perf_hooks.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/process.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/tty.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/punycode.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/punycode.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/querystring.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/querystring.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/readline.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/events.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/readline.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/repl.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/readline.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/repl.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/util.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/vm.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/stream.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/events.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/stream.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/stream/promises.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/stream/promises.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/stream.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/stream/promises.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/string_decoder.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/string_decoder.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/timers.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/timers.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/timers/promises.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/timers.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/timers/promises.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/tls.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/net.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/tls.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/trace_events.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/trace_events.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/ts3.6/base.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/assert/strict.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/async_hooks.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/buffer.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/child_process.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/cluster.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/console.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/constants.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/crypto.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/dgram.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/dns.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/dns/promises.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/domain.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/events.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/fs.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/fs/promises.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/globals.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/globals.global.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/http.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/http2.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/https.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/inspector.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/module.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/net.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/os.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/path.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/perf_hooks.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/process.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/punycode.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/querystring.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/readline.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/repl.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/stream.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/stream/promises.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/string_decoder.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/timers.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/timers/promises.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/tls.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/trace_events.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/tty.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/url.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/util.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/v8.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/vm.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/wasi.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/worker_threads.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/zlib.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/tty.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/net.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/tty.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/url.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/querystring.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/url.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/util.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/util.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/v8.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/stream.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/v8.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/vm.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/vm.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/wasi.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/wasi.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/worker_threads.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/events.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/fs/promises.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/stream.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/url.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/vm.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/worker_threads.d.ts" + ], + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/zlib.d.ts": [ + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/stream.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/zlib.d.ts" + ], + "../../node_modules/.pnpm/@types+react@17.0.4/node_modules/@types/react/index.d.ts": [ + "../../node_modules/.pnpm/@types+prop-types@15.7.3/node_modules/@types/prop-types/index.d.ts", + "../../node_modules/.pnpm/@types+react@17.0.4/node_modules/@types/react/global.d.ts", + "../../node_modules/.pnpm/@types+scheduler@0.16.1/node_modules/@types/scheduler/tracing.d.ts", + "../../node_modules/.pnpm/csstype@3.0.8/node_modules/csstype/index.d.ts" + ], + "../../node_modules/.pnpm/jest-diff@26.6.2/node_modules/jest-diff/build/diffLines.d.ts": [ + "../../node_modules/.pnpm/jest-diff@26.6.2/node_modules/jest-diff/build/cleanupSemantic.d.ts", + "../../node_modules/.pnpm/jest-diff@26.6.2/node_modules/jest-diff/build/types.d.ts" + ], + "../../node_modules/.pnpm/jest-diff@26.6.2/node_modules/jest-diff/build/index.d.ts": [ + "../../node_modules/.pnpm/jest-diff@26.6.2/node_modules/jest-diff/build/cleanupSemantic.d.ts", + "../../node_modules/.pnpm/jest-diff@26.6.2/node_modules/jest-diff/build/diffLines.d.ts", + "../../node_modules/.pnpm/jest-diff@26.6.2/node_modules/jest-diff/build/printDiffs.d.ts", + "../../node_modules/.pnpm/jest-diff@26.6.2/node_modules/jest-diff/build/types.d.ts" + ], + "../../node_modules/.pnpm/jest-diff@26.6.2/node_modules/jest-diff/build/printDiffs.d.ts": [ + "../../node_modules/.pnpm/jest-diff@26.6.2/node_modules/jest-diff/build/cleanupSemantic.d.ts", + "../../node_modules/.pnpm/jest-diff@26.6.2/node_modules/jest-diff/build/types.d.ts" + ], + "../../node_modules/.pnpm/preact-router@3.2.1_preact@10.5.13/node_modules/preact-router/index.d.ts": [ + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/src/index.d.ts" + ], + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/hooks/src/index.d.ts": [ + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/src/index.d.ts" + ], + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/src/index.d.ts": [ + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/src/jsx.d.ts" + ], + "../../node_modules/.pnpm/pretty-format@26.6.2/node_modules/pretty-format/build/index.d.ts": [ + "../../node_modules/.pnpm/pretty-format@26.6.2/node_modules/pretty-format/build/types.d.ts" + ], + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/cache.d.ts": [ + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/types.d.ts" + ], + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/config.d.ts": [ + "../../node_modules/.pnpm/dequal@2.0.2/node_modules/dequal/lite/index.d.ts", + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/cache.d.ts", + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/types.d.ts" + ], + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/index.d.ts": [ + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/config.d.ts", + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/types.d.ts", + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/use-swr-infinite.d.ts", + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/use-swr.d.ts" + ], + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/use-swr-infinite.d.ts": [ + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/types.d.ts" + ], + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/use-swr.d.ts": [ + "../../node_modules/.pnpm/@types+react@17.0.4/node_modules/@types/react/index.d.ts", + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/types.d.ts" + ], + "./src/context/backend.ts": [ + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/src/index.d.ts" + ], + "./src/context/config.ts": [ + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/src/index.d.ts" + ], + "./src/context/fetch.ts": [ + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/src/index.d.ts", + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/index.d.ts" + ], + "./src/context/instance.ts": [ + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/src/index.d.ts" + ], + "./src/context/listener.ts": [ + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/src/index.d.ts" + ], + "./src/context/translation.ts": [ + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/src/index.d.ts" + ], + "./src/hooks/backend.ts": [ + "./src/declaration.d.ts" + ], + "./src/hooks/index.ts": [ + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/hooks/src/index.d.ts" + ], + "./src/hooks/instance.ts": [ + "./src/declaration.d.ts", + "./src/hooks/backend.ts" + ], + "./src/hooks/notification.ts": [ + "./src/utils/types.ts" + ], + "./src/hooks/notifications.ts": [ + "./src/utils/types.ts" + ], + "./src/hooks/order.ts": [ + "./src/declaration.d.ts", + "./src/hooks/backend.ts" + ], + "./src/hooks/product.ts": [ + "./src/declaration.d.ts", + "./src/hooks/backend.ts" + ], + "./src/hooks/tips.ts": [ + "./src/declaration.d.ts", + "./src/hooks/backend.ts" + ], + "./src/hooks/transfer.ts": [ + "./src/declaration.d.ts", + "./src/hooks/backend.ts" + ], + "./src/i18n/index.tsx": [ + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/src/index.d.ts" + ], + "./src/index.tsx": [ + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/src/index.d.ts" + ], + "./src/pages/DepletedTip.tsx": [ + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/src/index.d.ts" + ], + "./src/pages/OfferRefund.tsx": [ + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/src/index.d.ts" + ], + "./src/pages/RequestPayment.tsx": [ + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/src/index.d.ts" + ], + "./src/pages/ShowOrderDetails.tsx": [ + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/src/index.d.ts" + ], + "./src/utils/amount.ts": [ + "./src/declaration.d.ts" + ], + "./src/utils/table.ts": [ + "./src/declaration.d.ts" + ], + "./src/utils/types.ts": [ + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/src/index.d.ts" + ] + }, + "semanticDiagnosticsPerFile": [ + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/ReserveStatus.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/ReserveTransaction.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/amounts.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/backupTypes.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/codec.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/helpers.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/index.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/libtool-version.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/notifications.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/payto.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/taler-error-codes.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/talerTypes.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/talerconfig.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/taleruri.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/time.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/transactionsTypes.d.ts", + "../../node_modules/.pnpm/@gnu-taler+taler-util@0.8.3/node_modules/@gnu-taler/taler-util/lib/walletTypes.d.ts", + "../../node_modules/.pnpm/@linaria+core@3.0.0-beta.4/node_modules/@linaria/core/types/CSSProperties.d.ts", + "../../node_modules/.pnpm/@linaria+core@3.0.0-beta.4/node_modules/@linaria/core/types/StyledMeta.d.ts", + "../../node_modules/.pnpm/@linaria+core@3.0.0-beta.4/node_modules/@linaria/core/types/css.d.ts", + "../../node_modules/.pnpm/@linaria+core@3.0.0-beta.4/node_modules/@linaria/core/types/cx.d.ts", + "../../node_modules/.pnpm/@linaria+core@3.0.0-beta.4/node_modules/@linaria/core/types/index.d.ts", + "../../node_modules/.pnpm/@linaria+react@3.0.0-beta.7/node_modules/@linaria/react/types/index.d.ts", + "../../node_modules/.pnpm/@linaria+react@3.0.0-beta.7/node_modules/@linaria/react/types/styled.d.ts", + "../../node_modules/.pnpm/@types+cheerio@0.22.28/node_modules/@types/cheerio/index.d.ts", + "../../node_modules/.pnpm/@types+enzyme@3.10.8/node_modules/@types/enzyme/index.d.ts", + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/DOMUtils.d.ts", + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/LocationUtils.d.ts", + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/PathUtils.d.ts", + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/createBrowserHistory.d.ts", + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/createHashHistory.d.ts", + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/createMemoryHistory.d.ts", + "../../node_modules/.pnpm/@types+history@4.7.8/node_modules/@types/history/index.d.ts", + "../../node_modules/.pnpm/@types+jest@26.0.23/node_modules/@types/jest/index.d.ts", + "../../node_modules/.pnpm/@types+mocha@8.2.2/node_modules/@types/mocha/index.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/assert.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/assert/strict.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/async_hooks.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/base.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/buffer.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/child_process.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/cluster.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/console.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/constants.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/crypto.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/dgram.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/dns.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/dns/promises.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/domain.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/events.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/fs.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/fs/promises.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/globals.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/globals.global.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/http.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/http2.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/https.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/index.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/inspector.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/module.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/net.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/os.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/path.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/perf_hooks.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/process.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/punycode.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/querystring.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/readline.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/repl.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/stream.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/stream/promises.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/string_decoder.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/timers.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/timers/promises.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/tls.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/trace_events.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/ts3.6/base.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/tty.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/url.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/util.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/v8.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/vm.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/wasi.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/worker_threads.d.ts", + "../../node_modules/.pnpm/@types+node@15.0.1/node_modules/@types/node/zlib.d.ts", + "../../node_modules/.pnpm/@types+prop-types@15.7.3/node_modules/@types/prop-types/index.d.ts", + "../../node_modules/.pnpm/@types+react@17.0.4/node_modules/@types/react/global.d.ts", + "../../node_modules/.pnpm/@types+react@17.0.4/node_modules/@types/react/index.d.ts", + "../../node_modules/.pnpm/@types+scheduler@0.16.1/node_modules/@types/scheduler/tracing.d.ts", + "../../node_modules/.pnpm/axios@0.21.1/node_modules/axios/index.d.ts", + "../../node_modules/.pnpm/csstype@3.0.8/node_modules/csstype/index.d.ts", + "../../node_modules/.pnpm/dequal@2.0.2/node_modules/dequal/lite/index.d.ts", + "../../node_modules/.pnpm/jest-diff@26.6.2/node_modules/jest-diff/build/cleanupSemantic.d.ts", + "../../node_modules/.pnpm/jest-diff@26.6.2/node_modules/jest-diff/build/diffLines.d.ts", + "../../node_modules/.pnpm/jest-diff@26.6.2/node_modules/jest-diff/build/index.d.ts", + "../../node_modules/.pnpm/jest-diff@26.6.2/node_modules/jest-diff/build/printDiffs.d.ts", + "../../node_modules/.pnpm/jest-diff@26.6.2/node_modules/jest-diff/build/types.d.ts", + "../../node_modules/.pnpm/preact-router@3.2.1_preact@10.5.13/node_modules/preact-router/index.d.ts", + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/hooks/src/index.d.ts", + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/src/index.d.ts", + "../../node_modules/.pnpm/preact@10.5.13/node_modules/preact/src/jsx.d.ts", + "../../node_modules/.pnpm/pretty-format@26.6.2/node_modules/pretty-format/build/index.d.ts", + "../../node_modules/.pnpm/pretty-format@26.6.2/node_modules/pretty-format/build/types.d.ts", + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/cache.d.ts", + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/config.d.ts", + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/index.d.ts", + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/types.d.ts", + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/use-swr-infinite.d.ts", + "../../node_modules/.pnpm/swr@0.5.5/node_modules/swr/dist/use-swr.d.ts", + "../../node_modules/.pnpm/tslib@2.3.1/node_modules/tslib/tslib.d.ts", + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.dom.d.ts", + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2015.collection.d.ts", + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2015.core.d.ts", + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2015.d.ts", + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2015.generator.d.ts", + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2015.iterable.d.ts", + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2015.promise.d.ts", + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2015.proxy.d.ts", + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2015.reflect.d.ts", + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2015.symbol.d.ts", + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts", + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2016.array.include.d.ts", + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2016.d.ts", + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2017.d.ts", + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2017.intl.d.ts", + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2017.object.d.ts", + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts", + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2017.string.d.ts", + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts", + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts", + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts", + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2018.d.ts", + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2018.intl.d.ts", + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2018.promise.d.ts", + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2018.regexp.d.ts", + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es2020.bigint.d.ts", + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.es5.d.ts", + "../../node_modules/.pnpm/typescript@4.2.4/node_modules/typescript/lib/lib.esnext.intl.d.ts", + "./src/context/backend.ts", + "./src/context/config.ts", + "./src/context/fetch.ts", + "./src/context/instance.ts", + "./src/context/listener.ts", + "./src/context/translation.ts", + "./src/custom.d.ts", + "./src/declaration.d.ts", + "./src/hooks/async.ts", + "./src/hooks/backend.ts", + "./src/hooks/index.ts", + "./src/hooks/instance.ts", + "./src/hooks/listener.ts", + "./src/hooks/notification.ts", + "./src/hooks/notifications.ts", + "./src/hooks/order.ts", + "./src/hooks/product.ts", + "./src/hooks/tips.ts", + "./src/hooks/transfer.ts", + "./src/i18n/index.tsx", + "./src/i18n/strings.ts", + "./src/index.tsx", + "./src/pages/DepletedTip.tsx", + "./src/pages/OfferRefund.tsx", + "./src/pages/OfferTip.tsx", + "./src/pages/RequestPayment.tsx", + "./src/pages/ShowOrderDetails.tsx", + "./src/utils/amount.ts", + "./src/utils/constants.ts", + "./src/utils/table.ts", + "./src/utils/types.ts" + ] + }, + "version": "4.2.4" +}
\ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 17ca1ec..db80473 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,6 +5,167 @@ importers: .: specifiers: {} + packages/backend: + specifiers: + '@babel/core': ^7.13.16 + '@babel/plugin-transform-react-jsx-source': ^7.12.13 + '@creativebulma/bulma-tooltip': ^1.2.0 + '@gnu-taler/pogen': ^0.0.5 + '@gnu-taler/taler-util': 0.8.3 + '@linaria/babel-preset': ^3.0.0-beta.4 + '@linaria/core': ^3.0.0-beta.4 + '@linaria/react': ^3.0.0-beta.7 + '@linaria/rollup': ^3.0.0-beta.7 + '@linaria/shaker': ^3.0.0-beta.7 + '@linaria/webpack-loader': ^3.0.0-beta.7 + '@rollup/plugin-alias': ^3.1.5 + '@rollup/plugin-babel': ^5.3.0 + '@rollup/plugin-commonjs': ^20.0.0 + '@rollup/plugin-html': ^0.2.3 + '@rollup/plugin-image': ^2.1.1 + '@rollup/plugin-json': ^4.1.0 + '@rollup/plugin-replace': ^3.0.0 + '@rollup/plugin-typescript': ^8.2.5 + '@storybook/addon-a11y': ^6.2.9 + '@storybook/addon-actions': ^6.2.9 + '@storybook/addon-essentials': ^6.2.9 + '@storybook/addon-links': ^6.2.9 + '@storybook/preact': ^6.2.9 + '@storybook/preset-scss': ^1.0.3 + '@testing-library/preact': ^2.0.1 + '@testing-library/preact-hooks': ^1.1.0 + '@types/enzyme': ^3.10.8 + '@types/history': ^4.7.8 + '@types/jest': ^26.0.23 + '@types/mocha': ^8.2.2 + '@typescript-eslint/eslint-plugin': ^4.22.0 + '@typescript-eslint/parser': ^4.22.0 + axios: ^0.21.1 + babel-loader: ^8.2.2 + base64-inline-loader: ^1.1.1 + bulma: ^0.9.2 + bulma-checkbox: ^1.1.1 + bulma-radio: ^1.1.1 + bulma-responsive-tables: ^1.2.3 + bulma-switch-control: ^1.1.1 + bulma-timeline: ^3.0.4 + bulma-upload-control: ^1.2.0 + date-fns: ^2.21.1 + dotenv: ^8.2.0 + enzyme: ^3.11.0 + enzyme-adapter-preact-pure: ^3.1.0 + eslint: ^7.25.0 + eslint-config-preact: ^1.1.4 + eslint-plugin-header: ^3.1.1 + history: 4.10.1 + html-webpack-inline-chunk-plugin: ^1.1.1 + html-webpack-inline-source-plugin: 0.0.10 + html-webpack-skip-assets-plugin: ^1.0.1 + inline-chunk-html-plugin: ^1.1.1 + jed: ^1.1.1 + jest: ^26.6.3 + jest-preset-preact: ^4.0.2 + po2json: ^0.4.5 + preact: ^10.5.13 + preact-cli: ^3.0.5 + preact-render-to-json: ^3.6.6 + preact-render-to-string: ^5.1.19 + preact-router: ^3.2.1 + qrcode-generator: ^1.4.4 + rimraf: ^3.0.2 + rollup: ^2.56.3 + rollup-plugin-bundle-html: ^0.2.2 + rollup-plugin-css-only: ^3.1.0 + sass: ^1.32.13 + sass-loader: 10.1.1 + script-ext-html-webpack-plugin: ^2.1.5 + sirv-cli: ^1.0.11 + swr: ^0.5.5 + tslib: ^2.3.1 + typedoc: ^0.20.36 + typescript: ^4.2.4 + yup: ^0.32.9 + dependencies: + '@gnu-taler/taler-util': 0.8.3 + axios: 0.21.1 + date-fns: 2.21.1 + history: 4.10.1 + jed: 1.1.1 + preact: 10.5.13 + preact-router: 3.2.1_preact@10.5.13 + qrcode-generator: 1.4.4 + swr: 0.5.5 + yup: 0.32.9 + devDependencies: + '@babel/core': 7.13.16 + '@babel/plugin-transform-react-jsx-source': 7.12.13_@babel+core@7.13.16 + '@creativebulma/bulma-tooltip': 1.2.0 + '@gnu-taler/pogen': 0.0.5 + '@linaria/babel-preset': 3.0.0-beta.4_@babel+core@7.13.16 + '@linaria/core': 3.0.0-beta.4 + '@linaria/react': 3.0.0-beta.7 + '@linaria/rollup': 3.0.0-beta.7_@babel+core@7.13.16 + '@linaria/shaker': 3.0.0-beta.7_@babel+core@7.13.16 + '@linaria/webpack-loader': 3.0.0-beta.7_@babel+core@7.13.16 + '@rollup/plugin-alias': 3.1.5_rollup@2.56.3 + '@rollup/plugin-babel': 5.3.0_8de00bbc60363a799c112a94aa42ce04 + '@rollup/plugin-commonjs': 20.0.0_rollup@2.56.3 + '@rollup/plugin-html': 0.2.3_rollup@2.56.3 + '@rollup/plugin-image': 2.1.1_rollup@2.56.3 + '@rollup/plugin-json': 4.1.0_rollup@2.56.3 + '@rollup/plugin-replace': 3.0.0_rollup@2.56.3 + '@rollup/plugin-typescript': 8.2.5_52bfe26783e4623e07fb410e57a77991 + '@storybook/addon-a11y': 6.2.9 + '@storybook/addon-actions': 6.2.9 + '@storybook/addon-essentials': 6.2.9_472ba1443a3a7dfb9d5f96aaff5418de + '@storybook/addon-links': 6.2.9 + '@storybook/preact': 6.2.9_882cc89bf78b48705bbb2db542e898fd + '@storybook/preset-scss': 1.0.3_sass-loader@10.1.1 + '@testing-library/preact': 2.0.1_preact@10.5.13 + '@testing-library/preact-hooks': 1.1.0_8a3b8354086a0a31d950b2aa8b26d524 + '@types/enzyme': 3.10.8 + '@types/history': 4.7.8 + '@types/jest': 26.0.23 + '@types/mocha': 8.2.2 + '@typescript-eslint/eslint-plugin': 4.22.0_e3b52a83531895e7febd6ecd5ba813eb + '@typescript-eslint/parser': 4.22.0_eslint@7.25.0+typescript@4.2.4 + babel-loader: 8.2.2_@babel+core@7.13.16 + base64-inline-loader: 1.1.1 + bulma: 0.9.2 + bulma-checkbox: 1.1.1 + bulma-radio: 1.1.1 + bulma-responsive-tables: 1.2.3 + bulma-switch-control: 1.1.1 + bulma-timeline: 3.0.4 + bulma-upload-control: 1.2.0 + dotenv: 8.2.0 + enzyme: 3.11.0 + enzyme-adapter-preact-pure: 3.1.0_enzyme@3.11.0+preact@10.5.13 + eslint: 7.25.0 + eslint-config-preact: 1.1.4_eslint@7.25.0+typescript@4.2.4 + eslint-plugin-header: 3.1.1_eslint@7.25.0 + html-webpack-inline-chunk-plugin: 1.1.1 + html-webpack-inline-source-plugin: 0.0.10 + html-webpack-skip-assets-plugin: 1.0.1 + inline-chunk-html-plugin: 1.1.1 + jest: 26.6.3 + jest-preset-preact: 4.0.2_669f037bdb6c36f0a67e918c516dafdd + po2json: 0.4.5 + preact-cli: 3.0.5_c069246dc1d99535ac277c76f8ef56e0 + preact-render-to-json: 3.6.6_preact@10.5.13 + preact-render-to-string: 5.1.19_preact@10.5.13 + rimraf: 3.0.2 + rollup: 2.56.3 + rollup-plugin-bundle-html: 0.2.2 + rollup-plugin-css-only: 3.1.0_rollup@2.56.3 + sass: 1.32.13 + sass-loader: 10.1.1_sass@1.32.13 + script-ext-html-webpack-plugin: 2.1.5 + sirv-cli: 1.0.11 + tslib: 2.3.1 + typedoc: 0.20.36_typescript@4.2.4 + typescript: 4.2.4 + packages/frontend: specifiers: '@babel/core': ^7.13.16 @@ -219,7 +380,7 @@ packages: resolution: {integrity: sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==} dependencies: '@babel/helper-explode-assignable-expression': 7.13.0 - '@babel/types': 7.13.17 + '@babel/types': 7.15.0 dev: true /@babel/helper-compilation-targets/7.13.16_@babel+core@7.13.16: @@ -277,15 +438,15 @@ packages: - supports-color dev: true - /@babel/helper-define-polyfill-provider/0.2.0_@babel+core@7.13.16: - resolution: {integrity: sha512-JT8tHuFjKBo8NnaUbblz7mIu1nnvUDiHVjXXkulZULyidvo/7P6TY7+YqpV37IfF+KUFxmlK04elKtGKXaiVgw==} + /@babel/helper-define-polyfill-provider/0.2.3_@babel+core@7.13.16: + resolution: {integrity: sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==} peerDependencies: '@babel/core': ^7.4.0-0 dependencies: '@babel/core': 7.13.16 '@babel/helper-compilation-targets': 7.13.16_@babel+core@7.13.16 - '@babel/helper-module-imports': 7.13.12 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-module-imports': 7.14.5 + '@babel/helper-plugin-utils': 7.14.5 '@babel/traverse': 7.13.17 debug: 4.3.1 lodash.debounce: 4.0.8 @@ -298,7 +459,7 @@ packages: /@babel/helper-explode-assignable-expression/7.13.0: resolution: {integrity: sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==} dependencies: - '@babel/types': 7.13.17 + '@babel/types': 7.15.0 dev: true /@babel/helper-function-name/7.12.13: @@ -319,7 +480,7 @@ packages: resolution: {integrity: sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==} dependencies: '@babel/traverse': 7.13.17 - '@babel/types': 7.13.17 + '@babel/types': 7.15.0 transitivePeerDependencies: - supports-color dev: true @@ -336,6 +497,13 @@ packages: '@babel/types': 7.13.17 dev: true + /@babel/helper-module-imports/7.14.5: + resolution: {integrity: sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.15.0 + dev: true + /@babel/helper-module-transforms/7.13.14: resolution: {integrity: sha512-QuU/OJ0iAOSIatyVZmfqB0lbkVP0kDRiKj34xy+QNsnVZi/PA6BoSoreeqnxxa9EHFAIL0R9XOaAR/G9WlIy5g==} dependencies: @@ -365,12 +533,17 @@ packages: resolution: {integrity: sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==} dev: true + /@babel/helper-plugin-utils/7.14.5: + resolution: {integrity: sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-remap-async-to-generator/7.13.0: resolution: {integrity: sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==} dependencies: '@babel/helper-annotate-as-pure': 7.12.13 '@babel/helper-wrap-function': 7.13.0 - '@babel/types': 7.13.17 + '@babel/types': 7.15.0 transitivePeerDependencies: - supports-color dev: true @@ -408,6 +581,11 @@ packages: resolution: {integrity: sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==} dev: true + /@babel/helper-validator-identifier/7.14.9: + resolution: {integrity: sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-validator-option/7.12.17: resolution: {integrity: sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==} dev: true @@ -418,7 +596,7 @@ packages: '@babel/helper-function-name': 7.12.13 '@babel/template': 7.12.13 '@babel/traverse': 7.13.17 - '@babel/types': 7.13.17 + '@babel/types': 7.15.0 transitivePeerDependencies: - supports-color dev: true @@ -453,7 +631,7 @@ packages: '@babel/core': ^7.13.0 dependencies: '@babel/core': 7.13.16 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-plugin-utils': 7.14.5 '@babel/helper-skip-transparent-expression-wrappers': 7.12.1 '@babel/plugin-proposal-optional-chaining': 7.13.12_@babel+core@7.13.16 dev: true @@ -464,7 +642,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.13.16 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-plugin-utils': 7.14.5 '@babel/helper-remap-async-to-generator': 7.13.0 '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.13.16 transitivePeerDependencies: @@ -502,7 +680,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.13.16 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-plugin-utils': 7.14.5 '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.13.16 dev: true @@ -522,7 +700,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.13.16 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-plugin-utils': 7.14.5 '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.13.16 dev: true @@ -532,7 +710,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.13.16 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-plugin-utils': 7.14.5 '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.13.16 dev: true @@ -542,7 +720,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.13.16 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-plugin-utils': 7.14.5 '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.13.16 dev: true @@ -562,7 +740,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.13.16 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-plugin-utils': 7.14.5 '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.13.16 dev: true @@ -596,7 +774,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.13.16 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-plugin-utils': 7.14.5 '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.13.16 dev: true @@ -631,7 +809,7 @@ packages: dependencies: '@babel/core': 7.13.16 '@babel/helper-create-regexp-features-plugin': 7.12.17_@babel+core@7.13.16 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-plugin-utils': 7.14.5 dev: true /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.13.16: @@ -676,7 +854,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.13.16 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-plugin-utils': 7.14.5 dev: true /@babel/plugin-syntax-export-default-from/7.12.13_@babel+core@7.13.16: @@ -694,7 +872,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.13.16 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-plugin-utils': 7.14.5 dev: true /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.13.16: @@ -829,8 +1007,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.13.16 - '@babel/helper-module-imports': 7.13.12 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-module-imports': 7.14.5 + '@babel/helper-plugin-utils': 7.14.5 '@babel/helper-remap-async-to-generator': 7.13.0 transitivePeerDependencies: - supports-color @@ -842,7 +1020,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.13.16 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-plugin-utils': 7.14.5 dev: true /@babel/plugin-transform-block-scoping/7.13.16_@babel+core@7.13.16: @@ -877,7 +1055,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.13.16 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-plugin-utils': 7.14.5 dev: true /@babel/plugin-transform-destructuring/7.13.17_@babel+core@7.13.16: @@ -896,7 +1074,7 @@ packages: dependencies: '@babel/core': 7.13.16 '@babel/helper-create-regexp-features-plugin': 7.12.17_@babel+core@7.13.16 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-plugin-utils': 7.14.5 dev: true /@babel/plugin-transform-duplicate-keys/7.12.13_@babel+core@7.13.16: @@ -905,7 +1083,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.13.16 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-plugin-utils': 7.14.5 dev: true /@babel/plugin-transform-exponentiation-operator/7.12.13_@babel+core@7.13.16: @@ -915,7 +1093,7 @@ packages: dependencies: '@babel/core': 7.13.16 '@babel/helper-builder-binary-assignment-operator-visitor': 7.12.13 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-plugin-utils': 7.14.5 dev: true /@babel/plugin-transform-for-of/7.13.0_@babel+core@7.13.16: @@ -934,7 +1112,7 @@ packages: dependencies: '@babel/core': 7.13.16 '@babel/helper-function-name': 7.12.13 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-plugin-utils': 7.14.5 dev: true /@babel/plugin-transform-literals/7.12.13_@babel+core@7.13.16: @@ -943,7 +1121,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.13.16 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-plugin-utils': 7.14.5 dev: true /@babel/plugin-transform-member-expression-literals/7.12.13_@babel+core@7.13.16: @@ -952,7 +1130,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.13.16 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-plugin-utils': 7.14.5 dev: true /@babel/plugin-transform-modules-amd/7.13.0_@babel+core@7.13.16: @@ -962,7 +1140,7 @@ packages: dependencies: '@babel/core': 7.13.16 '@babel/helper-module-transforms': 7.13.14 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-plugin-utils': 7.14.5 babel-plugin-dynamic-import-node: 2.3.3 transitivePeerDependencies: - supports-color @@ -975,7 +1153,7 @@ packages: dependencies: '@babel/core': 7.13.16 '@babel/helper-module-transforms': 7.13.14 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-plugin-utils': 7.14.5 '@babel/helper-simple-access': 7.13.12 babel-plugin-dynamic-import-node: 2.3.3 transitivePeerDependencies: @@ -990,7 +1168,7 @@ packages: '@babel/core': 7.13.16 '@babel/helper-hoist-variables': 7.13.16 '@babel/helper-module-transforms': 7.13.14 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-plugin-utils': 7.14.5 '@babel/helper-validator-identifier': 7.12.11 babel-plugin-dynamic-import-node: 2.3.3 transitivePeerDependencies: @@ -1004,7 +1182,7 @@ packages: dependencies: '@babel/core': 7.13.16 '@babel/helper-module-transforms': 7.13.14 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-plugin-utils': 7.14.5 transitivePeerDependencies: - supports-color dev: true @@ -1024,7 +1202,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.13.16 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-plugin-utils': 7.14.5 dev: true /@babel/plugin-transform-object-assign/7.12.13_@babel+core@7.13.16: @@ -1042,7 +1220,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.13.16 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-plugin-utils': 7.14.5 '@babel/helper-replace-supers': 7.13.12 transitivePeerDependencies: - supports-color @@ -1072,7 +1250,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.13.16 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-plugin-utils': 7.14.5 dev: true /@babel/plugin-transform-react-display-name/7.12.13_@babel+core@7.13.16: @@ -1140,7 +1318,24 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.13.16 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-transform-runtime/7.15.0_@babel+core@7.13.16: + resolution: {integrity: sha512-sfHYkLGjhzWTq6xsuQ01oEsUYjkHRux9fW1iUA68dC7Qd8BS1Unq4aZ8itmQp95zUzIcyR2EbNMTzAicFj+guw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.13.16 + '@babel/helper-module-imports': 7.14.5 + '@babel/helper-plugin-utils': 7.14.5 + babel-plugin-polyfill-corejs2: 0.2.2_@babel+core@7.13.16 + babel-plugin-polyfill-corejs3: 0.2.4_@babel+core@7.13.16 + babel-plugin-polyfill-regenerator: 0.2.2_@babel+core@7.13.16 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color dev: true /@babel/plugin-transform-shorthand-properties/7.12.13_@babel+core@7.13.16: @@ -1168,7 +1363,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.13.16 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-plugin-utils': 7.14.5 dev: true /@babel/plugin-transform-template-literals/7.13.0_@babel+core@7.13.16: @@ -1186,7 +1381,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.13.16 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-plugin-utils': 7.14.5 dev: true /@babel/plugin-transform-typescript/7.13.0_@babel+core@7.13.16: @@ -1208,7 +1403,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.13.16 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-plugin-utils': 7.14.5 dev: true /@babel/plugin-transform-unicode-regex/7.12.13_@babel+core@7.13.16: @@ -1218,7 +1413,7 @@ packages: dependencies: '@babel/core': 7.13.16 '@babel/helper-create-regexp-features-plugin': 7.12.17_@babel+core@7.13.16 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-plugin-utils': 7.14.5 dev: true /@babel/preset-env/7.13.15_@babel+core@7.13.16: @@ -1306,10 +1501,10 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.13.16 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-plugin-utils': 7.14.5 '@babel/plugin-proposal-unicode-property-regex': 7.12.13_@babel+core@7.13.16 '@babel/plugin-transform-dotall-regex': 7.12.13_@babel+core@7.13.16 - '@babel/types': 7.13.17 + '@babel/types': 7.15.0 esutils: 2.0.3 dev: true @@ -1395,6 +1590,14 @@ packages: to-fast-properties: 2.0.0 dev: true + /@babel/types/7.15.0: + resolution: {integrity: sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.14.9 + to-fast-properties: 2.0.0 + dev: true + /@base2/pretty-print-object/1.0.0: resolution: {integrity: sha512-4Th98KlMHr5+JkxfcoDT//6vY8vM+iSPrLNpHhRyLx2CFYi8e2RfqPLdpbnpo0Q5lQC5hNB79yes07zb02fvCw==} dev: true @@ -1818,6 +2021,152 @@ packages: chalk: 4.1.1 dev: true + /@linaria/babel-preset/3.0.0-beta.4_@babel+core@7.13.16: + resolution: {integrity: sha512-Bjsk4VZUQXK3u04MuLlyP/+/tDd7bWeLXYCOnq4US9H2QFRdka97fm6hH34SRinoHm9fSPCHrj9d+KtY8ge2wg==} + peerDependencies: + '@babel/core': '>=7' + dependencies: + '@babel/core': 7.13.16 + '@babel/generator': 7.13.16 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.13.16 + '@babel/template': 7.12.13 + '@linaria/core': 3.0.0-beta.4 + '@linaria/logger': 3.0.0-beta.3 + cosmiconfig: 5.2.1 + source-map: 0.6.1 + stylis: 3.5.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@linaria/babel-preset/3.0.0-beta.7_@babel+core@7.13.16: + resolution: {integrity: sha512-NE5f//T9ywXZA+W+Pw1YjWKdzskUpaV7GVkxXhkxLM2la1+S4xOoZR1rzW77bR1C9GFFwzZTeb8XP85whb2ZqQ==} + peerDependencies: + '@babel/core': '>=7' + dependencies: + '@babel/core': 7.13.16 + '@babel/generator': 7.13.16 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.13.16 + '@babel/template': 7.12.13 + '@linaria/core': 3.0.0-beta.4 + '@linaria/logger': 3.0.0-beta.3 + cosmiconfig: 5.2.1 + source-map: 0.7.3 + stylis: 3.5.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@linaria/core/3.0.0-beta.4: + resolution: {integrity: sha512-NzxeMDxRt57nR6tLFZ8xIstp5ld9JQPIyp9+TKtQZhoX3oJuUru+S4vXPr1Gach6VaqKKKT5T6fmJgJl9MMprw==} + dev: true + + /@linaria/logger/3.0.0-beta.3: + resolution: {integrity: sha512-Z2k0RJuA4PffcZcwBN1By8FmcCvcFUe9GHc846B6hNP09zDVhHSFLKJN9NfXJCzJ/9PifOxSUKyOjLtpv3EhGA==} + dependencies: + debug: 4.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@linaria/preeval/3.0.0-beta.7_@babel+core@7.13.16: + resolution: {integrity: sha512-fTFgxtjBGKh9P2rsqhBnHTqFo1d8VzznmXKpILM0ClAclVn+FB+KJl+nWyEbQ8nT9/ceRoTwbdZHZ/M3DFHG+w==} + peerDependencies: + '@babel/core': '>=7' + dependencies: + '@babel/core': 7.13.16 + '@linaria/babel-preset': 3.0.0-beta.7_@babel+core@7.13.16 + transitivePeerDependencies: + - supports-color + dev: true + + /@linaria/react/3.0.0-beta.7: + resolution: {integrity: sha512-sAup35gSRuenwbziPhp1hmkfziY72BS9jr5Lp0GQ9NRG5fnxYBQ36TY4rrGE09mSBjw/uq2i7XsvYL8MNm1f1Q==} + peerDependencies: + react: '>=16' + dependencies: + '@emotion/is-prop-valid': 0.8.8 + '@linaria/core': 3.0.0-beta.4 + dev: true + + /@linaria/rollup/3.0.0-beta.7_@babel+core@7.13.16: + resolution: {integrity: sha512-5bghkIaITLjotLd0c76VQSHcsETYjTSav9a6LNu5EarCi6oZ9prW8n6BaCKBDbG6njLGfSNhdLXrANx9AQOjyw==} + peerDependencies: + '@babel/core': '>=7' + dependencies: + '@babel/core': 7.13.16 + '@linaria/babel-preset': 3.0.0-beta.7_@babel+core@7.13.16 + '@rollup/pluginutils': 4.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@linaria/shaker/3.0.0-beta.7_@babel+core@7.13.16: + resolution: {integrity: sha512-fWDbbKcS8EiAnoNhTQa+2Or7QyR3Ofyqjtcrb1aeLN2ecVI2u7B5jAZgVPg9euTnhQ2ieUU3G9hh1INkoGKS/A==} + peerDependencies: + '@babel/core': '>=7' + dependencies: + '@babel/core': 7.13.16 + '@babel/generator': 7.13.16 + '@babel/plugin-transform-runtime': 7.15.0_@babel+core@7.13.16 + '@babel/plugin-transform-template-literals': 7.13.0_@babel+core@7.13.16 + '@babel/preset-env': 7.13.15_@babel+core@7.13.16 + '@linaria/babel-preset': 3.0.0-beta.7_@babel+core@7.13.16 + '@linaria/logger': 3.0.0-beta.3 + '@linaria/preeval': 3.0.0-beta.7_@babel+core@7.13.16 + babel-plugin-transform-react-remove-prop-types: 0.4.24 + transitivePeerDependencies: + - supports-color + dev: true + + /@linaria/webpack-loader/3.0.0-beta.7_@babel+core@7.13.16: + resolution: {integrity: sha512-tYR+PVAqUEPsOUGeD1jOvpaX3UeBQIvh6JmX5ziYr0faBwOwabmjszCYrQ2FVonpHBsjs6zB1KtG+yUTgSygGA==} + dependencies: + '@linaria/webpack4-loader': 3.0.0-beta.7_@babel+core@7.13.16 + '@linaria/webpack5-loader': 3.0.0-beta.7_@babel+core@7.13.16 + transitivePeerDependencies: + - '@babel/core' + - supports-color + - webpack + dev: true + + /@linaria/webpack4-loader/3.0.0-beta.7_@babel+core@7.13.16: + resolution: {integrity: sha512-B2c5vr9b8igcILM/ZcxE9Vu0J2w7NS9xERTvGD7Kp4TdLnFRpALMTJgYqlk3Gxq4T7RlAEi1vu8kHx65mXqA6g==} + peerDependencies: + '@babel/core': '>=7' + dependencies: + '@babel/core': 7.13.16 + '@linaria/babel-preset': 3.0.0-beta.7_@babel+core@7.13.16 + '@linaria/logger': 3.0.0-beta.3 + cosmiconfig: 5.2.1 + enhanced-resolve: 4.5.0 + find-yarn-workspace-root: 1.2.1 + loader-utils: 1.4.0 + mkdirp: 0.5.5 + normalize-path: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@linaria/webpack5-loader/3.0.0-beta.7_@babel+core@7.13.16: + resolution: {integrity: sha512-s2C44ml1fjDFjEJS1PFXjgCklOd3KWiG4Z3l+nUuCidncn9abnv18rDkiukUcKGwwAGJ3NhgfhU9SwXPIYFfMw==} + peerDependencies: + '@babel/core': '>=7' + webpack: '>=5' + dependencies: + '@babel/core': 7.13.16 + '@linaria/babel-preset': 3.0.0-beta.7_@babel+core@7.13.16 + '@linaria/logger': 3.0.0-beta.3 + cosmiconfig: 5.2.1 + enhanced-resolve: 5.8.2 + find-yarn-workspace-root: 1.2.1 + loader-utils: 2.0.0 + mkdirp: 0.5.5 + normalize-path: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: true + /@mdn/browser-compat-data/2.0.7: resolution: {integrity: sha512-GeeM827DlzFFidn1eKkMBiqXFD2oLsnZbaiGhByPl0vcapsRzUL+t9hDoov1swc9rB2jw64R+ihtzC8qOE9wXw==} engines: {node: '>=10.0.0'} @@ -1983,6 +2332,78 @@ packages: react-lifecycles-compat: 3.0.4 dev: true + /@rollup/plugin-alias/3.1.5_rollup@2.56.3: + resolution: {integrity: sha512-yzUaSvCC/LJPbl9rnzX3HN7vy0tq7EzHoEiQl1ofh4n5r2Rd5bj/+zcJgaGA76xbw95/JjWQyvHg9rOJp2y0oQ==} + engines: {node: '>=8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + rollup: 2.56.3 + slash: 3.0.0 + dev: true + + /@rollup/plugin-babel/5.3.0_8de00bbc60363a799c112a94aa42ce04: + resolution: {integrity: sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw==} + engines: {node: '>= 10.0.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@types/babel__core': ^7.1.9 + rollup: ^1.20.0||^2.0.0 + peerDependenciesMeta: + '@types/babel__core': + optional: true + dependencies: + '@babel/core': 7.13.16 + '@babel/helper-module-imports': 7.14.5 + '@rollup/pluginutils': 3.1.0_rollup@2.56.3 + rollup: 2.56.3 + dev: true + + /@rollup/plugin-commonjs/20.0.0_rollup@2.56.3: + resolution: {integrity: sha512-5K0g5W2Ol8hAcTHqcTBHiA7M58tfmYi1o9KxeJuuRNpGaTa5iLjcyemBitCBcKXaHamOBBEH2dGom6v6Unmqjg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^2.38.3 + dependencies: + '@rollup/pluginutils': 3.1.0_rollup@2.56.3 + commondir: 1.0.1 + estree-walker: 2.0.2 + glob: 7.1.6 + is-reference: 1.2.1 + magic-string: 0.25.7 + resolve: 1.20.0 + rollup: 2.56.3 + dev: true + + /@rollup/plugin-html/0.2.3_rollup@2.56.3: + resolution: {integrity: sha512-efx8Ud1FWaHmj3Es5parp6uRt1DPyKq9A8t1GEZoNsYB4UTQQIL8PsjxcJOlH+P3QKRsSv1rIJhiMvuG4+kfwg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + rollup: 2.56.3 + dev: true + + /@rollup/plugin-image/2.1.1_rollup@2.56.3: + resolution: {integrity: sha512-AgP4U85zuQJdUopLUCM+hTf45RepgXeTb8EJsleExVy99dIoYpt3ZlDYJdKmAc2KLkNntCDg6BPJvgJU3uGF+g==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 + dependencies: + '@rollup/pluginutils': 3.1.0_rollup@2.56.3 + mini-svg-data-uri: 1.3.3 + rollup: 2.56.3 + dev: true + + /@rollup/plugin-json/4.1.0_rollup@2.56.3: + resolution: {integrity: sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==} + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 + dependencies: + '@rollup/pluginutils': 3.1.0_rollup@2.56.3 + rollup: 2.56.3 + dev: true + /@rollup/plugin-node-resolve/7.1.3_rollup@1.32.1: resolution: {integrity: sha512-RxtSL3XmdTAE2byxekYLnx+98kEUOrPHF/KRVjLH+DEIHy6kjIw7YINQzn+NXiH/NTrQLAwYs0GWB+csWygA9Q==} engines: {node: '>= 8.0.0'} @@ -2007,6 +2428,31 @@ packages: rollup: 1.32.1 dev: true + /@rollup/plugin-replace/3.0.0_rollup@2.56.3: + resolution: {integrity: sha512-3c7JCbMuYXM4PbPWT4+m/4Y6U60SgsnDT/cCyAyUKwFHg7pTSfsSQzIpETha3a3ig6OdOKzZz87D9ZXIK3qsDg==} + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 + dependencies: + '@rollup/pluginutils': 3.1.0_rollup@2.56.3 + magic-string: 0.25.7 + rollup: 2.56.3 + dev: true + + /@rollup/plugin-typescript/8.2.5_52bfe26783e4623e07fb410e57a77991: + resolution: {integrity: sha512-QL/LvDol/PAGB2O0S7/+q2HpSUNodpw7z6nGn9BfoVCPOZ0r4EALrojFU29Bkoi2Hr2jgTocTejJ5GGWZfOxbQ==} + engines: {node: '>=8.0.0'} + peerDependencies: + rollup: ^2.14.0 + tslib: '*' + typescript: '>=3.7.0' + dependencies: + '@rollup/pluginutils': 3.1.0_rollup@2.56.3 + resolve: 1.20.0 + rollup: 2.56.3 + tslib: 2.3.1 + typescript: 4.2.4 + dev: true + /@rollup/pluginutils/3.1.0_rollup@1.32.1: resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} engines: {node: '>= 8.0.0'} @@ -2019,6 +2465,26 @@ packages: rollup: 1.32.1 dev: true + /@rollup/pluginutils/3.1.0_rollup@2.56.3: + resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + '@types/estree': 0.0.39 + estree-walker: 1.0.1 + picomatch: 2.2.3 + rollup: 2.56.3 + dev: true + + /@rollup/pluginutils/4.1.1: + resolution: {integrity: sha512-clDjivHqWGXi7u+0d2r2sBi4Ie6VLEAzWMIkvJLnDmxoOhBYOTfzGbOQBA32THHm11/LiJbd01tJUpJsbshSWQ==} + engines: {node: '>= 8.0.0'} + dependencies: + estree-walker: 2.0.2 + picomatch: 2.2.3 + dev: true + /@sindresorhus/is/0.14.0: resolution: {integrity: sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==} engines: {node: '>=6'} @@ -4756,7 +5222,20 @@ packages: dependencies: '@babel/compat-data': 7.13.15 '@babel/core': 7.13.16 - '@babel/helper-define-polyfill-provider': 0.2.0_@babel+core@7.13.16 + '@babel/helper-define-polyfill-provider': 0.2.3_@babel+core@7.13.16 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-polyfill-corejs2/0.2.2_@babel+core@7.13.16: + resolution: {integrity: sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.13.15 + '@babel/core': 7.13.16 + '@babel/helper-define-polyfill-provider': 0.2.3_@babel+core@7.13.16 semver: 6.3.0 transitivePeerDependencies: - supports-color @@ -4780,8 +5259,20 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.13.16 - '@babel/helper-define-polyfill-provider': 0.2.0_@babel+core@7.13.16 - core-js-compat: 3.11.1 + '@babel/helper-define-polyfill-provider': 0.2.3_@babel+core@7.13.16 + core-js-compat: 3.16.3 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-polyfill-corejs3/0.2.4_@babel+core@7.13.16: + resolution: {integrity: sha512-z3HnJE5TY/j4EFEa/qpQMSbcUJZ5JQi+3UFjXzn6pQCmIKc5Ug5j98SuYyH+m4xQnvKlMDIW4plLfgyVnd0IcQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.13.16 + '@babel/helper-define-polyfill-provider': 0.2.3_@babel+core@7.13.16 + core-js-compat: 3.16.3 transitivePeerDependencies: - supports-color dev: true @@ -4792,7 +5283,18 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.13.16 - '@babel/helper-define-polyfill-provider': 0.2.0_@babel+core@7.13.16 + '@babel/helper-define-polyfill-provider': 0.2.3_@babel+core@7.13.16 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-polyfill-regenerator/0.2.2_@babel+core@7.13.16: + resolution: {integrity: sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.13.16 + '@babel/helper-define-polyfill-provider': 0.2.3_@babel+core@7.13.16 transitivePeerDependencies: - supports-color dev: true @@ -5124,6 +5626,18 @@ packages: node-releases: 1.1.71 dev: true + /browserslist/4.16.8: + resolution: {integrity: sha512-sc2m9ohR/49sWEbPj14ZSSZqp+kbi16aLao42Hmn3Z8FpjuMaq2xCA2l4zl9ITfyzvnvyE0hcg62YkIGKxgaNQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001252 + colorette: 1.3.0 + electron-to-chromium: 1.3.818 + escalade: 3.1.1 + node-releases: 1.1.75 + dev: true + /bser/2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} dependencies: @@ -5359,6 +5873,10 @@ packages: resolution: {integrity: sha512-c0yixVG4v9KBc/tQ2rlbB3A/bgBFRvl8h8M4IeUbqCca4gsiCfvtaheUssbnux/Mb66Vjz7x8yYjDgYcNQOhyQ==} dev: true + /caniuse-lite/1.0.30001252: + resolution: {integrity: sha512-I56jhWDGMtdILQORdusxBOH+Nl/KgQSdDmpJezYddnAkVOmnoU8zwjTV9xAjMIYxr0iPreEAVylCGcmHCjfaOw==} + dev: true + /capture-exit/2.0.0: resolution: {integrity: sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==} engines: {node: 6.* || 8.* || >= 10.*} @@ -5704,6 +6222,10 @@ packages: resolution: {integrity: sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==} dev: true + /colorette/1.3.0: + resolution: {integrity: sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==} + dev: true + /colors/1.4.0: resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} engines: {node: '>=0.1.90'} @@ -5918,6 +6440,13 @@ packages: semver: 7.0.0 dev: true + /core-js-compat/3.16.3: + resolution: {integrity: sha512-A/OtSfSJQKLAFRVd4V0m6Sep9lPdjD8bpN8v3tCCGwE0Tmh0hOiVDm9tw6mXmWOKOSZIyr3EkywPo84cJjGvIQ==} + dependencies: + browserslist: 4.16.8 + semver: 7.0.0 + dev: true + /core-js-pure/3.11.1: resolution: {integrity: sha512-2JukQi8HgAOCD5CSimxWWXVrUBoA9Br796uIA5Z06bIjt7PBBI19ircFaAxplgE1mJf3x2BY6MkT/HWA/UryPg==} requiresBuild: true @@ -6833,6 +7362,10 @@ packages: resolution: {integrity: sha512-L+WXyXI7c7+G1V8ANzRsPI5giiimLAUDC6Zs1ojHHPhYXb3k/iTABFmWjivEtsWrRQymjnO66/rO2ZTABGdmWg==} dev: true + /electron-to-chromium/1.3.818: + resolution: {integrity: sha512-c/Z9gIr+jDZAR9q+mn40hEc1NharBT+8ejkarjbCDnBNFviI6hvcC5j2ezkAXru//bTnQp5n6iPi0JA83Tla1Q==} + dev: true + /element-resize-detector/1.2.2: resolution: {integrity: sha512-+LOXRkCJc4I5WhEJxIDjhmE3raF8jtOMBDqSCgZTMz2TX3oXAX5pE2+MDeopJlGdXzP7KzPbBJaUGfNaP9HG4A==} dependencies: @@ -6929,6 +7462,14 @@ packages: tapable: 1.1.3 dev: true + /enhanced-resolve/5.8.2: + resolution: {integrity: sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==} + engines: {node: '>=10.13.0'} + dependencies: + graceful-fs: 4.2.6 + tapable: 2.2.0 + dev: true + /enquirer/2.3.6: resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} engines: {node: '>=8.6'} @@ -7330,6 +7871,10 @@ packages: resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} dev: true + /estree-walker/2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + dev: true + /esutils/2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} @@ -7697,6 +8242,13 @@ packages: path-exists: 4.0.0 dev: true + /find-yarn-workspace-root/1.2.1: + resolution: {integrity: sha512-dVtfb0WuQG+8Ag2uWkbG79hOUzEsRrhBzgfn86g2sJPkzmcpGdghbNTfUKGTxymFrY/tLIodDzLoW9nOJ4FY8Q==} + dependencies: + fs-extra: 4.0.3 + micromatch: 3.1.10 + dev: true + /flat-cache/3.0.4: resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -7840,6 +8392,14 @@ packages: rimraf: 2.7.1 dev: true + /fs-extra/4.0.3: + resolution: {integrity: sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==} + dependencies: + graceful-fs: 4.2.6 + jsonfile: 4.0.0 + universalify: 0.1.2 + dev: true + /fs-extra/8.1.0: resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} engines: {node: '>=6 <7 || >=8'} @@ -8374,6 +8934,13 @@ packages: minimalistic-assert: 1.0.1 dev: true + /hasha/4.0.1: + resolution: {integrity: sha512-+wnvroCn3pq0CAKWfItGPyl0DJOob2qs/2D/Rh0a/O90LBzmo5GaKHwIRb6FInVvmEl1mCIHL5RqlfTLvh6FoQ==} + engines: {node: '>=8'} + dependencies: + is-stream: 1.1.0 + dev: true + /hast-to-hyperscript/9.0.1: resolution: {integrity: sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==} dependencies: @@ -9298,6 +9865,12 @@ packages: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} dev: true + /is-reference/1.2.1: + resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} + dependencies: + '@types/estree': 0.0.47 + dev: true + /is-regex/1.1.2: resolution: {integrity: sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==} engines: {node: '>= 0.4'} @@ -10746,6 +11319,11 @@ packages: webpack-sources: 1.4.3 dev: true + /mini-svg-data-uri/1.3.3: + resolution: {integrity: sha512-+fA2oRcR1dJI/7ITmeQJDrYWks0wodlOz0pAEhKYJ2IVc1z0AnwJUsKY2fzFmPAM3Jo9J0rBx8JAA9QQSJ5PuA==} + hasBin: true + dev: true + /minimalistic-assert/1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} dev: true @@ -11041,6 +11619,10 @@ packages: resolution: {integrity: sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==} dev: true + /node-releases/1.1.75: + resolution: {integrity: sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw==} + dev: true + /nodent-compiler/3.2.13: resolution: {integrity: sha512-nzzWPXZwSdsWie34om+4dLrT/5l1nT/+ig1v06xuSgMtieJVAnMQFuZihUwREM+M7dFso9YoHfDmweexEXXrrw==} dependencies: @@ -13333,6 +13915,23 @@ packages: rollup-pluginutils: 2.8.2 dev: true + /rollup-plugin-bundle-html/0.2.2: + resolution: {integrity: sha512-nK4Z/k3MVjfCcnC5T15ksHw3JyRJx110oduy3VBW0ki2qI0tu4pLlgXyltBgtd+gpiFCPqEnfy89XRPG+eCOwA==} + dependencies: + cheerio: 1.0.0-rc.6 + hasha: 4.0.1 + dev: true + + /rollup-plugin-css-only/3.1.0_rollup@2.56.3: + resolution: {integrity: sha512-TYMOE5uoD76vpj+RTkQLzC9cQtbnJNktHPB507FzRWBVaofg7KhIqq1kGbcVOadARSozWF883Ho9KpSPKH8gqA==} + engines: {node: '>=10.12.0'} + peerDependencies: + rollup: 1 || 2 + dependencies: + '@rollup/pluginutils': 4.1.1 + rollup: 2.56.3 + dev: true + /rollup-plugin-terser/5.3.1_rollup@1.32.1: resolution: {integrity: sha512-1pkwkervMJQGFYvM9nscrUoncPwiKR/K+bHdjv6PFgRo3cgPHoRT83y2Aa3GvINj4539S15t/tpFPb775TDs6w==} peerDependencies: @@ -13361,6 +13960,14 @@ packages: acorn: 7.4.1 dev: true + /rollup/2.56.3: + resolution: {integrity: sha512-Au92NuznFklgQCUcV96iXlxUbHuB1vQMaH76DHl5M11TotjOHwqk9CwcrT78+Tnv4FN9uTBxq6p4EJoYkpyekg==} + engines: {node: '>=10.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + dev: true + /rst-selector-parser/2.2.3: resolution: {integrity: sha1-gbIw6i/MYGbInjRy3nlChdmwPZE=} dependencies: @@ -14303,6 +14910,10 @@ packages: postcss-selector-parser: 3.1.2 dev: true + /stylis/3.5.4: + resolution: {integrity: sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==} + dev: true + /supports-color/5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -14392,6 +15003,11 @@ packages: engines: {node: '>=6'} dev: true + /tapable/2.2.0: + resolution: {integrity: sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==} + engines: {node: '>=6'} + dev: true + /tar/4.4.13: resolution: {integrity: sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==} engines: {node: '>=4.5'} @@ -14711,6 +15327,10 @@ packages: /tslib/2.2.0: resolution: {integrity: sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==} + /tslib/2.3.1: + resolution: {integrity: sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==} + dev: true + /tsutils/3.21.0_typescript@4.2.4: resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} |