summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2023-03-13 00:26:35 -0300
committerSebastian <sebasjm@gmail.com>2023-03-13 00:26:35 -0300
commitb6531a6d6f2331eca7cfc2a404f1c4c68920979b (patch)
treeb33088ccdff0ced0f254d999eb954a04ffc6b76b
parenta067ade946c6a91f26b3b5070008fa861aa1d547 (diff)
downloadwallet-core-b6531a6d6f2331eca7cfc2a404f1c4c68920979b.tar.gz
wallet-core-b6531a6d6f2331eca7cfc2a404f1c4c68920979b.tar.bz2
wallet-core-b6531a6d6f2331eca7cfc2a404f1c4c68920979b.zip
built from 3267f56dc3de054a7dbdd6cd83305b92cf16bd61
-rw-r--r--backoffice/index.js31
-rw-r--r--backoffice/index.js.map4
2 files changed, 26 insertions, 9 deletions
diff --git a/backoffice/index.js b/backoffice/index.js
index 9ed857b49..89bd215d5 100644
--- a/backoffice/index.js
+++ b/backoffice/index.js
@@ -17197,7 +17197,7 @@ function ConfirmModal({
label = "Confirm"
}) {
const { i18n: i18n2 } = useTranslationContext();
- return /* @__PURE__ */ h("div", { class: active ? "modal is-active" : "modal" }, /* @__PURE__ */ h("div", { class: "modal-background ", onClick: onCancel }), /* @__PURE__ */ h("div", { class: "modal-card", style: { maxWidth: 700 } }, /* @__PURE__ */ h("header", { class: "modal-card-head" }, !description ? null : /* @__PURE__ */ h("p", { class: "modal-card-title" }, /* @__PURE__ */ h("b", null, description)), /* @__PURE__ */ h("button", { class: "delete ", "aria-label": "close", onClick: onCancel })), /* @__PURE__ */ h("section", { class: "modal-card-body" }, children), /* @__PURE__ */ h("footer", { class: "modal-card-foot" }, /* @__PURE__ */ h("div", { class: "buttons is-right", style: { width: "100%" } }, /* @__PURE__ */ h("button", { class: "button ", onClick: onCancel }, /* @__PURE__ */ h(i18n2.Translate, null, "Cancel")), /* @__PURE__ */ h(
+ return /* @__PURE__ */ h("div", { class: active ? "modal is-active" : "modal" }, /* @__PURE__ */ h("div", { class: "modal-background ", onClick: onCancel }), /* @__PURE__ */ h("div", { class: "modal-card", style: { maxWidth: 700 } }, /* @__PURE__ */ h("header", { class: "modal-card-head" }, !description ? null : /* @__PURE__ */ h("p", { class: "modal-card-title" }, /* @__PURE__ */ h("b", null, description)), /* @__PURE__ */ h("button", { class: "delete ", "aria-label": "close", onClick: onCancel })), /* @__PURE__ */ h("section", { class: "modal-card-body" }, children), /* @__PURE__ */ h("footer", { class: "modal-card-foot" }, /* @__PURE__ */ h("div", { class: "buttons is-right", style: { width: "100%" } }, onConfirm ? /* @__PURE__ */ h(p, null, /* @__PURE__ */ h("button", { class: "button ", onClick: onCancel }, /* @__PURE__ */ h(i18n2.Translate, null, "Cancel")), /* @__PURE__ */ h(
"button",
{
class: danger ? "button is-danger " : "button is-info ",
@@ -17205,7 +17205,7 @@ function ConfirmModal({
onClick: onConfirm
},
/* @__PURE__ */ h(i18n2.Translate, null, label)
- )))), /* @__PURE__ */ h(
+ )) : /* @__PURE__ */ h("button", { class: "button ", onClick: onCancel }, /* @__PURE__ */ h(i18n2.Translate, null, "Close"))))), /* @__PURE__ */ h(
"button",
{
class: "modal-close is-large ",
@@ -27631,7 +27631,7 @@ function TemplateUsePage({
// src/paths/instance/templates/qr/QrPage.tsx
function QrPage({ template, id: templateId, onBack }) {
- var _a2;
+ var _a2, _b;
const { i18n: i18n2 } = useTranslationContext();
const { url: backendUrl } = useBackendContext();
const { id: instanceId } = useInstanceContext();
@@ -27666,18 +27666,20 @@ function QrPage({ template, id: templateId, onBack }) {
`${new URL(backendUrl).hostname}/${instanceId}`
);
const oauthUri = !template.pos_algorithm ? void 0 : template.pos_algorithm === 1 ? `otpauth://totp/${issuer}:${templateId}?secret=${template.pos_key}&issuer=${issuer}&algorithm=SHA1&digits=8&period=30` : template.pos_algorithm === 2 ? `otpauth://totp/${issuer}:${templateId}?secret=${template.pos_key}&issuer=${issuer}&algorithm=SHA1&digits=8&period=30` : void 0;
+ const keySlice = (_b = template.pos_key) == null ? void 0 : _b.substring(0, 4);
+ const oauthUriWithoutSecret = !template.pos_algorithm ? void 0 : template.pos_algorithm === 1 ? `otpauth://totp/${issuer}:${templateId}?secret=${keySlice}...&issuer=${issuer}&algorithm=SHA1&digits=8&period=30` : template.pos_algorithm === 2 ? `otpauth://totp/${issuer}:${templateId}?secret=${keySlice}...&issuer=${issuer}&algorithm=SHA1&digits=8&period=30` : void 0;
return /* @__PURE__ */ h("div", null, oauthUri && /* @__PURE__ */ h(
ConfirmModal,
{
description: "Setup TOTP",
active: setupTOTP,
- onConfirm: () => {
+ onCancel: () => {
setSetupTOTP(false);
}
},
/* @__PURE__ */ h("p", null, "Scan this qr code with your TOTP device"),
/* @__PURE__ */ h(QR, { text: oauthUri }),
- /* @__PURE__ */ h("pre", { style: { textAlign: "center" } }, /* @__PURE__ */ h("a", { href: oauthUri }, oauthUri))
+ /* @__PURE__ */ h("pre", { style: { textAlign: "center" } }, /* @__PURE__ */ h("a", { href: oauthUri }, oauthUriWithoutSecret))
), /* @__PURE__ */ h("section", { class: "section is-main-section" }, /* @__PURE__ */ h("div", { class: "columns" }, /* @__PURE__ */ h("div", { class: "column" }), /* @__PURE__ */ h("div", { class: "column is-four-fifths" }, /* @__PURE__ */ h(
FormProvider,
{
@@ -27973,6 +27975,7 @@ var algorithmsNames2 = [
function UpdatePage2({ template, onUpdate, onBack }) {
const { i18n: i18n2 } = useTranslationContext();
const backend = useBackendContext();
+ const [showKey, setShowKey] = p2(false);
const [state, setState] = p2(template);
const errors2 = {
template_description: !state.template_description ? i18n2.str`should not be empty` : void 0,
@@ -28062,15 +28065,19 @@ function UpdatePage2({ template, onUpdate, onBack }) {
}
),
state.pos_algorithm && state.pos_algorithm > 0 ? /* @__PURE__ */ h(
- Input,
+ InputWithAddon,
{
name: "pos_key",
label: i18n2.str`Point-of-sale key`,
+ inputType: showKey ? "text" : "password",
help: "",
+ expand: true,
tooltip: i18n2.str`Useful to validate the purchase`,
- side: /* @__PURE__ */ h("span", { "data-tooltip": i18n2.str`generate random secret key` }, /* @__PURE__ */ h(
+ addonAfter: /* @__PURE__ */ h("span", { class: "icon" }, showKey ? /* @__PURE__ */ h("i", { class: "mdi mdi-eye" }) : /* @__PURE__ */ h("i", { class: "mdi mdi-eye-off" })),
+ side: /* @__PURE__ */ h("span", null, /* @__PURE__ */ h(
"button",
{
+ "data-tooltip": i18n2.str`generate random secret key`,
class: "button is-info mr-3",
onClick: (e4) => {
const pos_key = randomBase32Key();
@@ -28078,6 +28085,16 @@ function UpdatePage2({ template, onUpdate, onBack }) {
}
},
/* @__PURE__ */ h(i18n2.Translate, null, "random")
+ ), /* @__PURE__ */ h(
+ "button",
+ {
+ "data-tooltip": showKey ? i18n2.str`show secret key` : i18n2.str`hide secret key`,
+ class: "button is-info mr-3",
+ onClick: (e4) => {
+ setShowKey(!showKey);
+ }
+ },
+ showKey ? /* @__PURE__ */ h(i18n2.Translate, null, "hide") : /* @__PURE__ */ h(i18n2.Translate, null, "show")
))
}
) : void 0
diff --git a/backoffice/index.js.map b/backoffice/index.js.map
index 271c5a10f..da0dba0c5 100644
--- a/backoffice/index.js.map
+++ b/backoffice/index.js.map
@@ -1,7 +1,7 @@
{
"version": 3,
"sources": ["../../../node_modules/.pnpm/big-integer@1.6.51/node_modules/big-integer/BigInteger.js", "../../../node_modules/.pnpm/jed@1.1.1/node_modules/jed/jed.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseHas.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isArray.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_freeGlobal.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_root.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_Symbol.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_getRawTag.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_objectToString.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseGetTag.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isObjectLike.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isSymbol.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_isKey.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isObject.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isFunction.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_coreJsData.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_isMasked.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_toSource.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseIsNative.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_getValue.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_getNative.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_nativeCreate.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_hashClear.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_hashDelete.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_hashGet.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_hashHas.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_hashSet.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_Hash.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_listCacheClear.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/eq.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_assocIndexOf.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_listCacheDelete.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_listCacheGet.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_listCacheHas.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_listCacheSet.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_ListCache.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_Map.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_mapCacheClear.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_isKeyable.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_getMapData.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_mapCacheDelete.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_mapCacheGet.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_mapCacheHas.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_mapCacheSet.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_MapCache.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/memoize.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_memoizeCapped.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_stringToPath.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_arrayMap.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseToString.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/toString.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_castPath.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseIsArguments.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isArguments.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_isIndex.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isLength.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_toKey.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_hasPath.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/has.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_defineProperty.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseAssignValue.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_createBaseFor.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseFor.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseTimes.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/stubFalse.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isBuffer.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseIsTypedArray.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseUnary.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_nodeUtil.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isTypedArray.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_arrayLikeKeys.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_isPrototype.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_overArg.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_nativeKeys.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseKeys.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isArrayLike.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/keys.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseForOwn.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_stackClear.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_stackDelete.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_stackGet.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_stackHas.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_stackSet.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_Stack.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_setCacheAdd.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_setCacheHas.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_SetCache.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_arraySome.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_cacheHas.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_equalArrays.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_Uint8Array.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_mapToArray.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_setToArray.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_equalByTag.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_arrayPush.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseGetAllKeys.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_arrayFilter.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/stubArray.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_getSymbols.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_getAllKeys.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_equalObjects.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_DataView.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_Promise.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_Set.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_WeakMap.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_getTag.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseIsEqualDeep.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseIsEqual.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseIsMatch.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_isStrictComparable.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_getMatchData.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_matchesStrictComparable.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseMatches.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseGet.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/get.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseHasIn.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/hasIn.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseMatchesProperty.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/identity.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseProperty.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_basePropertyDeep.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/property.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseIteratee.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/mapValues.js", "../../../node_modules/.pnpm/property-expr@2.0.5/node_modules/property-expr/index.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_arrayReduce.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_basePropertyOf.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_deburrLetter.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/deburr.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_asciiWords.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_hasUnicodeWord.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_unicodeWords.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/words.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_createCompounder.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/snakeCase.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseSlice.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_castSlice.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_hasUnicode.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_asciiToArray.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_unicodeToArray.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_stringToArray.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_createCaseFirst.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/upperFirst.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/capitalize.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/camelCase.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/mapKeys.js", "../../../node_modules/.pnpm/toposort@2.0.2/node_modules/toposort/index.js", "../../../node_modules/.pnpm/qrcode-generator@1.4.4/node_modules/qrcode-generator/qrcode.js", "../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/src/util.js", "../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/src/options.js", "../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/src/create-element.js", "../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/src/component.js", "../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/src/create-context.js", "../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/src/constants.js", "../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/src/diff/children.js", "../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/src/diff/props.js", "../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/src/diff/index.js", "../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/src/render.js", "../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/src/clone-element.js", "../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/src/diff/catch-error.js", "../../../node_modules/.pnpm/preact@10.11.3/node_modules/preact/hooks/src/index.js", "../../taler-util/src/nacl-fast.ts", "../../taler-util/src/prng-browser.ts", "../../taler-util/src/taler-error-codes.ts", "../../taler-util/src/codec.ts", "../../taler-util/src/amounts.ts", "../../taler-util/src/backup-types.ts", "../../taler-util/src/punycode.ts", "../../taler-util/src/whatwg-url.ts", "../../taler-util/src/url.ts", "../../taler-util/src/helpers.ts", "../../taler-util/src/libtool-version.ts", "../../taler-util/src/notifications.ts", "../../taler-util/src/sha256.ts", "../../taler-util/src/kdf.ts", "../../taler-util/src/taler-crypto.ts", "../../taler-util/src/time.ts", "../../taler-util/src/taler-types.ts", "../../taler-util/src/logging.ts", "../../taler-util/src/bech32.ts", "../../taler-util/src/segwit_addr.ts", "../../taler-util/src/bitcoin.ts", "../../taler-util/src/payto.ts", "../../taler-util/src/ReserveTransaction.ts", "../../taler-util/src/taleruri.ts", "../../taler-util/src/transactions-types.ts", "../../taler-util/src/wallet-types.ts", "../../taler-util/src/i18n.ts", "../../taler-util/src/fnutils.ts", "../../taler-util/src/http-status-codes.ts", "../../taler-util/src/RequestThrottler.ts", "../../taler-util/src/CancellationToken.ts", "../../taler-util/src/contract-terms.ts", "../../taler-util/src/http-common.ts", "../../taler-util/src/index.browser.ts", "../../web-util/src/hooks/useLocalStorage.ts", "../../web-util/src/hooks/useLang.ts", "../../web-util/src/hooks/useAsyncAsHook.ts", "../../web-util/src/utils/base64.ts", "../../web-util/src/utils/request.ts", "../../web-util/src/context/api.ts", "../../web-util/src/context/translation.ts", "../../web-util/src/components/utils.ts", "../../web-util/src/tests/index.ts", "../../web-util/src/tests/hook.ts", "../../web-util/src/stories.tsx", "../../../node_modules/.pnpm/preact-router@3.2.1_preact@10.11.3/node_modules/preact-router/src/util.js", "../../../node_modules/.pnpm/preact-router@3.2.1_preact@10.11.3/node_modules/preact-router/src/index.js", "../../../node_modules/.pnpm/@babel+runtime@7.19.4/node_modules/@babel/runtime/helpers/esm/extends.js", "../../../node_modules/.pnpm/resolve-pathname@3.0.0/node_modules/resolve-pathname/esm/resolve-pathname.js", "../../../node_modules/.pnpm/tiny-warning@1.0.3/node_modules/tiny-warning/dist/tiny-warning.esm.js", "../../../node_modules/.pnpm/tiny-invariant@1.3.1/node_modules/tiny-invariant/dist/esm/tiny-invariant.js", "../../../node_modules/.pnpm/history@4.10.1/node_modules/history/esm/history.js", "../src/hooks/index.ts", "../src/context/backend.ts", "../node_modules/preact/compat/src/util.js", "../node_modules/preact/compat/src/PureComponent.js", "../node_modules/preact/compat/src/memo.js", "../node_modules/preact/compat/src/forwardRef.js", "../node_modules/preact/compat/src/Children.js", "../node_modules/preact/compat/src/suspense.js", "../node_modules/preact/compat/src/suspense-list.js", "../node_modules/preact/compat/src/portals.js", "../node_modules/preact/compat/src/render.js", "../node_modules/preact/compat/src/index.js", "../../../node_modules/.pnpm/swr@1.3.0/node_modules/swr/dist/index.mjs", "../src/context/instance.ts", "../src/hooks/backend.ts", "../src/hooks/instance.ts", "../src/utils/constants.ts", "../src/components/exception/loading.tsx", "../src/components/form/FormProvider.tsx", "../src/components/form/useField.tsx", "../src/components/form/Input.tsx", "../src/components/modal/index.tsx", "../src/hooks/async.ts", "../src/components/exception/AsyncButton.tsx", "../src/context/config.ts", "../src/components/form/InputWithAddon.tsx", "../src/components/form/InputCurrency.tsx", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/toInteger/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/requiredArgs/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/toDate/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/addDays/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/addMonths/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/add/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/addMilliseconds/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/defaultOptions/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/getTimezoneOffsetInMilliseconds/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/startOfDay/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/differenceInCalendarDays/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/compareAsc/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/constants/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/isDate/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/isValid/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/differenceInCalendarMonths/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/differenceInCalendarYears/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/differenceInDays/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/differenceInMilliseconds/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/roundingMethods/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/differenceInHours/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/differenceInMinutes/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/endOfDay/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/endOfMonth/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/isLastDayOfMonth/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/differenceInMonths/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/differenceInSeconds/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/differenceInYears/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/subMilliseconds/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/getUTCDayOfYear/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/startOfUTCISOWeek/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/getUTCISOWeekYear/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/startOfUTCISOWeekYear/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/getUTCISOWeek/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/startOfUTCWeek/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/getUTCWeekYear/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/startOfUTCWeekYear/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/getUTCWeek/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/addLeadingZeros/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/format/lightFormatters/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/format/formatters/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/format/longFormatters/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/protectedTokens/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/en-US/_lib/formatDistance/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/_lib/buildFormatLongFn/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/en-US/_lib/formatLong/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/en-US/_lib/formatRelative/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/_lib/buildLocalizeFn/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/en-US/_lib/localize/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/_lib/buildMatchFn/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/_lib/buildMatchPatternFn/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/en-US/_lib/match/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/locale/en-US/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/_lib/defaultLocale/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/format/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/formatDuration/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/intervalToDuration/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/isAfter/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/isBefore/index.js", "../../../node_modules/.pnpm/date-fns@2.29.3/node_modules/date-fns/esm/isFuture/index.js", "../src/components/picker/DurationPicker.tsx", "../src/components/form/InputDuration.tsx", "../src/components/form/useGroupField.tsx", "../src/components/form/InputGroup.tsx", "../src/components/form/InputImage.tsx", "../src/components/form/InputLocation.tsx", "../src/utils/table.ts", "../src/components/form/InputSelector.tsx", "../src/components/form/InputPaytoForm.tsx", "../src/components/instance/DefaultInstanceFormFields.tsx", "../src/paths/admin/create/CreatePage.tsx", "../src/components/notifications/CreatedSuccessfully.tsx", "../src/paths/admin/create/InstanceCreatedSuccessfully.tsx", "../src/paths/admin/create/index.tsx", "../src/paths/admin/list/TableActive.tsx", "../src/paths/admin/list/View.tsx", "../src/paths/admin/list/index.tsx", "../src/paths/instance/kyc/list/ListPage.tsx", "../src/paths/instance/kyc/list/index.tsx", "../src/hooks/order.ts", "../src/hooks/product.ts", "../src/components/form/InputBoolean.tsx", "../src/components/picker/DatePicker.tsx", "../src/components/form/InputDate.tsx", "../src/components/form/InputNumber.tsx", "../src/components/form/InputSearchProduct.tsx", "../src/components/product/InventoryProductForm.tsx", "../../../node_modules/.pnpm/nanoclone@0.2.1/node_modules/nanoclone/src/index.js", "../../../node_modules/.pnpm/yup@0.32.11/node_modules/yup/es/util/printValue.js", "../../../node_modules/.pnpm/yup@0.32.11/node_modules/yup/es/locale.js", "../../../node_modules/.pnpm/yup@0.32.11/node_modules/yup/es/Condition.js", "../../../node_modules/.pnpm/yup@0.32.11/node_modules/yup/es/util/isSchema.js", "../../../node_modules/.pnpm/yup@0.32.11/node_modules/yup/es/util/toArray.js", "../../../node_modules/.pnpm/yup@0.32.11/node_modules/yup/es/ValidationError.js", "../../../node_modules/.pnpm/yup@0.32.11/node_modules/yup/es/util/runTests.js", "../../../node_modules/.pnpm/yup@0.32.11/node_modules/yup/es/util/createValidation.js", "../../../node_modules/.pnpm/yup@0.32.11/node_modules/yup/es/Reference.js", "../../../node_modules/.pnpm/yup@0.32.11/node_modules/yup/es/util/reach.js", "../../../node_modules/.pnpm/yup@0.32.11/node_modules/yup/es/util/ReferenceSet.js", "../../../node_modules/.pnpm/yup@0.32.11/node_modules/yup/es/schema.js", "../../../node_modules/.pnpm/yup@0.32.11/node_modules/yup/es/mixed.js", "../../../node_modules/.pnpm/yup@0.32.11/node_modules/yup/es/util/isAbsent.js", "../../../node_modules/.pnpm/yup@0.32.11/node_modules/yup/es/boolean.js", "../../../node_modules/.pnpm/yup@0.32.11/node_modules/yup/es/string.js", "../../../node_modules/.pnpm/yup@0.32.11/node_modules/yup/es/number.js", "../../../node_modules/.pnpm/yup@0.32.11/node_modules/yup/es/util/isodate.js", "../../../node_modules/.pnpm/yup@0.32.11/node_modules/yup/es/date.js", "../../../node_modules/.pnpm/yup@0.32.11/node_modules/yup/es/object.js", "../../../node_modules/.pnpm/yup@0.32.11/node_modules/yup/es/util/sortFields.js", "../../../node_modules/.pnpm/yup@0.32.11/node_modules/yup/es/util/sortByKeyOrder.js", "../../../node_modules/.pnpm/yup@0.32.11/node_modules/yup/es/array.js", "../../../node_modules/.pnpm/yup@0.32.11/node_modules/yup/es/setLocale.js", "../src/hooks/listener.ts", "../src/schemas/index.ts", "../src/components/form/InputTaxes.tsx", "../src/components/product/NonInventoryProductForm.tsx", "../src/components/product/ProductList.tsx", "../src/utils/amount.ts", "../src/paths/instance/orders/create/CreatePage.tsx", "../src/paths/instance/orders/create/index.tsx", "../src/components/form/TextField.tsx", "../src/paths/instance/orders/list/Table.tsx", "../src/paths/instance/orders/details/Timeline.tsx", "../src/paths/instance/orders/details/DetailPage.tsx", "../src/paths/instance/orders/details/index.tsx", "../src/paths/instance/orders/list/ListPage.tsx", "../src/paths/instance/orders/list/index.tsx", "../src/components/form/InputStock.tsx", "../src/components/product/ProductForm.tsx", "../src/paths/instance/products/create/CreatePage.tsx", "../src/paths/instance/products/create/index.tsx", "../src/paths/instance/products/list/Table.tsx", "../src/paths/instance/products/list/index.tsx", "../src/paths/instance/products/update/UpdatePage.tsx", "../src/paths/instance/products/update/index.tsx", "../src/hooks/reserves.ts", "../src/components/exception/QR.tsx", "../src/paths/instance/reserves/create/CreatedSuccessfully.tsx", "../src/paths/instance/reserves/create/CreatePage.tsx", "../src/paths/instance/reserves/create/index.tsx", "../src/paths/instance/reserves/details/TipInfo.tsx", "../src/paths/instance/reserves/details/DetailPage.tsx", "../src/paths/instance/reserves/details/index.tsx", "../src/paths/instance/reserves/list/CreatedSuccessfully.tsx", "../src/paths/instance/reserves/list/AutorizeTipModal.tsx", "../src/paths/instance/reserves/list/Table.tsx", "../src/paths/instance/reserves/list/index.tsx", "../src/hooks/templates.ts", "../src/utils/crypto.ts", "../src/paths/instance/templates/create/CreatePage.tsx", "../src/paths/instance/templates/create/index.tsx", "../src/paths/instance/templates/use/UsePage.tsx", "../src/paths/instance/templates/use/index.tsx", "../src/paths/instance/templates/qr/QrPage.tsx", "../src/paths/instance/templates/qr/index.tsx", "../src/paths/instance/templates/list/Table.tsx", "../src/paths/instance/templates/list/ListPage.tsx", "../src/paths/instance/templates/list/index.tsx", "../src/paths/instance/templates/update/UpdatePage.tsx", "../src/paths/instance/templates/update/index.tsx", "../src/hooks/webhooks.ts", "../src/paths/instance/webhooks/create/CreatePage.tsx", "../src/paths/instance/webhooks/create/index.tsx", "../src/paths/instance/webhooks/list/Table.tsx", "../src/paths/instance/webhooks/list/ListPage.tsx", "../src/paths/instance/webhooks/list/index.tsx", "../src/paths/instance/webhooks/update/UpdatePage.tsx", "../src/paths/instance/webhooks/update/index.tsx", "../src/hooks/transfer.ts", "../src/paths/instance/transfers/create/CreatePage.tsx", "../src/paths/instance/transfers/create/index.tsx", "../src/paths/instance/transfers/list/Table.tsx", "../src/paths/instance/transfers/list/ListPage.tsx", "../src/paths/instance/transfers/list/index.tsx", "../src/paths/instance/update/UpdatePage.tsx", "../src/paths/instance/update/index.tsx", "../src/components/exception/login.tsx", "../src/paths/login/index.tsx", "../src/paths/notfound/index.tsx", "../src/InstanceRoutes.tsx", "../src/i18n/strings.ts", "../src/components/menu/LangSelector.tsx", "../src/components/menu/NavigationBar.tsx", "../src/components/menu/SideBar.tsx", "../src/components/menu/index.tsx", "../src/ApplicationReadyRoutes.tsx", "../src/Application.tsx", "../src/index.tsx"],
- "sourcesContent": ["var bigInt = (function (undefined) {\r\n \"use strict\";\r\n\r\n var BASE = 1e7,\r\n LOG_BASE = 7,\r\n MAX_INT = 9007199254740992,\r\n MAX_INT_ARR = smallToArray(MAX_INT),\r\n DEFAULT_ALPHABET = \"0123456789abcdefghijklmnopqrstuvwxyz\";\r\n\r\n var supportsNativeBigInt = typeof BigInt === \"function\";\r\n\r\n function Integer(v, radix, alphabet, caseSensitive) {\r\n if (typeof v === \"undefined\") return Integer[0];\r\n if (typeof radix !== \"undefined\") return +radix === 10 && !alphabet ? parseValue(v) : parseBase(v, radix, alphabet, caseSensitive);\r\n return parseValue(v);\r\n }\r\n\r\n function BigInteger(value, sign) {\r\n this.value = value;\r\n this.sign = sign;\r\n this.isSmall = false;\r\n }\r\n BigInteger.prototype = Object.create(Integer.prototype);\r\n\r\n function SmallInteger(value) {\r\n this.value = value;\r\n this.sign = value < 0;\r\n this.isSmall = true;\r\n }\r\n SmallInteger.prototype = Object.create(Integer.prototype);\r\n\r\n function NativeBigInt(value) {\r\n this.value = value;\r\n }\r\n NativeBigInt.prototype = Object.create(Integer.prototype);\r\n\r\n function isPrecise(n) {\r\n return -MAX_INT < n && n < MAX_INT;\r\n }\r\n\r\n function smallToArray(n) { // For performance reasons doesn't reference BASE, need to change this function if BASE changes\r\n if (n < 1e7)\r\n return [n];\r\n if (n < 1e14)\r\n return [n % 1e7, Math.floor(n / 1e7)];\r\n return [n % 1e7, Math.floor(n / 1e7) % 1e7, Math.floor(n / 1e14)];\r\n }\r\n\r\n function arrayToSmall(arr) { // If BASE changes this function may need to change\r\n trim(arr);\r\n var length = arr.length;\r\n if (length < 4 && compareAbs(arr, MAX_INT_ARR) < 0) {\r\n switch (length) {\r\n case 0: return 0;\r\n case 1: return arr[0];\r\n case 2: return arr[0] + arr[1] * BASE;\r\n default: return arr[0] + (arr[1] + arr[2] * BASE) * BASE;\r\n }\r\n }\r\n return arr;\r\n }\r\n\r\n function trim(v) {\r\n var i = v.length;\r\n while (v[--i] === 0);\r\n v.length = i + 1;\r\n }\r\n\r\n function createArray(length) { // function shamelessly stolen from Yaffle's library https://github.com/Yaffle/BigInteger\r\n var x = new Array(length);\r\n var i = -1;\r\n while (++i < length) {\r\n x[i] = 0;\r\n }\r\n return x;\r\n }\r\n\r\n function truncate(n) {\r\n if (n > 0) return Math.floor(n);\r\n return Math.ceil(n);\r\n }\r\n\r\n function add(a, b) { // assumes a and b are arrays with a.length >= b.length\r\n var l_a = a.length,\r\n l_b = b.length,\r\n r = new Array(l_a),\r\n carry = 0,\r\n base = BASE,\r\n sum, i;\r\n for (i = 0; i < l_b; i++) {\r\n sum = a[i] + b[i] + carry;\r\n carry = sum >= base ? 1 : 0;\r\n r[i] = sum - carry * base;\r\n }\r\n while (i < l_a) {\r\n sum = a[i] + carry;\r\n carry = sum === base ? 1 : 0;\r\n r[i++] = sum - carry * base;\r\n }\r\n if (carry > 0) r.push(carry);\r\n return r;\r\n }\r\n\r\n function addAny(a, b) {\r\n if (a.length >= b.length) return add(a, b);\r\n return add(b, a);\r\n }\r\n\r\n function addSmall(a, carry) { // assumes a is array, carry is number with 0 <= carry < MAX_INT\r\n var l = a.length,\r\n r = new Array(l),\r\n base = BASE,\r\n sum, i;\r\n for (i = 0; i < l; i++) {\r\n sum = a[i] - base + carry;\r\n carry = Math.floor(sum / base);\r\n r[i] = sum - carry * base;\r\n carry += 1;\r\n }\r\n while (carry > 0) {\r\n r[i++] = carry % base;\r\n carry = Math.floor(carry / base);\r\n }\r\n return r;\r\n }\r\n\r\n BigInteger.prototype.add = function (v) {\r\n var n = parseValue(v);\r\n if (this.sign !== n.sign) {\r\n return this.subtract(n.negate());\r\n }\r\n var a = this.value, b = n.value;\r\n if (n.isSmall) {\r\n return new BigInteger(addSmall(a, Math.abs(b)), this.sign);\r\n }\r\n return new BigInteger(addAny(a, b), this.sign);\r\n };\r\n BigInteger.prototype.plus = BigInteger.prototype.add;\r\n\r\n SmallInteger.prototype.add = function (v) {\r\n var n = parseValue(v);\r\n var a = this.value;\r\n if (a < 0 !== n.sign) {\r\n return this.subtract(n.negate());\r\n }\r\n var b = n.value;\r\n if (n.isSmall) {\r\n if (isPrecise(a + b)) return new SmallInteger(a + b);\r\n b = smallToArray(Math.abs(b));\r\n }\r\n return new BigInteger(addSmall(b, Math.abs(a)), a < 0);\r\n };\r\n SmallInteger.prototype.plus = SmallInteger.prototype.add;\r\n\r\n NativeBigInt.prototype.add = function (v) {\r\n return new NativeBigInt(this.value + parseValue(v).value);\r\n }\r\n NativeBigInt.prototype.plus = NativeBigInt.prototype.add;\r\n\r\n function subtract(a, b) { // assumes a and b are arrays with a >= b\r\n var a_l = a.length,\r\n b_l = b.length,\r\n r = new Array(a_l),\r\n borrow = 0,\r\n base = BASE,\r\n i, difference;\r\n for (i = 0; i < b_l; i++) {\r\n difference = a[i] - borrow - b[i];\r\n if (difference < 0) {\r\n difference += base;\r\n borrow = 1;\r\n } else borrow = 0;\r\n r[i] = difference;\r\n }\r\n for (i = b_l; i < a_l; i++) {\r\n difference = a[i] - borrow;\r\n if (difference < 0) difference += base;\r\n else {\r\n r[i++] = difference;\r\n break;\r\n }\r\n r[i] = difference;\r\n }\r\n for (; i < a_l; i++) {\r\n r[i] = a[i];\r\n }\r\n trim(r);\r\n return r;\r\n }\r\n\r\n function subtractAny(a, b, sign) {\r\n var value;\r\n if (compareAbs(a, b) >= 0) {\r\n value = subtract(a, b);\r\n } else {\r\n value = subtract(b, a);\r\n sign = !sign;\r\n }\r\n value = arrayToSmall(value);\r\n if (typeof value === \"number\") {\r\n if (sign) value = -value;\r\n return new SmallInteger(value);\r\n }\r\n return new BigInteger(value, sign);\r\n }\r\n\r\n function subtractSmall(a, b, sign) { // assumes a is array, b is number with 0 <= b < MAX_INT\r\n var l = a.length,\r\n r = new Array(l),\r\n carry = -b,\r\n base = BASE,\r\n i, difference;\r\n for (i = 0; i < l; i++) {\r\n difference = a[i] + carry;\r\n carry = Math.floor(difference / base);\r\n difference %= base;\r\n r[i] = difference < 0 ? difference + base : difference;\r\n }\r\n r = arrayToSmall(r);\r\n if (typeof r === \"number\") {\r\n if (sign) r = -r;\r\n return new SmallInteger(r);\r\n } return new BigInteger(r, sign);\r\n }\r\n\r\n BigInteger.prototype.subtract = function (v) {\r\n var n = parseValue(v);\r\n if (this.sign !== n.sign) {\r\n return this.add(n.negate());\r\n }\r\n var a = this.value, b = n.value;\r\n if (n.isSmall)\r\n return subtractSmall(a, Math.abs(b), this.sign);\r\n return subtractAny(a, b, this.sign);\r\n };\r\n BigInteger.prototype.minus = BigInteger.prototype.subtract;\r\n\r\n SmallInteger.prototype.subtract = function (v) {\r\n var n = parseValue(v);\r\n var a = this.value;\r\n if (a < 0 !== n.sign) {\r\n return this.add(n.negate());\r\n }\r\n var b = n.value;\r\n if (n.isSmall) {\r\n return new SmallInteger(a - b);\r\n }\r\n return subtractSmall(b, Math.abs(a), a >= 0);\r\n };\r\n SmallInteger.prototype.minus = SmallInteger.prototype.subtract;\r\n\r\n NativeBigInt.prototype.subtract = function (v) {\r\n return new NativeBigInt(this.value - parseValue(v).value);\r\n }\r\n NativeBigInt.prototype.minus = NativeBigInt.prototype.subtract;\r\n\r\n BigInteger.prototype.negate = function () {\r\n return new BigInteger(this.value, !this.sign);\r\n };\r\n SmallInteger.prototype.negate = function () {\r\n var sign = this.sign;\r\n var small = new SmallInteger(-this.value);\r\n small.sign = !sign;\r\n return small;\r\n };\r\n NativeBigInt.prototype.negate = function () {\r\n return new NativeBigInt(-this.value);\r\n }\r\n\r\n BigInteger.prototype.abs = function () {\r\n return new BigInteger(this.value, false);\r\n };\r\n SmallInteger.prototype.abs = function () {\r\n return new SmallInteger(Math.abs(this.value));\r\n };\r\n NativeBigInt.prototype.abs = function () {\r\n return new NativeBigInt(this.value >= 0 ? this.value : -this.value);\r\n }\r\n\r\n\r\n function multiplyLong(a, b) {\r\n var a_l = a.length,\r\n b_l = b.length,\r\n l = a_l + b_l,\r\n r = createArray(l),\r\n base = BASE,\r\n product, carry, i, a_i, b_j;\r\n for (i = 0; i < a_l; ++i) {\r\n a_i = a[i];\r\n for (var j = 0; j < b_l; ++j) {\r\n b_j = b[j];\r\n product = a_i * b_j + r[i + j];\r\n carry = Math.floor(product / base);\r\n r[i + j] = product - carry * base;\r\n r[i + j + 1] += carry;\r\n }\r\n }\r\n trim(r);\r\n return r;\r\n }\r\n\r\n function multiplySmall(a, b) { // assumes a is array, b is number with |b| < BASE\r\n var l = a.length,\r\n r = new Array(l),\r\n base = BASE,\r\n carry = 0,\r\n product, i;\r\n for (i = 0; i < l; i++) {\r\n product = a[i] * b + carry;\r\n carry = Math.floor(product / base);\r\n r[i] = product - carry * base;\r\n }\r\n while (carry > 0) {\r\n r[i++] = carry % base;\r\n carry = Math.floor(carry / base);\r\n }\r\n return r;\r\n }\r\n\r\n function shiftLeft(x, n) {\r\n var r = [];\r\n while (n-- > 0) r.push(0);\r\n return r.concat(x);\r\n }\r\n\r\n function multiplyKaratsuba(x, y) {\r\n var n = Math.max(x.length, y.length);\r\n\r\n if (n <= 30) return multiplyLong(x, y);\r\n n = Math.ceil(n / 2);\r\n\r\n var b = x.slice(n),\r\n a = x.slice(0, n),\r\n d = y.slice(n),\r\n c = y.slice(0, n);\r\n\r\n var ac = multiplyKaratsuba(a, c),\r\n bd = multiplyKaratsuba(b, d),\r\n abcd = multiplyKaratsuba(addAny(a, b), addAny(c, d));\r\n\r\n var product = addAny(addAny(ac, shiftLeft(subtract(subtract(abcd, ac), bd), n)), shiftLeft(bd, 2 * n));\r\n trim(product);\r\n return product;\r\n }\r\n\r\n // The following function is derived from a surface fit of a graph plotting the performance difference\r\n // between long multiplication and karatsuba multiplication versus the lengths of the two arrays.\r\n function useKaratsuba(l1, l2) {\r\n return -0.012 * l1 - 0.012 * l2 + 0.000015 * l1 * l2 > 0;\r\n }\r\n\r\n BigInteger.prototype.multiply = function (v) {\r\n var n = parseValue(v),\r\n a = this.value, b = n.value,\r\n sign = this.sign !== n.sign,\r\n abs;\r\n if (n.isSmall) {\r\n if (b === 0) return Integer[0];\r\n if (b === 1) return this;\r\n if (b === -1) return this.negate();\r\n abs = Math.abs(b);\r\n if (abs < BASE) {\r\n return new BigInteger(multiplySmall(a, abs), sign);\r\n }\r\n b = smallToArray(abs);\r\n }\r\n if (useKaratsuba(a.length, b.length)) // Karatsuba is only faster for certain array sizes\r\n return new BigInteger(multiplyKaratsuba(a, b), sign);\r\n return new BigInteger(multiplyLong(a, b), sign);\r\n };\r\n\r\n BigInteger.prototype.times = BigInteger.prototype.multiply;\r\n\r\n function multiplySmallAndArray(a, b, sign) { // a >= 0\r\n if (a < BASE) {\r\n return new BigInteger(multiplySmall(b, a), sign);\r\n }\r\n return new BigInteger(multiplyLong(b, smallToArray(a)), sign);\r\n }\r\n SmallInteger.prototype._multiplyBySmall = function (a) {\r\n if (isPrecise(a.value * this.value)) {\r\n return new SmallInteger(a.value * this.value);\r\n }\r\n return multiplySmallAndArray(Math.abs(a.value), smallToArray(Math.abs(this.value)), this.sign !== a.sign);\r\n };\r\n BigInteger.prototype._multiplyBySmall = function (a) {\r\n if (a.value === 0) return Integer[0];\r\n if (a.value === 1) return this;\r\n if (a.value === -1) return this.negate();\r\n return multiplySmallAndArray(Math.abs(a.value), this.value, this.sign !== a.sign);\r\n };\r\n SmallInteger.prototype.multiply = function (v) {\r\n return parseValue(v)._multiplyBySmall(this);\r\n };\r\n SmallInteger.prototype.times = SmallInteger.prototype.multiply;\r\n\r\n NativeBigInt.prototype.multiply = function (v) {\r\n return new NativeBigInt(this.value * parseValue(v).value);\r\n }\r\n NativeBigInt.prototype.times = NativeBigInt.prototype.multiply;\r\n\r\n function square(a) {\r\n //console.assert(2 * BASE * BASE < MAX_INT);\r\n var l = a.length,\r\n r = createArray(l + l),\r\n base = BASE,\r\n product, carry, i, a_i, a_j;\r\n for (i = 0; i < l; i++) {\r\n a_i = a[i];\r\n carry = 0 - a_i * a_i;\r\n for (var j = i; j < l; j++) {\r\n a_j = a[j];\r\n product = 2 * (a_i * a_j) + r[i + j] + carry;\r\n carry = Math.floor(product / base);\r\n r[i + j] = product - carry * base;\r\n }\r\n r[i + l] = carry;\r\n }\r\n trim(r);\r\n return r;\r\n }\r\n\r\n BigInteger.prototype.square = function () {\r\n return new BigInteger(square(this.value), false);\r\n };\r\n\r\n SmallInteger.prototype.square = function () {\r\n var value = this.value * this.value;\r\n if (isPrecise(value)) return new SmallInteger(value);\r\n return new BigInteger(square(smallToArray(Math.abs(this.value))), false);\r\n };\r\n\r\n NativeBigInt.prototype.square = function (v) {\r\n return new NativeBigInt(this.value * this.value);\r\n }\r\n\r\n function divMod1(a, b) { // Left over from previous version. Performs faster than divMod2 on smaller input sizes.\r\n var a_l = a.length,\r\n b_l = b.length,\r\n base = BASE,\r\n result = createArray(b.length),\r\n divisorMostSignificantDigit = b[b_l - 1],\r\n // normalization\r\n lambda = Math.ceil(base / (2 * divisorMostSignificantDigit)),\r\n remainder = multiplySmall(a, lambda),\r\n divisor = multiplySmall(b, lambda),\r\n quotientDigit, shift, carry, borrow, i, l, q;\r\n if (remainder.length <= a_l) remainder.push(0);\r\n divisor.push(0);\r\n divisorMostSignificantDigit = divisor[b_l - 1];\r\n for (shift = a_l - b_l; shift >= 0; shift--) {\r\n quotientDigit = base - 1;\r\n if (remainder[shift + b_l] !== divisorMostSignificantDigit) {\r\n quotientDigit = Math.floor((remainder[shift + b_l] * base + remainder[shift + b_l - 1]) / divisorMostSignificantDigit);\r\n }\r\n // quotientDigit <= base - 1\r\n carry = 0;\r\n borrow = 0;\r\n l = divisor.length;\r\n for (i = 0; i < l; i++) {\r\n carry += quotientDigit * divisor[i];\r\n q = Math.floor(carry / base);\r\n borrow += remainder[shift + i] - (carry - q * base);\r\n carry = q;\r\n if (borrow < 0) {\r\n remainder[shift + i] = borrow + base;\r\n borrow = -1;\r\n } else {\r\n remainder[shift + i] = borrow;\r\n borrow = 0;\r\n }\r\n }\r\n while (borrow !== 0) {\r\n quotientDigit -= 1;\r\n carry = 0;\r\n for (i = 0; i < l; i++) {\r\n carry += remainder[shift + i] - base + divisor[i];\r\n if (carry < 0) {\r\n remainder[shift + i] = carry + base;\r\n carry = 0;\r\n } else {\r\n remainder[shift + i] = carry;\r\n carry = 1;\r\n }\r\n }\r\n borrow += carry;\r\n }\r\n result[shift] = quotientDigit;\r\n }\r\n // denormalization\r\n remainder = divModSmall(remainder, lambda)[0];\r\n return [arrayToSmall(result), arrayToSmall(remainder)];\r\n }\r\n\r\n function divMod2(a, b) { // Implementation idea shamelessly stolen from Silent Matt's library http://silentmatt.com/biginteger/\r\n // Performs faster than divMod1 on larger input sizes.\r\n var a_l = a.length,\r\n b_l = b.length,\r\n result = [],\r\n part = [],\r\n base = BASE,\r\n guess, xlen, highx, highy, check;\r\n while (a_l) {\r\n part.unshift(a[--a_l]);\r\n trim(part);\r\n if (compareAbs(part, b) < 0) {\r\n result.push(0);\r\n continue;\r\n }\r\n xlen = part.length;\r\n highx = part[xlen - 1] * base + part[xlen - 2];\r\n highy = b[b_l - 1] * base + b[b_l - 2];\r\n if (xlen > b_l) {\r\n highx = (highx + 1) * base;\r\n }\r\n guess = Math.ceil(highx / highy);\r\n do {\r\n check = multiplySmall(b, guess);\r\n if (compareAbs(check, part) <= 0) break;\r\n guess--;\r\n } while (guess);\r\n result.push(guess);\r\n part = subtract(part, check);\r\n }\r\n result.reverse();\r\n return [arrayToSmall(result), arrayToSmall(part)];\r\n }\r\n\r\n function divModSmall(value, lambda) {\r\n var length = value.length,\r\n quotient = createArray(length),\r\n base = BASE,\r\n i, q, remainder, divisor;\r\n remainder = 0;\r\n for (i = length - 1; i >= 0; --i) {\r\n divisor = remainder * base + value[i];\r\n q = truncate(divisor / lambda);\r\n remainder = divisor - q * lambda;\r\n quotient[i] = q | 0;\r\n }\r\n return [quotient, remainder | 0];\r\n }\r\n\r\n function divModAny(self, v) {\r\n var value, n = parseValue(v);\r\n if (supportsNativeBigInt) {\r\n return [new NativeBigInt(self.value / n.value), new NativeBigInt(self.value % n.value)];\r\n }\r\n var a = self.value, b = n.value;\r\n var quotient;\r\n if (b === 0) throw new Error(\"Cannot divide by zero\");\r\n if (self.isSmall) {\r\n if (n.isSmall) {\r\n return [new SmallInteger(truncate(a / b)), new SmallInteger(a % b)];\r\n }\r\n return [Integer[0], self];\r\n }\r\n if (n.isSmall) {\r\n if (b === 1) return [self, Integer[0]];\r\n if (b == -1) return [self.negate(), Integer[0]];\r\n var abs = Math.abs(b);\r\n if (abs < BASE) {\r\n value = divModSmall(a, abs);\r\n quotient = arrayToSmall(value[0]);\r\n var remainder = value[1];\r\n if (self.sign) remainder = -remainder;\r\n if (typeof quotient === \"number\") {\r\n if (self.sign !== n.sign) quotient = -quotient;\r\n return [new SmallInteger(quotient), new SmallInteger(remainder)];\r\n }\r\n return [new BigInteger(quotient, self.sign !== n.sign), new SmallInteger(remainder)];\r\n }\r\n b = smallToArray(abs);\r\n }\r\n var comparison = compareAbs(a, b);\r\n if (comparison === -1) return [Integer[0], self];\r\n if (comparison === 0) return [Integer[self.sign === n.sign ? 1 : -1], Integer[0]];\r\n\r\n // divMod1 is faster on smaller input sizes\r\n if (a.length + b.length <= 200)\r\n value = divMod1(a, b);\r\n else value = divMod2(a, b);\r\n\r\n quotient = value[0];\r\n var qSign = self.sign !== n.sign,\r\n mod = value[1],\r\n mSign = self.sign;\r\n if (typeof quotient === \"number\") {\r\n if (qSign) quotient = -quotient;\r\n quotient = new SmallInteger(quotient);\r\n } else quotient = new BigInteger(quotient, qSign);\r\n if (typeof mod === \"number\") {\r\n if (mSign) mod = -mod;\r\n mod = new SmallInteger(mod);\r\n } else mod = new BigInteger(mod, mSign);\r\n return [quotient, mod];\r\n }\r\n\r\n BigInteger.prototype.divmod = function (v) {\r\n var result = divModAny(this, v);\r\n return {\r\n quotient: result[0],\r\n remainder: result[1]\r\n };\r\n };\r\n NativeBigInt.prototype.divmod = SmallInteger.prototype.divmod = BigInteger.prototype.divmod;\r\n\r\n\r\n BigInteger.prototype.divide = function (v) {\r\n return divModAny(this, v)[0];\r\n };\r\n NativeBigInt.prototype.over = NativeBigInt.prototype.divide = function (v) {\r\n return new NativeBigInt(this.value / parseValue(v).value);\r\n };\r\n SmallInteger.prototype.over = SmallInteger.prototype.divide = BigInteger.prototype.over = BigInteger.prototype.divide;\r\n\r\n BigInteger.prototype.mod = function (v) {\r\n return divModAny(this, v)[1];\r\n };\r\n NativeBigInt.prototype.mod = NativeBigInt.prototype.remainder = function (v) {\r\n return new NativeBigInt(this.value % parseValue(v).value);\r\n };\r\n SmallInteger.prototype.remainder = SmallInteger.prototype.mod = BigInteger.prototype.remainder = BigInteger.prototype.mod;\r\n\r\n BigInteger.prototype.pow = function (v) {\r\n var n = parseValue(v),\r\n a = this.value,\r\n b = n.value,\r\n value, x, y;\r\n if (b === 0) return Integer[1];\r\n if (a === 0) return Integer[0];\r\n if (a === 1) return Integer[1];\r\n if (a === -1) return n.isEven() ? Integer[1] : Integer[-1];\r\n if (n.sign) {\r\n return Integer[0];\r\n }\r\n if (!n.isSmall) throw new Error(\"The exponent \" + n.toString() + \" is too large.\");\r\n if (this.isSmall) {\r\n if (isPrecise(value = Math.pow(a, b)))\r\n return new SmallInteger(truncate(value));\r\n }\r\n x = this;\r\n y = Integer[1];\r\n while (true) {\r\n if (b & 1 === 1) {\r\n y = y.times(x);\r\n --b;\r\n }\r\n if (b === 0) break;\r\n b /= 2;\r\n x = x.square();\r\n }\r\n return y;\r\n };\r\n SmallInteger.prototype.pow = BigInteger.prototype.pow;\r\n\r\n NativeBigInt.prototype.pow = function (v) {\r\n var n = parseValue(v);\r\n var a = this.value, b = n.value;\r\n var _0 = BigInt(0), _1 = BigInt(1), _2 = BigInt(2);\r\n if (b === _0) return Integer[1];\r\n if (a === _0) return Integer[0];\r\n if (a === _1) return Integer[1];\r\n if (a === BigInt(-1)) return n.isEven() ? Integer[1] : Integer[-1];\r\n if (n.isNegative()) return new NativeBigInt(_0);\r\n var x = this;\r\n var y = Integer[1];\r\n while (true) {\r\n if ((b & _1) === _1) {\r\n y = y.times(x);\r\n --b;\r\n }\r\n if (b === _0) break;\r\n b /= _2;\r\n x = x.square();\r\n }\r\n return y;\r\n }\r\n\r\n BigInteger.prototype.modPow = function (exp, mod) {\r\n exp = parseValue(exp);\r\n mod = parseValue(mod);\r\n if (mod.isZero()) throw new Error(\"Cannot take modPow with modulus 0\");\r\n var r = Integer[1],\r\n base = this.mod(mod);\r\n if (exp.isNegative()) {\r\n exp = exp.multiply(Integer[-1]);\r\n base = base.modInv(mod);\r\n }\r\n while (exp.isPositive()) {\r\n if (base.isZero()) return Integer[0];\r\n if (exp.isOdd()) r = r.multiply(base).mod(mod);\r\n exp = exp.divide(2);\r\n base = base.square().mod(mod);\r\n }\r\n return r;\r\n };\r\n NativeBigInt.prototype.modPow = SmallInteger.prototype.modPow = BigInteger.prototype.modPow;\r\n\r\n function compareAbs(a, b) {\r\n if (a.length !== b.length) {\r\n return a.length > b.length ? 1 : -1;\r\n }\r\n for (var i = a.length - 1; i >= 0; i--) {\r\n if (a[i] !== b[i]) return a[i] > b[i] ? 1 : -1;\r\n }\r\n return 0;\r\n }\r\n\r\n BigInteger.prototype.compareAbs = function (v) {\r\n var n = parseValue(v),\r\n a = this.value,\r\n b = n.value;\r\n if (n.isSmall) return 1;\r\n return compareAbs(a, b);\r\n };\r\n SmallInteger.prototype.compareAbs = function (v) {\r\n var n = parseValue(v),\r\n a = Math.abs(this.value),\r\n b = n.value;\r\n if (n.isSmall) {\r\n b = Math.abs(b);\r\n return a === b ? 0 : a > b ? 1 : -1;\r\n }\r\n return -1;\r\n };\r\n NativeBigInt.prototype.compareAbs = function (v) {\r\n var a = this.value;\r\n var b = parseValue(v).value;\r\n a = a >= 0 ? a : -a;\r\n b = b >= 0 ? b : -b;\r\n return a === b ? 0 : a > b ? 1 : -1;\r\n }\r\n\r\n BigInteger.prototype.compare = function (v) {\r\n // See discussion about comparison with Infinity:\r\n // https://github.com/peterolson/BigInteger.js/issues/61\r\n if (v === Infinity) {\r\n return -1;\r\n }\r\n if (v === -Infinity) {\r\n return 1;\r\n }\r\n\r\n var n = parseValue(v),\r\n a = this.value,\r\n b = n.value;\r\n if (this.sign !== n.sign) {\r\n return n.sign ? 1 : -1;\r\n }\r\n if (n.isSmall) {\r\n return this.sign ? -1 : 1;\r\n }\r\n return compareAbs(a, b) * (this.sign ? -1 : 1);\r\n };\r\n BigInteger.prototype.compareTo = BigInteger.prototype.compare;\r\n\r\n SmallInteger.prototype.compare = function (v) {\r\n if (v === Infinity) {\r\n return -1;\r\n }\r\n if (v === -Infinity) {\r\n return 1;\r\n }\r\n\r\n var n = parseValue(v),\r\n a = this.value,\r\n b = n.value;\r\n if (n.isSmall) {\r\n return a == b ? 0 : a > b ? 1 : -1;\r\n }\r\n if (a < 0 !== n.sign) {\r\n return a < 0 ? -1 : 1;\r\n }\r\n return a < 0 ? 1 : -1;\r\n };\r\n SmallInteger.prototype.compareTo = SmallInteger.prototype.compare;\r\n\r\n NativeBigInt.prototype.compare = function (v) {\r\n if (v === Infinity) {\r\n return -1;\r\n }\r\n if (v === -Infinity) {\r\n return 1;\r\n }\r\n var a = this.value;\r\n var b = parseValue(v).value;\r\n return a === b ? 0 : a > b ? 1 : -1;\r\n }\r\n NativeBigInt.prototype.compareTo = NativeBigInt.prototype.compare;\r\n\r\n BigInteger.prototype.equals = function (v) {\r\n return this.compare(v) === 0;\r\n };\r\n NativeBigInt.prototype.eq = NativeBigInt.prototype.equals = SmallInteger.prototype.eq = SmallInteger.prototype.equals = BigInteger.prototype.eq = BigInteger.prototype.equals;\r\n\r\n BigInteger.prototype.notEquals = function (v) {\r\n return this.compare(v) !== 0;\r\n };\r\n NativeBigInt.prototype.neq = NativeBigInt.prototype.notEquals = SmallInteger.prototype.neq = SmallInteger.prototype.notEquals = BigInteger.prototype.neq = BigInteger.prototype.notEquals;\r\n\r\n BigInteger.prototype.greater = function (v) {\r\n return this.compare(v) > 0;\r\n };\r\n NativeBigInt.prototype.gt = NativeBigInt.prototype.greater = SmallInteger.prototype.gt = SmallInteger.prototype.greater = BigInteger.prototype.gt = BigInteger.prototype.greater;\r\n\r\n BigInteger.prototype.lesser = function (v) {\r\n return this.compare(v) < 0;\r\n };\r\n NativeBigInt.prototype.lt = NativeBigInt.prototype.lesser = SmallInteger.prototype.lt = SmallInteger.prototype.lesser = BigInteger.prototype.lt = BigInteger.prototype.lesser;\r\n\r\n BigInteger.prototype.greaterOrEquals = function (v) {\r\n return this.compare(v) >= 0;\r\n };\r\n NativeBigInt.prototype.geq = NativeBigInt.prototype.greaterOrEquals = SmallInteger.prototype.geq = SmallInteger.prototype.greaterOrEquals = BigInteger.prototype.geq = BigInteger.prototype.greaterOrEquals;\r\n\r\n BigInteger.prototype.lesserOrEquals = function (v) {\r\n return this.compare(v) <= 0;\r\n };\r\n NativeBigInt.prototype.leq = NativeBigInt.prototype.lesserOrEquals = SmallInteger.prototype.leq = SmallInteger.prototype.lesserOrEquals = BigInteger.prototype.leq = BigInteger.prototype.lesserOrEquals;\r\n\r\n BigInteger.prototype.isEven = function () {\r\n return (this.value[0] & 1) === 0;\r\n };\r\n SmallInteger.prototype.isEven = function () {\r\n return (this.value & 1) === 0;\r\n };\r\n NativeBigInt.prototype.isEven = function () {\r\n return (this.value & BigInt(1)) === BigInt(0);\r\n }\r\n\r\n BigInteger.prototype.isOdd = function () {\r\n return (this.value[0] & 1) === 1;\r\n };\r\n SmallInteger.prototype.isOdd = function () {\r\n return (this.value & 1) === 1;\r\n };\r\n NativeBigInt.prototype.isOdd = function () {\r\n return (this.value & BigInt(1)) === BigInt(1);\r\n }\r\n\r\n BigInteger.prototype.isPositive = function () {\r\n return !this.sign;\r\n };\r\n SmallInteger.prototype.isPositive = function () {\r\n return this.value > 0;\r\n };\r\n NativeBigInt.prototype.isPositive = SmallInteger.prototype.isPositive;\r\n\r\n BigInteger.prototype.isNegative = function () {\r\n return this.sign;\r\n };\r\n SmallInteger.prototype.isNegative = function () {\r\n return this.value < 0;\r\n };\r\n NativeBigInt.prototype.isNegative = SmallInteger.prototype.isNegative;\r\n\r\n BigInteger.prototype.isUnit = function () {\r\n return false;\r\n };\r\n SmallInteger.prototype.isUnit = function () {\r\n return Math.abs(this.value) === 1;\r\n };\r\n NativeBigInt.prototype.isUnit = function () {\r\n return this.abs().value === BigInt(1);\r\n }\r\n\r\n BigInteger.prototype.isZero = function () {\r\n return false;\r\n };\r\n SmallInteger.prototype.isZero = function () {\r\n return this.value === 0;\r\n };\r\n NativeBigInt.prototype.isZero = function () {\r\n return this.value === BigInt(0);\r\n }\r\n\r\n BigInteger.prototype.isDivisibleBy = function (v) {\r\n var n = parseValue(v);\r\n if (n.isZero()) return false;\r\n if (n.isUnit()) return true;\r\n if (n.compareAbs(2) === 0) return this.isEven();\r\n return this.mod(n).isZero();\r\n };\r\n NativeBigInt.prototype.isDivisibleBy = SmallInteger.prototype.isDivisibleBy = BigInteger.prototype.isDivisibleBy;\r\n\r\n function isBasicPrime(v) {\r\n var n = v.abs();\r\n if (n.isUnit()) return false;\r\n if (n.equals(2) || n.equals(3) || n.equals(5)) return true;\r\n if (n.isEven() || n.isDivisibleBy(3) || n.isDivisibleBy(5)) return false;\r\n if (n.lesser(49)) return true;\r\n // we don't know if it's prime: let the other functions figure it out\r\n }\r\n\r\n function millerRabinTest(n, a) {\r\n var nPrev = n.prev(),\r\n b = nPrev,\r\n r = 0,\r\n d, t, i, x;\r\n while (b.isEven()) b = b.divide(2), r++;\r\n next: for (i = 0; i < a.length; i++) {\r\n if (n.lesser(a[i])) continue;\r\n x = bigInt(a[i]).modPow(b, n);\r\n if (x.isUnit() || x.equals(nPrev)) continue;\r\n for (d = r - 1; d != 0; d--) {\r\n x = x.square().mod(n);\r\n if (x.isUnit()) return false;\r\n if (x.equals(nPrev)) continue next;\r\n }\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n // Set \"strict\" to true to force GRH-supported lower bound of 2*log(N)^2\r\n BigInteger.prototype.isPrime = function (strict) {\r\n var isPrime = isBasicPrime(this);\r\n if (isPrime !== undefined) return isPrime;\r\n var n = this.abs();\r\n var bits = n.bitLength();\r\n if (bits <= 64)\r\n return millerRabinTest(n, [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37]);\r\n var logN = Math.log(2) * bits.toJSNumber();\r\n var t = Math.ceil((strict === true) ? (2 * Math.pow(logN, 2)) : logN);\r\n for (var a = [], i = 0; i < t; i++) {\r\n a.push(bigInt(i + 2));\r\n }\r\n return millerRabinTest(n, a);\r\n };\r\n NativeBigInt.prototype.isPrime = SmallInteger.prototype.isPrime = BigInteger.prototype.isPrime;\r\n\r\n BigInteger.prototype.isProbablePrime = function (iterations, rng) {\r\n var isPrime = isBasicPrime(this);\r\n if (isPrime !== undefined) return isPrime;\r\n var n = this.abs();\r\n var t = iterations === undefined ? 5 : iterations;\r\n for (var a = [], i = 0; i < t; i++) {\r\n a.push(bigInt.randBetween(2, n.minus(2), rng));\r\n }\r\n return millerRabinTest(n, a);\r\n };\r\n NativeBigInt.prototype.isProbablePrime = SmallInteger.prototype.isProbablePrime = BigInteger.prototype.isProbablePrime;\r\n\r\n BigInteger.prototype.modInv = function (n) {\r\n var t = bigInt.zero, newT = bigInt.one, r = parseValue(n), newR = this.abs(), q, lastT, lastR;\r\n while (!newR.isZero()) {\r\n q = r.divide(newR);\r\n lastT = t;\r\n lastR = r;\r\n t = newT;\r\n r = newR;\r\n newT = lastT.subtract(q.multiply(newT));\r\n newR = lastR.subtract(q.multiply(newR));\r\n }\r\n if (!r.isUnit()) throw new Error(this.toString() + \" and \" + n.toString() + \" are not co-prime\");\r\n if (t.compare(0) === -1) {\r\n t = t.add(n);\r\n }\r\n if (this.isNegative()) {\r\n return t.negate();\r\n }\r\n return t;\r\n };\r\n\r\n NativeBigInt.prototype.modInv = SmallInteger.prototype.modInv = BigInteger.prototype.modInv;\r\n\r\n BigInteger.prototype.next = function () {\r\n var value = this.value;\r\n if (this.sign) {\r\n return subtractSmall(value, 1, this.sign);\r\n }\r\n return new BigInteger(addSmall(value, 1), this.sign);\r\n };\r\n SmallInteger.prototype.next = function () {\r\n var value = this.value;\r\n if (value + 1 < MAX_INT) return new SmallInteger(value + 1);\r\n return new BigInteger(MAX_INT_ARR, false);\r\n };\r\n NativeBigInt.prototype.next = function () {\r\n return new NativeBigInt(this.value + BigInt(1));\r\n }\r\n\r\n BigInteger.prototype.prev = function () {\r\n var value = this.value;\r\n if (this.sign) {\r\n return new BigInteger(addSmall(value, 1), true);\r\n }\r\n return subtractSmall(value, 1, this.sign);\r\n };\r\n SmallInteger.prototype.prev = function () {\r\n var value = this.value;\r\n if (value - 1 > -MAX_INT) return new SmallInteger(value - 1);\r\n return new BigInteger(MAX_INT_ARR, true);\r\n };\r\n NativeBigInt.prototype.prev = function () {\r\n return new NativeBigInt(this.value - BigInt(1));\r\n }\r\n\r\n var powersOfTwo = [1];\r\n while (2 * powersOfTwo[powersOfTwo.length - 1] <= BASE) powersOfTwo.push(2 * powersOfTwo[powersOfTwo.length - 1]);\r\n var powers2Length = powersOfTwo.length, highestPower2 = powersOfTwo[powers2Length - 1];\r\n\r\n function shift_isSmall(n) {\r\n return Math.abs(n) <= BASE;\r\n }\r\n\r\n BigInteger.prototype.shiftLeft = function (v) {\r\n var n = parseValue(v).toJSNumber();\r\n if (!shift_isSmall(n)) {\r\n throw new Error(String(n) + \" is too large for shifting.\");\r\n }\r\n if (n < 0) return this.shiftRight(-n);\r\n var result = this;\r\n if (result.isZero()) return result;\r\n while (n >= powers2Length) {\r\n result = result.multiply(highestPower2);\r\n n -= powers2Length - 1;\r\n }\r\n return result.multiply(powersOfTwo[n]);\r\n };\r\n NativeBigInt.prototype.shiftLeft = SmallInteger.prototype.shiftLeft = BigInteger.prototype.shiftLeft;\r\n\r\n BigInteger.prototype.shiftRight = function (v) {\r\n var remQuo;\r\n var n = parseValue(v).toJSNumber();\r\n if (!shift_isSmall(n)) {\r\n throw new Error(String(n) + \" is too large for shifting.\");\r\n }\r\n if (n < 0) return this.shiftLeft(-n);\r\n var result = this;\r\n while (n >= powers2Length) {\r\n if (result.isZero() || (result.isNegative() && result.isUnit())) return result;\r\n remQuo = divModAny(result, highestPower2);\r\n result = remQuo[1].isNegative() ? remQuo[0].prev() : remQuo[0];\r\n n -= powers2Length - 1;\r\n }\r\n remQuo = divModAny(result, powersOfTwo[n]);\r\n return remQuo[1].isNegative() ? remQuo[0].prev() : remQuo[0];\r\n };\r\n NativeBigInt.prototype.shiftRight = SmallInteger.prototype.shiftRight = BigInteger.prototype.shiftRight;\r\n\r\n function bitwise(x, y, fn) {\r\n y = parseValue(y);\r\n var xSign = x.isNegative(), ySign = y.isNegative();\r\n var xRem = xSign ? x.not() : x,\r\n yRem = ySign ? y.not() : y;\r\n var xDigit = 0, yDigit = 0;\r\n var xDivMod = null, yDivMod = null;\r\n var result = [];\r\n while (!xRem.isZero() || !yRem.isZero()) {\r\n xDivMod = divModAny(xRem, highestPower2);\r\n xDigit = xDivMod[1].toJSNumber();\r\n if (xSign) {\r\n xDigit = highestPower2 - 1 - xDigit; // two's complement for negative numbers\r\n }\r\n\r\n yDivMod = divModAny(yRem, highestPower2);\r\n yDigit = yDivMod[1].toJSNumber();\r\n if (ySign) {\r\n yDigit = highestPower2 - 1 - yDigit; // two's complement for negative numbers\r\n }\r\n\r\n xRem = xDivMod[0];\r\n yRem = yDivMod[0];\r\n result.push(fn(xDigit, yDigit));\r\n }\r\n var sum = fn(xSign ? 1 : 0, ySign ? 1 : 0) !== 0 ? bigInt(-1) : bigInt(0);\r\n for (var i = result.length - 1; i >= 0; i -= 1) {\r\n sum = sum.multiply(highestPower2).add(bigInt(result[i]));\r\n }\r\n return sum;\r\n }\r\n\r\n BigInteger.prototype.not = function () {\r\n return this.negate().prev();\r\n };\r\n NativeBigInt.prototype.not = SmallInteger.prototype.not = BigInteger.prototype.not;\r\n\r\n BigInteger.prototype.and = function (n) {\r\n return bitwise(this, n, function (a, b) { return a & b; });\r\n };\r\n NativeBigInt.prototype.and = SmallInteger.prototype.and = BigInteger.prototype.and;\r\n\r\n BigInteger.prototype.or = function (n) {\r\n return bitwise(this, n, function (a, b) { return a | b; });\r\n };\r\n NativeBigInt.prototype.or = SmallInteger.prototype.or = BigInteger.prototype.or;\r\n\r\n BigInteger.prototype.xor = function (n) {\r\n return bitwise(this, n, function (a, b) { return a ^ b; });\r\n };\r\n NativeBigInt.prototype.xor = SmallInteger.prototype.xor = BigInteger.prototype.xor;\r\n\r\n var LOBMASK_I = 1 << 30, LOBMASK_BI = (BASE & -BASE) * (BASE & -BASE) | LOBMASK_I;\r\n function roughLOB(n) { // get lowestOneBit (rough)\r\n // SmallInteger: return Min(lowestOneBit(n), 1 << 30)\r\n // BigInteger: return Min(lowestOneBit(n), 1 << 14) [BASE=1e7]\r\n var v = n.value,\r\n x = typeof v === \"number\" ? v | LOBMASK_I :\r\n typeof v === \"bigint\" ? v | BigInt(LOBMASK_I) :\r\n v[0] + v[1] * BASE | LOBMASK_BI;\r\n return x & -x;\r\n }\r\n\r\n function integerLogarithm(value, base) {\r\n if (base.compareTo(value) <= 0) {\r\n var tmp = integerLogarithm(value, base.square(base));\r\n var p = tmp.p;\r\n var e = tmp.e;\r\n var t = p.multiply(base);\r\n return t.compareTo(value) <= 0 ? { p: t, e: e * 2 + 1 } : { p: p, e: e * 2 };\r\n }\r\n return { p: bigInt(1), e: 0 };\r\n }\r\n\r\n BigInteger.prototype.bitLength = function () {\r\n var n = this;\r\n if (n.compareTo(bigInt(0)) < 0) {\r\n n = n.negate().subtract(bigInt(1));\r\n }\r\n if (n.compareTo(bigInt(0)) === 0) {\r\n return bigInt(0);\r\n }\r\n return bigInt(integerLogarithm(n, bigInt(2)).e).add(bigInt(1));\r\n }\r\n NativeBigInt.prototype.bitLength = SmallInteger.prototype.bitLength = BigInteger.prototype.bitLength;\r\n\r\n function max(a, b) {\r\n a = parseValue(a);\r\n b = parseValue(b);\r\n return a.greater(b) ? a : b;\r\n }\r\n function min(a, b) {\r\n a = parseValue(a);\r\n b = parseValue(b);\r\n return a.lesser(b) ? a : b;\r\n }\r\n function gcd(a, b) {\r\n a = parseValue(a).abs();\r\n b = parseValue(b).abs();\r\n if (a.equals(b)) return a;\r\n if (a.isZero()) return b;\r\n if (b.isZero()) return a;\r\n var c = Integer[1], d, t;\r\n while (a.isEven() && b.isEven()) {\r\n d = min(roughLOB(a), roughLOB(b));\r\n a = a.divide(d);\r\n b = b.divide(d);\r\n c = c.multiply(d);\r\n }\r\n while (a.isEven()) {\r\n a = a.divide(roughLOB(a));\r\n }\r\n do {\r\n while (b.isEven()) {\r\n b = b.divide(roughLOB(b));\r\n }\r\n if (a.greater(b)) {\r\n t = b; b = a; a = t;\r\n }\r\n b = b.subtract(a);\r\n } while (!b.isZero());\r\n return c.isUnit() ? a : a.multiply(c);\r\n }\r\n function lcm(a, b) {\r\n a = parseValue(a).abs();\r\n b = parseValue(b).abs();\r\n return a.divide(gcd(a, b)).multiply(b);\r\n }\r\n function randBetween(a, b, rng) {\r\n a = parseValue(a);\r\n b = parseValue(b);\r\n var usedRNG = rng || Math.random;\r\n var low = min(a, b), high = max(a, b);\r\n var range = high.subtract(low).add(1);\r\n if (range.isSmall) return low.add(Math.floor(usedRNG() * range));\r\n var digits = toBase(range, BASE).value;\r\n var result = [], restricted = true;\r\n for (var i = 0; i < digits.length; i++) {\r\n var top = restricted ? digits[i] + (i + 1 < digits.length ? digits[i + 1] / BASE : 0) : BASE;\r\n var digit = truncate(usedRNG() * top);\r\n result.push(digit);\r\n if (digit < digits[i]) restricted = false;\r\n }\r\n return low.add(Integer.fromArray(result, BASE, false));\r\n }\r\n\r\n var parseBase = function (text, base, alphabet, caseSensitive) {\r\n alphabet = alphabet || DEFAULT_ALPHABET;\r\n text = String(text);\r\n if (!caseSensitive) {\r\n text = text.toLowerCase();\r\n alphabet = alphabet.toLowerCase();\r\n }\r\n var length = text.length;\r\n var i;\r\n var absBase = Math.abs(base);\r\n var alphabetValues = {};\r\n for (i = 0; i < alphabet.length; i++) {\r\n alphabetValues[alphabet[i]] = i;\r\n }\r\n for (i = 0; i < length; i++) {\r\n var c = text[i];\r\n if (c === \"-\") continue;\r\n if (c in alphabetValues) {\r\n if (alphabetValues[c] >= absBase) {\r\n if (c === \"1\" && absBase === 1) continue;\r\n throw new Error(c + \" is not a valid digit in base \" + base + \".\");\r\n }\r\n }\r\n }\r\n base = parseValue(base);\r\n var digits = [];\r\n var isNegative = text[0] === \"-\";\r\n for (i = isNegative ? 1 : 0; i < text.length; i++) {\r\n var c = text[i];\r\n if (c in alphabetValues) digits.push(parseValue(alphabetValues[c]));\r\n else if (c === \"<\") {\r\n var start = i;\r\n do { i++; } while (text[i] !== \">\" && i < text.length);\r\n digits.push(parseValue(text.slice(start + 1, i)));\r\n }\r\n else throw new Error(c + \" is not a valid character\");\r\n }\r\n return parseBaseFromArray(digits, base, isNegative);\r\n };\r\n\r\n function parseBaseFromArray(digits, base, isNegative) {\r\n var val = Integer[0], pow = Integer[1], i;\r\n for (i = digits.length - 1; i >= 0; i--) {\r\n val = val.add(digits[i].times(pow));\r\n pow = pow.times(base);\r\n }\r\n return isNegative ? val.negate() : val;\r\n }\r\n\r\n function stringify(digit, alphabet) {\r\n alphabet = alphabet || DEFAULT_ALPHABET;\r\n if (digit < alphabet.length) {\r\n return alphabet[digit];\r\n }\r\n return \"<\" + digit + \">\";\r\n }\r\n\r\n function toBase(n, base) {\r\n base = bigInt(base);\r\n if (base.isZero()) {\r\n if (n.isZero()) return { value: [0], isNegative: false };\r\n throw new Error(\"Cannot convert nonzero numbers to base 0.\");\r\n }\r\n if (base.equals(-1)) {\r\n if (n.isZero()) return { value: [0], isNegative: false };\r\n if (n.isNegative())\r\n return {\r\n value: [].concat.apply([], Array.apply(null, Array(-n.toJSNumber()))\r\n .map(Array.prototype.valueOf, [1, 0])\r\n ),\r\n isNegative: false\r\n };\r\n\r\n var arr = Array.apply(null, Array(n.toJSNumber() - 1))\r\n .map(Array.prototype.valueOf, [0, 1]);\r\n arr.unshift([1]);\r\n return {\r\n value: [].concat.apply([], arr),\r\n isNegative: false\r\n };\r\n }\r\n\r\n var neg = false;\r\n if (n.isNegative() && base.isPositive()) {\r\n neg = true;\r\n n = n.abs();\r\n }\r\n if (base.isUnit()) {\r\n if (n.isZero()) return { value: [0], isNegative: false };\r\n\r\n return {\r\n value: Array.apply(null, Array(n.toJSNumber()))\r\n .map(Number.prototype.valueOf, 1),\r\n isNegative: neg\r\n };\r\n }\r\n var out = [];\r\n var left = n, divmod;\r\n while (left.isNegative() || left.compareAbs(base) >= 0) {\r\n divmod = left.divmod(base);\r\n left = divmod.quotient;\r\n var digit = divmod.remainder;\r\n if (digit.isNegative()) {\r\n digit = base.minus(digit).abs();\r\n left = left.next();\r\n }\r\n out.push(digit.toJSNumber());\r\n }\r\n out.push(left.toJSNumber());\r\n return { value: out.reverse(), isNegative: neg };\r\n }\r\n\r\n function toBaseString(n, base, alphabet) {\r\n var arr = toBase(n, base);\r\n return (arr.isNegative ? \"-\" : \"\") + arr.value.map(function (x) {\r\n return stringify(x, alphabet);\r\n }).join('');\r\n }\r\n\r\n BigInteger.prototype.toArray = function (radix) {\r\n return toBase(this, radix);\r\n };\r\n\r\n SmallInteger.prototype.toArray = function (radix) {\r\n return toBase(this, radix);\r\n };\r\n\r\n NativeBigInt.prototype.toArray = function (radix) {\r\n return toBase(this, radix);\r\n };\r\n\r\n BigInteger.prototype.toString = function (radix, alphabet) {\r\n if (radix === undefined) radix = 10;\r\n if (radix !== 10) return toBaseString(this, radix, alphabet);\r\n var v = this.value, l = v.length, str = String(v[--l]), zeros = \"0000000\", digit;\r\n while (--l >= 0) {\r\n digit = String(v[l]);\r\n str += zeros.slice(digit.length) + digit;\r\n }\r\n var sign = this.sign ? \"-\" : \"\";\r\n return sign + str;\r\n };\r\n\r\n SmallInteger.prototype.toString = function (radix, alphabet) {\r\n if (radix === undefined) radix = 10;\r\n if (radix != 10) return toBaseString(this, radix, alphabet);\r\n return String(this.value);\r\n };\r\n\r\n NativeBigInt.prototype.toString = SmallInteger.prototype.toString;\r\n\r\n NativeBigInt.prototype.toJSON = BigInteger.prototype.toJSON = SmallInteger.prototype.toJSON = function () { return this.toString(); }\r\n\r\n BigInteger.prototype.valueOf = function () {\r\n return parseInt(this.toString(), 10);\r\n };\r\n BigInteger.prototype.toJSNumber = BigInteger.prototype.valueOf;\r\n\r\n SmallInteger.prototype.valueOf = function () {\r\n return this.value;\r\n };\r\n SmallInteger.prototype.toJSNumber = SmallInteger.prototype.valueOf;\r\n NativeBigInt.prototype.valueOf = NativeBigInt.prototype.toJSNumber = function () {\r\n return parseInt(this.toString(), 10);\r\n }\r\n\r\n function parseStringValue(v) {\r\n if (isPrecise(+v)) {\r\n var x = +v;\r\n if (x === truncate(x))\r\n return supportsNativeBigInt ? new NativeBigInt(BigInt(x)) : new SmallInteger(x);\r\n throw new Error(\"Invalid integer: \" + v);\r\n }\r\n var sign = v[0] === \"-\";\r\n if (sign) v = v.slice(1);\r\n var split = v.split(/e/i);\r\n if (split.length > 2) throw new Error(\"Invalid integer: \" + split.join(\"e\"));\r\n if (split.length === 2) {\r\n var exp = split[1];\r\n if (exp[0] === \"+\") exp = exp.slice(1);\r\n exp = +exp;\r\n if (exp !== truncate(exp) || !isPrecise(exp)) throw new Error(\"Invalid integer: \" + exp + \" is not a valid exponent.\");\r\n var text = split[0];\r\n var decimalPlace = text.indexOf(\".\");\r\n if (decimalPlace >= 0) {\r\n exp -= text.length - decimalPlace - 1;\r\n text = text.slice(0, decimalPlace) + text.slice(decimalPlace + 1);\r\n }\r\n if (exp < 0) throw new Error(\"Cannot include negative exponent part for integers\");\r\n text += (new Array(exp + 1)).join(\"0\");\r\n v = text;\r\n }\r\n var isValid = /^([0-9][0-9]*)$/.test(v);\r\n if (!isValid) throw new Error(\"Invalid integer: \" + v);\r\n if (supportsNativeBigInt) {\r\n return new NativeBigInt(BigInt(sign ? \"-\" + v : v));\r\n }\r\n var r = [], max = v.length, l = LOG_BASE, min = max - l;\r\n while (max > 0) {\r\n r.push(+v.slice(min, max));\r\n min -= l;\r\n if (min < 0) min = 0;\r\n max -= l;\r\n }\r\n trim(r);\r\n return new BigInteger(r, sign);\r\n }\r\n\r\n function parseNumberValue(v) {\r\n if (supportsNativeBigInt) {\r\n return new NativeBigInt(BigInt(v));\r\n }\r\n if (isPrecise(v)) {\r\n if (v !== truncate(v)) throw new Error(v + \" is not an integer.\");\r\n return new SmallInteger(v);\r\n }\r\n return parseStringValue(v.toString());\r\n }\r\n\r\n function parseValue(v) {\r\n if (typeof v === \"number\") {\r\n return parseNumberValue(v);\r\n }\r\n if (typeof v === \"string\") {\r\n return parseStringValue(v);\r\n }\r\n if (typeof v === \"bigint\") {\r\n return new NativeBigInt(v);\r\n }\r\n return v;\r\n }\r\n // Pre-define numbers in range [-999,999]\r\n for (var i = 0; i < 1000; i++) {\r\n Integer[i] = parseValue(i);\r\n if (i > 0) Integer[-i] = parseValue(-i);\r\n }\r\n // Backwards compatibility\r\n Integer.one = Integer[1];\r\n Integer.zero = Integer[0];\r\n Integer.minusOne = Integer[-1];\r\n Integer.max = max;\r\n Integer.min = min;\r\n Integer.gcd = gcd;\r\n Integer.lcm = lcm;\r\n Integer.isInstance = function (x) { return x instanceof BigInteger || x instanceof SmallInteger || x instanceof NativeBigInt; };\r\n Integer.randBetween = randBetween;\r\n\r\n Integer.fromArray = function (digits, base, isNegative) {\r\n return parseBaseFromArray(digits.map(parseValue), parseValue(base || 10), isNegative);\r\n };\r\n\r\n return Integer;\r\n})();\r\n\r\n// Node.js check\r\nif (typeof module !== \"undefined\" && module.hasOwnProperty(\"exports\")) {\r\n module.exports = bigInt;\r\n}\r\n\r\n//amd check\r\nif (typeof define === \"function\" && define.amd) {\r\n define( function () {\r\n return bigInt;\r\n });\r\n}\r\n", "/**\n * @preserve jed.js https://github.com/SlexAxton/Jed\n */\n/*\n-----------\nA gettext compatible i18n library for modern JavaScript Applications\n\nby Alex Sexton - AlexSexton [at] gmail - @SlexAxton\n\nMIT License\n\nA jQuery Foundation project - requires CLA to contribute -\nhttps://contribute.jquery.org/CLA/\n\n\n\nJed offers the entire applicable GNU gettext spec'd set of\nfunctions, but also offers some nicer wrappers around them.\nThe api for gettext was written for a language with no function\noverloading, so Jed allows a little more of that.\n\nMany thanks to Joshua I. Miller - unrtst@cpan.org - who wrote\ngettext.js back in 2008. I was able to vet a lot of my ideas\nagainst his. I also made sure Jed passed against his tests\nin order to offer easy upgrades -- jsgettext.berlios.de\n*/\n(function (root, undef) {\n\n // Set up some underscore-style functions, if you already have\n // underscore, feel free to delete this section, and use it\n // directly, however, the amount of functions used doesn't\n // warrant having underscore as a full dependency.\n // Underscore 1.3.0 was used to port and is licensed\n // under the MIT License by Jeremy Ashkenas.\n var ArrayProto = Array.prototype,\n ObjProto = Object.prototype,\n slice = ArrayProto.slice,\n hasOwnProp = ObjProto.hasOwnProperty,\n nativeForEach = ArrayProto.forEach,\n breaker = {};\n\n // We're not using the OOP style _ so we don't need the\n // extra level of indirection. This still means that you\n // sub out for real `_` though.\n var _ = {\n forEach : function( obj, iterator, context ) {\n var i, l, key;\n if ( obj === null ) {\n return;\n }\n\n if ( nativeForEach && obj.forEach === nativeForEach ) {\n obj.forEach( iterator, context );\n }\n else if ( obj.length === +obj.length ) {\n for ( i = 0, l = obj.length; i < l; i++ ) {\n if ( i in obj && iterator.call( context, obj[i], i, obj ) === breaker ) {\n return;\n }\n }\n }\n else {\n for ( key in obj) {\n if ( hasOwnProp.call( obj, key ) ) {\n if ( iterator.call (context, obj[key], key, obj ) === breaker ) {\n return;\n }\n }\n }\n }\n },\n extend : function( obj ) {\n this.forEach( slice.call( arguments, 1 ), function ( source ) {\n for ( var prop in source ) {\n obj[prop] = source[prop];\n }\n });\n return obj;\n }\n };\n // END Miniature underscore impl\n\n // Jed is a constructor function\n var Jed = function ( options ) {\n // Some minimal defaults\n this.defaults = {\n \"locale_data\" : {\n \"messages\" : {\n \"\" : {\n \"domain\" : \"messages\",\n \"lang\" : \"en\",\n \"plural_forms\" : \"nplurals=2; plural=(n != 1);\"\n }\n // There are no default keys, though\n }\n },\n // The default domain if one is missing\n \"domain\" : \"messages\",\n // enable debug mode to log untranslated strings to the console\n \"debug\" : false\n };\n\n // Mix in the sent options with the default options\n this.options = _.extend( {}, this.defaults, options );\n this.textdomain( this.options.domain );\n\n if ( options.domain && ! this.options.locale_data[ this.options.domain ] ) {\n throw new Error('Text domain set to non-existent domain: `' + options.domain + '`');\n }\n };\n\n // The gettext spec sets this character as the default\n // delimiter for context lookups.\n // e.g.: context\\u0004key\n // If your translation company uses something different,\n // just change this at any time and it will use that instead.\n Jed.context_delimiter = String.fromCharCode( 4 );\n\n function getPluralFormFunc ( plural_form_string ) {\n return Jed.PF.compile( plural_form_string || \"nplurals=2; plural=(n != 1);\");\n }\n\n function Chain( key, i18n ){\n this._key = key;\n this._i18n = i18n;\n }\n\n // Create a chainable api for adding args prettily\n _.extend( Chain.prototype, {\n onDomain : function ( domain ) {\n this._domain = domain;\n return this;\n },\n withContext : function ( context ) {\n this._context = context;\n return this;\n },\n ifPlural : function ( num, pkey ) {\n this._val = num;\n this._pkey = pkey;\n return this;\n },\n fetch : function ( sArr ) {\n if ( {}.toString.call( sArr ) != '[object Array]' ) {\n sArr = [].slice.call(arguments, 0);\n }\n return ( sArr && sArr.length ? Jed.sprintf : function(x){ return x; } )(\n this._i18n.dcnpgettext(this._domain, this._context, this._key, this._pkey, this._val),\n sArr\n );\n }\n });\n\n // Add functions to the Jed prototype.\n // These will be the functions on the object that's returned\n // from creating a `new Jed()`\n // These seem redundant, but they gzip pretty well.\n _.extend( Jed.prototype, {\n // The sexier api start point\n translate : function ( key ) {\n return new Chain( key, this );\n },\n\n textdomain : function ( domain ) {\n if ( ! domain ) {\n return this._textdomain;\n }\n this._textdomain = domain;\n },\n\n gettext : function ( key ) {\n return this.dcnpgettext.call( this, undef, undef, key );\n },\n\n dgettext : function ( domain, key ) {\n return this.dcnpgettext.call( this, domain, undef, key );\n },\n\n dcgettext : function ( domain , key /*, category */ ) {\n // Ignores the category anyways\n return this.dcnpgettext.call( this, domain, undef, key );\n },\n\n ngettext : function ( skey, pkey, val ) {\n return this.dcnpgettext.call( this, undef, undef, skey, pkey, val );\n },\n\n dngettext : function ( domain, skey, pkey, val ) {\n return this.dcnpgettext.call( this, domain, undef, skey, pkey, val );\n },\n\n dcngettext : function ( domain, skey, pkey, val/*, category */) {\n return this.dcnpgettext.call( this, domain, undef, skey, pkey, val );\n },\n\n pgettext : function ( context, key ) {\n return this.dcnpgettext.call( this, undef, context, key );\n },\n\n dpgettext : function ( domain, context, key ) {\n return this.dcnpgettext.call( this, domain, context, key );\n },\n\n dcpgettext : function ( domain, context, key/*, category */) {\n return this.dcnpgettext.call( this, domain, context, key );\n },\n\n npgettext : function ( context, skey, pkey, val ) {\n return this.dcnpgettext.call( this, undef, context, skey, pkey, val );\n },\n\n dnpgettext : function ( domain, context, skey, pkey, val ) {\n return this.dcnpgettext.call( this, domain, context, skey, pkey, val );\n },\n\n // The most fully qualified gettext function. It has every option.\n // Since it has every option, we can use it from every other method.\n // This is the bread and butter.\n // Technically there should be one more argument in this function for 'Category',\n // but since we never use it, we might as well not waste the bytes to define it.\n dcnpgettext : function ( domain, context, singular_key, plural_key, val ) {\n // Set some defaults\n\n plural_key = plural_key || singular_key;\n\n // Use the global domain default if one\n // isn't explicitly passed in\n domain = domain || this._textdomain;\n\n var fallback;\n\n // Handle special cases\n\n // No options found\n if ( ! this.options ) {\n // There's likely something wrong, but we'll return the correct key for english\n // We do this by instantiating a brand new Jed instance with the default set\n // for everything that could be broken.\n fallback = new Jed();\n return fallback.dcnpgettext.call( fallback, undefined, undefined, singular_key, plural_key, val );\n }\n\n // No translation data provided\n if ( ! this.options.locale_data ) {\n throw new Error('No locale data provided.');\n }\n\n if ( ! this.options.locale_data[ domain ] ) {\n throw new Error('Domain `' + domain + '` was not found.');\n }\n\n if ( ! this.options.locale_data[ domain ][ \"\" ] ) {\n throw new Error('No locale meta information provided.');\n }\n\n // Make sure we have a truthy key. Otherwise we might start looking\n // into the empty string key, which is the options for the locale\n // data.\n if ( ! singular_key ) {\n throw new Error('No translation key found.');\n }\n\n var key = context ? context + Jed.context_delimiter + singular_key : singular_key,\n locale_data = this.options.locale_data,\n dict = locale_data[ domain ],\n defaultConf = (locale_data.messages || this.defaults.locale_data.messages)[\"\"],\n pluralForms = dict[\"\"].plural_forms || dict[\"\"][\"Plural-Forms\"] || dict[\"\"][\"plural-forms\"] || defaultConf.plural_forms || defaultConf[\"Plural-Forms\"] || defaultConf[\"plural-forms\"],\n val_list,\n res;\n\n var val_idx;\n if (val === undefined) {\n // No value passed in; assume singular key lookup.\n val_idx = 0;\n\n } else {\n // Value has been passed in; use plural-forms calculations.\n\n // Handle invalid numbers, but try casting strings for good measure\n if ( typeof val != 'number' ) {\n val = parseInt( val, 10 );\n\n if ( isNaN( val ) ) {\n throw new Error('The number that was passed in is not a number.');\n }\n }\n\n val_idx = getPluralFormFunc(pluralForms)(val);\n }\n\n // Throw an error if a domain isn't found\n if ( ! dict ) {\n throw new Error('No domain named `' + domain + '` could be found.');\n }\n\n val_list = dict[ key ];\n\n // If there is no match, then revert back to\n // english style singular/plural with the keys passed in.\n if ( ! val_list || val_idx > val_list.length ) {\n if (this.options.missing_key_callback) {\n this.options.missing_key_callback(key, domain);\n }\n res = [ singular_key, plural_key ];\n\n // collect untranslated strings\n if (this.options.debug===true) {\n console.log(res[ getPluralFormFunc(pluralForms)( val ) ]);\n }\n return res[ getPluralFormFunc()( val ) ];\n }\n\n res = val_list[ val_idx ];\n\n // This includes empty strings on purpose\n if ( ! res ) {\n res = [ singular_key, plural_key ];\n return res[ getPluralFormFunc()( val ) ];\n }\n return res;\n }\n });\n\n\n // We add in sprintf capabilities for post translation value interolation\n // This is not internally used, so you can remove it if you have this\n // available somewhere else, or want to use a different system.\n\n // We _slightly_ modify the normal sprintf behavior to more gracefully handle\n // undefined values.\n\n /**\n sprintf() for JavaScript 0.7-beta1\n http://www.diveintojavascript.com/projects/javascript-sprintf\n\n Copyright (c) Alexandru Marasteanu <alexaholic [at) gmail (dot] com>\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n * Neither the name of sprintf() for JavaScript nor the\n names of its contributors may be used to endorse or promote products\n derived from this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL Alexandru Marasteanu BE LIABLE FOR ANY\n DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n var sprintf = (function() {\n function get_type(variable) {\n return Object.prototype.toString.call(variable).slice(8, -1).toLowerCase();\n }\n function str_repeat(input, multiplier) {\n for (var output = []; multiplier > 0; output[--multiplier] = input) {/* do nothing */}\n return output.join('');\n }\n\n var str_format = function() {\n if (!str_format.cache.hasOwnProperty(arguments[0])) {\n str_format.cache[arguments[0]] = str_format.parse(arguments[0]);\n }\n return str_format.format.call(null, str_format.cache[arguments[0]], arguments);\n };\n\n str_format.format = function(parse_tree, argv) {\n var cursor = 1, tree_length = parse_tree.length, node_type = '', arg, output = [], i, k, match, pad, pad_character, pad_length;\n for (i = 0; i < tree_length; i++) {\n node_type = get_type(parse_tree[i]);\n if (node_type === 'string') {\n output.push(parse_tree[i]);\n }\n else if (node_type === 'array') {\n match = parse_tree[i]; // convenience purposes only\n if (match[2]) { // keyword argument\n arg = argv[cursor];\n for (k = 0; k < match[2].length; k++) {\n if (!arg.hasOwnProperty(match[2][k])) {\n throw(sprintf('[sprintf] property \"%s\" does not exist', match[2][k]));\n }\n arg = arg[match[2][k]];\n }\n }\n else if (match[1]) { // positional argument (explicit)\n arg = argv[match[1]];\n }\n else { // positional argument (implicit)\n arg = argv[cursor++];\n }\n\n if (/[^s]/.test(match[8]) && (get_type(arg) != 'number')) {\n throw(sprintf('[sprintf] expecting number but found %s', get_type(arg)));\n }\n\n // Jed EDIT\n if ( typeof arg == 'undefined' || arg === null ) {\n arg = '';\n }\n // Jed EDIT\n\n switch (match[8]) {\n case 'b': arg = arg.toString(2); break;\n case 'c': arg = String.fromCharCode(arg); break;\n case 'd': arg = parseInt(arg, 10); break;\n case 'e': arg = match[7] ? arg.toExponential(match[7]) : arg.toExponential(); break;\n case 'f': arg = match[7] ? parseFloat(arg).toFixed(match[7]) : parseFloat(arg); break;\n case 'o': arg = arg.toString(8); break;\n case 's': arg = ((arg = String(arg)) && match[7] ? arg.substring(0, match[7]) : arg); break;\n case 'u': arg = Math.abs(arg); break;\n case 'x': arg = arg.toString(16); break;\n case 'X': arg = arg.toString(16).toUpperCase(); break;\n }\n arg = (/[def]/.test(match[8]) && match[3] && arg >= 0 ? '+'+ arg : arg);\n pad_character = match[4] ? match[4] == '0' ? '0' : match[4].charAt(1) : ' ';\n pad_length = match[6] - String(arg).length;\n pad = match[6] ? str_repeat(pad_character, pad_length) : '';\n output.push(match[5] ? arg + pad : pad + arg);\n }\n }\n return output.join('');\n };\n\n str_format.cache = {};\n\n str_format.parse = function(fmt) {\n var _fmt = fmt, match = [], parse_tree = [], arg_names = 0;\n while (_fmt) {\n if ((match = /^[^\\x25]+/.exec(_fmt)) !== null) {\n parse_tree.push(match[0]);\n }\n else if ((match = /^\\x25{2}/.exec(_fmt)) !== null) {\n parse_tree.push('%');\n }\n else if ((match = /^\\x25(?:([1-9]\\d*)\\$|\\(([^\\)]+)\\))?(\\+)?(0|'[^$])?(-)?(\\d+)?(?:\\.(\\d+))?([b-fosuxX])/.exec(_fmt)) !== null) {\n if (match[2]) {\n arg_names |= 1;\n var field_list = [], replacement_field = match[2], field_match = [];\n if ((field_match = /^([a-z_][a-z_\\d]*)/i.exec(replacement_field)) !== null) {\n field_list.push(field_match[1]);\n while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') {\n if ((field_match = /^\\.([a-z_][a-z_\\d]*)/i.exec(replacement_field)) !== null) {\n field_list.push(field_match[1]);\n }\n else if ((field_match = /^\\[(\\d+)\\]/.exec(replacement_field)) !== null) {\n field_list.push(field_match[1]);\n }\n else {\n throw('[sprintf] huh?');\n }\n }\n }\n else {\n throw('[sprintf] huh?');\n }\n match[2] = field_list;\n }\n else {\n arg_names |= 2;\n }\n if (arg_names === 3) {\n throw('[sprintf] mixing positional and named placeholders is not (yet) supported');\n }\n parse_tree.push(match);\n }\n else {\n throw('[sprintf] huh?');\n }\n _fmt = _fmt.substring(match[0].length);\n }\n return parse_tree;\n };\n\n return str_format;\n })();\n\n var vsprintf = function(fmt, argv) {\n argv.unshift(fmt);\n return sprintf.apply(null, argv);\n };\n\n Jed.parse_plural = function ( plural_forms, n ) {\n plural_forms = plural_forms.replace(/n/g, n);\n return Jed.parse_expression(plural_forms);\n };\n\n Jed.sprintf = function ( fmt, args ) {\n if ( {}.toString.call( args ) == '[object Array]' ) {\n return vsprintf( fmt, [].slice.call(args) );\n }\n return sprintf.apply(this, [].slice.call(arguments) );\n };\n\n Jed.prototype.sprintf = function () {\n return Jed.sprintf.apply(this, arguments);\n };\n // END sprintf Implementation\n\n // Start the Plural forms section\n // This is a full plural form expression parser. It is used to avoid\n // running 'eval' or 'new Function' directly against the plural\n // forms.\n //\n // This can be important if you get translations done through a 3rd\n // party vendor. I encourage you to use this instead, however, I\n // also will provide a 'precompiler' that you can use at build time\n // to output valid/safe function representations of the plural form\n // expressions. This means you can build this code out for the most\n // part.\n Jed.PF = {};\n\n Jed.PF.parse = function ( p ) {\n var plural_str = Jed.PF.extractPluralExpr( p );\n return Jed.PF.parser.parse.call(Jed.PF.parser, plural_str);\n };\n\n Jed.PF.compile = function ( p ) {\n // Handle trues and falses as 0 and 1\n function imply( val ) {\n return (val === true ? 1 : val ? val : 0);\n }\n\n var ast = Jed.PF.parse( p );\n return function ( n ) {\n return imply( Jed.PF.interpreter( ast )( n ) );\n };\n };\n\n Jed.PF.interpreter = function ( ast ) {\n return function ( n ) {\n var res;\n switch ( ast.type ) {\n case 'GROUP':\n return Jed.PF.interpreter( ast.expr )( n );\n case 'TERNARY':\n if ( Jed.PF.interpreter( ast.expr )( n ) ) {\n return Jed.PF.interpreter( ast.truthy )( n );\n }\n return Jed.PF.interpreter( ast.falsey )( n );\n case 'OR':\n return Jed.PF.interpreter( ast.left )( n ) || Jed.PF.interpreter( ast.right )( n );\n case 'AND':\n return Jed.PF.interpreter( ast.left )( n ) && Jed.PF.interpreter( ast.right )( n );\n case 'LT':\n return Jed.PF.interpreter( ast.left )( n ) < Jed.PF.interpreter( ast.right )( n );\n case 'GT':\n return Jed.PF.interpreter( ast.left )( n ) > Jed.PF.interpreter( ast.right )( n );\n case 'LTE':\n return Jed.PF.interpreter( ast.left )( n ) <= Jed.PF.interpreter( ast.right )( n );\n case 'GTE':\n return Jed.PF.interpreter( ast.left )( n ) >= Jed.PF.interpreter( ast.right )( n );\n case 'EQ':\n return Jed.PF.interpreter( ast.left )( n ) == Jed.PF.interpreter( ast.right )( n );\n case 'NEQ':\n return Jed.PF.interpreter( ast.left )( n ) != Jed.PF.interpreter( ast.right )( n );\n case 'MOD':\n return Jed.PF.interpreter( ast.left )( n ) % Jed.PF.interpreter( ast.right )( n );\n case 'VAR':\n return n;\n case 'NUM':\n return ast.val;\n default:\n throw new Error(\"Invalid Token found.\");\n }\n };\n };\n\n Jed.PF.extractPluralExpr = function ( p ) {\n // trim first\n p = p.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n\n if (! /;\\s*$/.test(p)) {\n p = p.concat(';');\n }\n\n var nplurals_re = /nplurals\\=(\\d+);/,\n plural_re = /plural\\=(.*);/,\n nplurals_matches = p.match( nplurals_re ),\n res = {},\n plural_matches;\n\n // Find the nplurals number\n if ( nplurals_matches.length > 1 ) {\n res.nplurals = nplurals_matches[1];\n }\n else {\n throw new Error('nplurals not found in plural_forms string: ' + p );\n }\n\n // remove that data to get to the formula\n p = p.replace( nplurals_re, \"\" );\n plural_matches = p.match( plural_re );\n\n if (!( plural_matches && plural_matches.length > 1 ) ) {\n throw new Error('`plural` expression not found: ' + p);\n }\n return plural_matches[ 1 ];\n };\n\n /* Jison generated parser */\n Jed.PF.parser = (function(){\n\nvar parser = {trace: function trace() { },\nyy: {},\nsymbols_: {\"error\":2,\"expressions\":3,\"e\":4,\"EOF\":5,\"?\":6,\":\":7,\"||\":8,\"&&\":9,\"<\":10,\"<=\":11,\">\":12,\">=\":13,\"!=\":14,\"==\":15,\"%\":16,\"(\":17,\")\":18,\"n\":19,\"NUMBER\":20,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",5:\"EOF\",6:\"?\",7:\":\",8:\"||\",9:\"&&\",10:\"<\",11:\"<=\",12:\">\",13:\">=\",14:\"!=\",15:\"==\",16:\"%\",17:\"(\",18:\")\",19:\"n\",20:\"NUMBER\"},\nproductions_: [0,[3,2],[4,5],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,1],[4,1]],\nperformAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$) {\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 1: return { type : 'GROUP', expr: $$[$0-1] };\nbreak;\ncase 2:this.$ = { type: 'TERNARY', expr: $$[$0-4], truthy : $$[$0-2], falsey: $$[$0] };\nbreak;\ncase 3:this.$ = { type: \"OR\", left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 4:this.$ = { type: \"AND\", left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 5:this.$ = { type: 'LT', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 6:this.$ = { type: 'LTE', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 7:this.$ = { type: 'GT', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 8:this.$ = { type: 'GTE', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 9:this.$ = { type: 'NEQ', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 10:this.$ = { type: 'EQ', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 11:this.$ = { type: 'MOD', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 12:this.$ = { type: 'GROUP', expr: $$[$0-1] };\nbreak;\ncase 13:this.$ = { type: 'VAR' };\nbreak;\ncase 14:this.$ = { type: 'NUM', val: Number(yytext) };\nbreak;\n}\n},\ntable: [{3:1,4:2,17:[1,3],19:[1,4],20:[1,5]},{1:[3]},{5:[1,6],6:[1,7],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16]},{4:17,17:[1,3],19:[1,4],20:[1,5]},{5:[2,13],6:[2,13],7:[2,13],8:[2,13],9:[2,13],10:[2,13],11:[2,13],12:[2,13],13:[2,13],14:[2,13],15:[2,13],16:[2,13],18:[2,13]},{5:[2,14],6:[2,14],7:[2,14],8:[2,14],9:[2,14],10:[2,14],11:[2,14],12:[2,14],13:[2,14],14:[2,14],15:[2,14],16:[2,14],18:[2,14]},{1:[2,1]},{4:18,17:[1,3],19:[1,4],20:[1,5]},{4:19,17:[1,3],19:[1,4],20:[1,5]},{4:20,17:[1,3],19:[1,4],20:[1,5]},{4:21,17:[1,3],19:[1,4],20:[1,5]},{4:22,17:[1,3],19:[1,4],20:[1,5]},{4:23,17:[1,3],19:[1,4],20:[1,5]},{4:24,17:[1,3],19:[1,4],20:[1,5]},{4:25,17:[1,3],19:[1,4],20:[1,5]},{4:26,17:[1,3],19:[1,4],20:[1,5]},{4:27,17:[1,3],19:[1,4],20:[1,5]},{6:[1,7],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[1,28]},{6:[1,7],7:[1,29],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16]},{5:[2,3],6:[2,3],7:[2,3],8:[2,3],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,3]},{5:[2,4],6:[2,4],7:[2,4],8:[2,4],9:[2,4],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,4]},{5:[2,5],6:[2,5],7:[2,5],8:[2,5],9:[2,5],10:[2,5],11:[2,5],12:[2,5],13:[2,5],14:[2,5],15:[2,5],16:[1,16],18:[2,5]},{5:[2,6],6:[2,6],7:[2,6],8:[2,6],9:[2,6],10:[2,6],11:[2,6],12:[2,6],13:[2,6],14:[2,6],15:[2,6],16:[1,16],18:[2,6]},{5:[2,7],6:[2,7],7:[2,7],8:[2,7],9:[2,7],10:[2,7],11:[2,7],12:[2,7],13:[2,7],14:[2,7],15:[2,7],16:[1,16],18:[2,7]},{5:[2,8],6:[2,8],7:[2,8],8:[2,8],9:[2,8],10:[2,8],11:[2,8],12:[2,8],13:[2,8],14:[2,8],15:[2,8],16:[1,16],18:[2,8]},{5:[2,9],6:[2,9],7:[2,9],8:[2,9],9:[2,9],10:[2,9],11:[2,9],12:[2,9],13:[2,9],14:[2,9],15:[2,9],16:[1,16],18:[2,9]},{5:[2,10],6:[2,10],7:[2,10],8:[2,10],9:[2,10],10:[2,10],11:[2,10],12:[2,10],13:[2,10],14:[2,10],15:[2,10],16:[1,16],18:[2,10]},{5:[2,11],6:[2,11],7:[2,11],8:[2,11],9:[2,11],10:[2,11],11:[2,11],12:[2,11],13:[2,11],14:[2,11],15:[2,11],16:[2,11],18:[2,11]},{5:[2,12],6:[2,12],7:[2,12],8:[2,12],9:[2,12],10:[2,12],11:[2,12],12:[2,12],13:[2,12],14:[2,12],15:[2,12],16:[2,12],18:[2,12]},{4:30,17:[1,3],19:[1,4],20:[1,5]},{5:[2,2],6:[1,7],7:[2,2],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,2]}],\ndefaultActions: {6:[2,1]},\nparseError: function parseError(str, hash) {\n throw new Error(str);\n},\nparse: function parse(input) {\n var self = this,\n stack = [0],\n vstack = [null], // semantic value stack\n lstack = [], // location stack\n table = this.table,\n yytext = '',\n yylineno = 0,\n yyleng = 0,\n recovering = 0,\n TERROR = 2,\n EOF = 1;\n\n //this.reductionCount = this.shiftCount = 0;\n\n this.lexer.setInput(input);\n this.lexer.yy = this.yy;\n this.yy.lexer = this.lexer;\n if (typeof this.lexer.yylloc == 'undefined')\n this.lexer.yylloc = {};\n var yyloc = this.lexer.yylloc;\n lstack.push(yyloc);\n\n if (typeof this.yy.parseError === 'function')\n this.parseError = this.yy.parseError;\n\n function popStack (n) {\n stack.length = stack.length - 2*n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n\n function lex() {\n var token;\n token = self.lexer.lex() || 1; // $end = 1\n // if token isn't its numeric value, convert\n if (typeof token !== 'number') {\n token = self.symbols_[token] || token;\n }\n return token;\n }\n\n var symbol, preErrorSymbol, state, action, a, r, yyval={},p,len,newState, expected;\n while (true) {\n // retreive state number from top of stack\n state = stack[stack.length-1];\n\n // use default actions if available\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol == null)\n symbol = lex();\n // read action for current state and first input\n action = table[state] && table[state][symbol];\n }\n\n // handle parse error\n _handle_error:\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n\n if (!recovering) {\n // Report error\n expected = [];\n for (p in table[state]) if (this.terminals_[p] && p > 2) {\n expected.push(\"'\"+this.terminals_[p]+\"'\");\n }\n var errStr = '';\n if (this.lexer.showPosition) {\n errStr = 'Parse error on line '+(yylineno+1)+\":\\n\"+this.lexer.showPosition()+\"\\nExpecting \"+expected.join(', ') + \", got '\" + this.terminals_[symbol]+ \"'\";\n } else {\n errStr = 'Parse error on line '+(yylineno+1)+\": Unexpected \" +\n (symbol == 1 /*EOF*/ ? \"end of input\" :\n (\"'\"+(this.terminals_[symbol] || symbol)+\"'\"));\n }\n this.parseError(errStr,\n {text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected});\n }\n\n // just recovered from another error\n if (recovering == 3) {\n if (symbol == EOF) {\n throw new Error(errStr || 'Parsing halted.');\n }\n\n // discard current lookahead and grab another\n yyleng = this.lexer.yyleng;\n yytext = this.lexer.yytext;\n yylineno = this.lexer.yylineno;\n yyloc = this.lexer.yylloc;\n symbol = lex();\n }\n\n // try to recover from error\n while (1) {\n // check for error recovery rule in this state\n if ((TERROR.toString()) in table[state]) {\n break;\n }\n if (state == 0) {\n throw new Error(errStr || 'Parsing halted.');\n }\n popStack(1);\n state = stack[stack.length-1];\n }\n\n preErrorSymbol = symbol; // save the lookahead token\n symbol = TERROR; // insert generic error symbol as new lookahead\n state = stack[stack.length-1];\n action = table[state] && table[state][TERROR];\n recovering = 3; // allow 3 real symbols to be shifted before reporting a new error\n }\n\n // this shouldn't happen, unless resolve defaults are off\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: '+state+', token: '+symbol);\n }\n\n switch (action[0]) {\n\n case 1: // shift\n //this.shiftCount++;\n\n stack.push(symbol);\n vstack.push(this.lexer.yytext);\n lstack.push(this.lexer.yylloc);\n stack.push(action[1]); // push state\n symbol = null;\n if (!preErrorSymbol) { // normal execution/no error\n yyleng = this.lexer.yyleng;\n yytext = this.lexer.yytext;\n yylineno = this.lexer.yylineno;\n yyloc = this.lexer.yylloc;\n if (recovering > 0)\n recovering--;\n } else { // error just occurred, resume old lookahead f/ before error\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n\n case 2: // reduce\n //this.reductionCount++;\n\n len = this.productions_[action[1]][1];\n\n // perform semantic action\n yyval.$ = vstack[vstack.length-len]; // default to $$ = $1\n // default location, uses first token for firsts, last for lasts\n yyval._$ = {\n first_line: lstack[lstack.length-(len||1)].first_line,\n last_line: lstack[lstack.length-1].last_line,\n first_column: lstack[lstack.length-(len||1)].first_column,\n last_column: lstack[lstack.length-1].last_column\n };\n r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);\n\n if (typeof r !== 'undefined') {\n return r;\n }\n\n // pop off stack\n if (len) {\n stack = stack.slice(0,-1*len*2);\n vstack = vstack.slice(0, -1*len);\n lstack = lstack.slice(0, -1*len);\n }\n\n stack.push(this.productions_[action[1]][0]); // push nonterminal (reduce)\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n // goto new state = table[STATE][NONTERMINAL]\n newState = table[stack[stack.length-2]][stack[stack.length-1]];\n stack.push(newState);\n break;\n\n case 3: // accept\n return true;\n }\n\n }\n\n return true;\n}};/* Jison generated lexer */\nvar lexer = (function(){\n\nvar lexer = ({EOF:1,\nparseError:function parseError(str, hash) {\n if (this.yy.parseError) {\n this.yy.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\nsetInput:function (input) {\n this._input = input;\n this._more = this._less = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {first_line:1,first_column:0,last_line:1,last_column:0};\n return this;\n },\ninput:function () {\n var ch = this._input[0];\n this.yytext+=ch;\n this.yyleng++;\n this.match+=ch;\n this.matched+=ch;\n var lines = ch.match(/\\n/);\n if (lines) this.yylineno++;\n this._input = this._input.slice(1);\n return ch;\n },\nunput:function (ch) {\n this._input = ch + this._input;\n return this;\n },\nmore:function () {\n this._more = true;\n return this;\n },\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20)+(next.length > 20 ? '...':'')).replace(/\\n/g, \"\");\n },\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c+\"^\";\n },\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) this.done = true;\n\n var token,\n match,\n col,\n lines;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i=0;i < rules.length; i++) {\n match = this._input.match(this.rules[rules[i]]);\n if (match) {\n lines = match[0].match(/\\n.*/g);\n if (lines) this.yylineno += lines.length;\n this.yylloc = {first_line: this.yylloc.last_line,\n last_line: this.yylineno+1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length-1].length-1 : this.yylloc.last_column + match[0].length}\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n this._more = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, rules[i],this.conditionStack[this.conditionStack.length-1]);\n if (token) return token;\n else return;\n }\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n this.parseError('Lexical error on line '+(this.yylineno+1)+'. Unrecognized text.\\n'+this.showPosition(),\n {text: \"\", token: null, line: this.yylineno});\n }\n },\nlex:function lex() {\n var r = this.next();\n if (typeof r !== 'undefined') {\n return r;\n } else {\n return this.lex();\n }\n },\nbegin:function begin(condition) {\n this.conditionStack.push(condition);\n },\npopState:function popState() {\n return this.conditionStack.pop();\n },\n_currentRules:function _currentRules() {\n return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules;\n },\ntopState:function () {\n return this.conditionStack[this.conditionStack.length-2];\n },\npushState:function begin(condition) {\n this.begin(condition);\n }});\nlexer.performAction = function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\n\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:/* skip whitespace */\nbreak;\ncase 1:return 20\nbreak;\ncase 2:return 19\nbreak;\ncase 3:return 8\nbreak;\ncase 4:return 9\nbreak;\ncase 5:return 6\nbreak;\ncase 6:return 7\nbreak;\ncase 7:return 11\nbreak;\ncase 8:return 13\nbreak;\ncase 9:return 10\nbreak;\ncase 10:return 12\nbreak;\ncase 11:return 14\nbreak;\ncase 12:return 15\nbreak;\ncase 13:return 16\nbreak;\ncase 14:return 17\nbreak;\ncase 15:return 18\nbreak;\ncase 16:return 5\nbreak;\ncase 17:return 'INVALID'\nbreak;\n}\n};\nlexer.rules = [/^\\s+/,/^[0-9]+(\\.[0-9]+)?\\b/,/^n\\b/,/^\\|\\|/,/^&&/,/^\\?/,/^:/,/^<=/,/^>=/,/^</,/^>/,/^!=/,/^==/,/^%/,/^\\(/,/^\\)/,/^$/,/^./];\nlexer.conditions = {\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],\"inclusive\":true}};return lexer;})()\nparser.lexer = lexer;\nreturn parser;\n})();\n// End parser\n\n // Handle node, amd, and global systems\n if (typeof exports !== 'undefined') {\n if (typeof module !== 'undefined' && module.exports) {\n exports = module.exports = Jed;\n }\n exports.Jed = Jed;\n }\n else {\n if (typeof define === 'function' && define.amd) {\n define(function() {\n return Jed;\n });\n }\n // Leak a global regardless of module system\n root['Jed'] = Jed;\n }\n\n})(this);\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n}\n\nmodule.exports = baseHas;\n", "/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n", "/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n", "var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n", "var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n", "var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n", "var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n", "/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n", "var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n", "var isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n", "/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n", "var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n", "var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n", "var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n", "/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n", "var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n", "/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n", "var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n", "var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n", "var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n", "/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n", "var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n", "var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n", "var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n", "var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n", "/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n", "/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n", "var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n", "var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n", "var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n", "var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n", "var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n", "var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n", "var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n", "var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n", "/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n", "var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n", "var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n", "var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n", "var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n", "var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n", "var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n", "var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n", "var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nmodule.exports = memoizeCapped;\n", "var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nmodule.exports = stringToPath;\n", "/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n", "var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n", "var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n", "var isArray = require('./isArray'),\n isKey = require('./_isKey'),\n stringToPath = require('./_stringToPath'),\n toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n", "var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n", "var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n", "/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n", "/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n", "var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n", "var castPath = require('./_castPath'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isIndex = require('./_isIndex'),\n isLength = require('./isLength'),\n toKey = require('./_toKey');\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;\n", "var baseHas = require('./_baseHas'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\nfunction has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n}\n\nmodule.exports = has;\n", "var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n", "var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n", "/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nmodule.exports = createBaseFor;\n", "var createBaseFor = require('./_createBaseFor');\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n", "/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nmodule.exports = baseTimes;\n", "/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n", "var root = require('./_root'),\n stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n", "var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n", "/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n", "var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n", "var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n", "var baseTimes = require('./_baseTimes'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isIndex = require('./_isIndex'),\n isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = arrayLikeKeys;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n", "/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;\n", "var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n", "var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeys;\n", "var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n", "var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n", "var baseFor = require('./_baseFor'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nmodule.exports = baseForOwn;\n", "var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nmodule.exports = stackClear;\n", "/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nmodule.exports = stackDelete;\n", "/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n", "/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n", "var ListCache = require('./_ListCache'),\n Map = require('./_Map'),\n MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nmodule.exports = stackSet;\n", "var ListCache = require('./_ListCache'),\n stackClear = require('./_stackClear'),\n stackDelete = require('./_stackDelete'),\n stackGet = require('./_stackGet'),\n stackHas = require('./_stackHas'),\n stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n", "/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nmodule.exports = setCacheAdd;\n", "/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n", "var MapCache = require('./_MapCache'),\n setCacheAdd = require('./_setCacheAdd'),\n setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n", "/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arraySome;\n", "/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n", "var SetCache = require('./_SetCache'),\n arraySome = require('./_arraySome'),\n cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalArrays;\n", "var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n", "/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nmodule.exports = mapToArray;\n", "/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nmodule.exports = setToArray;\n", "var Symbol = require('./_Symbol'),\n Uint8Array = require('./_Uint8Array'),\n eq = require('./eq'),\n equalArrays = require('./_equalArrays'),\n mapToArray = require('./_mapToArray'),\n setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nmodule.exports = equalByTag;\n", "/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nmodule.exports = arrayPush;\n", "var arrayPush = require('./_arrayPush'),\n isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n", "/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nmodule.exports = arrayFilter;\n", "/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nmodule.exports = stubArray;\n", "var arrayFilter = require('./_arrayFilter'),\n stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nmodule.exports = getSymbols;\n", "var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbols = require('./_getSymbols'),\n keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n", "var getAllKeys = require('./_getAllKeys');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalObjects;\n", "var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n", "var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n", "var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n", "var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n", "var DataView = require('./_DataView'),\n Map = require('./_Map'),\n Promise = require('./_Promise'),\n Set = require('./_Set'),\n WeakMap = require('./_WeakMap'),\n baseGetTag = require('./_baseGetTag'),\n toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nmodule.exports = getTag;\n", "var Stack = require('./_Stack'),\n equalArrays = require('./_equalArrays'),\n equalByTag = require('./_equalByTag'),\n equalObjects = require('./_equalObjects'),\n getTag = require('./_getTag'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n", "var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n", "var Stack = require('./_Stack'),\n baseIsEqual = require('./_baseIsEqual');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nmodule.exports = baseIsMatch;\n", "var isObject = require('./isObject');\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nmodule.exports = isStrictComparable;\n", "var isStrictComparable = require('./_isStrictComparable'),\n keys = require('./keys');\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\nmodule.exports = getMatchData;\n", "/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\nmodule.exports = matchesStrictComparable;\n", "var baseIsMatch = require('./_baseIsMatch'),\n getMatchData = require('./_getMatchData'),\n matchesStrictComparable = require('./_matchesStrictComparable');\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\nmodule.exports = baseMatches;\n", "var castPath = require('./_castPath'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n", "var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n", "/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;\n", "var baseHasIn = require('./_baseHasIn'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;\n", "var baseIsEqual = require('./_baseIsEqual'),\n get = require('./get'),\n hasIn = require('./hasIn'),\n isKey = require('./_isKey'),\n isStrictComparable = require('./_isStrictComparable'),\n matchesStrictComparable = require('./_matchesStrictComparable'),\n toKey = require('./_toKey');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nmodule.exports = baseMatchesProperty;\n", "/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n", "/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nmodule.exports = baseProperty;\n", "var baseGet = require('./_baseGet');\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nmodule.exports = basePropertyDeep;\n", "var baseProperty = require('./_baseProperty'),\n basePropertyDeep = require('./_basePropertyDeep'),\n isKey = require('./_isKey'),\n toKey = require('./_toKey');\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = property;\n", "var baseMatches = require('./_baseMatches'),\n baseMatchesProperty = require('./_baseMatchesProperty'),\n identity = require('./identity'),\n isArray = require('./isArray'),\n property = require('./property');\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\nmodule.exports = baseIteratee;\n", "var baseAssignValue = require('./_baseAssignValue'),\n baseForOwn = require('./_baseForOwn'),\n baseIteratee = require('./_baseIteratee');\n\n/**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\nfunction mapValues(object, iteratee) {\n var result = {};\n iteratee = baseIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n}\n\nmodule.exports = mapValues;\n", "/**\n * Based on Kendo UI Core expression code <https://github.com/telerik/kendo-ui-core#license-information>\n */\n'use strict'\n\nfunction Cache(maxSize) {\n this._maxSize = maxSize\n this.clear()\n}\nCache.prototype.clear = function () {\n this._size = 0\n this._values = Object.create(null)\n}\nCache.prototype.get = function (key) {\n return this._values[key]\n}\nCache.prototype.set = function (key, value) {\n this._size >= this._maxSize && this.clear()\n if (!(key in this._values)) this._size++\n\n return (this._values[key] = value)\n}\n\nvar SPLIT_REGEX = /[^.^\\]^[]+|(?=\\[\\]|\\.\\.)/g,\n DIGIT_REGEX = /^\\d+$/,\n LEAD_DIGIT_REGEX = /^\\d/,\n SPEC_CHAR_REGEX = /[~`!#$%\\^&*+=\\-\\[\\]\\\\';,/{}|\\\\\":<>\\?]/g,\n CLEAN_QUOTES_REGEX = /^\\s*(['\"]?)(.*?)(\\1)\\s*$/,\n MAX_CACHE_SIZE = 512\n\nvar pathCache = new Cache(MAX_CACHE_SIZE),\n setCache = new Cache(MAX_CACHE_SIZE),\n getCache = new Cache(MAX_CACHE_SIZE)\n\nvar config\n\nmodule.exports = {\n Cache: Cache,\n\n split: split,\n\n normalizePath: normalizePath,\n\n setter: function (path) {\n var parts = normalizePath(path)\n\n return (\n setCache.get(path) ||\n setCache.set(path, function setter(obj, value) {\n var index = 0\n var len = parts.length\n var data = obj\n\n while (index < len - 1) {\n var part = parts[index]\n if (\n part === '__proto__' ||\n part === 'constructor' ||\n part === 'prototype'\n ) {\n return obj\n }\n\n data = data[parts[index++]]\n }\n data[parts[index]] = value\n })\n )\n },\n\n getter: function (path, safe) {\n var parts = normalizePath(path)\n return (\n getCache.get(path) ||\n getCache.set(path, function getter(data) {\n var index = 0,\n len = parts.length\n while (index < len) {\n if (data != null || !safe) data = data[parts[index++]]\n else return\n }\n return data\n })\n )\n },\n\n join: function (segments) {\n return segments.reduce(function (path, part) {\n return (\n path +\n (isQuoted(part) || DIGIT_REGEX.test(part)\n ? '[' + part + ']'\n : (path ? '.' : '') + part)\n )\n }, '')\n },\n\n forEach: function (path, cb, thisArg) {\n forEach(Array.isArray(path) ? path : split(path), cb, thisArg)\n },\n}\n\nfunction normalizePath(path) {\n return (\n pathCache.get(path) ||\n pathCache.set(\n path,\n split(path).map(function (part) {\n return part.replace(CLEAN_QUOTES_REGEX, '$2')\n })\n )\n )\n}\n\nfunction split(path) {\n return path.match(SPLIT_REGEX) || ['']\n}\n\nfunction forEach(parts, iter, thisArg) {\n var len = parts.length,\n part,\n idx,\n isArray,\n isBracket\n\n for (idx = 0; idx < len; idx++) {\n part = parts[idx]\n\n if (part) {\n if (shouldBeQuoted(part)) {\n part = '\"' + part + '\"'\n }\n\n isBracket = isQuoted(part)\n isArray = !isBracket && /^\\d+$/.test(part)\n\n iter.call(thisArg, part, isBracket, isArray, idx, parts)\n }\n }\n}\n\nfunction isQuoted(str) {\n return (\n typeof str === 'string' && str && [\"'\", '\"'].indexOf(str.charAt(0)) !== -1\n )\n}\n\nfunction hasLeadingNumber(part) {\n return part.match(LEAD_DIGIT_REGEX) && !part.match(DIGIT_REGEX)\n}\n\nfunction hasSpecialChars(part) {\n return SPEC_CHAR_REGEX.test(part)\n}\n\nfunction shouldBeQuoted(part) {\n return !isQuoted(part) && (hasLeadingNumber(part) || hasSpecialChars(part))\n}\n", "/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\nmodule.exports = arrayReduce;\n", "/**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n}\n\nmodule.exports = basePropertyOf;\n", "var basePropertyOf = require('./_basePropertyOf');\n\n/** Used to map Latin Unicode letters to basic Latin letters. */\nvar deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n};\n\n/**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\nvar deburrLetter = basePropertyOf(deburredLetters);\n\nmodule.exports = deburrLetter;\n", "var deburrLetter = require('./_deburrLetter'),\n toString = require('./toString');\n\n/** Used to match Latin Unicode letters (excluding mathematical operators). */\nvar reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n/** Used to compose unicode character classes. */\nvar rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange;\n\n/** Used to compose unicode capture groups. */\nvar rsCombo = '[' + rsComboRange + ']';\n\n/**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\nvar reComboMark = RegExp(rsCombo, 'g');\n\n/**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('d\u00E9j\u00E0 vu');\n * // => 'deja vu'\n */\nfunction deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n}\n\nmodule.exports = deburr;\n", "/** Used to match words composed of alphanumeric characters. */\nvar reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n/**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction asciiWords(string) {\n return string.match(reAsciiWord) || [];\n}\n\nmodule.exports = asciiWords;\n", "/** Used to detect strings that need a more robust regexp to match words. */\nvar reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n/**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\nfunction hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n}\n\nmodule.exports = hasUnicodeWord;\n", "/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\",\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq;\n\n/** Used to match complex or compound words. */\nvar reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n].join('|'), 'g');\n\n/**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n}\n\nmodule.exports = unicodeWords;\n", "var asciiWords = require('./_asciiWords'),\n hasUnicodeWord = require('./_hasUnicodeWord'),\n toString = require('./toString'),\n unicodeWords = require('./_unicodeWords');\n\n/**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\nfunction words(string, pattern, guard) {\n string = toString(string);\n pattern = guard ? undefined : pattern;\n\n if (pattern === undefined) {\n return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n }\n return string.match(pattern) || [];\n}\n\nmodule.exports = words;\n", "var arrayReduce = require('./_arrayReduce'),\n deburr = require('./deburr'),\n words = require('./words');\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\";\n\n/** Used to match apostrophes. */\nvar reApos = RegExp(rsApos, 'g');\n\n/**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\nfunction createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n}\n\nmodule.exports = createCompounder;\n", "var createCompounder = require('./_createCompounder');\n\n/**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\nvar snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n});\n\nmodule.exports = snakeCase;\n", "/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\nmodule.exports = baseSlice;\n", "var baseSlice = require('./_baseSlice');\n\n/**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\nfunction castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n}\n\nmodule.exports = castSlice;\n", "/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsZWJ = '\\\\u200d';\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n return reHasUnicode.test(string);\n}\n\nmodule.exports = hasUnicode;\n", "/**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction asciiToArray(string) {\n return string.split('');\n}\n\nmodule.exports = asciiToArray;\n", "/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction unicodeToArray(string) {\n return string.match(reUnicode) || [];\n}\n\nmodule.exports = unicodeToArray;\n", "var asciiToArray = require('./_asciiToArray'),\n hasUnicode = require('./_hasUnicode'),\n unicodeToArray = require('./_unicodeToArray');\n\n/**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n}\n\nmodule.exports = stringToArray;\n", "var castSlice = require('./_castSlice'),\n hasUnicode = require('./_hasUnicode'),\n stringToArray = require('./_stringToArray'),\n toString = require('./toString');\n\n/**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\nfunction createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n}\n\nmodule.exports = createCaseFirst;\n", "var createCaseFirst = require('./_createCaseFirst');\n\n/**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\nvar upperFirst = createCaseFirst('toUpperCase');\n\nmodule.exports = upperFirst;\n", "var toString = require('./toString'),\n upperFirst = require('./upperFirst');\n\n/**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\nfunction capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n}\n\nmodule.exports = capitalize;\n", "var capitalize = require('./capitalize'),\n createCompounder = require('./_createCompounder');\n\n/**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\nvar camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n});\n\nmodule.exports = camelCase;\n", "var baseAssignValue = require('./_baseAssignValue'),\n baseForOwn = require('./_baseForOwn'),\n baseIteratee = require('./_baseIteratee');\n\n/**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n * return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\nfunction mapKeys(object, iteratee) {\n var result = {};\n iteratee = baseIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, iteratee(value, key, object), value);\n });\n return result;\n}\n\nmodule.exports = mapKeys;\n", "\n/**\n * Topological sorting function\n *\n * @param {Array} edges\n * @returns {Array}\n */\n\nmodule.exports = function(edges) {\n return toposort(uniqueNodes(edges), edges)\n}\n\nmodule.exports.array = toposort\n\nfunction toposort(nodes, edges) {\n var cursor = nodes.length\n , sorted = new Array(cursor)\n , visited = {}\n , i = cursor\n // Better data structures make algorithm much faster.\n , outgoingEdges = makeOutgoingEdges(edges)\n , nodesHash = makeNodesHash(nodes)\n\n // check for unknown nodes\n edges.forEach(function(edge) {\n if (!nodesHash.has(edge[0]) || !nodesHash.has(edge[1])) {\n throw new Error('Unknown node. There is an unknown node in the supplied edges.')\n }\n })\n\n while (i--) {\n if (!visited[i]) visit(nodes[i], i, new Set())\n }\n\n return sorted\n\n function visit(node, i, predecessors) {\n if(predecessors.has(node)) {\n var nodeRep\n try {\n nodeRep = \", node was:\" + JSON.stringify(node)\n } catch(e) {\n nodeRep = \"\"\n }\n throw new Error('Cyclic dependency' + nodeRep)\n }\n\n if (!nodesHash.has(node)) {\n throw new Error('Found unknown node. Make sure to provided all involved nodes. Unknown node: '+JSON.stringify(node))\n }\n\n if (visited[i]) return;\n visited[i] = true\n\n var outgoing = outgoingEdges.get(node) || new Set()\n outgoing = Array.from(outgoing)\n\n if (i = outgoing.length) {\n predecessors.add(node)\n do {\n var child = outgoing[--i]\n visit(child, nodesHash.get(child), predecessors)\n } while (i)\n predecessors.delete(node)\n }\n\n sorted[--cursor] = node\n }\n}\n\nfunction uniqueNodes(arr){\n var res = new Set()\n for (var i = 0, len = arr.length; i < len; i++) {\n var edge = arr[i]\n res.add(edge[0])\n res.add(edge[1])\n }\n return Array.from(res)\n}\n\nfunction makeOutgoingEdges(arr){\n var edges = new Map()\n for (var i = 0, len = arr.length; i < len; i++) {\n var edge = arr[i]\n if (!edges.has(edge[0])) edges.set(edge[0], new Set())\n if (!edges.has(edge[1])) edges.set(edge[1], new Set())\n edges.get(edge[0]).add(edge[1])\n }\n return edges\n}\n\nfunction makeNodesHash(arr){\n var res = new Map()\n for (var i = 0, len = arr.length; i < len; i++) {\n res.set(arr[i], i)\n }\n return res\n}\n", "//---------------------------------------------------------------------\n//\n// QR Code Generator for JavaScript\n//\n// Copyright (c) 2009 Kazuhiko Arase\n//\n// URL: http://www.d-project.com/\n//\n// Licensed under the MIT license:\n// http://www.opensource.org/licenses/mit-license.php\n//\n// The word 'QR Code' is registered trademark of\n// DENSO WAVE INCORPORATED\n// http://www.denso-wave.com/qrcode/faqpatent-e.html\n//\n//---------------------------------------------------------------------\n\nvar qrcode = function() {\n\n //---------------------------------------------------------------------\n // qrcode\n //---------------------------------------------------------------------\n\n /**\n * qrcode\n * @param typeNumber 1 to 40\n * @param errorCorrectionLevel 'L','M','Q','H'\n */\n var qrcode = function(typeNumber, errorCorrectionLevel) {\n\n var PAD0 = 0xEC;\n var PAD1 = 0x11;\n\n var _typeNumber = typeNumber;\n var _errorCorrectionLevel = QRErrorCorrectionLevel[errorCorrectionLevel];\n var _modules = null;\n var _moduleCount = 0;\n var _dataCache = null;\n var _dataList = [];\n\n var _this = {};\n\n var makeImpl = function(test, maskPattern) {\n\n _moduleCount = _typeNumber * 4 + 17;\n _modules = function(moduleCount) {\n var modules = new Array(moduleCount);\n for (var row = 0; row < moduleCount; row += 1) {\n modules[row] = new Array(moduleCount);\n for (var col = 0; col < moduleCount; col += 1) {\n modules[row][col] = null;\n }\n }\n return modules;\n }(_moduleCount);\n\n setupPositionProbePattern(0, 0);\n setupPositionProbePattern(_moduleCount - 7, 0);\n setupPositionProbePattern(0, _moduleCount - 7);\n setupPositionAdjustPattern();\n setupTimingPattern();\n setupTypeInfo(test, maskPattern);\n\n if (_typeNumber >= 7) {\n setupTypeNumber(test);\n }\n\n if (_dataCache == null) {\n _dataCache = createData(_typeNumber, _errorCorrectionLevel, _dataList);\n }\n\n mapData(_dataCache, maskPattern);\n };\n\n var setupPositionProbePattern = function(row, col) {\n\n for (var r = -1; r <= 7; r += 1) {\n\n if (row + r <= -1 || _moduleCount <= row + r) continue;\n\n for (var c = -1; c <= 7; c += 1) {\n\n if (col + c <= -1 || _moduleCount <= col + c) continue;\n\n if ( (0 <= r && r <= 6 && (c == 0 || c == 6) )\n || (0 <= c && c <= 6 && (r == 0 || r == 6) )\n || (2 <= r && r <= 4 && 2 <= c && c <= 4) ) {\n _modules[row + r][col + c] = true;\n } else {\n _modules[row + r][col + c] = false;\n }\n }\n }\n };\n\n var getBestMaskPattern = function() {\n\n var minLostPoint = 0;\n var pattern = 0;\n\n for (var i = 0; i < 8; i += 1) {\n\n makeImpl(true, i);\n\n var lostPoint = QRUtil.getLostPoint(_this);\n\n if (i == 0 || minLostPoint > lostPoint) {\n minLostPoint = lostPoint;\n pattern = i;\n }\n }\n\n return pattern;\n };\n\n var setupTimingPattern = function() {\n\n for (var r = 8; r < _moduleCount - 8; r += 1) {\n if (_modules[r][6] != null) {\n continue;\n }\n _modules[r][6] = (r % 2 == 0);\n }\n\n for (var c = 8; c < _moduleCount - 8; c += 1) {\n if (_modules[6][c] != null) {\n continue;\n }\n _modules[6][c] = (c % 2 == 0);\n }\n };\n\n var setupPositionAdjustPattern = function() {\n\n var pos = QRUtil.getPatternPosition(_typeNumber);\n\n for (var i = 0; i < pos.length; i += 1) {\n\n for (var j = 0; j < pos.length; j += 1) {\n\n var row = pos[i];\n var col = pos[j];\n\n if (_modules[row][col] != null) {\n continue;\n }\n\n for (var r = -2; r <= 2; r += 1) {\n\n for (var c = -2; c <= 2; c += 1) {\n\n if (r == -2 || r == 2 || c == -2 || c == 2\n || (r == 0 && c == 0) ) {\n _modules[row + r][col + c] = true;\n } else {\n _modules[row + r][col + c] = false;\n }\n }\n }\n }\n }\n };\n\n var setupTypeNumber = function(test) {\n\n var bits = QRUtil.getBCHTypeNumber(_typeNumber);\n\n for (var i = 0; i < 18; i += 1) {\n var mod = (!test && ( (bits >> i) & 1) == 1);\n _modules[Math.floor(i / 3)][i % 3 + _moduleCount - 8 - 3] = mod;\n }\n\n for (var i = 0; i < 18; i += 1) {\n var mod = (!test && ( (bits >> i) & 1) == 1);\n _modules[i % 3 + _moduleCount - 8 - 3][Math.floor(i / 3)] = mod;\n }\n };\n\n var setupTypeInfo = function(test, maskPattern) {\n\n var data = (_errorCorrectionLevel << 3) | maskPattern;\n var bits = QRUtil.getBCHTypeInfo(data);\n\n // vertical\n for (var i = 0; i < 15; i += 1) {\n\n var mod = (!test && ( (bits >> i) & 1) == 1);\n\n if (i < 6) {\n _modules[i][8] = mod;\n } else if (i < 8) {\n _modules[i + 1][8] = mod;\n } else {\n _modules[_moduleCount - 15 + i][8] = mod;\n }\n }\n\n // horizontal\n for (var i = 0; i < 15; i += 1) {\n\n var mod = (!test && ( (bits >> i) & 1) == 1);\n\n if (i < 8) {\n _modules[8][_moduleCount - i - 1] = mod;\n } else if (i < 9) {\n _modules[8][15 - i - 1 + 1] = mod;\n } else {\n _modules[8][15 - i - 1] = mod;\n }\n }\n\n // fixed module\n _modules[_moduleCount - 8][8] = (!test);\n };\n\n var mapData = function(data, maskPattern) {\n\n var inc = -1;\n var row = _moduleCount - 1;\n var bitIndex = 7;\n var byteIndex = 0;\n var maskFunc = QRUtil.getMaskFunction(maskPattern);\n\n for (var col = _moduleCount - 1; col > 0; col -= 2) {\n\n if (col == 6) col -= 1;\n\n while (true) {\n\n for (var c = 0; c < 2; c += 1) {\n\n if (_modules[row][col - c] == null) {\n\n var dark = false;\n\n if (byteIndex < data.length) {\n dark = ( ( (data[byteIndex] >>> bitIndex) & 1) == 1);\n }\n\n var mask = maskFunc(row, col - c);\n\n if (mask) {\n dark = !dark;\n }\n\n _modules[row][col - c] = dark;\n bitIndex -= 1;\n\n if (bitIndex == -1) {\n byteIndex += 1;\n bitIndex = 7;\n }\n }\n }\n\n row += inc;\n\n if (row < 0 || _moduleCount <= row) {\n row -= inc;\n inc = -inc;\n break;\n }\n }\n }\n };\n\n var createBytes = function(buffer, rsBlocks) {\n\n var offset = 0;\n\n var maxDcCount = 0;\n var maxEcCount = 0;\n\n var dcdata = new Array(rsBlocks.length);\n var ecdata = new Array(rsBlocks.length);\n\n for (var r = 0; r < rsBlocks.length; r += 1) {\n\n var dcCount = rsBlocks[r].dataCount;\n var ecCount = rsBlocks[r].totalCount - dcCount;\n\n maxDcCount = Math.max(maxDcCount, dcCount);\n maxEcCount = Math.max(maxEcCount, ecCount);\n\n dcdata[r] = new Array(dcCount);\n\n for (var i = 0; i < dcdata[r].length; i += 1) {\n dcdata[r][i] = 0xff & buffer.getBuffer()[i + offset];\n }\n offset += dcCount;\n\n var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);\n var rawPoly = qrPolynomial(dcdata[r], rsPoly.getLength() - 1);\n\n var modPoly = rawPoly.mod(rsPoly);\n ecdata[r] = new Array(rsPoly.getLength() - 1);\n for (var i = 0; i < ecdata[r].length; i += 1) {\n var modIndex = i + modPoly.getLength() - ecdata[r].length;\n ecdata[r][i] = (modIndex >= 0)? modPoly.getAt(modIndex) : 0;\n }\n }\n\n var totalCodeCount = 0;\n for (var i = 0; i < rsBlocks.length; i += 1) {\n totalCodeCount += rsBlocks[i].totalCount;\n }\n\n var data = new Array(totalCodeCount);\n var index = 0;\n\n for (var i = 0; i < maxDcCount; i += 1) {\n for (var r = 0; r < rsBlocks.length; r += 1) {\n if (i < dcdata[r].length) {\n data[index] = dcdata[r][i];\n index += 1;\n }\n }\n }\n\n for (var i = 0; i < maxEcCount; i += 1) {\n for (var r = 0; r < rsBlocks.length; r += 1) {\n if (i < ecdata[r].length) {\n data[index] = ecdata[r][i];\n index += 1;\n }\n }\n }\n\n return data;\n };\n\n var createData = function(typeNumber, errorCorrectionLevel, dataList) {\n\n var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectionLevel);\n\n var buffer = qrBitBuffer();\n\n for (var i = 0; i < dataList.length; i += 1) {\n var data = dataList[i];\n buffer.put(data.getMode(), 4);\n buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) );\n data.write(buffer);\n }\n\n // calc num max data.\n var totalDataCount = 0;\n for (var i = 0; i < rsBlocks.length; i += 1) {\n totalDataCount += rsBlocks[i].dataCount;\n }\n\n if (buffer.getLengthInBits() > totalDataCount * 8) {\n throw 'code length overflow. ('\n + buffer.getLengthInBits()\n + '>'\n + totalDataCount * 8\n + ')';\n }\n\n // end code\n if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {\n buffer.put(0, 4);\n }\n\n // padding\n while (buffer.getLengthInBits() % 8 != 0) {\n buffer.putBit(false);\n }\n\n // padding\n while (true) {\n\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n buffer.put(PAD0, 8);\n\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n buffer.put(PAD1, 8);\n }\n\n return createBytes(buffer, rsBlocks);\n };\n\n _this.addData = function(data, mode) {\n\n mode = mode || 'Byte';\n\n var newData = null;\n\n switch(mode) {\n case 'Numeric' :\n newData = qrNumber(data);\n break;\n case 'Alphanumeric' :\n newData = qrAlphaNum(data);\n break;\n case 'Byte' :\n newData = qr8BitByte(data);\n break;\n case 'Kanji' :\n newData = qrKanji(data);\n break;\n default :\n throw 'mode:' + mode;\n }\n\n _dataList.push(newData);\n _dataCache = null;\n };\n\n _this.isDark = function(row, col) {\n if (row < 0 || _moduleCount <= row || col < 0 || _moduleCount <= col) {\n throw row + ',' + col;\n }\n return _modules[row][col];\n };\n\n _this.getModuleCount = function() {\n return _moduleCount;\n };\n\n _this.make = function() {\n if (_typeNumber < 1) {\n var typeNumber = 1;\n\n for (; typeNumber < 40; typeNumber++) {\n var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, _errorCorrectionLevel);\n var buffer = qrBitBuffer();\n\n for (var i = 0; i < _dataList.length; i++) {\n var data = _dataList[i];\n buffer.put(data.getMode(), 4);\n buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) );\n data.write(buffer);\n }\n\n var totalDataCount = 0;\n for (var i = 0; i < rsBlocks.length; i++) {\n totalDataCount += rsBlocks[i].dataCount;\n }\n\n if (buffer.getLengthInBits() <= totalDataCount * 8) {\n break;\n }\n }\n\n _typeNumber = typeNumber;\n }\n\n makeImpl(false, getBestMaskPattern() );\n };\n\n _this.createTableTag = function(cellSize, margin) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n var qrHtml = '';\n\n qrHtml += '<table style=\"';\n qrHtml += ' border-width: 0px; border-style: none;';\n qrHtml += ' border-collapse: collapse;';\n qrHtml += ' padding: 0px; margin: ' + margin + 'px;';\n qrHtml += '\">';\n qrHtml += '<tbody>';\n\n for (var r = 0; r < _this.getModuleCount(); r += 1) {\n\n qrHtml += '<tr>';\n\n for (var c = 0; c < _this.getModuleCount(); c += 1) {\n qrHtml += '<td style=\"';\n qrHtml += ' border-width: 0px; border-style: none;';\n qrHtml += ' border-collapse: collapse;';\n qrHtml += ' padding: 0px; margin: 0px;';\n qrHtml += ' width: ' + cellSize + 'px;';\n qrHtml += ' height: ' + cellSize + 'px;';\n qrHtml += ' background-color: ';\n qrHtml += _this.isDark(r, c)? '#000000' : '#ffffff';\n qrHtml += ';';\n qrHtml += '\"/>';\n }\n\n qrHtml += '</tr>';\n }\n\n qrHtml += '</tbody>';\n qrHtml += '</table>';\n\n return qrHtml;\n };\n\n _this.createSvgTag = function(cellSize, margin, alt, title) {\n\n var opts = {};\n if (typeof arguments[0] == 'object') {\n // Called by options.\n opts = arguments[0];\n // overwrite cellSize and margin.\n cellSize = opts.cellSize;\n margin = opts.margin;\n alt = opts.alt;\n title = opts.title;\n }\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n // Compose alt property surrogate\n alt = (typeof alt === 'string') ? {text: alt} : alt || {};\n alt.text = alt.text || null;\n alt.id = (alt.text) ? alt.id || 'qrcode-description' : null;\n\n // Compose title property surrogate\n title = (typeof title === 'string') ? {text: title} : title || {};\n title.text = title.text || null;\n title.id = (title.text) ? title.id || 'qrcode-title' : null;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n var c, mc, r, mr, qrSvg='', rect;\n\n rect = 'l' + cellSize + ',0 0,' + cellSize +\n ' -' + cellSize + ',0 0,-' + cellSize + 'z ';\n\n qrSvg += '<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"';\n qrSvg += !opts.scalable ? ' width=\"' + size + 'px\" height=\"' + size + 'px\"' : '';\n qrSvg += ' viewBox=\"0 0 ' + size + ' ' + size + '\" ';\n qrSvg += ' preserveAspectRatio=\"xMinYMin meet\"';\n qrSvg += (title.text || alt.text) ? ' role=\"img\" aria-labelledby=\"' +\n escapeXml([title.id, alt.id].join(' ').trim() ) + '\"' : '';\n qrSvg += '>';\n qrSvg += (title.text) ? '<title id=\"' + escapeXml(title.id) + '\">' +\n escapeXml(title.text) + '</title>' : '';\n qrSvg += (alt.text) ? '<description id=\"' + escapeXml(alt.id) + '\">' +\n escapeXml(alt.text) + '</description>' : '';\n qrSvg += '<rect width=\"100%\" height=\"100%\" fill=\"white\" cx=\"0\" cy=\"0\"/>';\n qrSvg += '<path d=\"';\n\n for (r = 0; r < _this.getModuleCount(); r += 1) {\n mr = r * cellSize + margin;\n for (c = 0; c < _this.getModuleCount(); c += 1) {\n if (_this.isDark(r, c) ) {\n mc = c*cellSize+margin;\n qrSvg += 'M' + mc + ',' + mr + rect;\n }\n }\n }\n\n qrSvg += '\" stroke=\"transparent\" fill=\"black\"/>';\n qrSvg += '</svg>';\n\n return qrSvg;\n };\n\n _this.createDataURL = function(cellSize, margin) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n var min = margin;\n var max = size - margin;\n\n return createDataURL(size, size, function(x, y) {\n if (min <= x && x < max && min <= y && y < max) {\n var c = Math.floor( (x - min) / cellSize);\n var r = Math.floor( (y - min) / cellSize);\n return _this.isDark(r, c)? 0 : 1;\n } else {\n return 1;\n }\n } );\n };\n\n _this.createImgTag = function(cellSize, margin, alt) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n\n var img = '';\n img += '<img';\n img += '\\u0020src=\"';\n img += _this.createDataURL(cellSize, margin);\n img += '\"';\n img += '\\u0020width=\"';\n img += size;\n img += '\"';\n img += '\\u0020height=\"';\n img += size;\n img += '\"';\n if (alt) {\n img += '\\u0020alt=\"';\n img += escapeXml(alt);\n img += '\"';\n }\n img += '/>';\n\n return img;\n };\n\n var escapeXml = function(s) {\n var escaped = '';\n for (var i = 0; i < s.length; i += 1) {\n var c = s.charAt(i);\n switch(c) {\n case '<': escaped += '&lt;'; break;\n case '>': escaped += '&gt;'; break;\n case '&': escaped += '&amp;'; break;\n case '\"': escaped += '&quot;'; break;\n default : escaped += c; break;\n }\n }\n return escaped;\n };\n\n var _createHalfASCII = function(margin) {\n var cellSize = 1;\n margin = (typeof margin == 'undefined')? cellSize * 2 : margin;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n var min = margin;\n var max = size - margin;\n\n var y, x, r1, r2, p;\n\n var blocks = {\n '\u2588\u2588': '\u2588',\n '\u2588 ': '\u2580',\n ' \u2588': '\u2584',\n ' ': ' '\n };\n\n var blocksLastLineNoMargin = {\n '\u2588\u2588': '\u2580',\n '\u2588 ': '\u2580',\n ' \u2588': ' ',\n ' ': ' '\n };\n\n var ascii = '';\n for (y = 0; y < size; y += 2) {\n r1 = Math.floor((y - min) / cellSize);\n r2 = Math.floor((y + 1 - min) / cellSize);\n for (x = 0; x < size; x += 1) {\n p = '\u2588';\n\n if (min <= x && x < max && min <= y && y < max && _this.isDark(r1, Math.floor((x - min) / cellSize))) {\n p = ' ';\n }\n\n if (min <= x && x < max && min <= y+1 && y+1 < max && _this.isDark(r2, Math.floor((x - min) / cellSize))) {\n p += ' ';\n }\n else {\n p += '\u2588';\n }\n\n // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square.\n ascii += (margin < 1 && y+1 >= max) ? blocksLastLineNoMargin[p] : blocks[p];\n }\n\n ascii += '\\n';\n }\n\n if (size % 2 && margin > 0) {\n return ascii.substring(0, ascii.length - size - 1) + Array(size+1).join('\u2580');\n }\n\n return ascii.substring(0, ascii.length-1);\n };\n\n _this.createASCII = function(cellSize, margin) {\n cellSize = cellSize || 1;\n\n if (cellSize < 2) {\n return _createHalfASCII(margin);\n }\n\n cellSize -= 1;\n margin = (typeof margin == 'undefined')? cellSize * 2 : margin;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n var min = margin;\n var max = size - margin;\n\n var y, x, r, p;\n\n var white = Array(cellSize+1).join('\u2588\u2588');\n var black = Array(cellSize+1).join(' ');\n\n var ascii = '';\n var line = '';\n for (y = 0; y < size; y += 1) {\n r = Math.floor( (y - min) / cellSize);\n line = '';\n for (x = 0; x < size; x += 1) {\n p = 1;\n\n if (min <= x && x < max && min <= y && y < max && _this.isDark(r, Math.floor((x - min) / cellSize))) {\n p = 0;\n }\n\n // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square.\n line += p ? white : black;\n }\n\n for (r = 0; r < cellSize; r += 1) {\n ascii += line + '\\n';\n }\n }\n\n return ascii.substring(0, ascii.length-1);\n };\n\n _this.renderTo2dContext = function(context, cellSize) {\n cellSize = cellSize || 2;\n var length = _this.getModuleCount();\n for (var row = 0; row < length; row++) {\n for (var col = 0; col < length; col++) {\n context.fillStyle = _this.isDark(row, col) ? 'black' : 'white';\n context.fillRect(row * cellSize, col * cellSize, cellSize, cellSize);\n }\n }\n }\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrcode.stringToBytes\n //---------------------------------------------------------------------\n\n qrcode.stringToBytesFuncs = {\n 'default' : function(s) {\n var bytes = [];\n for (var i = 0; i < s.length; i += 1) {\n var c = s.charCodeAt(i);\n bytes.push(c & 0xff);\n }\n return bytes;\n }\n };\n\n qrcode.stringToBytes = qrcode.stringToBytesFuncs['default'];\n\n //---------------------------------------------------------------------\n // qrcode.createStringToBytes\n //---------------------------------------------------------------------\n\n /**\n * @param unicodeData base64 string of byte array.\n * [16bit Unicode],[16bit Bytes], ...\n * @param numChars\n */\n qrcode.createStringToBytes = function(unicodeData, numChars) {\n\n // create conversion map.\n\n var unicodeMap = function() {\n\n var bin = base64DecodeInputStream(unicodeData);\n var read = function() {\n var b = bin.read();\n if (b == -1) throw 'eof';\n return b;\n };\n\n var count = 0;\n var unicodeMap = {};\n while (true) {\n var b0 = bin.read();\n if (b0 == -1) break;\n var b1 = read();\n var b2 = read();\n var b3 = read();\n var k = String.fromCharCode( (b0 << 8) | b1);\n var v = (b2 << 8) | b3;\n unicodeMap[k] = v;\n count += 1;\n }\n if (count != numChars) {\n throw count + ' != ' + numChars;\n }\n\n return unicodeMap;\n }();\n\n var unknownChar = '?'.charCodeAt(0);\n\n return function(s) {\n var bytes = [];\n for (var i = 0; i < s.length; i += 1) {\n var c = s.charCodeAt(i);\n if (c < 128) {\n bytes.push(c);\n } else {\n var b = unicodeMap[s.charAt(i)];\n if (typeof b == 'number') {\n if ( (b & 0xff) == b) {\n // 1byte\n bytes.push(b);\n } else {\n // 2bytes\n bytes.push(b >>> 8);\n bytes.push(b & 0xff);\n }\n } else {\n bytes.push(unknownChar);\n }\n }\n }\n return bytes;\n };\n };\n\n //---------------------------------------------------------------------\n // QRMode\n //---------------------------------------------------------------------\n\n var QRMode = {\n MODE_NUMBER : 1 << 0,\n MODE_ALPHA_NUM : 1 << 1,\n MODE_8BIT_BYTE : 1 << 2,\n MODE_KANJI : 1 << 3\n };\n\n //---------------------------------------------------------------------\n // QRErrorCorrectionLevel\n //---------------------------------------------------------------------\n\n var QRErrorCorrectionLevel = {\n L : 1,\n M : 0,\n Q : 3,\n H : 2\n };\n\n //---------------------------------------------------------------------\n // QRMaskPattern\n //---------------------------------------------------------------------\n\n var QRMaskPattern = {\n PATTERN000 : 0,\n PATTERN001 : 1,\n PATTERN010 : 2,\n PATTERN011 : 3,\n PATTERN100 : 4,\n PATTERN101 : 5,\n PATTERN110 : 6,\n PATTERN111 : 7\n };\n\n //---------------------------------------------------------------------\n // QRUtil\n //---------------------------------------------------------------------\n\n var QRUtil = function() {\n\n var PATTERN_POSITION_TABLE = [\n [],\n [6, 18],\n [6, 22],\n [6, 26],\n [6, 30],\n [6, 34],\n [6, 22, 38],\n [6, 24, 42],\n [6, 26, 46],\n [6, 28, 50],\n [6, 30, 54],\n [6, 32, 58],\n [6, 34, 62],\n [6, 26, 46, 66],\n [6, 26, 48, 70],\n [6, 26, 50, 74],\n [6, 30, 54, 78],\n [6, 30, 56, 82],\n [6, 30, 58, 86],\n [6, 34, 62, 90],\n [6, 28, 50, 72, 94],\n [6, 26, 50, 74, 98],\n [6, 30, 54, 78, 102],\n [6, 28, 54, 80, 106],\n [6, 32, 58, 84, 110],\n [6, 30, 58, 86, 114],\n [6, 34, 62, 90, 118],\n [6, 26, 50, 74, 98, 122],\n [6, 30, 54, 78, 102, 126],\n [6, 26, 52, 78, 104, 130],\n [6, 30, 56, 82, 108, 134],\n [6, 34, 60, 86, 112, 138],\n [6, 30, 58, 86, 114, 142],\n [6, 34, 62, 90, 118, 146],\n [6, 30, 54, 78, 102, 126, 150],\n [6, 24, 50, 76, 102, 128, 154],\n [6, 28, 54, 80, 106, 132, 158],\n [6, 32, 58, 84, 110, 136, 162],\n [6, 26, 54, 82, 110, 138, 166],\n [6, 30, 58, 86, 114, 142, 170]\n ];\n var G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);\n var G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0);\n var G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);\n\n var _this = {};\n\n var getBCHDigit = function(data) {\n var digit = 0;\n while (data != 0) {\n digit += 1;\n data >>>= 1;\n }\n return digit;\n };\n\n _this.getBCHTypeInfo = function(data) {\n var d = data << 10;\n while (getBCHDigit(d) - getBCHDigit(G15) >= 0) {\n d ^= (G15 << (getBCHDigit(d) - getBCHDigit(G15) ) );\n }\n return ( (data << 10) | d) ^ G15_MASK;\n };\n\n _this.getBCHTypeNumber = function(data) {\n var d = data << 12;\n while (getBCHDigit(d) - getBCHDigit(G18) >= 0) {\n d ^= (G18 << (getBCHDigit(d) - getBCHDigit(G18) ) );\n }\n return (data << 12) | d;\n };\n\n _this.getPatternPosition = function(typeNumber) {\n return PATTERN_POSITION_TABLE[typeNumber - 1];\n };\n\n _this.getMaskFunction = function(maskPattern) {\n\n switch (maskPattern) {\n\n case QRMaskPattern.PATTERN000 :\n return function(i, j) { return (i + j) % 2 == 0; };\n case QRMaskPattern.PATTERN001 :\n return function(i, j) { return i % 2 == 0; };\n case QRMaskPattern.PATTERN010 :\n return function(i, j) { return j % 3 == 0; };\n case QRMaskPattern.PATTERN011 :\n return function(i, j) { return (i + j) % 3 == 0; };\n case QRMaskPattern.PATTERN100 :\n return function(i, j) { return (Math.floor(i / 2) + Math.floor(j / 3) ) % 2 == 0; };\n case QRMaskPattern.PATTERN101 :\n return function(i, j) { return (i * j) % 2 + (i * j) % 3 == 0; };\n case QRMaskPattern.PATTERN110 :\n return function(i, j) { return ( (i * j) % 2 + (i * j) % 3) % 2 == 0; };\n case QRMaskPattern.PATTERN111 :\n return function(i, j) { return ( (i * j) % 3 + (i + j) % 2) % 2 == 0; };\n\n default :\n throw 'bad maskPattern:' + maskPattern;\n }\n };\n\n _this.getErrorCorrectPolynomial = function(errorCorrectLength) {\n var a = qrPolynomial([1], 0);\n for (var i = 0; i < errorCorrectLength; i += 1) {\n a = a.multiply(qrPolynomial([1, QRMath.gexp(i)], 0) );\n }\n return a;\n };\n\n _this.getLengthInBits = function(mode, type) {\n\n if (1 <= type && type < 10) {\n\n // 1 - 9\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 10;\n case QRMode.MODE_ALPHA_NUM : return 9;\n case QRMode.MODE_8BIT_BYTE : return 8;\n case QRMode.MODE_KANJI : return 8;\n default :\n throw 'mode:' + mode;\n }\n\n } else if (type < 27) {\n\n // 10 - 26\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 12;\n case QRMode.MODE_ALPHA_NUM : return 11;\n case QRMode.MODE_8BIT_BYTE : return 16;\n case QRMode.MODE_KANJI : return 10;\n default :\n throw 'mode:' + mode;\n }\n\n } else if (type < 41) {\n\n // 27 - 40\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 14;\n case QRMode.MODE_ALPHA_NUM : return 13;\n case QRMode.MODE_8BIT_BYTE : return 16;\n case QRMode.MODE_KANJI : return 12;\n default :\n throw 'mode:' + mode;\n }\n\n } else {\n throw 'type:' + type;\n }\n };\n\n _this.getLostPoint = function(qrcode) {\n\n var moduleCount = qrcode.getModuleCount();\n\n var lostPoint = 0;\n\n // LEVEL1\n\n for (var row = 0; row < moduleCount; row += 1) {\n for (var col = 0; col < moduleCount; col += 1) {\n\n var sameCount = 0;\n var dark = qrcode.isDark(row, col);\n\n for (var r = -1; r <= 1; r += 1) {\n\n if (row + r < 0 || moduleCount <= row + r) {\n continue;\n }\n\n for (var c = -1; c <= 1; c += 1) {\n\n if (col + c < 0 || moduleCount <= col + c) {\n continue;\n }\n\n if (r == 0 && c == 0) {\n continue;\n }\n\n if (dark == qrcode.isDark(row + r, col + c) ) {\n sameCount += 1;\n }\n }\n }\n\n if (sameCount > 5) {\n lostPoint += (3 + sameCount - 5);\n }\n }\n };\n\n // LEVEL2\n\n for (var row = 0; row < moduleCount - 1; row += 1) {\n for (var col = 0; col < moduleCount - 1; col += 1) {\n var count = 0;\n if (qrcode.isDark(row, col) ) count += 1;\n if (qrcode.isDark(row + 1, col) ) count += 1;\n if (qrcode.isDark(row, col + 1) ) count += 1;\n if (qrcode.isDark(row + 1, col + 1) ) count += 1;\n if (count == 0 || count == 4) {\n lostPoint += 3;\n }\n }\n }\n\n // LEVEL3\n\n for (var row = 0; row < moduleCount; row += 1) {\n for (var col = 0; col < moduleCount - 6; col += 1) {\n if (qrcode.isDark(row, col)\n && !qrcode.isDark(row, col + 1)\n && qrcode.isDark(row, col + 2)\n && qrcode.isDark(row, col + 3)\n && qrcode.isDark(row, col + 4)\n && !qrcode.isDark(row, col + 5)\n && qrcode.isDark(row, col + 6) ) {\n lostPoint += 40;\n }\n }\n }\n\n for (var col = 0; col < moduleCount; col += 1) {\n for (var row = 0; row < moduleCount - 6; row += 1) {\n if (qrcode.isDark(row, col)\n && !qrcode.isDark(row + 1, col)\n && qrcode.isDark(row + 2, col)\n && qrcode.isDark(row + 3, col)\n && qrcode.isDark(row + 4, col)\n && !qrcode.isDark(row + 5, col)\n && qrcode.isDark(row + 6, col) ) {\n lostPoint += 40;\n }\n }\n }\n\n // LEVEL4\n\n var darkCount = 0;\n\n for (var col = 0; col < moduleCount; col += 1) {\n for (var row = 0; row < moduleCount; row += 1) {\n if (qrcode.isDark(row, col) ) {\n darkCount += 1;\n }\n }\n }\n\n var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;\n lostPoint += ratio * 10;\n\n return lostPoint;\n };\n\n return _this;\n }();\n\n //---------------------------------------------------------------------\n // QRMath\n //---------------------------------------------------------------------\n\n var QRMath = function() {\n\n var EXP_TABLE = new Array(256);\n var LOG_TABLE = new Array(256);\n\n // initialize tables\n for (var i = 0; i < 8; i += 1) {\n EXP_TABLE[i] = 1 << i;\n }\n for (var i = 8; i < 256; i += 1) {\n EXP_TABLE[i] = EXP_TABLE[i - 4]\n ^ EXP_TABLE[i - 5]\n ^ EXP_TABLE[i - 6]\n ^ EXP_TABLE[i - 8];\n }\n for (var i = 0; i < 255; i += 1) {\n LOG_TABLE[EXP_TABLE[i] ] = i;\n }\n\n var _this = {};\n\n _this.glog = function(n) {\n\n if (n < 1) {\n throw 'glog(' + n + ')';\n }\n\n return LOG_TABLE[n];\n };\n\n _this.gexp = function(n) {\n\n while (n < 0) {\n n += 255;\n }\n\n while (n >= 256) {\n n -= 255;\n }\n\n return EXP_TABLE[n];\n };\n\n return _this;\n }();\n\n //---------------------------------------------------------------------\n // qrPolynomial\n //---------------------------------------------------------------------\n\n function qrPolynomial(num, shift) {\n\n if (typeof num.length == 'undefined') {\n throw num.length + '/' + shift;\n }\n\n var _num = function() {\n var offset = 0;\n while (offset < num.length && num[offset] == 0) {\n offset += 1;\n }\n var _num = new Array(num.length - offset + shift);\n for (var i = 0; i < num.length - offset; i += 1) {\n _num[i] = num[i + offset];\n }\n return _num;\n }();\n\n var _this = {};\n\n _this.getAt = function(index) {\n return _num[index];\n };\n\n _this.getLength = function() {\n return _num.length;\n };\n\n _this.multiply = function(e) {\n\n var num = new Array(_this.getLength() + e.getLength() - 1);\n\n for (var i = 0; i < _this.getLength(); i += 1) {\n for (var j = 0; j < e.getLength(); j += 1) {\n num[i + j] ^= QRMath.gexp(QRMath.glog(_this.getAt(i) ) + QRMath.glog(e.getAt(j) ) );\n }\n }\n\n return qrPolynomial(num, 0);\n };\n\n _this.mod = function(e) {\n\n if (_this.getLength() - e.getLength() < 0) {\n return _this;\n }\n\n var ratio = QRMath.glog(_this.getAt(0) ) - QRMath.glog(e.getAt(0) );\n\n var num = new Array(_this.getLength() );\n for (var i = 0; i < _this.getLength(); i += 1) {\n num[i] = _this.getAt(i);\n }\n\n for (var i = 0; i < e.getLength(); i += 1) {\n num[i] ^= QRMath.gexp(QRMath.glog(e.getAt(i) ) + ratio);\n }\n\n // recursive call\n return qrPolynomial(num, 0).mod(e);\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // QRRSBlock\n //---------------------------------------------------------------------\n\n var QRRSBlock = function() {\n\n var RS_BLOCK_TABLE = [\n\n // L\n // M\n // Q\n // H\n\n // 1\n [1, 26, 19],\n [1, 26, 16],\n [1, 26, 13],\n [1, 26, 9],\n\n // 2\n [1, 44, 34],\n [1, 44, 28],\n [1, 44, 22],\n [1, 44, 16],\n\n // 3\n [1, 70, 55],\n [1, 70, 44],\n [2, 35, 17],\n [2, 35, 13],\n\n // 4\n [1, 100, 80],\n [2, 50, 32],\n [2, 50, 24],\n [4, 25, 9],\n\n // 5\n [1, 134, 108],\n [2, 67, 43],\n [2, 33, 15, 2, 34, 16],\n [2, 33, 11, 2, 34, 12],\n\n // 6\n [2, 86, 68],\n [4, 43, 27],\n [4, 43, 19],\n [4, 43, 15],\n\n // 7\n [2, 98, 78],\n [4, 49, 31],\n [2, 32, 14, 4, 33, 15],\n [4, 39, 13, 1, 40, 14],\n\n // 8\n [2, 121, 97],\n [2, 60, 38, 2, 61, 39],\n [4, 40, 18, 2, 41, 19],\n [4, 40, 14, 2, 41, 15],\n\n // 9\n [2, 146, 116],\n [3, 58, 36, 2, 59, 37],\n [4, 36, 16, 4, 37, 17],\n [4, 36, 12, 4, 37, 13],\n\n // 10\n [2, 86, 68, 2, 87, 69],\n [4, 69, 43, 1, 70, 44],\n [6, 43, 19, 2, 44, 20],\n [6, 43, 15, 2, 44, 16],\n\n // 11\n [4, 101, 81],\n [1, 80, 50, 4, 81, 51],\n [4, 50, 22, 4, 51, 23],\n [3, 36, 12, 8, 37, 13],\n\n // 12\n [2, 116, 92, 2, 117, 93],\n [6, 58, 36, 2, 59, 37],\n [4, 46, 20, 6, 47, 21],\n [7, 42, 14, 4, 43, 15],\n\n // 13\n [4, 133, 107],\n [8, 59, 37, 1, 60, 38],\n [8, 44, 20, 4, 45, 21],\n [12, 33, 11, 4, 34, 12],\n\n // 14\n [3, 145, 115, 1, 146, 116],\n [4, 64, 40, 5, 65, 41],\n [11, 36, 16, 5, 37, 17],\n [11, 36, 12, 5, 37, 13],\n\n // 15\n [5, 109, 87, 1, 110, 88],\n [5, 65, 41, 5, 66, 42],\n [5, 54, 24, 7, 55, 25],\n [11, 36, 12, 7, 37, 13],\n\n // 16\n [5, 122, 98, 1, 123, 99],\n [7, 73, 45, 3, 74, 46],\n [15, 43, 19, 2, 44, 20],\n [3, 45, 15, 13, 46, 16],\n\n // 17\n [1, 135, 107, 5, 136, 108],\n [10, 74, 46, 1, 75, 47],\n [1, 50, 22, 15, 51, 23],\n [2, 42, 14, 17, 43, 15],\n\n // 18\n [5, 150, 120, 1, 151, 121],\n [9, 69, 43, 4, 70, 44],\n [17, 50, 22, 1, 51, 23],\n [2, 42, 14, 19, 43, 15],\n\n // 19\n [3, 141, 113, 4, 142, 114],\n [3, 70, 44, 11, 71, 45],\n [17, 47, 21, 4, 48, 22],\n [9, 39, 13, 16, 40, 14],\n\n // 20\n [3, 135, 107, 5, 136, 108],\n [3, 67, 41, 13, 68, 42],\n [15, 54, 24, 5, 55, 25],\n [15, 43, 15, 10, 44, 16],\n\n // 21\n [4, 144, 116, 4, 145, 117],\n [17, 68, 42],\n [17, 50, 22, 6, 51, 23],\n [19, 46, 16, 6, 47, 17],\n\n // 22\n [2, 139, 111, 7, 140, 112],\n [17, 74, 46],\n [7, 54, 24, 16, 55, 25],\n [34, 37, 13],\n\n // 23\n [4, 151, 121, 5, 152, 122],\n [4, 75, 47, 14, 76, 48],\n [11, 54, 24, 14, 55, 25],\n [16, 45, 15, 14, 46, 16],\n\n // 24\n [6, 147, 117, 4, 148, 118],\n [6, 73, 45, 14, 74, 46],\n [11, 54, 24, 16, 55, 25],\n [30, 46, 16, 2, 47, 17],\n\n // 25\n [8, 132, 106, 4, 133, 107],\n [8, 75, 47, 13, 76, 48],\n [7, 54, 24, 22, 55, 25],\n [22, 45, 15, 13, 46, 16],\n\n // 26\n [10, 142, 114, 2, 143, 115],\n [19, 74, 46, 4, 75, 47],\n [28, 50, 22, 6, 51, 23],\n [33, 46, 16, 4, 47, 17],\n\n // 27\n [8, 152, 122, 4, 153, 123],\n [22, 73, 45, 3, 74, 46],\n [8, 53, 23, 26, 54, 24],\n [12, 45, 15, 28, 46, 16],\n\n // 28\n [3, 147, 117, 10, 148, 118],\n [3, 73, 45, 23, 74, 46],\n [4, 54, 24, 31, 55, 25],\n [11, 45, 15, 31, 46, 16],\n\n // 29\n [7, 146, 116, 7, 147, 117],\n [21, 73, 45, 7, 74, 46],\n [1, 53, 23, 37, 54, 24],\n [19, 45, 15, 26, 46, 16],\n\n // 30\n [5, 145, 115, 10, 146, 116],\n [19, 75, 47, 10, 76, 48],\n [15, 54, 24, 25, 55, 25],\n [23, 45, 15, 25, 46, 16],\n\n // 31\n [13, 145, 115, 3, 146, 116],\n [2, 74, 46, 29, 75, 47],\n [42, 54, 24, 1, 55, 25],\n [23, 45, 15, 28, 46, 16],\n\n // 32\n [17, 145, 115],\n [10, 74, 46, 23, 75, 47],\n [10, 54, 24, 35, 55, 25],\n [19, 45, 15, 35, 46, 16],\n\n // 33\n [17, 145, 115, 1, 146, 116],\n [14, 74, 46, 21, 75, 47],\n [29, 54, 24, 19, 55, 25],\n [11, 45, 15, 46, 46, 16],\n\n // 34\n [13, 145, 115, 6, 146, 116],\n [14, 74, 46, 23, 75, 47],\n [44, 54, 24, 7, 55, 25],\n [59, 46, 16, 1, 47, 17],\n\n // 35\n [12, 151, 121, 7, 152, 122],\n [12, 75, 47, 26, 76, 48],\n [39, 54, 24, 14, 55, 25],\n [22, 45, 15, 41, 46, 16],\n\n // 36\n [6, 151, 121, 14, 152, 122],\n [6, 75, 47, 34, 76, 48],\n [46, 54, 24, 10, 55, 25],\n [2, 45, 15, 64, 46, 16],\n\n // 37\n [17, 152, 122, 4, 153, 123],\n [29, 74, 46, 14, 75, 47],\n [49, 54, 24, 10, 55, 25],\n [24, 45, 15, 46, 46, 16],\n\n // 38\n [4, 152, 122, 18, 153, 123],\n [13, 74, 46, 32, 75, 47],\n [48, 54, 24, 14, 55, 25],\n [42, 45, 15, 32, 46, 16],\n\n // 39\n [20, 147, 117, 4, 148, 118],\n [40, 75, 47, 7, 76, 48],\n [43, 54, 24, 22, 55, 25],\n [10, 45, 15, 67, 46, 16],\n\n // 40\n [19, 148, 118, 6, 149, 119],\n [18, 75, 47, 31, 76, 48],\n [34, 54, 24, 34, 55, 25],\n [20, 45, 15, 61, 46, 16]\n ];\n\n var qrRSBlock = function(totalCount, dataCount) {\n var _this = {};\n _this.totalCount = totalCount;\n _this.dataCount = dataCount;\n return _this;\n };\n\n var _this = {};\n\n var getRsBlockTable = function(typeNumber, errorCorrectionLevel) {\n\n switch(errorCorrectionLevel) {\n case QRErrorCorrectionLevel.L :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];\n case QRErrorCorrectionLevel.M :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];\n case QRErrorCorrectionLevel.Q :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];\n case QRErrorCorrectionLevel.H :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];\n default :\n return undefined;\n }\n };\n\n _this.getRSBlocks = function(typeNumber, errorCorrectionLevel) {\n\n var rsBlock = getRsBlockTable(typeNumber, errorCorrectionLevel);\n\n if (typeof rsBlock == 'undefined') {\n throw 'bad rs block @ typeNumber:' + typeNumber +\n '/errorCorrectionLevel:' + errorCorrectionLevel;\n }\n\n var length = rsBlock.length / 3;\n\n var list = [];\n\n for (var i = 0; i < length; i += 1) {\n\n var count = rsBlock[i * 3 + 0];\n var totalCount = rsBlock[i * 3 + 1];\n var dataCount = rsBlock[i * 3 + 2];\n\n for (var j = 0; j < count; j += 1) {\n list.push(qrRSBlock(totalCount, dataCount) );\n }\n }\n\n return list;\n };\n\n return _this;\n }();\n\n //---------------------------------------------------------------------\n // qrBitBuffer\n //---------------------------------------------------------------------\n\n var qrBitBuffer = function() {\n\n var _buffer = [];\n var _length = 0;\n\n var _this = {};\n\n _this.getBuffer = function() {\n return _buffer;\n };\n\n _this.getAt = function(index) {\n var bufIndex = Math.floor(index / 8);\n return ( (_buffer[bufIndex] >>> (7 - index % 8) ) & 1) == 1;\n };\n\n _this.put = function(num, length) {\n for (var i = 0; i < length; i += 1) {\n _this.putBit( ( (num >>> (length - i - 1) ) & 1) == 1);\n }\n };\n\n _this.getLengthInBits = function() {\n return _length;\n };\n\n _this.putBit = function(bit) {\n\n var bufIndex = Math.floor(_length / 8);\n if (_buffer.length <= bufIndex) {\n _buffer.push(0);\n }\n\n if (bit) {\n _buffer[bufIndex] |= (0x80 >>> (_length % 8) );\n }\n\n _length += 1;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrNumber\n //---------------------------------------------------------------------\n\n var qrNumber = function(data) {\n\n var _mode = QRMode.MODE_NUMBER;\n var _data = data;\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _data.length;\n };\n\n _this.write = function(buffer) {\n\n var data = _data;\n\n var i = 0;\n\n while (i + 2 < data.length) {\n buffer.put(strToNum(data.substring(i, i + 3) ), 10);\n i += 3;\n }\n\n if (i < data.length) {\n if (data.length - i == 1) {\n buffer.put(strToNum(data.substring(i, i + 1) ), 4);\n } else if (data.length - i == 2) {\n buffer.put(strToNum(data.substring(i, i + 2) ), 7);\n }\n }\n };\n\n var strToNum = function(s) {\n var num = 0;\n for (var i = 0; i < s.length; i += 1) {\n num = num * 10 + chatToNum(s.charAt(i) );\n }\n return num;\n };\n\n var chatToNum = function(c) {\n if ('0' <= c && c <= '9') {\n return c.charCodeAt(0) - '0'.charCodeAt(0);\n }\n throw 'illegal char :' + c;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrAlphaNum\n //---------------------------------------------------------------------\n\n var qrAlphaNum = function(data) {\n\n var _mode = QRMode.MODE_ALPHA_NUM;\n var _data = data;\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _data.length;\n };\n\n _this.write = function(buffer) {\n\n var s = _data;\n\n var i = 0;\n\n while (i + 1 < s.length) {\n buffer.put(\n getCode(s.charAt(i) ) * 45 +\n getCode(s.charAt(i + 1) ), 11);\n i += 2;\n }\n\n if (i < s.length) {\n buffer.put(getCode(s.charAt(i) ), 6);\n }\n };\n\n var getCode = function(c) {\n\n if ('0' <= c && c <= '9') {\n return c.charCodeAt(0) - '0'.charCodeAt(0);\n } else if ('A' <= c && c <= 'Z') {\n return c.charCodeAt(0) - 'A'.charCodeAt(0) + 10;\n } else {\n switch (c) {\n case ' ' : return 36;\n case '$' : return 37;\n case '%' : return 38;\n case '*' : return 39;\n case '+' : return 40;\n case '-' : return 41;\n case '.' : return 42;\n case '/' : return 43;\n case ':' : return 44;\n default :\n throw 'illegal char :' + c;\n }\n }\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qr8BitByte\n //---------------------------------------------------------------------\n\n var qr8BitByte = function(data) {\n\n var _mode = QRMode.MODE_8BIT_BYTE;\n var _data = data;\n var _bytes = qrcode.stringToBytes(data);\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _bytes.length;\n };\n\n _this.write = function(buffer) {\n for (var i = 0; i < _bytes.length; i += 1) {\n buffer.put(_bytes[i], 8);\n }\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrKanji\n //---------------------------------------------------------------------\n\n var qrKanji = function(data) {\n\n var _mode = QRMode.MODE_KANJI;\n var _data = data;\n\n var stringToBytes = qrcode.stringToBytesFuncs['SJIS'];\n if (!stringToBytes) {\n throw 'sjis not supported.';\n }\n !function(c, code) {\n // self test for sjis support.\n var test = stringToBytes(c);\n if (test.length != 2 || ( (test[0] << 8) | test[1]) != code) {\n throw 'sjis not supported.';\n }\n }('\\u53cb', 0x9746);\n\n var _bytes = stringToBytes(data);\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return ~~(_bytes.length / 2);\n };\n\n _this.write = function(buffer) {\n\n var data = _bytes;\n\n var i = 0;\n\n while (i + 1 < data.length) {\n\n var c = ( (0xff & data[i]) << 8) | (0xff & data[i + 1]);\n\n if (0x8140 <= c && c <= 0x9FFC) {\n c -= 0x8140;\n } else if (0xE040 <= c && c <= 0xEBBF) {\n c -= 0xC140;\n } else {\n throw 'illegal char at ' + (i + 1) + '/' + c;\n }\n\n c = ( (c >>> 8) & 0xff) * 0xC0 + (c & 0xff);\n\n buffer.put(c, 13);\n\n i += 2;\n }\n\n if (i < data.length) {\n throw 'illegal char at ' + (i + 1);\n }\n };\n\n return _this;\n };\n\n //=====================================================================\n // GIF Support etc.\n //\n\n //---------------------------------------------------------------------\n // byteArrayOutputStream\n //---------------------------------------------------------------------\n\n var byteArrayOutputStream = function() {\n\n var _bytes = [];\n\n var _this = {};\n\n _this.writeByte = function(b) {\n _bytes.push(b & 0xff);\n };\n\n _this.writeShort = function(i) {\n _this.writeByte(i);\n _this.writeByte(i >>> 8);\n };\n\n _this.writeBytes = function(b, off, len) {\n off = off || 0;\n len = len || b.length;\n for (var i = 0; i < len; i += 1) {\n _this.writeByte(b[i + off]);\n }\n };\n\n _this.writeString = function(s) {\n for (var i = 0; i < s.length; i += 1) {\n _this.writeByte(s.charCodeAt(i) );\n }\n };\n\n _this.toByteArray = function() {\n return _bytes;\n };\n\n _this.toString = function() {\n var s = '';\n s += '[';\n for (var i = 0; i < _bytes.length; i += 1) {\n if (i > 0) {\n s += ',';\n }\n s += _bytes[i];\n }\n s += ']';\n return s;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // base64EncodeOutputStream\n //---------------------------------------------------------------------\n\n var base64EncodeOutputStream = function() {\n\n var _buffer = 0;\n var _buflen = 0;\n var _length = 0;\n var _base64 = '';\n\n var _this = {};\n\n var writeEncoded = function(b) {\n _base64 += String.fromCharCode(encode(b & 0x3f) );\n };\n\n var encode = function(n) {\n if (n < 0) {\n // error.\n } else if (n < 26) {\n return 0x41 + n;\n } else if (n < 52) {\n return 0x61 + (n - 26);\n } else if (n < 62) {\n return 0x30 + (n - 52);\n } else if (n == 62) {\n return 0x2b;\n } else if (n == 63) {\n return 0x2f;\n }\n throw 'n:' + n;\n };\n\n _this.writeByte = function(n) {\n\n _buffer = (_buffer << 8) | (n & 0xff);\n _buflen += 8;\n _length += 1;\n\n while (_buflen >= 6) {\n writeEncoded(_buffer >>> (_buflen - 6) );\n _buflen -= 6;\n }\n };\n\n _this.flush = function() {\n\n if (_buflen > 0) {\n writeEncoded(_buffer << (6 - _buflen) );\n _buffer = 0;\n _buflen = 0;\n }\n\n if (_length % 3 != 0) {\n // padding\n var padlen = 3 - _length % 3;\n for (var i = 0; i < padlen; i += 1) {\n _base64 += '=';\n }\n }\n };\n\n _this.toString = function() {\n return _base64;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // base64DecodeInputStream\n //---------------------------------------------------------------------\n\n var base64DecodeInputStream = function(str) {\n\n var _str = str;\n var _pos = 0;\n var _buffer = 0;\n var _buflen = 0;\n\n var _this = {};\n\n _this.read = function() {\n\n while (_buflen < 8) {\n\n if (_pos >= _str.length) {\n if (_buflen == 0) {\n return -1;\n }\n throw 'unexpected end of file./' + _buflen;\n }\n\n var c = _str.charAt(_pos);\n _pos += 1;\n\n if (c == '=') {\n _buflen = 0;\n return -1;\n } else if (c.match(/^\\s$/) ) {\n // ignore if whitespace.\n continue;\n }\n\n _buffer = (_buffer << 6) | decode(c.charCodeAt(0) );\n _buflen += 6;\n }\n\n var n = (_buffer >>> (_buflen - 8) ) & 0xff;\n _buflen -= 8;\n return n;\n };\n\n var decode = function(c) {\n if (0x41 <= c && c <= 0x5a) {\n return c - 0x41;\n } else if (0x61 <= c && c <= 0x7a) {\n return c - 0x61 + 26;\n } else if (0x30 <= c && c <= 0x39) {\n return c - 0x30 + 52;\n } else if (c == 0x2b) {\n return 62;\n } else if (c == 0x2f) {\n return 63;\n } else {\n throw 'c:' + c;\n }\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // gifImage (B/W)\n //---------------------------------------------------------------------\n\n var gifImage = function(width, height) {\n\n var _width = width;\n var _height = height;\n var _data = new Array(width * height);\n\n var _this = {};\n\n _this.setPixel = function(x, y, pixel) {\n _data[y * _width + x] = pixel;\n };\n\n _this.write = function(out) {\n\n //---------------------------------\n // GIF Signature\n\n out.writeString('GIF87a');\n\n //---------------------------------\n // Screen Descriptor\n\n out.writeShort(_width);\n out.writeShort(_height);\n\n out.writeByte(0x80); // 2bit\n out.writeByte(0);\n out.writeByte(0);\n\n //---------------------------------\n // Global Color Map\n\n // black\n out.writeByte(0x00);\n out.writeByte(0x00);\n out.writeByte(0x00);\n\n // white\n out.writeByte(0xff);\n out.writeByte(0xff);\n out.writeByte(0xff);\n\n //---------------------------------\n // Image Descriptor\n\n out.writeString(',');\n out.writeShort(0);\n out.writeShort(0);\n out.writeShort(_width);\n out.writeShort(_height);\n out.writeByte(0);\n\n //---------------------------------\n // Local Color Map\n\n //---------------------------------\n // Raster Data\n\n var lzwMinCodeSize = 2;\n var raster = getLZWRaster(lzwMinCodeSize);\n\n out.writeByte(lzwMinCodeSize);\n\n var offset = 0;\n\n while (raster.length - offset > 255) {\n out.writeByte(255);\n out.writeBytes(raster, offset, 255);\n offset += 255;\n }\n\n out.writeByte(raster.length - offset);\n out.writeBytes(raster, offset, raster.length - offset);\n out.writeByte(0x00);\n\n //---------------------------------\n // GIF Terminator\n out.writeString(';');\n };\n\n var bitOutputStream = function(out) {\n\n var _out = out;\n var _bitLength = 0;\n var _bitBuffer = 0;\n\n var _this = {};\n\n _this.write = function(data, length) {\n\n if ( (data >>> length) != 0) {\n throw 'length over';\n }\n\n while (_bitLength + length >= 8) {\n _out.writeByte(0xff & ( (data << _bitLength) | _bitBuffer) );\n length -= (8 - _bitLength);\n data >>>= (8 - _bitLength);\n _bitBuffer = 0;\n _bitLength = 0;\n }\n\n _bitBuffer = (data << _bitLength) | _bitBuffer;\n _bitLength = _bitLength + length;\n };\n\n _this.flush = function() {\n if (_bitLength > 0) {\n _out.writeByte(_bitBuffer);\n }\n };\n\n return _this;\n };\n\n var getLZWRaster = function(lzwMinCodeSize) {\n\n var clearCode = 1 << lzwMinCodeSize;\n var endCode = (1 << lzwMinCodeSize) + 1;\n var bitLength = lzwMinCodeSize + 1;\n\n // Setup LZWTable\n var table = lzwTable();\n\n for (var i = 0; i < clearCode; i += 1) {\n table.add(String.fromCharCode(i) );\n }\n table.add(String.fromCharCode(clearCode) );\n table.add(String.fromCharCode(endCode) );\n\n var byteOut = byteArrayOutputStream();\n var bitOut = bitOutputStream(byteOut);\n\n // clear code\n bitOut.write(clearCode, bitLength);\n\n var dataIndex = 0;\n\n var s = String.fromCharCode(_data[dataIndex]);\n dataIndex += 1;\n\n while (dataIndex < _data.length) {\n\n var c = String.fromCharCode(_data[dataIndex]);\n dataIndex += 1;\n\n if (table.contains(s + c) ) {\n\n s = s + c;\n\n } else {\n\n bitOut.write(table.indexOf(s), bitLength);\n\n if (table.size() < 0xfff) {\n\n if (table.size() == (1 << bitLength) ) {\n bitLength += 1;\n }\n\n table.add(s + c);\n }\n\n s = c;\n }\n }\n\n bitOut.write(table.indexOf(s), bitLength);\n\n // end code\n bitOut.write(endCode, bitLength);\n\n bitOut.flush();\n\n return byteOut.toByteArray();\n };\n\n var lzwTable = function() {\n\n var _map = {};\n var _size = 0;\n\n var _this = {};\n\n _this.add = function(key) {\n if (_this.contains(key) ) {\n throw 'dup key:' + key;\n }\n _map[key] = _size;\n _size += 1;\n };\n\n _this.size = function() {\n return _size;\n };\n\n _this.indexOf = function(key) {\n return _map[key];\n };\n\n _this.contains = function(key) {\n return typeof _map[key] != 'undefined';\n };\n\n return _this;\n };\n\n return _this;\n };\n\n var createDataURL = function(width, height, getPixel) {\n var gif = gifImage(width, height);\n for (var y = 0; y < height; y += 1) {\n for (var x = 0; x < width; x += 1) {\n gif.setPixel(x, y, getPixel(x, y) );\n }\n }\n\n var b = byteArrayOutputStream();\n gif.write(b);\n\n var base64 = base64EncodeOutputStream();\n var bytes = b.toByteArray();\n for (var i = 0; i < bytes.length; i += 1) {\n base64.writeByte(bytes[i]);\n }\n base64.flush();\n\n return 'data:image/gif;base64,' + base64;\n };\n\n //---------------------------------------------------------------------\n // returns qrcode function.\n\n return qrcode;\n}();\n\n// multibyte support\n!function() {\n\n qrcode.stringToBytesFuncs['UTF-8'] = function(s) {\n // http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\n function toUTF8Array(str) {\n var utf8 = [];\n for (var i=0; i < str.length; i++) {\n var charcode = str.charCodeAt(i);\n if (charcode < 0x80) utf8.push(charcode);\n else if (charcode < 0x800) {\n utf8.push(0xc0 | (charcode >> 6),\n 0x80 | (charcode & 0x3f));\n }\n else if (charcode < 0xd800 || charcode >= 0xe000) {\n utf8.push(0xe0 | (charcode >> 12),\n 0x80 | ((charcode>>6) & 0x3f),\n 0x80 | (charcode & 0x3f));\n }\n // surrogate pair\n else {\n i++;\n // UTF-16 encodes 0x10000-0x10FFFF by\n // subtracting 0x10000 and splitting the\n // 20 bits of 0x0-0xFFFFF into two halves\n charcode = 0x10000 + (((charcode & 0x3ff)<<10)\n | (str.charCodeAt(i) & 0x3ff));\n utf8.push(0xf0 | (charcode >>18),\n 0x80 | ((charcode>>12) & 0x3f),\n 0x80 | ((charcode>>6) & 0x3f),\n 0x80 | (charcode & 0x3f));\n }\n }\n return utf8;\n }\n return toUTF8Array(s);\n };\n\n}();\n\n(function (factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n }\n}(function () {\n return qrcode;\n}));\n", "import { EMPTY_ARR } from \"./constants\";\n\n/**\n * Assign properties from `props` to `obj`\n * @template O, P The obj and props types\n * @param {O} obj The object to copy properties to\n * @param {P} props The object to copy properties from\n * @returns {O & P}\n */\nexport function assign(obj, props) {\n\t// @ts-ignore We change the type of `obj` to be `O & P`\n\tfor (let i in props) obj[i] = props[i];\n\treturn /** @type {O & P} */ (obj);\n}\n\n/**\n * Remove a child node from its parent if attached. This is a workaround for\n * IE11 which doesn't support `Element.prototype.remove()`. Using this function\n * is smaller than including a dedicated polyfill.\n * @param {Node} node The node to remove\n */\nexport function removeNode(node) {\n\tlet parentNode = node.parentNode;\n\tif (parentNode) parentNode.removeChild(node);\n}\n\nexport const slice = EMPTY_ARR.slice;\n", "import { _catchError } from './diff/catch-error';\n\n/**\n * The `option` object can potentially contain callback functions\n * that are called during various stages of our renderer. This is the\n * foundation on which all our addons like `preact/debug`, `preact/compat`,\n * and `preact/hooks` are based on. See the `Options` type in `internal.d.ts`\n * for a full list of available option hooks (most editors/IDEs allow you to\n * ctrl+click or cmd+click on mac the type definition below).\n * @type {import('./internal').Options}\n */\nconst options = {\n\t_catchError\n};\n\nexport default options;\n", "import { slice } from './util';\nimport options from './options';\n\nlet vnodeId = 0;\n\n/**\n * Create an virtual node (used for JSX)\n * @param {import('./internal').VNode[\"type\"]} type The node name or Component\n * constructor for this virtual node\n * @param {object | null | undefined} [props] The properties of the virtual node\n * @param {Array<import('.').ComponentChildren>} [children] The children of the virtual node\n * @returns {import('./internal').VNode}\n */\nexport function createElement(type, props, children) {\n\tlet normalizedProps = {},\n\t\tkey,\n\t\tref,\n\t\ti;\n\tfor (i in props) {\n\t\tif (i == 'key') key = props[i];\n\t\telse if (i == 'ref') ref = props[i];\n\t\telse normalizedProps[i] = props[i];\n\t}\n\n\tif (arguments.length > 2) {\n\t\tnormalizedProps.children =\n\t\t\targuments.length > 3 ? slice.call(arguments, 2) : children;\n\t}\n\n\t// If a Component VNode, check for and apply defaultProps\n\t// Note: type may be undefined in development, must never error here.\n\tif (typeof type == 'function' && type.defaultProps != null) {\n\t\tfor (i in type.defaultProps) {\n\t\t\tif (normalizedProps[i] === undefined) {\n\t\t\t\tnormalizedProps[i] = type.defaultProps[i];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn createVNode(type, normalizedProps, key, ref, null);\n}\n\n/**\n * Create a VNode (used internally by Preact)\n * @param {import('./internal').VNode[\"type\"]} type The node name or Component\n * Constructor for this virtual node\n * @param {object | string | number | null} props The properties of this virtual node.\n * If this virtual node represents a text node, this is the text of the node (string or number).\n * @param {string | number | null} key The key for this virtual node, used when\n * diffing it against its children\n * @param {import('./internal').VNode[\"ref\"]} ref The ref property that will\n * receive a reference to its created child\n * @returns {import('./internal').VNode}\n */\nexport function createVNode(type, props, key, ref, original) {\n\t// V8 seems to be better at detecting type shapes if the object is allocated from the same call site\n\t// Do not inline into createElement and coerceToVNode!\n\tconst vnode = {\n\t\ttype,\n\t\tprops,\n\t\tkey,\n\t\tref,\n\t\t_children: null,\n\t\t_parent: null,\n\t\t_depth: 0,\n\t\t_dom: null,\n\t\t// _nextDom must be initialized to undefined b/c it will eventually\n\t\t// be set to dom.nextSibling which can return `null` and it is important\n\t\t// to be able to distinguish between an uninitialized _nextDom and\n\t\t// a _nextDom that has been set to `null`\n\t\t_nextDom: undefined,\n\t\t_component: null,\n\t\t_hydrating: null,\n\t\tconstructor: undefined,\n\t\t_original: original == null ? ++vnodeId : original\n\t};\n\n\t// Only invoke the vnode hook if this was *not* a direct copy:\n\tif (original == null && options.vnode != null) options.vnode(vnode);\n\n\treturn vnode;\n}\n\nexport function createRef() {\n\treturn { current: null };\n}\n\nexport function Fragment(props) {\n\treturn props.children;\n}\n\n/**\n * Check if a the argument is a valid Preact VNode.\n * @param {*} vnode\n * @returns {vnode is import('./internal').VNode}\n */\nexport const isValidElement = vnode =>\n\tvnode != null && vnode.constructor === undefined;\n", "import { assign } from './util';\nimport { diff, commitRoot } from './diff/index';\nimport options from './options';\nimport { Fragment } from './create-element';\n\n/**\n * Base Component class. Provides `setState()` and `forceUpdate()`, which\n * trigger rendering\n * @param {object} props The initial component props\n * @param {object} context The initial context from parent components'\n * getChildContext\n */\nexport function Component(props, context) {\n\tthis.props = props;\n\tthis.context = context;\n}\n\n/**\n * Update component state and schedule a re-render.\n * @this {import('./internal').Component}\n * @param {object | ((s: object, p: object) => object)} update A hash of state\n * properties to update with new values or a function that given the current\n * state and props returns a new partial state\n * @param {() => void} [callback] A function to be called once component state is\n * updated\n */\nComponent.prototype.setState = function(update, callback) {\n\t// only clone state when copying to nextState the first time.\n\tlet s;\n\tif (this._nextState != null && this._nextState !== this.state) {\n\t\ts = this._nextState;\n\t} else {\n\t\ts = this._nextState = assign({}, this.state);\n\t}\n\n\tif (typeof update == 'function') {\n\t\t// Some libraries like `immer` mark the current state as readonly,\n\t\t// preventing us from mutating it, so we need to clone it. See #2716\n\t\tupdate = update(assign({}, s), this.props);\n\t}\n\n\tif (update) {\n\t\tassign(s, update);\n\t}\n\n\t// Skip update if updater function returned null\n\tif (update == null) return;\n\n\tif (this._vnode) {\n\t\tif (callback) {\n\t\t\tthis._stateCallbacks.push(callback);\n\t\t}\n\t\tenqueueRender(this);\n\t}\n};\n\n/**\n * Immediately perform a synchronous re-render of the component\n * @this {import('./internal').Component}\n * @param {() => void} [callback] A function to be called after component is\n * re-rendered\n */\nComponent.prototype.forceUpdate = function(callback) {\n\tif (this._vnode) {\n\t\t// Set render mode so that we can differentiate where the render request\n\t\t// is coming from. We need this because forceUpdate should never call\n\t\t// shouldComponentUpdate\n\t\tthis._force = true;\n\t\tif (callback) this._renderCallbacks.push(callback);\n\t\tenqueueRender(this);\n\t}\n};\n\n/**\n * Accepts `props` and `state`, and returns a new Virtual DOM tree to build.\n * Virtual DOM is generally constructed via [JSX](http://jasonformat.com/wtf-is-jsx).\n * @param {object} props Props (eg: JSX attributes) received from parent\n * element/component\n * @param {object} state The component's current state\n * @param {object} context Context object, as returned by the nearest\n * ancestor's `getChildContext()`\n * @returns {import('./index').ComponentChildren | void}\n */\nComponent.prototype.render = Fragment;\n\n/**\n * @param {import('./internal').VNode} vnode\n * @param {number | null} [childIndex]\n */\nexport function getDomSibling(vnode, childIndex) {\n\tif (childIndex == null) {\n\t\t// Use childIndex==null as a signal to resume the search from the vnode's sibling\n\t\treturn vnode._parent\n\t\t\t? getDomSibling(vnode._parent, vnode._parent._children.indexOf(vnode) + 1)\n\t\t\t: null;\n\t}\n\n\tlet sibling;\n\tfor (; childIndex < vnode._children.length; childIndex++) {\n\t\tsibling = vnode._children[childIndex];\n\n\t\tif (sibling != null && sibling._dom != null) {\n\t\t\t// Since updateParentDomPointers keeps _dom pointer correct,\n\t\t\t// we can rely on _dom to tell us if this subtree contains a\n\t\t\t// rendered DOM node, and what the first rendered DOM node is\n\t\t\treturn sibling._dom;\n\t\t}\n\t}\n\n\t// If we get here, we have not found a DOM node in this vnode's children.\n\t// We must resume from this vnode's sibling (in it's parent _children array)\n\t// Only climb up and search the parent if we aren't searching through a DOM\n\t// VNode (meaning we reached the DOM parent of the original vnode that began\n\t// the search)\n\treturn typeof vnode.type == 'function' ? getDomSibling(vnode) : null;\n}\n\n/**\n * Trigger in-place re-rendering of a component.\n * @param {import('./internal').Component} component The component to rerender\n */\nfunction renderComponent(component) {\n\tlet vnode = component._vnode,\n\t\toldDom = vnode._dom,\n\t\tparentDom = component._parentDom;\n\n\tif (parentDom) {\n\t\tlet commitQueue = [];\n\t\tconst oldVNode = assign({}, vnode);\n\t\toldVNode._original = vnode._original + 1;\n\n\t\tdiff(\n\t\t\tparentDom,\n\t\t\tvnode,\n\t\t\toldVNode,\n\t\t\tcomponent._globalContext,\n\t\t\tparentDom.ownerSVGElement !== undefined,\n\t\t\tvnode._hydrating != null ? [oldDom] : null,\n\t\t\tcommitQueue,\n\t\t\toldDom == null ? getDomSibling(vnode) : oldDom,\n\t\t\tvnode._hydrating\n\t\t);\n\t\tcommitRoot(commitQueue, vnode);\n\n\t\tif (vnode._dom != oldDom) {\n\t\t\tupdateParentDomPointers(vnode);\n\t\t}\n\t}\n}\n\n/**\n * @param {import('./internal').VNode} vnode\n */\nfunction updateParentDomPointers(vnode) {\n\tif ((vnode = vnode._parent) != null && vnode._component != null) {\n\t\tvnode._dom = vnode._component.base = null;\n\t\tfor (let i = 0; i < vnode._children.length; i++) {\n\t\t\tlet child = vnode._children[i];\n\t\t\tif (child != null && child._dom != null) {\n\t\t\t\tvnode._dom = vnode._component.base = child._dom;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn updateParentDomPointers(vnode);\n\t}\n}\n\n/**\n * The render queue\n * @type {Array<import('./internal').Component>}\n */\nlet rerenderQueue = [];\n\n/*\n * The value of `Component.debounce` must asynchronously invoke the passed in callback. It is\n * important that contributors to Preact can consistently reason about what calls to `setState`, etc.\n * do, and when their effects will be applied. See the links below for some further reading on designing\n * asynchronous APIs.\n * * [Designing APIs for Asynchrony](https://blog.izs.me/2013/08/designing-apis-for-asynchrony)\n * * [Callbacks synchronous and asynchronous](https://blog.ometer.com/2011/07/24/callbacks-synchronous-and-asynchronous/)\n */\n\nlet prevDebounce;\n\n/**\n * Enqueue a rerender of a component\n * @param {import('./internal').Component} c The component to rerender\n */\nexport function enqueueRender(c) {\n\tif (\n\t\t(!c._dirty &&\n\t\t\t(c._dirty = true) &&\n\t\t\trerenderQueue.push(c) &&\n\t\t\t!process._rerenderCount++) ||\n\t\tprevDebounce !== options.debounceRendering\n\t) {\n\t\tprevDebounce = options.debounceRendering;\n\t\t(prevDebounce || setTimeout)(process);\n\t}\n}\n\n/** Flush the render queue by rerendering all queued components */\nfunction process() {\n\tlet queue;\n\twhile ((process._rerenderCount = rerenderQueue.length)) {\n\t\tqueue = rerenderQueue.sort((a, b) => a._vnode._depth - b._vnode._depth);\n\t\trerenderQueue = [];\n\t\t// Don't update `renderCount` yet. Keep its value non-zero to prevent unnecessary\n\t\t// process() calls from getting scheduled while `queue` is still being consumed.\n\t\tqueue.some(c => {\n\t\t\tif (c._dirty) renderComponent(c);\n\t\t});\n\t}\n}\n\nprocess._rerenderCount = 0;\n", "import { enqueueRender } from './component';\n\nexport let i = 0;\n\nexport function createContext(defaultValue, contextId) {\n\tcontextId = '__cC' + i++;\n\n\tconst context = {\n\t\t_id: contextId,\n\t\t_defaultValue: defaultValue,\n\t\t/** @type {import('./internal').FunctionComponent} */\n\t\tConsumer(props, contextValue) {\n\t\t\t// return props.children(\n\t\t\t// \tcontext[contextId] ? context[contextId].props.value : defaultValue\n\t\t\t// );\n\t\t\treturn props.children(contextValue);\n\t\t},\n\t\t/** @type {import('./internal').FunctionComponent} */\n\t\tProvider(props) {\n\t\t\tif (!this.getChildContext) {\n\t\t\t\tlet subs = [];\n\t\t\t\tlet ctx = {};\n\t\t\t\tctx[contextId] = this;\n\n\t\t\t\tthis.getChildContext = () => ctx;\n\n\t\t\t\tthis.shouldComponentUpdate = function(_props) {\n\t\t\t\t\tif (this.props.value !== _props.value) {\n\t\t\t\t\t\t// I think the forced value propagation here was only needed when `options.debounceRendering` was being bypassed:\n\t\t\t\t\t\t// https://github.com/preactjs/preact/commit/4d339fb803bea09e9f198abf38ca1bf8ea4b7771#diff-54682ce380935a717e41b8bfc54737f6R358\n\t\t\t\t\t\t// In those cases though, even with the value corrected, we're double-rendering all nodes.\n\t\t\t\t\t\t// It might be better to just tell folks not to use force-sync mode.\n\t\t\t\t\t\t// Currently, using `useContext()` in a class component will overwrite its `this.context` value.\n\t\t\t\t\t\t// subs.some(c => {\n\t\t\t\t\t\t// \tc.context = _props.value;\n\t\t\t\t\t\t// \tenqueueRender(c);\n\t\t\t\t\t\t// });\n\n\t\t\t\t\t\t// subs.some(c => {\n\t\t\t\t\t\t// \tc.context[contextId] = _props.value;\n\t\t\t\t\t\t// \tenqueueRender(c);\n\t\t\t\t\t\t// });\n\t\t\t\t\t\tsubs.some(enqueueRender);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tthis.sub = c => {\n\t\t\t\t\tsubs.push(c);\n\t\t\t\t\tlet old = c.componentWillUnmount;\n\t\t\t\t\tc.componentWillUnmount = () => {\n\t\t\t\t\t\tsubs.splice(subs.indexOf(c), 1);\n\t\t\t\t\t\tif (old) old.call(c);\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn props.children;\n\t\t}\n\t};\n\n\t// Devtools needs access to the context object when it\n\t// encounters a Provider. This is necessary to support\n\t// setting `displayName` on the context object instead\n\t// of on the component itself. See:\n\t// https://reactjs.org/docs/context.html#contextdisplayname\n\n\treturn (context.Provider._contextRef = context.Consumer.contextType = context);\n}\n", "export const EMPTY_OBJ = {};\nexport const EMPTY_ARR = [];\nexport const IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;\n", "import { diff, unmount, applyRef } from './index';\nimport { createVNode, Fragment } from '../create-element';\nimport { EMPTY_OBJ, EMPTY_ARR } from '../constants';\nimport { getDomSibling } from '../component';\n\n/**\n * Diff the children of a virtual node\n * @param {import('../internal').PreactElement} parentDom The DOM element whose\n * children are being diffed\n * @param {import('../internal').ComponentChildren[]} renderResult\n * @param {import('../internal').VNode} newParentVNode The new virtual\n * node whose children should be diff'ed against oldParentVNode\n * @param {import('../internal').VNode} oldParentVNode The old virtual\n * node whose children should be diff'ed against newParentVNode\n * @param {object} globalContext The current context object - modified by getChildContext\n * @param {boolean} isSvg Whether or not this DOM node is an SVG node\n * @param {Array<import('../internal').PreactElement>} excessDomChildren\n * @param {Array<import('../internal').Component>} commitQueue List of components\n * which have callbacks to invoke in commitRoot\n * @param {import('../internal').PreactElement} oldDom The current attached DOM\n * element any new dom elements should be placed around. Likely `null` on first\n * render (except when hydrating). Can be a sibling DOM element when diffing\n * Fragments that have siblings. In most cases, it starts out as `oldChildren[0]._dom`.\n * @param {boolean} isHydrating Whether or not we are in hydration\n */\nexport function diffChildren(\n\tparentDom,\n\trenderResult,\n\tnewParentVNode,\n\toldParentVNode,\n\tglobalContext,\n\tisSvg,\n\texcessDomChildren,\n\tcommitQueue,\n\toldDom,\n\tisHydrating\n) {\n\tlet i, j, oldVNode, childVNode, newDom, firstChildDom, refs;\n\n\t// This is a compression of oldParentVNode!=null && oldParentVNode != EMPTY_OBJ && oldParentVNode._children || EMPTY_ARR\n\t// as EMPTY_OBJ._children should be `undefined`.\n\tlet oldChildren = (oldParentVNode && oldParentVNode._children) || EMPTY_ARR;\n\n\tlet oldChildrenLength = oldChildren.length;\n\n\tnewParentVNode._children = [];\n\tfor (i = 0; i < renderResult.length; i++) {\n\t\tchildVNode = renderResult[i];\n\n\t\tif (childVNode == null || typeof childVNode == 'boolean') {\n\t\t\tchildVNode = newParentVNode._children[i] = null;\n\t\t}\n\t\t// If this newVNode is being reused (e.g. <div>{reuse}{reuse}</div>) in the same diff,\n\t\t// or we are rendering a component (e.g. setState) copy the oldVNodes so it can have\n\t\t// it's own DOM & etc. pointers\n\t\telse if (\n\t\t\ttypeof childVNode == 'string' ||\n\t\t\ttypeof childVNode == 'number' ||\n\t\t\t// eslint-disable-next-line valid-typeof\n\t\t\ttypeof childVNode == 'bigint'\n\t\t) {\n\t\t\tchildVNode = newParentVNode._children[i] = createVNode(\n\t\t\t\tnull,\n\t\t\t\tchildVNode,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tchildVNode\n\t\t\t);\n\t\t} else if (Array.isArray(childVNode)) {\n\t\t\tchildVNode = newParentVNode._children[i] = createVNode(\n\t\t\t\tFragment,\n\t\t\t\t{ children: childVNode },\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull\n\t\t\t);\n\t\t} else if (childVNode._depth > 0) {\n\t\t\t// VNode is already in use, clone it. This can happen in the following\n\t\t\t// scenario:\n\t\t\t// const reuse = <div />\n\t\t\t// <div>{reuse}<span />{reuse}</div>\n\t\t\tchildVNode = newParentVNode._children[i] = createVNode(\n\t\t\t\tchildVNode.type,\n\t\t\t\tchildVNode.props,\n\t\t\t\tchildVNode.key,\n\t\t\t\tchildVNode.ref ? childVNode.ref : null,\n\t\t\t\tchildVNode._original\n\t\t\t);\n\t\t} else {\n\t\t\tchildVNode = newParentVNode._children[i] = childVNode;\n\t\t}\n\n\t\t// Terser removes the `continue` here and wraps the loop body\n\t\t// in a `if (childVNode) { ... } condition\n\t\tif (childVNode == null) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tchildVNode._parent = newParentVNode;\n\t\tchildVNode._depth = newParentVNode._depth + 1;\n\n\t\t// Check if we find a corresponding element in oldChildren.\n\t\t// If found, delete the array item by setting to `undefined`.\n\t\t// We use `undefined`, as `null` is reserved for empty placeholders\n\t\t// (holes).\n\t\toldVNode = oldChildren[i];\n\n\t\tif (\n\t\t\toldVNode === null ||\n\t\t\t(oldVNode &&\n\t\t\t\tchildVNode.key == oldVNode.key &&\n\t\t\t\tchildVNode.type === oldVNode.type)\n\t\t) {\n\t\t\toldChildren[i] = undefined;\n\t\t} else {\n\t\t\t// Either oldVNode === undefined or oldChildrenLength > 0,\n\t\t\t// so after this loop oldVNode == null or oldVNode is a valid value.\n\t\t\tfor (j = 0; j < oldChildrenLength; j++) {\n\t\t\t\toldVNode = oldChildren[j];\n\t\t\t\t// If childVNode is unkeyed, we only match similarly unkeyed nodes, otherwise we match by key.\n\t\t\t\t// We always match by type (in either case).\n\t\t\t\tif (\n\t\t\t\t\toldVNode &&\n\t\t\t\t\tchildVNode.key == oldVNode.key &&\n\t\t\t\t\tchildVNode.type === oldVNode.type\n\t\t\t\t) {\n\t\t\t\t\toldChildren[j] = undefined;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\toldVNode = null;\n\t\t\t}\n\t\t}\n\n\t\toldVNode = oldVNode || EMPTY_OBJ;\n\n\t\t// Morph the old element into the new one, but don't append it to the dom yet\n\t\tdiff(\n\t\t\tparentDom,\n\t\t\tchildVNode,\n\t\t\toldVNode,\n\t\t\tglobalContext,\n\t\t\tisSvg,\n\t\t\texcessDomChildren,\n\t\t\tcommitQueue,\n\t\t\toldDom,\n\t\t\tisHydrating\n\t\t);\n\n\t\tnewDom = childVNode._dom;\n\n\t\tif ((j = childVNode.ref) && oldVNode.ref != j) {\n\t\t\tif (!refs) refs = [];\n\t\t\tif (oldVNode.ref) refs.push(oldVNode.ref, null, childVNode);\n\t\t\trefs.push(j, childVNode._component || newDom, childVNode);\n\t\t}\n\n\t\tif (newDom != null) {\n\t\t\tif (firstChildDom == null) {\n\t\t\t\tfirstChildDom = newDom;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\ttypeof childVNode.type == 'function' &&\n\t\t\t\tchildVNode._children === oldVNode._children\n\t\t\t) {\n\t\t\t\tchildVNode._nextDom = oldDom = reorderChildren(\n\t\t\t\t\tchildVNode,\n\t\t\t\t\toldDom,\n\t\t\t\t\tparentDom\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\toldDom = placeChild(\n\t\t\t\t\tparentDom,\n\t\t\t\t\tchildVNode,\n\t\t\t\t\toldVNode,\n\t\t\t\t\toldChildren,\n\t\t\t\t\tnewDom,\n\t\t\t\t\toldDom\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (typeof newParentVNode.type == 'function') {\n\t\t\t\t// Because the newParentVNode is Fragment-like, we need to set it's\n\t\t\t\t// _nextDom property to the nextSibling of its last child DOM node.\n\t\t\t\t//\n\t\t\t\t// `oldDom` contains the correct value here because if the last child\n\t\t\t\t// is a Fragment-like, then oldDom has already been set to that child's _nextDom.\n\t\t\t\t// If the last child is a DOM VNode, then oldDom will be set to that DOM\n\t\t\t\t// node's nextSibling.\n\t\t\t\tnewParentVNode._nextDom = oldDom;\n\t\t\t}\n\t\t} else if (\n\t\t\toldDom &&\n\t\t\toldVNode._dom == oldDom &&\n\t\t\toldDom.parentNode != parentDom\n\t\t) {\n\t\t\t// The above condition is to handle null placeholders. See test in placeholder.test.js:\n\t\t\t// `efficiently replace null placeholders in parent rerenders`\n\t\t\toldDom = getDomSibling(oldVNode);\n\t\t}\n\t}\n\n\tnewParentVNode._dom = firstChildDom;\n\n\t// Remove remaining oldChildren if there are any.\n\tfor (i = oldChildrenLength; i--; ) {\n\t\tif (oldChildren[i] != null) {\n\t\t\tunmount(oldChildren[i], oldChildren[i]);\n\t\t}\n\t}\n\n\t// Set refs only after unmount\n\tif (refs) {\n\t\tfor (i = 0; i < refs.length; i++) {\n\t\t\tapplyRef(refs[i], refs[++i], refs[++i]);\n\t\t}\n\t}\n}\n\nfunction reorderChildren(childVNode, oldDom, parentDom) {\n\t// Note: VNodes in nested suspended trees may be missing _children.\n\tlet c = childVNode._children;\n\tlet tmp = 0;\n\tfor (; c && tmp < c.length; tmp++) {\n\t\tlet vnode = c[tmp];\n\t\tif (vnode) {\n\t\t\t// We typically enter this code path on sCU bailout, where we copy\n\t\t\t// oldVNode._children to newVNode._children. If that is the case, we need\n\t\t\t// to update the old children's _parent pointer to point to the newVNode\n\t\t\t// (childVNode here).\n\t\t\tvnode._parent = childVNode;\n\n\t\t\tif (typeof vnode.type == 'function') {\n\t\t\t\toldDom = reorderChildren(vnode, oldDom, parentDom);\n\t\t\t} else {\n\t\t\t\toldDom = placeChild(parentDom, vnode, vnode, c, vnode._dom, oldDom);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn oldDom;\n}\n\n/**\n * Flatten and loop through the children of a virtual node\n * @param {import('../index').ComponentChildren} children The unflattened\n * children of a virtual node\n * @returns {import('../internal').VNode[]}\n */\nexport function toChildArray(children, out) {\n\tout = out || [];\n\tif (children == null || typeof children == 'boolean') {\n\t} else if (Array.isArray(children)) {\n\t\tchildren.some(child => {\n\t\t\ttoChildArray(child, out);\n\t\t});\n\t} else {\n\t\tout.push(children);\n\t}\n\treturn out;\n}\n\nfunction placeChild(\n\tparentDom,\n\tchildVNode,\n\toldVNode,\n\toldChildren,\n\tnewDom,\n\toldDom\n) {\n\tlet nextDom;\n\tif (childVNode._nextDom !== undefined) {\n\t\t// Only Fragments or components that return Fragment like VNodes will\n\t\t// have a non-undefined _nextDom. Continue the diff from the sibling\n\t\t// of last DOM child of this child VNode\n\t\tnextDom = childVNode._nextDom;\n\n\t\t// Eagerly cleanup _nextDom. We don't need to persist the value because\n\t\t// it is only used by `diffChildren` to determine where to resume the diff after\n\t\t// diffing Components and Fragments. Once we store it the nextDOM local var, we\n\t\t// can clean up the property\n\t\tchildVNode._nextDom = undefined;\n\t} else if (\n\t\toldVNode == null ||\n\t\tnewDom != oldDom ||\n\t\tnewDom.parentNode == null\n\t) {\n\t\touter: if (oldDom == null || oldDom.parentNode !== parentDom) {\n\t\t\tparentDom.appendChild(newDom);\n\t\t\tnextDom = null;\n\t\t} else {\n\t\t\t// `j<oldChildrenLength; j+=2` is an alternative to `j++<oldChildrenLength/2`\n\t\t\tfor (\n\t\t\t\tlet sibDom = oldDom, j = 0;\n\t\t\t\t(sibDom = sibDom.nextSibling) && j < oldChildren.length;\n\t\t\t\tj += 1\n\t\t\t) {\n\t\t\t\tif (sibDom == newDom) {\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t}\n\t\t\tparentDom.insertBefore(newDom, oldDom);\n\t\t\tnextDom = oldDom;\n\t\t}\n\t}\n\n\t// If we have pre-calculated the nextDOM node, use it. Else calculate it now\n\t// Strictly check for `undefined` here cuz `null` is a valid value of `nextDom`.\n\t// See more detail in create-element.js:createVNode\n\tif (nextDom !== undefined) {\n\t\toldDom = nextDom;\n\t} else {\n\t\toldDom = newDom.nextSibling;\n\t}\n\n\treturn oldDom;\n}\n", "import { IS_NON_DIMENSIONAL } from '../constants';\nimport options from '../options';\n\n/**\n * Diff the old and new properties of a VNode and apply changes to the DOM node\n * @param {import('../internal').PreactElement} dom The DOM node to apply\n * changes to\n * @param {object} newProps The new props\n * @param {object} oldProps The old props\n * @param {boolean} isSvg Whether or not this node is an SVG node\n * @param {boolean} hydrate Whether or not we are in hydration mode\n */\nexport function diffProps(dom, newProps, oldProps, isSvg, hydrate) {\n\tlet i;\n\n\tfor (i in oldProps) {\n\t\tif (i !== 'children' && i !== 'key' && !(i in newProps)) {\n\t\t\tsetProperty(dom, i, null, oldProps[i], isSvg);\n\t\t}\n\t}\n\n\tfor (i in newProps) {\n\t\tif (\n\t\t\t(!hydrate || typeof newProps[i] == 'function') &&\n\t\t\ti !== 'children' &&\n\t\t\ti !== 'key' &&\n\t\t\ti !== 'value' &&\n\t\t\ti !== 'checked' &&\n\t\t\toldProps[i] !== newProps[i]\n\t\t) {\n\t\t\tsetProperty(dom, i, newProps[i], oldProps[i], isSvg);\n\t\t}\n\t}\n}\n\nfunction setStyle(style, key, value) {\n\tif (key[0] === '-') {\n\t\tstyle.setProperty(key, value);\n\t} else if (value == null) {\n\t\tstyle[key] = '';\n\t} else if (typeof value != 'number' || IS_NON_DIMENSIONAL.test(key)) {\n\t\tstyle[key] = value;\n\t} else {\n\t\tstyle[key] = value + 'px';\n\t}\n}\n\n/**\n * Set a property value on a DOM node\n * @param {import('../internal').PreactElement} dom The DOM node to modify\n * @param {string} name The name of the property to set\n * @param {*} value The value to set the property to\n * @param {*} oldValue The old value the property had\n * @param {boolean} isSvg Whether or not this DOM node is an SVG node or not\n */\nexport function setProperty(dom, name, value, oldValue, isSvg) {\n\tlet useCapture;\n\n\to: if (name === 'style') {\n\t\tif (typeof value == 'string') {\n\t\t\tdom.style.cssText = value;\n\t\t} else {\n\t\t\tif (typeof oldValue == 'string') {\n\t\t\t\tdom.style.cssText = oldValue = '';\n\t\t\t}\n\n\t\t\tif (oldValue) {\n\t\t\t\tfor (name in oldValue) {\n\t\t\t\t\tif (!(value && name in value)) {\n\t\t\t\t\t\tsetStyle(dom.style, name, '');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (value) {\n\t\t\t\tfor (name in value) {\n\t\t\t\t\tif (!oldValue || value[name] !== oldValue[name]) {\n\t\t\t\t\t\tsetStyle(dom.style, name, value[name]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t// Benchmark for comparison: https://esbench.com/bench/574c954bdb965b9a00965ac6\n\telse if (name[0] === 'o' && name[1] === 'n') {\n\t\tuseCapture = name !== (name = name.replace(/Capture$/, ''));\n\n\t\t// Infer correct casing for DOM built-in events:\n\t\tif (name.toLowerCase() in dom) name = name.toLowerCase().slice(2);\n\t\telse name = name.slice(2);\n\n\t\tif (!dom._listeners) dom._listeners = {};\n\t\tdom._listeners[name + useCapture] = value;\n\n\t\tif (value) {\n\t\t\tif (!oldValue) {\n\t\t\t\tconst handler = useCapture ? eventProxyCapture : eventProxy;\n\t\t\t\tdom.addEventListener(name, handler, useCapture);\n\t\t\t}\n\t\t} else {\n\t\t\tconst handler = useCapture ? eventProxyCapture : eventProxy;\n\t\t\tdom.removeEventListener(name, handler, useCapture);\n\t\t}\n\t} else if (name !== 'dangerouslySetInnerHTML') {\n\t\tif (isSvg) {\n\t\t\t// Normalize incorrect prop usage for SVG:\n\t\t\t// - xlink:href / xlinkHref --> href (xlink:href was removed from SVG and isn't needed)\n\t\t\t// - className --> class\n\t\t\tname = name.replace(/xlink(H|:h)/, 'h').replace(/sName$/, 's');\n\t\t} else if (\n\t\t\tname !== 'href' &&\n\t\t\tname !== 'list' &&\n\t\t\tname !== 'form' &&\n\t\t\t// Default value in browsers is `-1` and an empty string is\n\t\t\t// cast to `0` instead\n\t\t\tname !== 'tabIndex' &&\n\t\t\tname !== 'download' &&\n\t\t\tname in dom\n\t\t) {\n\t\t\ttry {\n\t\t\t\tdom[name] = value == null ? '' : value;\n\t\t\t\t// labelled break is 1b smaller here than a return statement (sorry)\n\t\t\t\tbreak o;\n\t\t\t} catch (e) {}\n\t\t}\n\n\t\t// ARIA-attributes have a different notion of boolean values.\n\t\t// The value `false` is different from the attribute not\n\t\t// existing on the DOM, so we can't remove it. For non-boolean\n\t\t// ARIA-attributes we could treat false as a removal, but the\n\t\t// amount of exceptions would cost us too many bytes. On top of\n\t\t// that other VDOM frameworks also always stringify `false`.\n\n\t\tif (typeof value === 'function') {\n\t\t\t// never serialize functions as attribute values\n\t\t} else if (value != null && (value !== false || name.indexOf('-') != -1)) {\n\t\t\tdom.setAttribute(name, value);\n\t\t} else {\n\t\t\tdom.removeAttribute(name);\n\t\t}\n\t}\n}\n\n/**\n * Proxy an event to hooked event handlers\n * @param {Event} e The event object from the browser\n * @private\n */\nfunction eventProxy(e) {\n\tthis._listeners[e.type + false](options.event ? options.event(e) : e);\n}\n\nfunction eventProxyCapture(e) {\n\tthis._listeners[e.type + true](options.event ? options.event(e) : e);\n}\n", "import { EMPTY_OBJ } from '../constants';\nimport { Component, getDomSibling } from '../component';\nimport { Fragment } from '../create-element';\nimport { diffChildren } from './children';\nimport { diffProps, setProperty } from './props';\nimport { assign, removeNode, slice } from '../util';\nimport options from '../options';\n\n/**\n * Diff two virtual nodes and apply proper changes to the DOM\n * @param {import('../internal').PreactElement} parentDom The parent of the DOM element\n * @param {import('../internal').VNode} newVNode The new virtual node\n * @param {import('../internal').VNode} oldVNode The old virtual node\n * @param {object} globalContext The current context object. Modified by getChildContext\n * @param {boolean} isSvg Whether or not this element is an SVG node\n * @param {Array<import('../internal').PreactElement>} excessDomChildren\n * @param {Array<import('../internal').Component>} commitQueue List of components\n * which have callbacks to invoke in commitRoot\n * @param {import('../internal').PreactElement} oldDom The current attached DOM\n * element any new dom elements should be placed around. Likely `null` on first\n * render (except when hydrating). Can be a sibling DOM element when diffing\n * Fragments that have siblings. In most cases, it starts out as `oldChildren[0]._dom`.\n * @param {boolean} [isHydrating] Whether or not we are in hydration\n */\nexport function diff(\n\tparentDom,\n\tnewVNode,\n\toldVNode,\n\tglobalContext,\n\tisSvg,\n\texcessDomChildren,\n\tcommitQueue,\n\toldDom,\n\tisHydrating\n) {\n\tlet tmp,\n\t\tnewType = newVNode.type;\n\n\t// When passing through createElement it assigns the object\n\t// constructor as undefined. This to prevent JSON-injection.\n\tif (newVNode.constructor !== undefined) return null;\n\n\t// If the previous diff bailed out, resume creating/hydrating.\n\tif (oldVNode._hydrating != null) {\n\t\tisHydrating = oldVNode._hydrating;\n\t\toldDom = newVNode._dom = oldVNode._dom;\n\t\t// if we resume, we want the tree to be \"unlocked\"\n\t\tnewVNode._hydrating = null;\n\t\texcessDomChildren = [oldDom];\n\t}\n\n\tif ((tmp = options._diff)) tmp(newVNode);\n\n\ttry {\n\t\touter: if (typeof newType == 'function') {\n\t\t\tlet c, isNew, oldProps, oldState, snapshot, clearProcessingException;\n\t\t\tlet newProps = newVNode.props;\n\n\t\t\t// Necessary for createContext api. Setting this property will pass\n\t\t\t// the context value as `this.context` just for this component.\n\t\t\ttmp = newType.contextType;\n\t\t\tlet provider = tmp && globalContext[tmp._id];\n\t\t\tlet componentContext = tmp\n\t\t\t\t? provider\n\t\t\t\t\t? provider.props.value\n\t\t\t\t\t: tmp._defaultValue\n\t\t\t\t: globalContext;\n\n\t\t\t// Get component and set it to `c`\n\t\t\tif (oldVNode._component) {\n\t\t\t\tc = newVNode._component = oldVNode._component;\n\t\t\t\tclearProcessingException = c._processingException = c._pendingError;\n\t\t\t} else {\n\t\t\t\t// Instantiate the new component\n\t\t\t\tif ('prototype' in newType && newType.prototype.render) {\n\t\t\t\t\t// @ts-ignore The check above verifies that newType is suppose to be constructed\n\t\t\t\t\tnewVNode._component = c = new newType(newProps, componentContext); // eslint-disable-line new-cap\n\t\t\t\t} else {\n\t\t\t\t\t// @ts-ignore Trust me, Component implements the interface we want\n\t\t\t\t\tnewVNode._component = c = new Component(newProps, componentContext);\n\t\t\t\t\tc.constructor = newType;\n\t\t\t\t\tc.render = doRender;\n\t\t\t\t}\n\t\t\t\tif (provider) provider.sub(c);\n\n\t\t\t\tc.props = newProps;\n\t\t\t\tif (!c.state) c.state = {};\n\t\t\t\tc.context = componentContext;\n\t\t\t\tc._globalContext = globalContext;\n\t\t\t\tisNew = c._dirty = true;\n\t\t\t\tc._renderCallbacks = [];\n\t\t\t\tc._stateCallbacks = [];\n\t\t\t}\n\n\t\t\t// Invoke getDerivedStateFromProps\n\t\t\tif (c._nextState == null) {\n\t\t\t\tc._nextState = c.state;\n\t\t\t}\n\n\t\t\tif (newType.getDerivedStateFromProps != null) {\n\t\t\t\tif (c._nextState == c.state) {\n\t\t\t\t\tc._nextState = assign({}, c._nextState);\n\t\t\t\t}\n\n\t\t\t\tassign(\n\t\t\t\t\tc._nextState,\n\t\t\t\t\tnewType.getDerivedStateFromProps(newProps, c._nextState)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\toldProps = c.props;\n\t\t\toldState = c.state;\n\n\t\t\t// Invoke pre-render lifecycle methods\n\t\t\tif (isNew) {\n\t\t\t\tif (\n\t\t\t\t\tnewType.getDerivedStateFromProps == null &&\n\t\t\t\t\tc.componentWillMount != null\n\t\t\t\t) {\n\t\t\t\t\tc.componentWillMount();\n\t\t\t\t}\n\n\t\t\t\tif (c.componentDidMount != null) {\n\t\t\t\t\tc._renderCallbacks.push(c.componentDidMount);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (\n\t\t\t\t\tnewType.getDerivedStateFromProps == null &&\n\t\t\t\t\tnewProps !== oldProps &&\n\t\t\t\t\tc.componentWillReceiveProps != null\n\t\t\t\t) {\n\t\t\t\t\tc.componentWillReceiveProps(newProps, componentContext);\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\t(!c._force &&\n\t\t\t\t\t\tc.shouldComponentUpdate != null &&\n\t\t\t\t\t\tc.shouldComponentUpdate(\n\t\t\t\t\t\t\tnewProps,\n\t\t\t\t\t\t\tc._nextState,\n\t\t\t\t\t\t\tcomponentContext\n\t\t\t\t\t\t) === false) ||\n\t\t\t\t\tnewVNode._original === oldVNode._original\n\t\t\t\t) {\n\t\t\t\t\tc.props = newProps;\n\t\t\t\t\tc.state = c._nextState;\n\t\t\t\t\t// More info about this here: https://gist.github.com/JoviDeCroock/bec5f2ce93544d2e6070ef8e0036e4e8\n\t\t\t\t\tif (newVNode._original !== oldVNode._original) c._dirty = false;\n\t\t\t\t\tc._vnode = newVNode;\n\t\t\t\t\tnewVNode._dom = oldVNode._dom;\n\t\t\t\t\tnewVNode._children = oldVNode._children;\n\t\t\t\t\tnewVNode._children.forEach(vnode => {\n\t\t\t\t\t\tif (vnode) vnode._parent = newVNode;\n\t\t\t\t\t});\n\n\t\t\t\t\tfor (let i = 0; i < c._stateCallbacks.length; i++) {\n\t\t\t\t\t\tc._renderCallbacks.push(c._stateCallbacks[i]);\n\t\t\t\t\t}\n\t\t\t\t\tc._stateCallbacks = [];\n\n\t\t\t\t\tif (c._renderCallbacks.length) {\n\t\t\t\t\t\tcommitQueue.push(c);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\n\t\t\t\tif (c.componentWillUpdate != null) {\n\t\t\t\t\tc.componentWillUpdate(newProps, c._nextState, componentContext);\n\t\t\t\t}\n\n\t\t\t\tif (c.componentDidUpdate != null) {\n\t\t\t\t\tc._renderCallbacks.push(() => {\n\t\t\t\t\t\tc.componentDidUpdate(oldProps, oldState, snapshot);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tc.context = componentContext;\n\t\t\tc.props = newProps;\n\t\t\tc._vnode = newVNode;\n\t\t\tc._parentDom = parentDom;\n\n\t\t\tlet renderHook = options._render,\n\t\t\t\tcount = 0;\n\t\t\tif ('prototype' in newType && newType.prototype.render) {\n\t\t\t\tc.state = c._nextState;\n\t\t\t\tc._dirty = false;\n\n\t\t\t\tif (renderHook) renderHook(newVNode);\n\n\t\t\t\ttmp = c.render(c.props, c.state, c.context);\n\n\t\t\t\tfor (let i = 0; i < c._stateCallbacks.length; i++) {\n\t\t\t\t\tc._renderCallbacks.push(c._stateCallbacks[i]);\n\t\t\t\t}\n\t\t\t\tc._stateCallbacks = [];\n\t\t\t} else {\n\t\t\t\tdo {\n\t\t\t\t\tc._dirty = false;\n\t\t\t\t\tif (renderHook) renderHook(newVNode);\n\n\t\t\t\t\ttmp = c.render(c.props, c.state, c.context);\n\n\t\t\t\t\t// Handle setState called in render, see #2553\n\t\t\t\t\tc.state = c._nextState;\n\t\t\t\t} while (c._dirty && ++count < 25);\n\t\t\t}\n\n\t\t\t// Handle setState called in render, see #2553\n\t\t\tc.state = c._nextState;\n\n\t\t\tif (c.getChildContext != null) {\n\t\t\t\tglobalContext = assign(assign({}, globalContext), c.getChildContext());\n\t\t\t}\n\n\t\t\tif (!isNew && c.getSnapshotBeforeUpdate != null) {\n\t\t\t\tsnapshot = c.getSnapshotBeforeUpdate(oldProps, oldState);\n\t\t\t}\n\n\t\t\tlet isTopLevelFragment =\n\t\t\t\ttmp != null && tmp.type === Fragment && tmp.key == null;\n\t\t\tlet renderResult = isTopLevelFragment ? tmp.props.children : tmp;\n\n\t\t\tdiffChildren(\n\t\t\t\tparentDom,\n\t\t\t\tArray.isArray(renderResult) ? renderResult : [renderResult],\n\t\t\t\tnewVNode,\n\t\t\t\toldVNode,\n\t\t\t\tglobalContext,\n\t\t\t\tisSvg,\n\t\t\t\texcessDomChildren,\n\t\t\t\tcommitQueue,\n\t\t\t\toldDom,\n\t\t\t\tisHydrating\n\t\t\t);\n\n\t\t\tc.base = newVNode._dom;\n\n\t\t\t// We successfully rendered this VNode, unset any stored hydration/bailout state:\n\t\t\tnewVNode._hydrating = null;\n\n\t\t\tif (c._renderCallbacks.length) {\n\t\t\t\tcommitQueue.push(c);\n\t\t\t}\n\n\t\t\tif (clearProcessingException) {\n\t\t\t\tc._pendingError = c._processingException = null;\n\t\t\t}\n\n\t\t\tc._force = false;\n\t\t} else if (\n\t\t\texcessDomChildren == null &&\n\t\t\tnewVNode._original === oldVNode._original\n\t\t) {\n\t\t\tnewVNode._children = oldVNode._children;\n\t\t\tnewVNode._dom = oldVNode._dom;\n\t\t} else {\n\t\t\tnewVNode._dom = diffElementNodes(\n\t\t\t\toldVNode._dom,\n\t\t\t\tnewVNode,\n\t\t\t\toldVNode,\n\t\t\t\tglobalContext,\n\t\t\t\tisSvg,\n\t\t\t\texcessDomChildren,\n\t\t\t\tcommitQueue,\n\t\t\t\tisHydrating\n\t\t\t);\n\t\t}\n\n\t\tif ((tmp = options.diffed)) tmp(newVNode);\n\t} catch (e) {\n\t\tnewVNode._original = null;\n\t\t// if hydrating or creating initial tree, bailout preserves DOM:\n\t\tif (isHydrating || excessDomChildren != null) {\n\t\t\tnewVNode._dom = oldDom;\n\t\t\tnewVNode._hydrating = !!isHydrating;\n\t\t\texcessDomChildren[excessDomChildren.indexOf(oldDom)] = null;\n\t\t\t// ^ could possibly be simplified to:\n\t\t\t// excessDomChildren.length = 0;\n\t\t}\n\t\toptions._catchError(e, newVNode, oldVNode);\n\t}\n}\n\n/**\n * @param {Array<import('../internal').Component>} commitQueue List of components\n * which have callbacks to invoke in commitRoot\n * @param {import('../internal').VNode} root\n */\nexport function commitRoot(commitQueue, root) {\n\tif (options._commit) options._commit(root, commitQueue);\n\n\tcommitQueue.some(c => {\n\t\ttry {\n\t\t\t// @ts-ignore Reuse the commitQueue variable here so the type changes\n\t\t\tcommitQueue = c._renderCallbacks;\n\t\t\tc._renderCallbacks = [];\n\t\t\tcommitQueue.some(cb => {\n\t\t\t\t// @ts-ignore See above ts-ignore on commitQueue\n\t\t\t\tcb.call(c);\n\t\t\t});\n\t\t} catch (e) {\n\t\t\toptions._catchError(e, c._vnode);\n\t\t}\n\t});\n}\n\n/**\n * Diff two virtual nodes representing DOM element\n * @param {import('../internal').PreactElement} dom The DOM element representing\n * the virtual nodes being diffed\n * @param {import('../internal').VNode} newVNode The new virtual node\n * @param {import('../internal').VNode} oldVNode The old virtual node\n * @param {object} globalContext The current context object\n * @param {boolean} isSvg Whether or not this DOM node is an SVG node\n * @param {*} excessDomChildren\n * @param {Array<import('../internal').Component>} commitQueue List of components\n * which have callbacks to invoke in commitRoot\n * @param {boolean} isHydrating Whether or not we are in hydration\n * @returns {import('../internal').PreactElement}\n */\nfunction diffElementNodes(\n\tdom,\n\tnewVNode,\n\toldVNode,\n\tglobalContext,\n\tisSvg,\n\texcessDomChildren,\n\tcommitQueue,\n\tisHydrating\n) {\n\tlet oldProps = oldVNode.props;\n\tlet newProps = newVNode.props;\n\tlet nodeType = newVNode.type;\n\tlet i = 0;\n\n\t// Tracks entering and exiting SVG namespace when descending through the tree.\n\tif (nodeType === 'svg') isSvg = true;\n\n\tif (excessDomChildren != null) {\n\t\tfor (; i < excessDomChildren.length; i++) {\n\t\t\tconst child = excessDomChildren[i];\n\n\t\t\t// if newVNode matches an element in excessDomChildren or the `dom`\n\t\t\t// argument matches an element in excessDomChildren, remove it from\n\t\t\t// excessDomChildren so it isn't later removed in diffChildren\n\t\t\tif (\n\t\t\t\tchild &&\n\t\t\t\t'setAttribute' in child === !!nodeType &&\n\t\t\t\t(nodeType ? child.localName === nodeType : child.nodeType === 3)\n\t\t\t) {\n\t\t\t\tdom = child;\n\t\t\t\texcessDomChildren[i] = null;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (dom == null) {\n\t\tif (nodeType === null) {\n\t\t\t// @ts-ignore createTextNode returns Text, we expect PreactElement\n\t\t\treturn document.createTextNode(newProps);\n\t\t}\n\n\t\tif (isSvg) {\n\t\t\tdom = document.createElementNS(\n\t\t\t\t'http://www.w3.org/2000/svg',\n\t\t\t\t// @ts-ignore We know `newVNode.type` is a string\n\t\t\t\tnodeType\n\t\t\t);\n\t\t} else {\n\t\t\tdom = document.createElement(\n\t\t\t\t// @ts-ignore We know `newVNode.type` is a string\n\t\t\t\tnodeType,\n\t\t\t\tnewProps.is && newProps\n\t\t\t);\n\t\t}\n\n\t\t// we created a new parent, so none of the previously attached children can be reused:\n\t\texcessDomChildren = null;\n\t\t// we are creating a new node, so we can assume this is a new subtree (in case we are hydrating), this deopts the hydrate\n\t\tisHydrating = false;\n\t}\n\n\tif (nodeType === null) {\n\t\t// During hydration, we still have to split merged text from SSR'd HTML.\n\t\tif (oldProps !== newProps && (!isHydrating || dom.data !== newProps)) {\n\t\t\tdom.data = newProps;\n\t\t}\n\t} else {\n\t\t// If excessDomChildren was not null, repopulate it with the current element's children:\n\t\texcessDomChildren = excessDomChildren && slice.call(dom.childNodes);\n\n\t\toldProps = oldVNode.props || EMPTY_OBJ;\n\n\t\tlet oldHtml = oldProps.dangerouslySetInnerHTML;\n\t\tlet newHtml = newProps.dangerouslySetInnerHTML;\n\n\t\t// During hydration, props are not diffed at all (including dangerouslySetInnerHTML)\n\t\t// @TODO we should warn in debug mode when props don't match here.\n\t\tif (!isHydrating) {\n\t\t\t// But, if we are in a situation where we are using existing DOM (e.g. replaceNode)\n\t\t\t// we should read the existing DOM attributes to diff them\n\t\t\tif (excessDomChildren != null) {\n\t\t\t\toldProps = {};\n\t\t\t\tfor (i = 0; i < dom.attributes.length; i++) {\n\t\t\t\t\toldProps[dom.attributes[i].name] = dom.attributes[i].value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (newHtml || oldHtml) {\n\t\t\t\t// Avoid re-applying the same '__html' if it did not changed between re-render\n\t\t\t\tif (\n\t\t\t\t\t!newHtml ||\n\t\t\t\t\t((!oldHtml || newHtml.__html != oldHtml.__html) &&\n\t\t\t\t\t\tnewHtml.__html !== dom.innerHTML)\n\t\t\t\t) {\n\t\t\t\t\tdom.innerHTML = (newHtml && newHtml.__html) || '';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tdiffProps(dom, newProps, oldProps, isSvg, isHydrating);\n\n\t\t// If the new vnode didn't have dangerouslySetInnerHTML, diff its children\n\t\tif (newHtml) {\n\t\t\tnewVNode._children = [];\n\t\t} else {\n\t\t\ti = newVNode.props.children;\n\t\t\tdiffChildren(\n\t\t\t\tdom,\n\t\t\t\tArray.isArray(i) ? i : [i],\n\t\t\t\tnewVNode,\n\t\t\t\toldVNode,\n\t\t\t\tglobalContext,\n\t\t\t\tisSvg && nodeType !== 'foreignObject',\n\t\t\t\texcessDomChildren,\n\t\t\t\tcommitQueue,\n\t\t\t\texcessDomChildren\n\t\t\t\t\t? excessDomChildren[0]\n\t\t\t\t\t: oldVNode._children && getDomSibling(oldVNode, 0),\n\t\t\t\tisHydrating\n\t\t\t);\n\n\t\t\t// Remove children that are not part of any vnode.\n\t\t\tif (excessDomChildren != null) {\n\t\t\t\tfor (i = excessDomChildren.length; i--; ) {\n\t\t\t\t\tif (excessDomChildren[i] != null) removeNode(excessDomChildren[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// (as above, don't diff props during hydration)\n\t\tif (!isHydrating) {\n\t\t\tif (\n\t\t\t\t'value' in newProps &&\n\t\t\t\t(i = newProps.value) !== undefined &&\n\t\t\t\t// #2756 For the <progress>-element the initial value is 0,\n\t\t\t\t// despite the attribute not being present. When the attribute\n\t\t\t\t// is missing the progress bar is treated as indeterminate.\n\t\t\t\t// To fix that we'll always update it when it is 0 for progress elements\n\t\t\t\t(i !== dom.value ||\n\t\t\t\t\t(nodeType === 'progress' && !i) ||\n\t\t\t\t\t// This is only for IE 11 to fix <select> value not being updated.\n\t\t\t\t\t// To avoid a stale select value we need to set the option.value\n\t\t\t\t\t// again, which triggers IE11 to re-evaluate the select value\n\t\t\t\t\t(nodeType === 'option' && i !== oldProps.value))\n\t\t\t) {\n\t\t\t\tsetProperty(dom, 'value', i, oldProps.value, false);\n\t\t\t}\n\t\t\tif (\n\t\t\t\t'checked' in newProps &&\n\t\t\t\t(i = newProps.checked) !== undefined &&\n\t\t\t\ti !== dom.checked\n\t\t\t) {\n\t\t\t\tsetProperty(dom, 'checked', i, oldProps.checked, false);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn dom;\n}\n\n/**\n * Invoke or update a ref, depending on whether it is a function or object ref.\n * @param {object|function} ref\n * @param {any} value\n * @param {import('../internal').VNode} vnode\n */\nexport function applyRef(ref, value, vnode) {\n\ttry {\n\t\tif (typeof ref == 'function') ref(value);\n\t\telse ref.current = value;\n\t} catch (e) {\n\t\toptions._catchError(e, vnode);\n\t}\n}\n\n/**\n * Unmount a virtual node from the tree and apply DOM changes\n * @param {import('../internal').VNode} vnode The virtual node to unmount\n * @param {import('../internal').VNode} parentVNode The parent of the VNode that\n * initiated the unmount\n * @param {boolean} [skipRemove] Flag that indicates that a parent node of the\n * current element is already detached from the DOM.\n */\nexport function unmount(vnode, parentVNode, skipRemove) {\n\tlet r;\n\tif (options.unmount) options.unmount(vnode);\n\n\tif ((r = vnode.ref)) {\n\t\tif (!r.current || r.current === vnode._dom) {\n\t\t\tapplyRef(r, null, parentVNode);\n\t\t}\n\t}\n\n\tif ((r = vnode._component) != null) {\n\t\tif (r.componentWillUnmount) {\n\t\t\ttry {\n\t\t\t\tr.componentWillUnmount();\n\t\t\t} catch (e) {\n\t\t\t\toptions._catchError(e, parentVNode);\n\t\t\t}\n\t\t}\n\n\t\tr.base = r._parentDom = null;\n\t\tvnode._component = undefined;\n\t}\n\n\tif ((r = vnode._children)) {\n\t\tfor (let i = 0; i < r.length; i++) {\n\t\t\tif (r[i]) {\n\t\t\t\tunmount(\n\t\t\t\t\tr[i],\n\t\t\t\t\tparentVNode,\n\t\t\t\t\tskipRemove || typeof vnode.type !== 'function'\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!skipRemove && vnode._dom != null) {\n\t\tremoveNode(vnode._dom);\n\t}\n\n\t// Must be set to `undefined` to properly clean up `_nextDom`\n\t// for which `null` is a valid value. See comment in `create-element.js`\n\tvnode._parent = vnode._dom = vnode._nextDom = undefined;\n}\n\n/** The `.render()` method for a PFC backing instance. */\nfunction doRender(props, state, context) {\n\treturn this.constructor(props, context);\n}\n", "import { EMPTY_OBJ } from './constants';\nimport { commitRoot, diff } from './diff/index';\nimport { createElement, Fragment } from './create-element';\nimport options from './options';\nimport { slice } from './util';\n\n/**\n * Render a Preact virtual node into a DOM element\n * @param {import('./internal').ComponentChild} vnode The virtual node to render\n * @param {import('./internal').PreactElement} parentDom The DOM element to\n * render into\n * @param {import('./internal').PreactElement | object} [replaceNode] Optional: Attempt to re-use an\n * existing DOM tree rooted at `replaceNode`\n */\nexport function render(vnode, parentDom, replaceNode) {\n\tif (options._root) options._root(vnode, parentDom);\n\n\t// We abuse the `replaceNode` parameter in `hydrate()` to signal if we are in\n\t// hydration mode or not by passing the `hydrate` function instead of a DOM\n\t// element..\n\tlet isHydrating = typeof replaceNode === 'function';\n\n\t// To be able to support calling `render()` multiple times on the same\n\t// DOM node, we need to obtain a reference to the previous tree. We do\n\t// this by assigning a new `_children` property to DOM nodes which points\n\t// to the last rendered tree. By default this property is not present, which\n\t// means that we are mounting a new tree for the first time.\n\tlet oldVNode = isHydrating\n\t\t? null\n\t\t: (replaceNode && replaceNode._children) || parentDom._children;\n\n\tvnode = (\n\t\t(!isHydrating && replaceNode) ||\n\t\tparentDom\n\t)._children = createElement(Fragment, null, [vnode]);\n\n\t// List of effects that need to be called after diffing.\n\tlet commitQueue = [];\n\tdiff(\n\t\tparentDom,\n\t\t// Determine the new vnode tree and store it on the DOM element on\n\t\t// our custom `_children` property.\n\t\tvnode,\n\t\toldVNode || EMPTY_OBJ,\n\t\tEMPTY_OBJ,\n\t\tparentDom.ownerSVGElement !== undefined,\n\t\t!isHydrating && replaceNode\n\t\t\t? [replaceNode]\n\t\t\t: oldVNode\n\t\t\t? null\n\t\t\t: parentDom.firstChild\n\t\t\t? slice.call(parentDom.childNodes)\n\t\t\t: null,\n\t\tcommitQueue,\n\t\t!isHydrating && replaceNode\n\t\t\t? replaceNode\n\t\t\t: oldVNode\n\t\t\t? oldVNode._dom\n\t\t\t: parentDom.firstChild,\n\t\tisHydrating\n\t);\n\n\t// Flush all queued effects\n\tcommitRoot(commitQueue, vnode);\n}\n\n/**\n * Update an existing DOM element with data from a Preact virtual node\n * @param {import('./internal').ComponentChild} vnode The virtual node to render\n * @param {import('./internal').PreactElement} parentDom The DOM element to\n * update\n */\nexport function hydrate(vnode, parentDom) {\n\trender(vnode, parentDom, hydrate);\n}\n", "import { assign, slice } from './util';\nimport { createVNode } from './create-element';\n\n/**\n * Clones the given VNode, optionally adding attributes/props and replacing its children.\n * @param {import('./internal').VNode} vnode The virtual DOM element to clone\n * @param {object} props Attributes/props to add when cloning\n * @param {Array<import('./internal').ComponentChildren>} rest Any additional arguments will be used as replacement children.\n * @returns {import('./internal').VNode}\n */\nexport function cloneElement(vnode, props, children) {\n\tlet normalizedProps = assign({}, vnode.props),\n\t\tkey,\n\t\tref,\n\t\ti;\n\tfor (i in props) {\n\t\tif (i == 'key') key = props[i];\n\t\telse if (i == 'ref') ref = props[i];\n\t\telse normalizedProps[i] = props[i];\n\t}\n\n\tif (arguments.length > 2) {\n\t\tnormalizedProps.children =\n\t\t\targuments.length > 3 ? slice.call(arguments, 2) : children;\n\t}\n\n\treturn createVNode(\n\t\tvnode.type,\n\t\tnormalizedProps,\n\t\tkey || vnode.key,\n\t\tref || vnode.ref,\n\t\tnull\n\t);\n}\n", "/**\n * Find the closest error boundary to a thrown error and call it\n * @param {object} error The thrown value\n * @param {import('../internal').VNode} vnode The vnode that threw\n * the error that was caught (except for unmounting when this parameter\n * is the highest parent that was being unmounted)\n * @param {import('../internal').VNode} [oldVNode]\n * @param {import('../internal').ErrorInfo} [errorInfo]\n */\nexport function _catchError(error, vnode, oldVNode, errorInfo) {\n\t/** @type {import('../internal').Component} */\n\tlet component, ctor, handled;\n\n\tfor (; (vnode = vnode._parent); ) {\n\t\tif ((component = vnode._component) && !component._processingException) {\n\t\t\ttry {\n\t\t\t\tctor = component.constructor;\n\n\t\t\t\tif (ctor && ctor.getDerivedStateFromError != null) {\n\t\t\t\t\tcomponent.setState(ctor.getDerivedStateFromError(error));\n\t\t\t\t\thandled = component._dirty;\n\t\t\t\t}\n\n\t\t\t\tif (component.componentDidCatch != null) {\n\t\t\t\t\tcomponent.componentDidCatch(error, errorInfo || {});\n\t\t\t\t\thandled = component._dirty;\n\t\t\t\t}\n\n\t\t\t\t// This is an error boundary. Mark it as having bailed out, and whether it was mid-hydration.\n\t\t\t\tif (handled) {\n\t\t\t\t\treturn (component._pendingError = component);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\terror = e;\n\t\t\t}\n\t\t}\n\t}\n\n\tthrow error;\n}\n", "import { options } from 'preact';\n\n/** @type {number} */\nlet currentIndex;\n\n/** @type {import('./internal').Component} */\nlet currentComponent;\n\n/** @type {import('./internal').Component} */\nlet previousComponent;\n\n/** @type {number} */\nlet currentHook = 0;\n\n/** @type {Array<import('./internal').Component>} */\nlet afterPaintEffects = [];\n\nlet EMPTY = [];\n\nlet oldBeforeDiff = options._diff;\nlet oldBeforeRender = options._render;\nlet oldAfterDiff = options.diffed;\nlet oldCommit = options._commit;\nlet oldBeforeUnmount = options.unmount;\n\nconst RAF_TIMEOUT = 100;\nlet prevRaf;\n\noptions._diff = vnode => {\n\tcurrentComponent = null;\n\tif (oldBeforeDiff) oldBeforeDiff(vnode);\n};\n\noptions._render = vnode => {\n\tif (oldBeforeRender) oldBeforeRender(vnode);\n\n\tcurrentComponent = vnode._component;\n\tcurrentIndex = 0;\n\n\tconst hooks = currentComponent.__hooks;\n\tif (hooks) {\n\t\tif (previousComponent === currentComponent) {\n\t\t\thooks._pendingEffects = [];\n\t\t\tcurrentComponent._renderCallbacks = [];\n\t\t\thooks._list.forEach(hookItem => {\n\t\t\t\tif (hookItem._nextValue) {\n\t\t\t\t\thookItem._value = hookItem._nextValue;\n\t\t\t\t}\n\t\t\t\thookItem._pendingValue = EMPTY;\n\t\t\t\thookItem._nextValue = hookItem._pendingArgs = undefined;\n\t\t\t});\n\t\t} else {\n\t\t\thooks._pendingEffects.forEach(invokeCleanup);\n\t\t\thooks._pendingEffects.forEach(invokeEffect);\n\t\t\thooks._pendingEffects = [];\n\t\t}\n\t}\n\tpreviousComponent = currentComponent;\n};\n\noptions.diffed = vnode => {\n\tif (oldAfterDiff) oldAfterDiff(vnode);\n\n\tconst c = vnode._component;\n\tif (c && c.__hooks) {\n\t\tif (c.__hooks._pendingEffects.length) afterPaint(afterPaintEffects.push(c));\n\t\tc.__hooks._list.forEach(hookItem => {\n\t\t\tif (hookItem._pendingArgs) {\n\t\t\t\thookItem._args = hookItem._pendingArgs;\n\t\t\t}\n\t\t\tif (hookItem._pendingValue !== EMPTY) {\n\t\t\t\thookItem._value = hookItem._pendingValue;\n\t\t\t}\n\t\t\thookItem._pendingArgs = undefined;\n\t\t\thookItem._pendingValue = EMPTY;\n\t\t});\n\t}\n\tpreviousComponent = currentComponent = null;\n};\n\noptions._commit = (vnode, commitQueue) => {\n\tcommitQueue.some(component => {\n\t\ttry {\n\t\t\tcomponent._renderCallbacks.forEach(invokeCleanup);\n\t\t\tcomponent._renderCallbacks = component._renderCallbacks.filter(cb =>\n\t\t\t\tcb._value ? invokeEffect(cb) : true\n\t\t\t);\n\t\t} catch (e) {\n\t\t\tcommitQueue.some(c => {\n\t\t\t\tif (c._renderCallbacks) c._renderCallbacks = [];\n\t\t\t});\n\t\t\tcommitQueue = [];\n\t\t\toptions._catchError(e, component._vnode);\n\t\t}\n\t});\n\n\tif (oldCommit) oldCommit(vnode, commitQueue);\n};\n\noptions.unmount = vnode => {\n\tif (oldBeforeUnmount) oldBeforeUnmount(vnode);\n\n\tconst c = vnode._component;\n\tif (c && c.__hooks) {\n\t\tlet hasErrored;\n\t\tc.__hooks._list.forEach(s => {\n\t\t\ttry {\n\t\t\t\tinvokeCleanup(s);\n\t\t\t} catch (e) {\n\t\t\t\thasErrored = e;\n\t\t\t}\n\t\t});\n\t\tc.__hooks = undefined;\n\t\tif (hasErrored) options._catchError(hasErrored, c._vnode);\n\t}\n};\n\n/**\n * Get a hook's state from the currentComponent\n * @param {number} index The index of the hook to get\n * @param {number} type The index of the hook to get\n * @returns {any}\n */\nfunction getHookState(index, type) {\n\tif (options._hook) {\n\t\toptions._hook(currentComponent, index, currentHook || type);\n\t}\n\tcurrentHook = 0;\n\n\t// Largely inspired by:\n\t// * https://github.com/michael-klein/funcy.js/blob/f6be73468e6ec46b0ff5aa3cc4c9baf72a29025a/src/hooks/core_hooks.mjs\n\t// * https://github.com/michael-klein/funcy.js/blob/650beaa58c43c33a74820a3c98b3c7079cf2e333/src/renderer.mjs\n\t// Other implementations to look at:\n\t// * https://codesandbox.io/s/mnox05qp8\n\tconst hooks =\n\t\tcurrentComponent.__hooks ||\n\t\t(currentComponent.__hooks = {\n\t\t\t_list: [],\n\t\t\t_pendingEffects: []\n\t\t});\n\n\tif (index >= hooks._list.length) {\n\t\thooks._list.push({ _pendingValue: EMPTY });\n\t}\n\treturn hooks._list[index];\n}\n\n/**\n * @param {import('./index').StateUpdater<any>} [initialState]\n */\nexport function useState(initialState) {\n\tcurrentHook = 1;\n\treturn useReducer(invokeOrReturn, initialState);\n}\n\n/**\n * @param {import('./index').Reducer<any, any>} reducer\n * @param {import('./index').StateUpdater<any>} initialState\n * @param {(initialState: any) => void} [init]\n * @returns {[ any, (state: any) => void ]}\n */\nexport function useReducer(reducer, initialState, init) {\n\t/** @type {import('./internal').ReducerHookState} */\n\tconst hookState = getHookState(currentIndex++, 2);\n\thookState._reducer = reducer;\n\tif (!hookState._component) {\n\t\thookState._value = [\n\t\t\t!init ? invokeOrReturn(undefined, initialState) : init(initialState),\n\n\t\t\taction => {\n\t\t\t\tconst currentValue = hookState._nextValue\n\t\t\t\t\t? hookState._nextValue[0]\n\t\t\t\t\t: hookState._value[0];\n\t\t\t\tconst nextValue = hookState._reducer(currentValue, action);\n\n\t\t\t\tif (currentValue !== nextValue) {\n\t\t\t\t\thookState._nextValue = [nextValue, hookState._value[1]];\n\t\t\t\t\thookState._component.setState({});\n\t\t\t\t}\n\t\t\t}\n\t\t];\n\n\t\thookState._component = currentComponent;\n\n\t\tif (!currentComponent._hasScuFromHooks) {\n\t\t\tcurrentComponent._hasScuFromHooks = true;\n\t\t\tconst prevScu = currentComponent.shouldComponentUpdate;\n\n\t\t\t// This SCU has the purpose of bailing out after repeated updates\n\t\t\t// to stateful hooks.\n\t\t\t// we store the next value in _nextValue[0] and keep doing that for all\n\t\t\t// state setters, if we have next states and\n\t\t\t// all next states within a component end up being equal to their original state\n\t\t\t// we are safe to bail out for this specific component.\n\t\t\tcurrentComponent.shouldComponentUpdate = function(p, s, c) {\n\t\t\t\tif (!hookState._component.__hooks) return true;\n\n\t\t\t\tconst stateHooks = hookState._component.__hooks._list.filter(\n\t\t\t\t\tx => x._component\n\t\t\t\t);\n\t\t\t\tconst allHooksEmpty = stateHooks.every(x => !x._nextValue);\n\t\t\t\t// When we have no updated hooks in the component we invoke the previous SCU or\n\t\t\t\t// traverse the VDOM tree further.\n\t\t\t\tif (allHooksEmpty) {\n\t\t\t\t\treturn prevScu ? prevScu.call(this, p, s, c) : true;\n\t\t\t\t}\n\n\t\t\t\t// We check whether we have components with a nextValue set that\n\t\t\t\t// have values that aren't equal to one another this pushes\n\t\t\t\t// us to update further down the tree\n\t\t\t\tlet shouldUpdate = false;\n\t\t\t\tstateHooks.forEach(hookItem => {\n\t\t\t\t\tif (hookItem._nextValue) {\n\t\t\t\t\t\tconst currentValue = hookItem._value[0];\n\t\t\t\t\t\thookItem._value = hookItem._nextValue;\n\t\t\t\t\t\thookItem._nextValue = undefined;\n\t\t\t\t\t\tif (currentValue !== hookItem._value[0]) shouldUpdate = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn shouldUpdate || hookState._component.props !== p\n\t\t\t\t\t? prevScu\n\t\t\t\t\t\t? prevScu.call(this, p, s, c)\n\t\t\t\t\t\t: true\n\t\t\t\t\t: false;\n\t\t\t};\n\t\t}\n\t}\n\n\treturn hookState._nextValue || hookState._value;\n}\n\n/**\n * @param {import('./internal').Effect} callback\n * @param {any[]} args\n */\nexport function useEffect(callback, args) {\n\t/** @type {import('./internal').EffectHookState} */\n\tconst state = getHookState(currentIndex++, 3);\n\tif (!options._skipEffects && argsChanged(state._args, args)) {\n\t\tstate._value = callback;\n\t\tstate._pendingArgs = args;\n\n\t\tcurrentComponent.__hooks._pendingEffects.push(state);\n\t}\n}\n\n/**\n * @param {import('./internal').Effect} callback\n * @param {any[]} args\n */\nexport function useLayoutEffect(callback, args) {\n\t/** @type {import('./internal').EffectHookState} */\n\tconst state = getHookState(currentIndex++, 4);\n\tif (!options._skipEffects && argsChanged(state._args, args)) {\n\t\tstate._value = callback;\n\t\tstate._pendingArgs = args;\n\n\t\tcurrentComponent._renderCallbacks.push(state);\n\t}\n}\n\nexport function useRef(initialValue) {\n\tcurrentHook = 5;\n\treturn useMemo(() => ({ current: initialValue }), []);\n}\n\n/**\n * @param {object} ref\n * @param {() => object} createHandle\n * @param {any[]} args\n */\nexport function useImperativeHandle(ref, createHandle, args) {\n\tcurrentHook = 6;\n\tuseLayoutEffect(\n\t\t() => {\n\t\t\tif (typeof ref == 'function') {\n\t\t\t\tref(createHandle());\n\t\t\t\treturn () => ref(null);\n\t\t\t} else if (ref) {\n\t\t\t\tref.current = createHandle();\n\t\t\t\treturn () => (ref.current = null);\n\t\t\t}\n\t\t},\n\t\targs == null ? args : args.concat(ref)\n\t);\n}\n\n/**\n * @param {() => any} factory\n * @param {any[]} args\n */\nexport function useMemo(factory, args) {\n\t/** @type {import('./internal').MemoHookState} */\n\tconst state = getHookState(currentIndex++, 7);\n\tif (argsChanged(state._args, args)) {\n\t\tstate._pendingValue = factory();\n\t\tstate._pendingArgs = args;\n\t\tstate._factory = factory;\n\t\treturn state._pendingValue;\n\t}\n\n\treturn state._value;\n}\n\n/**\n * @param {() => void} callback\n * @param {any[]} args\n */\nexport function useCallback(callback, args) {\n\tcurrentHook = 8;\n\treturn useMemo(() => callback, args);\n}\n\n/**\n * @param {import('./internal').PreactContext} context\n */\nexport function useContext(context) {\n\tconst provider = currentComponent.context[context._id];\n\t// We could skip this call here, but than we'd not call\n\t// `options._hook`. We need to do that in order to make\n\t// the devtools aware of this hook.\n\t/** @type {import('./internal').ContextHookState} */\n\tconst state = getHookState(currentIndex++, 9);\n\t// The devtools needs access to the context object to\n\t// be able to pull of the default value when no provider\n\t// is present in the tree.\n\tstate._context = context;\n\tif (!provider) return context._defaultValue;\n\t// This is probably not safe to convert to \"!\"\n\tif (state._value == null) {\n\t\tstate._value = true;\n\t\tprovider.sub(currentComponent);\n\t}\n\treturn provider.props.value;\n}\n\n/**\n * Display a custom label for a custom hook for the devtools panel\n * @type {<T>(value: T, cb?: (value: T) => string | number) => void}\n */\nexport function useDebugValue(value, formatter) {\n\tif (options.useDebugValue) {\n\t\toptions.useDebugValue(formatter ? formatter(value) : value);\n\t}\n}\n\n/**\n * @param {(error: any, errorInfo: import('preact').ErrorInfo) => void} cb\n */\nexport function useErrorBoundary(cb) {\n\t/** @type {import('./internal').ErrorBoundaryHookState} */\n\tconst state = getHookState(currentIndex++, 10);\n\tconst errState = useState();\n\tstate._value = cb;\n\tif (!currentComponent.componentDidCatch) {\n\t\tcurrentComponent.componentDidCatch = (err, errorInfo) => {\n\t\t\tif (state._value) state._value(err, errorInfo);\n\t\t\terrState[1](err);\n\t\t};\n\t}\n\treturn [\n\t\terrState[0],\n\t\t() => {\n\t\t\terrState[1](undefined);\n\t\t}\n\t];\n}\n\nexport function useId() {\n\tconst state = getHookState(currentIndex++, 11);\n\tif (!state._value) {\n\t\t// Grab either the root node or the nearest async boundary node.\n\t\t/** @type {import('./internal.d').VNode} */\n\t\tlet root = currentComponent._vnode;\n\t\twhile (root !== null && !root._mask && root._parent !== null) {\n\t\t\troot = root._parent;\n\t\t}\n\n\t\tlet mask = root._mask || (root._mask = [0, 0]);\n\t\tstate._value = 'P' + mask[0] + '-' + mask[1]++;\n\t}\n\n\treturn state._value;\n}\n/**\n * After paint effects consumer.\n */\nfunction flushAfterPaintEffects() {\n\tlet component;\n\twhile ((component = afterPaintEffects.shift())) {\n\t\tif (!component._parentDom || !component.__hooks) continue;\n\t\ttry {\n\t\t\tcomponent.__hooks._pendingEffects.forEach(invokeCleanup);\n\t\t\tcomponent.__hooks._pendingEffects.forEach(invokeEffect);\n\t\t\tcomponent.__hooks._pendingEffects = [];\n\t\t} catch (e) {\n\t\t\tcomponent.__hooks._pendingEffects = [];\n\t\t\toptions._catchError(e, component._vnode);\n\t\t}\n\t}\n}\n\nlet HAS_RAF = typeof requestAnimationFrame == 'function';\n\n/**\n * Schedule a callback to be invoked after the browser has a chance to paint a new frame.\n * Do this by combining requestAnimationFrame (rAF) + setTimeout to invoke a callback after\n * the next browser frame.\n *\n * Also, schedule a timeout in parallel to the the rAF to ensure the callback is invoked\n * even if RAF doesn't fire (for example if the browser tab is not visible)\n *\n * @param {() => void} callback\n */\nfunction afterNextFrame(callback) {\n\tconst done = () => {\n\t\tclearTimeout(timeout);\n\t\tif (HAS_RAF) cancelAnimationFrame(raf);\n\t\tsetTimeout(callback);\n\t};\n\tconst timeout = setTimeout(done, RAF_TIMEOUT);\n\n\tlet raf;\n\tif (HAS_RAF) {\n\t\traf = requestAnimationFrame(done);\n\t}\n}\n\n// Note: if someone used options.debounceRendering = requestAnimationFrame,\n// then effects will ALWAYS run on the NEXT frame instead of the current one, incurring a ~16ms delay.\n// Perhaps this is not such a big deal.\n/**\n * Schedule afterPaintEffects flush after the browser paints\n * @param {number} newQueueLength\n */\nfunction afterPaint(newQueueLength) {\n\tif (newQueueLength === 1 || prevRaf !== options.requestAnimationFrame) {\n\t\tprevRaf = options.requestAnimationFrame;\n\t\t(prevRaf || afterNextFrame)(flushAfterPaintEffects);\n\t}\n}\n\n/**\n * @param {import('./internal').EffectHookState} hook\n */\nfunction invokeCleanup(hook) {\n\t// A hook cleanup can introduce a call to render which creates a new root, this will call options.vnode\n\t// and move the currentComponent away.\n\tconst comp = currentComponent;\n\tlet cleanup = hook._cleanup;\n\tif (typeof cleanup == 'function') {\n\t\thook._cleanup = undefined;\n\t\tcleanup();\n\t}\n\n\tcurrentComponent = comp;\n}\n\n/**\n * Invoke a Hook's effect\n * @param {import('./internal').EffectHookState} hook\n */\nfunction invokeEffect(hook) {\n\t// A hook call can introduce a call to render which creates a new root, this will call options.vnode\n\t// and move the currentComponent away.\n\tconst comp = currentComponent;\n\thook._cleanup = hook._value();\n\tcurrentComponent = comp;\n}\n\n/**\n * @param {any[]} oldArgs\n * @param {any[]} newArgs\n */\nfunction argsChanged(oldArgs, newArgs) {\n\treturn (\n\t\t!oldArgs ||\n\t\toldArgs.length !== newArgs.length ||\n\t\tnewArgs.some((arg, index) => arg !== oldArgs[index])\n\t);\n}\n\nfunction invokeOrReturn(arg, f) {\n\treturn typeof f == 'function' ? f(arg) : f;\n}\n", "// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.\n// TypeScript port in 2019 by Florian Dold.\n// Public domain.\n//\n// Implementation derived from TweetNaCl version 20140427.\n// See for details: http://tweetnacl.cr.yp.to/\n\nconst gf = function (init: number[] = []): Float64Array {\n const r = new Float64Array(16);\n if (init) for (let i = 0; i < init.length; i++) r[i] = init[i];\n return r;\n};\n\n// Pluggable, initialized in high-level API below.\nlet randombytes = function (x: Uint8Array, n: number): void {\n throw new Error(\"no PRNG\");\n};\n\nconst _9 = new Uint8Array(32);\n_9[0] = 9;\n\n// prettier-ignore\nconst gf0 = gf();\nconst gf1 = gf([1]);\nconst _121665 = gf([0xdb41, 1]);\nconst D = gf([\n 0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898,\n 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203,\n]);\nconst D2 = gf([\n 0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130,\n 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406,\n]);\nconst X = gf([\n 0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c,\n 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169,\n]);\nconst Y = gf([\n 0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666,\n 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666,\n]);\nconst I = gf([\n 0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7,\n 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83,\n]);\n\nfunction ts64(x: Uint8Array, i: number, h: number, l: number): void {\n x[i] = (h >> 24) & 0xff;\n x[i + 1] = (h >> 16) & 0xff;\n x[i + 2] = (h >> 8) & 0xff;\n x[i + 3] = h & 0xff;\n x[i + 4] = (l >> 24) & 0xff;\n x[i + 5] = (l >> 16) & 0xff;\n x[i + 6] = (l >> 8) & 0xff;\n x[i + 7] = l & 0xff;\n}\n\nfunction vn(\n x: Uint8Array,\n xi: number,\n y: Uint8Array,\n yi: number,\n n: number,\n): number {\n let i,\n d = 0;\n for (i = 0; i < n; i++) d |= x[xi + i] ^ y[yi + i];\n return (1 & ((d - 1) >>> 8)) - 1;\n}\n\nfunction crypto_verify_16(\n x: Uint8Array,\n xi: number,\n y: Uint8Array,\n yi: number,\n) {\n return vn(x, xi, y, yi, 16);\n}\n\nfunction crypto_verify_32(\n x: Uint8Array,\n xi: number,\n y: Uint8Array,\n yi: number,\n): number {\n return vn(x, xi, y, yi, 32);\n}\n\nfunction core_salsa20(\n o: Uint8Array,\n p: Uint8Array,\n k: Uint8Array,\n c: Uint8Array,\n) {\n var j0 =\n (c[0] & 0xff) |\n ((c[1] & 0xff) << 8) |\n ((c[2] & 0xff) << 16) |\n ((c[3] & 0xff) << 24),\n j1 =\n (k[0] & 0xff) |\n ((k[1] & 0xff) << 8) |\n ((k[2] & 0xff) << 16) |\n ((k[3] & 0xff) << 24),\n j2 =\n (k[4] & 0xff) |\n ((k[5] & 0xff) << 8) |\n ((k[6] & 0xff) << 16) |\n ((k[7] & 0xff) << 24),\n j3 =\n (k[8] & 0xff) |\n ((k[9] & 0xff) << 8) |\n ((k[10] & 0xff) << 16) |\n ((k[11] & 0xff) << 24),\n j4 =\n (k[12] & 0xff) |\n ((k[13] & 0xff) << 8) |\n ((k[14] & 0xff) << 16) |\n ((k[15] & 0xff) << 24),\n j5 =\n (c[4] & 0xff) |\n ((c[5] & 0xff) << 8) |\n ((c[6] & 0xff) << 16) |\n ((c[7] & 0xff) << 24),\n j6 =\n (p[0] & 0xff) |\n ((p[1] & 0xff) << 8) |\n ((p[2] & 0xff) << 16) |\n ((p[3] & 0xff) << 24),\n j7 =\n (p[4] & 0xff) |\n ((p[5] & 0xff) << 8) |\n ((p[6] & 0xff) << 16) |\n ((p[7] & 0xff) << 24),\n j8 =\n (p[8] & 0xff) |\n ((p[9] & 0xff) << 8) |\n ((p[10] & 0xff) << 16) |\n ((p[11] & 0xff) << 24),\n j9 =\n (p[12] & 0xff) |\n ((p[13] & 0xff) << 8) |\n ((p[14] & 0xff) << 16) |\n ((p[15] & 0xff) << 24),\n j10 =\n (c[8] & 0xff) |\n ((c[9] & 0xff) << 8) |\n ((c[10] & 0xff) << 16) |\n ((c[11] & 0xff) << 24),\n j11 =\n (k[16] & 0xff) |\n ((k[17] & 0xff) << 8) |\n ((k[18] & 0xff) << 16) |\n ((k[19] & 0xff) << 24),\n j12 =\n (k[20] & 0xff) |\n ((k[21] & 0xff) << 8) |\n ((k[22] & 0xff) << 16) |\n ((k[23] & 0xff) << 24),\n j13 =\n (k[24] & 0xff) |\n ((k[25] & 0xff) << 8) |\n ((k[26] & 0xff) << 16) |\n ((k[27] & 0xff) << 24),\n j14 =\n (k[28] & 0xff) |\n ((k[29] & 0xff) << 8) |\n ((k[30] & 0xff) << 16) |\n ((k[31] & 0xff) << 24),\n j15 =\n (c[12] & 0xff) |\n ((c[13] & 0xff) << 8) |\n ((c[14] & 0xff) << 16) |\n ((c[15] & 0xff) << 24);\n\n var x0 = j0,\n x1 = j1,\n x2 = j2,\n x3 = j3,\n x4 = j4,\n x5 = j5,\n x6 = j6,\n x7 = j7,\n x8 = j8,\n x9 = j9,\n x10 = j10,\n x11 = j11,\n x12 = j12,\n x13 = j13,\n x14 = j14,\n x15 = j15,\n u;\n\n for (var i = 0; i < 20; i += 2) {\n u = (x0 + x12) | 0;\n x4 ^= (u << 7) | (u >>> (32 - 7));\n u = (x4 + x0) | 0;\n x8 ^= (u << 9) | (u >>> (32 - 9));\n u = (x8 + x4) | 0;\n x12 ^= (u << 13) | (u >>> (32 - 13));\n u = (x12 + x8) | 0;\n x0 ^= (u << 18) | (u >>> (32 - 18));\n\n u = (x5 + x1) | 0;\n x9 ^= (u << 7) | (u >>> (32 - 7));\n u = (x9 + x5) | 0;\n x13 ^= (u << 9) | (u >>> (32 - 9));\n u = (x13 + x9) | 0;\n x1 ^= (u << 13) | (u >>> (32 - 13));\n u = (x1 + x13) | 0;\n x5 ^= (u << 18) | (u >>> (32 - 18));\n\n u = (x10 + x6) | 0;\n x14 ^= (u << 7) | (u >>> (32 - 7));\n u = (x14 + x10) | 0;\n x2 ^= (u << 9) | (u >>> (32 - 9));\n u = (x2 + x14) | 0;\n x6 ^= (u << 13) | (u >>> (32 - 13));\n u = (x6 + x2) | 0;\n x10 ^= (u << 18) | (u >>> (32 - 18));\n\n u = (x15 + x11) | 0;\n x3 ^= (u << 7) | (u >>> (32 - 7));\n u = (x3 + x15) | 0;\n x7 ^= (u << 9) | (u >>> (32 - 9));\n u = (x7 + x3) | 0;\n x11 ^= (u << 13) | (u >>> (32 - 13));\n u = (x11 + x7) | 0;\n x15 ^= (u << 18) | (u >>> (32 - 18));\n\n u = (x0 + x3) | 0;\n x1 ^= (u << 7) | (u >>> (32 - 7));\n u = (x1 + x0) | 0;\n x2 ^= (u << 9) | (u >>> (32 - 9));\n u = (x2 + x1) | 0;\n x3 ^= (u << 13) | (u >>> (32 - 13));\n u = (x3 + x2) | 0;\n x0 ^= (u << 18) | (u >>> (32 - 18));\n\n u = (x5 + x4) | 0;\n x6 ^= (u << 7) | (u >>> (32 - 7));\n u = (x6 + x5) | 0;\n x7 ^= (u << 9) | (u >>> (32 - 9));\n u = (x7 + x6) | 0;\n x4 ^= (u << 13) | (u >>> (32 - 13));\n u = (x4 + x7) | 0;\n x5 ^= (u << 18) | (u >>> (32 - 18));\n\n u = (x10 + x9) | 0;\n x11 ^= (u << 7) | (u >>> (32 - 7));\n u = (x11 + x10) | 0;\n x8 ^= (u << 9) | (u >>> (32 - 9));\n u = (x8 + x11) | 0;\n x9 ^= (u << 13) | (u >>> (32 - 13));\n u = (x9 + x8) | 0;\n x10 ^= (u << 18) | (u >>> (32 - 18));\n\n u = (x15 + x14) | 0;\n x12 ^= (u << 7) | (u >>> (32 - 7));\n u = (x12 + x15) | 0;\n x13 ^= (u << 9) | (u >>> (32 - 9));\n u = (x13 + x12) | 0;\n x14 ^= (u << 13) | (u >>> (32 - 13));\n u = (x14 + x13) | 0;\n x15 ^= (u << 18) | (u >>> (32 - 18));\n }\n x0 = (x0 + j0) | 0;\n x1 = (x1 + j1) | 0;\n x2 = (x2 + j2) | 0;\n x3 = (x3 + j3) | 0;\n x4 = (x4 + j4) | 0;\n x5 = (x5 + j5) | 0;\n x6 = (x6 + j6) | 0;\n x7 = (x7 + j7) | 0;\n x8 = (x8 + j8) | 0;\n x9 = (x9 + j9) | 0;\n x10 = (x10 + j10) | 0;\n x11 = (x11 + j11) | 0;\n x12 = (x12 + j12) | 0;\n x13 = (x13 + j13) | 0;\n x14 = (x14 + j14) | 0;\n x15 = (x15 + j15) | 0;\n\n o[0] = (x0 >>> 0) & 0xff;\n o[1] = (x0 >>> 8) & 0xff;\n o[2] = (x0 >>> 16) & 0xff;\n o[3] = (x0 >>> 24) & 0xff;\n\n o[4] = (x1 >>> 0) & 0xff;\n o[5] = (x1 >>> 8) & 0xff;\n o[6] = (x1 >>> 16) & 0xff;\n o[7] = (x1 >>> 24) & 0xff;\n\n o[8] = (x2 >>> 0) & 0xff;\n o[9] = (x2 >>> 8) & 0xff;\n o[10] = (x2 >>> 16) & 0xff;\n o[11] = (x2 >>> 24) & 0xff;\n\n o[12] = (x3 >>> 0) & 0xff;\n o[13] = (x3 >>> 8) & 0xff;\n o[14] = (x3 >>> 16) & 0xff;\n o[15] = (x3 >>> 24) & 0xff;\n\n o[16] = (x4 >>> 0) & 0xff;\n o[17] = (x4 >>> 8) & 0xff;\n o[18] = (x4 >>> 16) & 0xff;\n o[19] = (x4 >>> 24) & 0xff;\n\n o[20] = (x5 >>> 0) & 0xff;\n o[21] = (x5 >>> 8) & 0xff;\n o[22] = (x5 >>> 16) & 0xff;\n o[23] = (x5 >>> 24) & 0xff;\n\n o[24] = (x6 >>> 0) & 0xff;\n o[25] = (x6 >>> 8) & 0xff;\n o[26] = (x6 >>> 16) & 0xff;\n o[27] = (x6 >>> 24) & 0xff;\n\n o[28] = (x7 >>> 0) & 0xff;\n o[29] = (x7 >>> 8) & 0xff;\n o[30] = (x7 >>> 16) & 0xff;\n o[31] = (x7 >>> 24) & 0xff;\n\n o[32] = (x8 >>> 0) & 0xff;\n o[33] = (x8 >>> 8) & 0xff;\n o[34] = (x8 >>> 16) & 0xff;\n o[35] = (x8 >>> 24) & 0xff;\n\n o[36] = (x9 >>> 0) & 0xff;\n o[37] = (x9 >>> 8) & 0xff;\n o[38] = (x9 >>> 16) & 0xff;\n o[39] = (x9 >>> 24) & 0xff;\n\n o[40] = (x10 >>> 0) & 0xff;\n o[41] = (x10 >>> 8) & 0xff;\n o[42] = (x10 >>> 16) & 0xff;\n o[43] = (x10 >>> 24) & 0xff;\n\n o[44] = (x11 >>> 0) & 0xff;\n o[45] = (x11 >>> 8) & 0xff;\n o[46] = (x11 >>> 16) & 0xff;\n o[47] = (x11 >>> 24) & 0xff;\n\n o[48] = (x12 >>> 0) & 0xff;\n o[49] = (x12 >>> 8) & 0xff;\n o[50] = (x12 >>> 16) & 0xff;\n o[51] = (x12 >>> 24) & 0xff;\n\n o[52] = (x13 >>> 0) & 0xff;\n o[53] = (x13 >>> 8) & 0xff;\n o[54] = (x13 >>> 16) & 0xff;\n o[55] = (x13 >>> 24) & 0xff;\n\n o[56] = (x14 >>> 0) & 0xff;\n o[57] = (x14 >>> 8) & 0xff;\n o[58] = (x14 >>> 16) & 0xff;\n o[59] = (x14 >>> 24) & 0xff;\n\n o[60] = (x15 >>> 0) & 0xff;\n o[61] = (x15 >>> 8) & 0xff;\n o[62] = (x15 >>> 16) & 0xff;\n o[63] = (x15 >>> 24) & 0xff;\n}\n\nfunction core_hsalsa20(\n o: Uint8Array,\n p: Uint8Array,\n k: Uint8Array,\n c: Uint8Array,\n) {\n var j0 =\n (c[0] & 0xff) |\n ((c[1] & 0xff) << 8) |\n ((c[2] & 0xff) << 16) |\n ((c[3] & 0xff) << 24),\n j1 =\n (k[0] & 0xff) |\n ((k[1] & 0xff) << 8) |\n ((k[2] & 0xff) << 16) |\n ((k[3] & 0xff) << 24),\n j2 =\n (k[4] & 0xff) |\n ((k[5] & 0xff) << 8) |\n ((k[6] & 0xff) << 16) |\n ((k[7] & 0xff) << 24),\n j3 =\n (k[8] & 0xff) |\n ((k[9] & 0xff) << 8) |\n ((k[10] & 0xff) << 16) |\n ((k[11] & 0xff) << 24),\n j4 =\n (k[12] & 0xff) |\n ((k[13] & 0xff) << 8) |\n ((k[14] & 0xff) << 16) |\n ((k[15] & 0xff) << 24),\n j5 =\n (c[4] & 0xff) |\n ((c[5] & 0xff) << 8) |\n ((c[6] & 0xff) << 16) |\n ((c[7] & 0xff) << 24),\n j6 =\n (p[0] & 0xff) |\n ((p[1] & 0xff) << 8) |\n ((p[2] & 0xff) << 16) |\n ((p[3] & 0xff) << 24),\n j7 =\n (p[4] & 0xff) |\n ((p[5] & 0xff) << 8) |\n ((p[6] & 0xff) << 16) |\n ((p[7] & 0xff) << 24),\n j8 =\n (p[8] & 0xff) |\n ((p[9] & 0xff) << 8) |\n ((p[10] & 0xff) << 16) |\n ((p[11] & 0xff) << 24),\n j9 =\n (p[12] & 0xff) |\n ((p[13] & 0xff) << 8) |\n ((p[14] & 0xff) << 16) |\n ((p[15] & 0xff) << 24),\n j10 =\n (c[8] & 0xff) |\n ((c[9] & 0xff) << 8) |\n ((c[10] & 0xff) << 16) |\n ((c[11] & 0xff) << 24),\n j11 =\n (k[16] & 0xff) |\n ((k[17] & 0xff) << 8) |\n ((k[18] & 0xff) << 16) |\n ((k[19] & 0xff) << 24),\n j12 =\n (k[20] & 0xff) |\n ((k[21] & 0xff) << 8) |\n ((k[22] & 0xff) << 16) |\n ((k[23] & 0xff) << 24),\n j13 =\n (k[24] & 0xff) |\n ((k[25] & 0xff) << 8) |\n ((k[26] & 0xff) << 16) |\n ((k[27] & 0xff) << 24),\n j14 =\n (k[28] & 0xff) |\n ((k[29] & 0xff) << 8) |\n ((k[30] & 0xff) << 16) |\n ((k[31] & 0xff) << 24),\n j15 =\n (c[12] & 0xff) |\n ((c[13] & 0xff) << 8) |\n ((c[14] & 0xff) << 16) |\n ((c[15] & 0xff) << 24);\n\n var x0 = j0,\n x1 = j1,\n x2 = j2,\n x3 = j3,\n x4 = j4,\n x5 = j5,\n x6 = j6,\n x7 = j7,\n x8 = j8,\n x9 = j9,\n x10 = j10,\n x11 = j11,\n x12 = j12,\n x13 = j13,\n x14 = j14,\n x15 = j15,\n u;\n\n for (var i = 0; i < 20; i += 2) {\n u = (x0 + x12) | 0;\n x4 ^= (u << 7) | (u >>> (32 - 7));\n u = (x4 + x0) | 0;\n x8 ^= (u << 9) | (u >>> (32 - 9));\n u = (x8 + x4) | 0;\n x12 ^= (u << 13) | (u >>> (32 - 13));\n u = (x12 + x8) | 0;\n x0 ^= (u << 18) | (u >>> (32 - 18));\n\n u = (x5 + x1) | 0;\n x9 ^= (u << 7) | (u >>> (32 - 7));\n u = (x9 + x5) | 0;\n x13 ^= (u << 9) | (u >>> (32 - 9));\n u = (x13 + x9) | 0;\n x1 ^= (u << 13) | (u >>> (32 - 13));\n u = (x1 + x13) | 0;\n x5 ^= (u << 18) | (u >>> (32 - 18));\n\n u = (x10 + x6) | 0;\n x14 ^= (u << 7) | (u >>> (32 - 7));\n u = (x14 + x10) | 0;\n x2 ^= (u << 9) | (u >>> (32 - 9));\n u = (x2 + x14) | 0;\n x6 ^= (u << 13) | (u >>> (32 - 13));\n u = (x6 + x2) | 0;\n x10 ^= (u << 18) | (u >>> (32 - 18));\n\n u = (x15 + x11) | 0;\n x3 ^= (u << 7) | (u >>> (32 - 7));\n u = (x3 + x15) | 0;\n x7 ^= (u << 9) | (u >>> (32 - 9));\n u = (x7 + x3) | 0;\n x11 ^= (u << 13) | (u >>> (32 - 13));\n u = (x11 + x7) | 0;\n x15 ^= (u << 18) | (u >>> (32 - 18));\n\n u = (x0 + x3) | 0;\n x1 ^= (u << 7) | (u >>> (32 - 7));\n u = (x1 + x0) | 0;\n x2 ^= (u << 9) | (u >>> (32 - 9));\n u = (x2 + x1) | 0;\n x3 ^= (u << 13) | (u >>> (32 - 13));\n u = (x3 + x2) | 0;\n x0 ^= (u << 18) | (u >>> (32 - 18));\n\n u = (x5 + x4) | 0;\n x6 ^= (u << 7) | (u >>> (32 - 7));\n u = (x6 + x5) | 0;\n x7 ^= (u << 9) | (u >>> (32 - 9));\n u = (x7 + x6) | 0;\n x4 ^= (u << 13) | (u >>> (32 - 13));\n u = (x4 + x7) | 0;\n x5 ^= (u << 18) | (u >>> (32 - 18));\n\n u = (x10 + x9) | 0;\n x11 ^= (u << 7) | (u >>> (32 - 7));\n u = (x11 + x10) | 0;\n x8 ^= (u << 9) | (u >>> (32 - 9));\n u = (x8 + x11) | 0;\n x9 ^= (u << 13) | (u >>> (32 - 13));\n u = (x9 + x8) | 0;\n x10 ^= (u << 18) | (u >>> (32 - 18));\n\n u = (x15 + x14) | 0;\n x12 ^= (u << 7) | (u >>> (32 - 7));\n u = (x12 + x15) | 0;\n x13 ^= (u << 9) | (u >>> (32 - 9));\n u = (x13 + x12) | 0;\n x14 ^= (u << 13) | (u >>> (32 - 13));\n u = (x14 + x13) | 0;\n x15 ^= (u << 18) | (u >>> (32 - 18));\n }\n\n o[0] = (x0 >>> 0) & 0xff;\n o[1] = (x0 >>> 8) & 0xff;\n o[2] = (x0 >>> 16) & 0xff;\n o[3] = (x0 >>> 24) & 0xff;\n\n o[4] = (x5 >>> 0) & 0xff;\n o[5] = (x5 >>> 8) & 0xff;\n o[6] = (x5 >>> 16) & 0xff;\n o[7] = (x5 >>> 24) & 0xff;\n\n o[8] = (x10 >>> 0) & 0xff;\n o[9] = (x10 >>> 8) & 0xff;\n o[10] = (x10 >>> 16) & 0xff;\n o[11] = (x10 >>> 24) & 0xff;\n\n o[12] = (x15 >>> 0) & 0xff;\n o[13] = (x15 >>> 8) & 0xff;\n o[14] = (x15 >>> 16) & 0xff;\n o[15] = (x15 >>> 24) & 0xff;\n\n o[16] = (x6 >>> 0) & 0xff;\n o[17] = (x6 >>> 8) & 0xff;\n o[18] = (x6 >>> 16) & 0xff;\n o[19] = (x6 >>> 24) & 0xff;\n\n o[20] = (x7 >>> 0) & 0xff;\n o[21] = (x7 >>> 8) & 0xff;\n o[22] = (x7 >>> 16) & 0xff;\n o[23] = (x7 >>> 24) & 0xff;\n\n o[24] = (x8 >>> 0) & 0xff;\n o[25] = (x8 >>> 8) & 0xff;\n o[26] = (x8 >>> 16) & 0xff;\n o[27] = (x8 >>> 24) & 0xff;\n\n o[28] = (x9 >>> 0) & 0xff;\n o[29] = (x9 >>> 8) & 0xff;\n o[30] = (x9 >>> 16) & 0xff;\n o[31] = (x9 >>> 24) & 0xff;\n}\n\nvar sigma = new Uint8Array([\n 101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107,\n]);\n// \"expand 32-byte k\"\n\nfunction crypto_stream_salsa20_xor(\n c: Uint8Array,\n cpos: number,\n m: Uint8Array,\n mpos: number,\n b: number,\n n: Uint8Array,\n k: Uint8Array,\n) {\n var z = new Uint8Array(16),\n x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n core_salsa20(x, z, k, sigma);\n for (i = 0; i < 64; i++) c[cpos + i] = m[mpos + i] ^ x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = (u + (z[i] & 0xff)) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n mpos += 64;\n }\n if (b > 0) {\n core_salsa20(x, z, k, sigma);\n for (i = 0; i < b; i++) c[cpos + i] = m[mpos + i] ^ x[i];\n }\n return 0;\n}\n\nfunction crypto_stream_salsa20(\n c: Uint8Array,\n cpos: number,\n b: number,\n n: Uint8Array,\n k: Uint8Array,\n) {\n var z = new Uint8Array(16),\n x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n core_salsa20(x, z, k, sigma);\n for (i = 0; i < 64; i++) c[cpos + i] = x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = (u + (z[i] & 0xff)) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n }\n if (b > 0) {\n core_salsa20(x, z, k, sigma);\n for (i = 0; i < b; i++) c[cpos + i] = x[i];\n }\n return 0;\n}\n\nfunction crypto_stream(\n c: Uint8Array,\n cpos: number,\n d: number,\n n: Uint8Array,\n k: Uint8Array,\n) {\n var s = new Uint8Array(32);\n core_hsalsa20(s, n, k, sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i + 16];\n return crypto_stream_salsa20(c, cpos, d, sn, s);\n}\n\nfunction crypto_stream_xor(\n c: Uint8Array,\n cpos: number,\n m: Uint8Array,\n mpos: number,\n d: number,\n n: Uint8Array,\n k: Uint8Array,\n) {\n var s = new Uint8Array(32);\n core_hsalsa20(s, n, k, sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i + 16];\n return crypto_stream_salsa20_xor(c, cpos, m, mpos, d, sn, s);\n}\n\n/*\n * Port of Andrew Moon's Poly1305-donna-16. Public domain.\n * https://github.com/floodyberry/poly1305-donna\n */\n\nclass poly1305 {\n buffer = new Uint8Array(16);\n r = new Uint16Array(10);\n h = new Uint16Array(10);\n pad = new Uint16Array(8);\n leftover = 0;\n fin = 0;\n\n constructor(key: Uint8Array) {\n var t0, t1, t2, t3, t4, t5, t6, t7;\n\n t0 = (key[0] & 0xff) | ((key[1] & 0xff) << 8);\n this.r[0] = t0 & 0x1fff;\n t1 = (key[2] & 0xff) | ((key[3] & 0xff) << 8);\n this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = (key[4] & 0xff) | ((key[5] & 0xff) << 8);\n this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;\n t3 = (key[6] & 0xff) | ((key[7] & 0xff) << 8);\n this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = (key[8] & 0xff) | ((key[9] & 0xff) << 8);\n this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;\n this.r[5] = (t4 >>> 1) & 0x1ffe;\n t5 = (key[10] & 0xff) | ((key[11] & 0xff) << 8);\n this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = (key[12] & 0xff) | ((key[13] & 0xff) << 8);\n this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;\n t7 = (key[14] & 0xff) | ((key[15] & 0xff) << 8);\n this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n this.r[9] = (t7 >>> 5) & 0x007f;\n\n this.pad[0] = (key[16] & 0xff) | ((key[17] & 0xff) << 8);\n this.pad[1] = (key[18] & 0xff) | ((key[19] & 0xff) << 8);\n this.pad[2] = (key[20] & 0xff) | ((key[21] & 0xff) << 8);\n this.pad[3] = (key[22] & 0xff) | ((key[23] & 0xff) << 8);\n this.pad[4] = (key[24] & 0xff) | ((key[25] & 0xff) << 8);\n this.pad[5] = (key[26] & 0xff) | ((key[27] & 0xff) << 8);\n this.pad[6] = (key[28] & 0xff) | ((key[29] & 0xff) << 8);\n this.pad[7] = (key[30] & 0xff) | ((key[31] & 0xff) << 8);\n }\n\n blocks(m: Uint8Array, mpos: number, bytes: number) {\n var hibit = this.fin ? 0 : 1 << 11;\n var t0, t1, t2, t3, t4, t5, t6, t7, c;\n var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;\n\n var h0 = this.h[0],\n h1 = this.h[1],\n h2 = this.h[2],\n h3 = this.h[3],\n h4 = this.h[4],\n h5 = this.h[5],\n h6 = this.h[6],\n h7 = this.h[7],\n h8 = this.h[8],\n h9 = this.h[9];\n\n var r0 = this.r[0],\n r1 = this.r[1],\n r2 = this.r[2],\n r3 = this.r[3],\n r4 = this.r[4],\n r5 = this.r[5],\n r6 = this.r[6],\n r7 = this.r[7],\n r8 = this.r[8],\n r9 = this.r[9];\n\n while (bytes >= 16) {\n t0 = (m[mpos + 0] & 0xff) | ((m[mpos + 1] & 0xff) << 8);\n h0 += t0 & 0x1fff;\n t1 = (m[mpos + 2] & 0xff) | ((m[mpos + 3] & 0xff) << 8);\n h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = (m[mpos + 4] & 0xff) | ((m[mpos + 5] & 0xff) << 8);\n h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff;\n t3 = (m[mpos + 6] & 0xff) | ((m[mpos + 7] & 0xff) << 8);\n h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = (m[mpos + 8] & 0xff) | ((m[mpos + 9] & 0xff) << 8);\n h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff;\n h5 += (t4 >>> 1) & 0x1fff;\n t5 = (m[mpos + 10] & 0xff) | ((m[mpos + 11] & 0xff) << 8);\n h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = (m[mpos + 12] & 0xff) | ((m[mpos + 13] & 0xff) << 8);\n h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff;\n t7 = (m[mpos + 14] & 0xff) | ((m[mpos + 15] & 0xff) << 8);\n h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n h9 += (t7 >>> 5) | hibit;\n\n c = 0;\n\n d0 = c;\n d0 += h0 * r0;\n d0 += h1 * (5 * r9);\n d0 += h2 * (5 * r8);\n d0 += h3 * (5 * r7);\n d0 += h4 * (5 * r6);\n c = d0 >>> 13;\n d0 &= 0x1fff;\n d0 += h5 * (5 * r5);\n d0 += h6 * (5 * r4);\n d0 += h7 * (5 * r3);\n d0 += h8 * (5 * r2);\n d0 += h9 * (5 * r1);\n c += d0 >>> 13;\n d0 &= 0x1fff;\n\n d1 = c;\n d1 += h0 * r1;\n d1 += h1 * r0;\n d1 += h2 * (5 * r9);\n d1 += h3 * (5 * r8);\n d1 += h4 * (5 * r7);\n c = d1 >>> 13;\n d1 &= 0x1fff;\n d1 += h5 * (5 * r6);\n d1 += h6 * (5 * r5);\n d1 += h7 * (5 * r4);\n d1 += h8 * (5 * r3);\n d1 += h9 * (5 * r2);\n c += d1 >>> 13;\n d1 &= 0x1fff;\n\n d2 = c;\n d2 += h0 * r2;\n d2 += h1 * r1;\n d2 += h2 * r0;\n d2 += h3 * (5 * r9);\n d2 += h4 * (5 * r8);\n c = d2 >>> 13;\n d2 &= 0x1fff;\n d2 += h5 * (5 * r7);\n d2 += h6 * (5 * r6);\n d2 += h7 * (5 * r5);\n d2 += h8 * (5 * r4);\n d2 += h9 * (5 * r3);\n c += d2 >>> 13;\n d2 &= 0x1fff;\n\n d3 = c;\n d3 += h0 * r3;\n d3 += h1 * r2;\n d3 += h2 * r1;\n d3 += h3 * r0;\n d3 += h4 * (5 * r9);\n c = d3 >>> 13;\n d3 &= 0x1fff;\n d3 += h5 * (5 * r8);\n d3 += h6 * (5 * r7);\n d3 += h7 * (5 * r6);\n d3 += h8 * (5 * r5);\n d3 += h9 * (5 * r4);\n c += d3 >>> 13;\n d3 &= 0x1fff;\n\n d4 = c;\n d4 += h0 * r4;\n d4 += h1 * r3;\n d4 += h2 * r2;\n d4 += h3 * r1;\n d4 += h4 * r0;\n c = d4 >>> 13;\n d4 &= 0x1fff;\n d4 += h5 * (5 * r9);\n d4 += h6 * (5 * r8);\n d4 += h7 * (5 * r7);\n d4 += h8 * (5 * r6);\n d4 += h9 * (5 * r5);\n c += d4 >>> 13;\n d4 &= 0x1fff;\n\n d5 = c;\n d5 += h0 * r5;\n d5 += h1 * r4;\n d5 += h2 * r3;\n d5 += h3 * r2;\n d5 += h4 * r1;\n c = d5 >>> 13;\n d5 &= 0x1fff;\n d5 += h5 * r0;\n d5 += h6 * (5 * r9);\n d5 += h7 * (5 * r8);\n d5 += h8 * (5 * r7);\n d5 += h9 * (5 * r6);\n c += d5 >>> 13;\n d5 &= 0x1fff;\n\n d6 = c;\n d6 += h0 * r6;\n d6 += h1 * r5;\n d6 += h2 * r4;\n d6 += h3 * r3;\n d6 += h4 * r2;\n c = d6 >>> 13;\n d6 &= 0x1fff;\n d6 += h5 * r1;\n d6 += h6 * r0;\n d6 += h7 * (5 * r9);\n d6 += h8 * (5 * r8);\n d6 += h9 * (5 * r7);\n c += d6 >>> 13;\n d6 &= 0x1fff;\n\n d7 = c;\n d7 += h0 * r7;\n d7 += h1 * r6;\n d7 += h2 * r5;\n d7 += h3 * r4;\n d7 += h4 * r3;\n c = d7 >>> 13;\n d7 &= 0x1fff;\n d7 += h5 * r2;\n d7 += h6 * r1;\n d7 += h7 * r0;\n d7 += h8 * (5 * r9);\n d7 += h9 * (5 * r8);\n c += d7 >>> 13;\n d7 &= 0x1fff;\n\n d8 = c;\n d8 += h0 * r8;\n d8 += h1 * r7;\n d8 += h2 * r6;\n d8 += h3 * r5;\n d8 += h4 * r4;\n c = d8 >>> 13;\n d8 &= 0x1fff;\n d8 += h5 * r3;\n d8 += h6 * r2;\n d8 += h7 * r1;\n d8 += h8 * r0;\n d8 += h9 * (5 * r9);\n c += d8 >>> 13;\n d8 &= 0x1fff;\n\n d9 = c;\n d9 += h0 * r9;\n d9 += h1 * r8;\n d9 += h2 * r7;\n d9 += h3 * r6;\n d9 += h4 * r5;\n c = d9 >>> 13;\n d9 &= 0x1fff;\n d9 += h5 * r4;\n d9 += h6 * r3;\n d9 += h7 * r2;\n d9 += h8 * r1;\n d9 += h9 * r0;\n c += d9 >>> 13;\n d9 &= 0x1fff;\n\n c = ((c << 2) + c) | 0;\n c = (c + d0) | 0;\n d0 = c & 0x1fff;\n c = c >>> 13;\n d1 += c;\n\n h0 = d0;\n h1 = d1;\n h2 = d2;\n h3 = d3;\n h4 = d4;\n h5 = d5;\n h6 = d6;\n h7 = d7;\n h8 = d8;\n h9 = d9;\n\n mpos += 16;\n bytes -= 16;\n }\n this.h[0] = h0;\n this.h[1] = h1;\n this.h[2] = h2;\n this.h[3] = h3;\n this.h[4] = h4;\n this.h[5] = h5;\n this.h[6] = h6;\n this.h[7] = h7;\n this.h[8] = h8;\n this.h[9] = h9;\n }\n\n finish(mac: Uint8Array, macpos: number) {\n var g = new Uint16Array(10);\n var c, mask, f, i;\n\n if (this.leftover) {\n i = this.leftover;\n this.buffer[i++] = 1;\n for (; i < 16; i++) this.buffer[i] = 0;\n this.fin = 1;\n this.blocks(this.buffer, 0, 16);\n }\n\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n for (i = 2; i < 10; i++) {\n this.h[i] += c;\n c = this.h[i] >>> 13;\n this.h[i] &= 0x1fff;\n }\n this.h[0] += c * 5;\n c = this.h[0] >>> 13;\n this.h[0] &= 0x1fff;\n this.h[1] += c;\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n this.h[2] += c;\n\n g[0] = this.h[0] + 5;\n c = g[0] >>> 13;\n g[0] &= 0x1fff;\n for (i = 1; i < 10; i++) {\n g[i] = this.h[i] + c;\n c = g[i] >>> 13;\n g[i] &= 0x1fff;\n }\n g[9] -= 1 << 13;\n\n mask = (c ^ 1) - 1;\n for (i = 0; i < 10; i++) g[i] &= mask;\n mask = ~mask;\n for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];\n\n this.h[0] = (this.h[0] | (this.h[1] << 13)) & 0xffff;\n this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10)) & 0xffff;\n this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7)) & 0xffff;\n this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4)) & 0xffff;\n this.h[4] =\n ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff;\n this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11)) & 0xffff;\n this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8)) & 0xffff;\n this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5)) & 0xffff;\n\n f = this.h[0] + this.pad[0];\n this.h[0] = f & 0xffff;\n for (i = 1; i < 8; i++) {\n f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;\n this.h[i] = f & 0xffff;\n }\n\n mac[macpos + 0] = (this.h[0] >>> 0) & 0xff;\n mac[macpos + 1] = (this.h[0] >>> 8) & 0xff;\n mac[macpos + 2] = (this.h[1] >>> 0) & 0xff;\n mac[macpos + 3] = (this.h[1] >>> 8) & 0xff;\n mac[macpos + 4] = (this.h[2] >>> 0) & 0xff;\n mac[macpos + 5] = (this.h[2] >>> 8) & 0xff;\n mac[macpos + 6] = (this.h[3] >>> 0) & 0xff;\n mac[macpos + 7] = (this.h[3] >>> 8) & 0xff;\n mac[macpos + 8] = (this.h[4] >>> 0) & 0xff;\n mac[macpos + 9] = (this.h[4] >>> 8) & 0xff;\n mac[macpos + 10] = (this.h[5] >>> 0) & 0xff;\n mac[macpos + 11] = (this.h[5] >>> 8) & 0xff;\n mac[macpos + 12] = (this.h[6] >>> 0) & 0xff;\n mac[macpos + 13] = (this.h[6] >>> 8) & 0xff;\n mac[macpos + 14] = (this.h[7] >>> 0) & 0xff;\n mac[macpos + 15] = (this.h[7] >>> 8) & 0xff;\n }\n\n update(m: Uint8Array, mpos: number, bytes: number) {\n let i: number;\n let want: number;\n if (this.leftover) {\n want = 16 - this.leftover;\n if (want > bytes) want = bytes;\n for (i = 0; i < want; i++) this.buffer[this.leftover + i] = m[mpos + i];\n bytes -= want;\n mpos += want;\n this.leftover += want;\n if (this.leftover < 16) return;\n this.blocks(this.buffer, 0, 16);\n this.leftover = 0;\n }\n\n if (bytes >= 16) {\n want = bytes - (bytes % 16);\n this.blocks(m, mpos, want);\n mpos += want;\n bytes -= want;\n }\n\n if (bytes) {\n for (i = 0; i < bytes; i++) this.buffer[this.leftover + i] = m[mpos + i];\n this.leftover += bytes;\n }\n }\n}\n\nfunction crypto_onetimeauth(\n out: Uint8Array,\n outpos: number,\n m: any,\n mpos: number,\n n: number,\n k: Uint8Array,\n) {\n var s = new poly1305(k);\n s.update(m, mpos, n);\n s.finish(out, outpos);\n return 0;\n}\n\nfunction crypto_onetimeauth_verify(\n h: Uint8Array,\n hpos: number,\n m: any,\n mpos: number,\n n: number,\n k: Uint8Array,\n) {\n var x = new Uint8Array(16);\n crypto_onetimeauth(x, 0, m, mpos, n, k);\n return crypto_verify_16(h, hpos, x, 0);\n}\n\nfunction crypto_secretbox(\n c: Uint8Array,\n m: Uint8Array,\n d: number,\n n: Uint8Array,\n k: Uint8Array,\n): number {\n var i;\n if (d < 32) return -1;\n crypto_stream_xor(c, 0, m, 0, d, n, k);\n crypto_onetimeauth(c, 16, c, 32, d - 32, c);\n for (i = 0; i < 16; i++) c[i] = 0;\n return 0;\n}\n\nfunction crypto_secretbox_open(\n m: Uint8Array,\n c: Uint8Array,\n d: number,\n n: Uint8Array,\n k: Uint8Array,\n): number {\n var i;\n var x = new Uint8Array(32);\n if (d < 32) return -1;\n crypto_stream(x, 0, 32, n, k);\n if (crypto_onetimeauth_verify(c, 16, c, 32, d - 32, x) !== 0) return -1;\n crypto_stream_xor(m, 0, c, 0, d, n, k);\n for (i = 0; i < 32; i++) m[i] = 0;\n return 0;\n}\n\nfunction set25519(r: Float64Array, a: Float64Array): void {\n let i;\n for (i = 0; i < 16; i++) r[i] = a[i] | 0;\n}\n\nfunction car25519(o: Float64Array): void {\n let i,\n v,\n c = 1;\n for (i = 0; i < 16; i++) {\n v = o[i] + c + 65535;\n c = Math.floor(v / 65536);\n o[i] = v - c * 65536;\n }\n o[0] += c - 1 + 37 * (c - 1);\n}\n\nfunction sel25519(p: Float64Array, q: Float64Array, b: number): void {\n let t;\n const c = ~(b - 1);\n for (let i = 0; i < 16; i++) {\n t = c & (p[i] ^ q[i]);\n p[i] ^= t;\n q[i] ^= t;\n }\n}\n\nfunction pack25519(o: Uint8Array, n: Float64Array): void {\n let i, j, b;\n const m = gf(),\n t = gf();\n for (i = 0; i < 16; i++) t[i] = n[i];\n car25519(t);\n car25519(t);\n car25519(t);\n for (j = 0; j < 2; j++) {\n m[0] = t[0] - 0xffed;\n for (i = 1; i < 15; i++) {\n m[i] = t[i] - 0xffff - ((m[i - 1] >> 16) & 1);\n m[i - 1] &= 0xffff;\n }\n m[15] = t[15] - 0x7fff - ((m[14] >> 16) & 1);\n b = (m[15] >> 16) & 1;\n m[14] &= 0xffff;\n sel25519(t, m, 1 - b);\n }\n for (i = 0; i < 16; i++) {\n o[2 * i] = t[i] & 0xff;\n o[2 * i + 1] = t[i] >> 8;\n }\n}\n\nfunction neq25519(a: Float64Array, b: Float64Array): number {\n const c = new Uint8Array(32),\n d = new Uint8Array(32);\n pack25519(c, a);\n pack25519(d, b);\n return crypto_verify_32(c, 0, d, 0);\n}\n\nfunction par25519(a: Float64Array): number {\n const d = new Uint8Array(32);\n pack25519(d, a);\n return d[0] & 1;\n}\n\nfunction unpack25519(o: Float64Array, n: Uint8Array): void {\n let i;\n for (i = 0; i < 16; i++) o[i] = n[2 * i] + (n[2 * i + 1] << 8);\n o[15] &= 0x7fff;\n}\n\nfunction A(o: Float64Array, a: Float64Array, b: Float64Array): void {\n for (let i = 0; i < 16; i++) o[i] = a[i] + b[i];\n}\n\nfunction Z(o: Float64Array, a: Float64Array, b: Float64Array): void {\n for (let i = 0; i < 16; i++) o[i] = a[i] - b[i];\n}\n\nfunction M(o: Float64Array, a: Float64Array, b: Float64Array): void {\n let v,\n c,\n t0 = 0,\n t1 = 0,\n t2 = 0,\n t3 = 0,\n t4 = 0,\n t5 = 0,\n t6 = 0,\n t7 = 0,\n t8 = 0,\n t9 = 0,\n t10 = 0,\n t11 = 0,\n t12 = 0,\n t13 = 0,\n t14 = 0,\n t15 = 0,\n t16 = 0,\n t17 = 0,\n t18 = 0,\n t19 = 0,\n t20 = 0,\n t21 = 0,\n t22 = 0,\n t23 = 0,\n t24 = 0,\n t25 = 0,\n t26 = 0,\n t27 = 0,\n t28 = 0,\n t29 = 0,\n t30 = 0;\n const b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11],\n b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n\n v = a[0];\n t0 += v * b0;\n t1 += v * b1;\n t2 += v * b2;\n t3 += v * b3;\n t4 += v * b4;\n t5 += v * b5;\n t6 += v * b6;\n t7 += v * b7;\n t8 += v * b8;\n t9 += v * b9;\n t10 += v * b10;\n t11 += v * b11;\n t12 += v * b12;\n t13 += v * b13;\n t14 += v * b14;\n t15 += v * b15;\n v = a[1];\n t1 += v * b0;\n t2 += v * b1;\n t3 += v * b2;\n t4 += v * b3;\n t5 += v * b4;\n t6 += v * b5;\n t7 += v * b6;\n t8 += v * b7;\n t9 += v * b8;\n t10 += v * b9;\n t11 += v * b10;\n t12 += v * b11;\n t13 += v * b12;\n t14 += v * b13;\n t15 += v * b14;\n t16 += v * b15;\n v = a[2];\n t2 += v * b0;\n t3 += v * b1;\n t4 += v * b2;\n t5 += v * b3;\n t6 += v * b4;\n t7 += v * b5;\n t8 += v * b6;\n t9 += v * b7;\n t10 += v * b8;\n t11 += v * b9;\n t12 += v * b10;\n t13 += v * b11;\n t14 += v * b12;\n t15 += v * b13;\n t16 += v * b14;\n t17 += v * b15;\n v = a[3];\n t3 += v * b0;\n t4 += v * b1;\n t5 += v * b2;\n t6 += v * b3;\n t7 += v * b4;\n t8 += v * b5;\n t9 += v * b6;\n t10 += v * b7;\n t11 += v * b8;\n t12 += v * b9;\n t13 += v * b10;\n t14 += v * b11;\n t15 += v * b12;\n t16 += v * b13;\n t17 += v * b14;\n t18 += v * b15;\n v = a[4];\n t4 += v * b0;\n t5 += v * b1;\n t6 += v * b2;\n t7 += v * b3;\n t8 += v * b4;\n t9 += v * b5;\n t10 += v * b6;\n t11 += v * b7;\n t12 += v * b8;\n t13 += v * b9;\n t14 += v * b10;\n t15 += v * b11;\n t16 += v * b12;\n t17 += v * b13;\n t18 += v * b14;\n t19 += v * b15;\n v = a[5];\n t5 += v * b0;\n t6 += v * b1;\n t7 += v * b2;\n t8 += v * b3;\n t9 += v * b4;\n t10 += v * b5;\n t11 += v * b6;\n t12 += v * b7;\n t13 += v * b8;\n t14 += v * b9;\n t15 += v * b10;\n t16 += v * b11;\n t17 += v * b12;\n t18 += v * b13;\n t19 += v * b14;\n t20 += v * b15;\n v = a[6];\n t6 += v * b0;\n t7 += v * b1;\n t8 += v * b2;\n t9 += v * b3;\n t10 += v * b4;\n t11 += v * b5;\n t12 += v * b6;\n t13 += v * b7;\n t14 += v * b8;\n t15 += v * b9;\n t16 += v * b10;\n t17 += v * b11;\n t18 += v * b12;\n t19 += v * b13;\n t20 += v * b14;\n t21 += v * b15;\n v = a[7];\n t7 += v * b0;\n t8 += v * b1;\n t9 += v * b2;\n t10 += v * b3;\n t11 += v * b4;\n t12 += v * b5;\n t13 += v * b6;\n t14 += v * b7;\n t15 += v * b8;\n t16 += v * b9;\n t17 += v * b10;\n t18 += v * b11;\n t19 += v * b12;\n t20 += v * b13;\n t21 += v * b14;\n t22 += v * b15;\n v = a[8];\n t8 += v * b0;\n t9 += v * b1;\n t10 += v * b2;\n t11 += v * b3;\n t12 += v * b4;\n t13 += v * b5;\n t14 += v * b6;\n t15 += v * b7;\n t16 += v * b8;\n t17 += v * b9;\n t18 += v * b10;\n t19 += v * b11;\n t20 += v * b12;\n t21 += v * b13;\n t22 += v * b14;\n t23 += v * b15;\n v = a[9];\n t9 += v * b0;\n t10 += v * b1;\n t11 += v * b2;\n t12 += v * b3;\n t13 += v * b4;\n t14 += v * b5;\n t15 += v * b6;\n t16 += v * b7;\n t17 += v * b8;\n t18 += v * b9;\n t19 += v * b10;\n t20 += v * b11;\n t21 += v * b12;\n t22 += v * b13;\n t23 += v * b14;\n t24 += v * b15;\n v = a[10];\n t10 += v * b0;\n t11 += v * b1;\n t12 += v * b2;\n t13 += v * b3;\n t14 += v * b4;\n t15 += v * b5;\n t16 += v * b6;\n t17 += v * b7;\n t18 += v * b8;\n t19 += v * b9;\n t20 += v * b10;\n t21 += v * b11;\n t22 += v * b12;\n t23 += v * b13;\n t24 += v * b14;\n t25 += v * b15;\n v = a[11];\n t11 += v * b0;\n t12 += v * b1;\n t13 += v * b2;\n t14 += v * b3;\n t15 += v * b4;\n t16 += v * b5;\n t17 += v * b6;\n t18 += v * b7;\n t19 += v * b8;\n t20 += v * b9;\n t21 += v * b10;\n t22 += v * b11;\n t23 += v * b12;\n t24 += v * b13;\n t25 += v * b14;\n t26 += v * b15;\n v = a[12];\n t12 += v * b0;\n t13 += v * b1;\n t14 += v * b2;\n t15 += v * b3;\n t16 += v * b4;\n t17 += v * b5;\n t18 += v * b6;\n t19 += v * b7;\n t20 += v * b8;\n t21 += v * b9;\n t22 += v * b10;\n t23 += v * b11;\n t24 += v * b12;\n t25 += v * b13;\n t26 += v * b14;\n t27 += v * b15;\n v = a[13];\n t13 += v * b0;\n t14 += v * b1;\n t15 += v * b2;\n t16 += v * b3;\n t17 += v * b4;\n t18 += v * b5;\n t19 += v * b6;\n t20 += v * b7;\n t21 += v * b8;\n t22 += v * b9;\n t23 += v * b10;\n t24 += v * b11;\n t25 += v * b12;\n t26 += v * b13;\n t27 += v * b14;\n t28 += v * b15;\n v = a[14];\n t14 += v * b0;\n t15 += v * b1;\n t16 += v * b2;\n t17 += v * b3;\n t18 += v * b4;\n t19 += v * b5;\n t20 += v * b6;\n t21 += v * b7;\n t22 += v * b8;\n t23 += v * b9;\n t24 += v * b10;\n t25 += v * b11;\n t26 += v * b12;\n t27 += v * b13;\n t28 += v * b14;\n t29 += v * b15;\n v = a[15];\n t15 += v * b0;\n t16 += v * b1;\n t17 += v * b2;\n t18 += v * b3;\n t19 += v * b4;\n t20 += v * b5;\n t21 += v * b6;\n t22 += v * b7;\n t23 += v * b8;\n t24 += v * b9;\n t25 += v * b10;\n t26 += v * b11;\n t27 += v * b12;\n t28 += v * b13;\n t29 += v * b14;\n t30 += v * b15;\n\n t0 += 38 * t16;\n t1 += 38 * t17;\n t2 += 38 * t18;\n t3 += 38 * t19;\n t4 += 38 * t20;\n t5 += 38 * t21;\n t6 += 38 * t22;\n t7 += 38 * t23;\n t8 += 38 * t24;\n t9 += 38 * t25;\n t10 += 38 * t26;\n t11 += 38 * t27;\n t12 += 38 * t28;\n t13 += 38 * t29;\n t14 += 38 * t30;\n // t15 left as is\n\n // first car\n c = 1;\n v = t0 + c + 65535;\n c = Math.floor(v / 65536);\n t0 = v - c * 65536;\n v = t1 + c + 65535;\n c = Math.floor(v / 65536);\n t1 = v - c * 65536;\n v = t2 + c + 65535;\n c = Math.floor(v / 65536);\n t2 = v - c * 65536;\n v = t3 + c + 65535;\n c = Math.floor(v / 65536);\n t3 = v - c * 65536;\n v = t4 + c + 65535;\n c = Math.floor(v / 65536);\n t4 = v - c * 65536;\n v = t5 + c + 65535;\n c = Math.floor(v / 65536);\n t5 = v - c * 65536;\n v = t6 + c + 65535;\n c = Math.floor(v / 65536);\n t6 = v - c * 65536;\n v = t7 + c + 65535;\n c = Math.floor(v / 65536);\n t7 = v - c * 65536;\n v = t8 + c + 65535;\n c = Math.floor(v / 65536);\n t8 = v - c * 65536;\n v = t9 + c + 65535;\n c = Math.floor(v / 65536);\n t9 = v - c * 65536;\n v = t10 + c + 65535;\n c = Math.floor(v / 65536);\n t10 = v - c * 65536;\n v = t11 + c + 65535;\n c = Math.floor(v / 65536);\n t11 = v - c * 65536;\n v = t12 + c + 65535;\n c = Math.floor(v / 65536);\n t12 = v - c * 65536;\n v = t13 + c + 65535;\n c = Math.floor(v / 65536);\n t13 = v - c * 65536;\n v = t14 + c + 65535;\n c = Math.floor(v / 65536);\n t14 = v - c * 65536;\n v = t15 + c + 65535;\n c = Math.floor(v / 65536);\n t15 = v - c * 65536;\n t0 += c - 1 + 37 * (c - 1);\n\n // second car\n c = 1;\n v = t0 + c + 65535;\n c = Math.floor(v / 65536);\n t0 = v - c * 65536;\n v = t1 + c + 65535;\n c = Math.floor(v / 65536);\n t1 = v - c * 65536;\n v = t2 + c + 65535;\n c = Math.floor(v / 65536);\n t2 = v - c * 65536;\n v = t3 + c + 65535;\n c = Math.floor(v / 65536);\n t3 = v - c * 65536;\n v = t4 + c + 65535;\n c = Math.floor(v / 65536);\n t4 = v - c * 65536;\n v = t5 + c + 65535;\n c = Math.floor(v / 65536);\n t5 = v - c * 65536;\n v = t6 + c + 65535;\n c = Math.floor(v / 65536);\n t6 = v - c * 65536;\n v = t7 + c + 65535;\n c = Math.floor(v / 65536);\n t7 = v - c * 65536;\n v = t8 + c + 65535;\n c = Math.floor(v / 65536);\n t8 = v - c * 65536;\n v = t9 + c + 65535;\n c = Math.floor(v / 65536);\n t9 = v - c * 65536;\n v = t10 + c + 65535;\n c = Math.floor(v / 65536);\n t10 = v - c * 65536;\n v = t11 + c + 65535;\n c = Math.floor(v / 65536);\n t11 = v - c * 65536;\n v = t12 + c + 65535;\n c = Math.floor(v / 65536);\n t12 = v - c * 65536;\n v = t13 + c + 65535;\n c = Math.floor(v / 65536);\n t13 = v - c * 65536;\n v = t14 + c + 65535;\n c = Math.floor(v / 65536);\n t14 = v - c * 65536;\n v = t15 + c + 65535;\n c = Math.floor(v / 65536);\n t15 = v - c * 65536;\n t0 += c - 1 + 37 * (c - 1);\n\n o[0] = t0;\n o[1] = t1;\n o[2] = t2;\n o[3] = t3;\n o[4] = t4;\n o[5] = t5;\n o[6] = t6;\n o[7] = t7;\n o[8] = t8;\n o[9] = t9;\n o[10] = t10;\n o[11] = t11;\n o[12] = t12;\n o[13] = t13;\n o[14] = t14;\n o[15] = t15;\n}\n\nfunction S(o: Float64Array, a: Float64Array): void {\n M(o, a, a);\n}\n\nfunction inv25519(o: Float64Array, i: Float64Array): void {\n const c = gf();\n let a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 253; a >= 0; a--) {\n S(c, c);\n if (a !== 2 && a !== 4) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction pow2523(o: Float64Array, i: Float64Array): void {\n const c = gf();\n let a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 250; a >= 0; a--) {\n S(c, c);\n if (a !== 1) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction crypto_scalarmult(\n q: Uint8Array,\n n: Uint8Array,\n p: Uint8Array,\n): number {\n const z = new Uint8Array(32);\n const x = new Float64Array(80);\n let r;\n let i;\n const a = gf(),\n b = gf(),\n c = gf(),\n d = gf(),\n e = gf(),\n f = gf();\n for (i = 0; i < 31; i++) z[i] = n[i];\n z[31] = (n[31] & 127) | 64;\n z[0] &= 248;\n unpack25519(x, p);\n for (i = 0; i < 16; i++) {\n b[i] = x[i];\n d[i] = a[i] = c[i] = 0;\n }\n a[0] = d[0] = 1;\n for (i = 254; i >= 0; --i) {\n r = (z[i >>> 3] >>> (i & 7)) & 1;\n sel25519(a, b, r);\n sel25519(c, d, r);\n A(e, a, c);\n Z(a, a, c);\n A(c, b, d);\n Z(b, b, d);\n S(d, e);\n S(f, a);\n M(a, c, a);\n M(c, b, e);\n A(e, a, c);\n Z(a, a, c);\n S(b, a);\n Z(c, d, f);\n M(a, c, _121665);\n A(a, a, d);\n M(c, c, a);\n M(a, d, f);\n M(d, b, x);\n S(b, e);\n sel25519(a, b, r);\n sel25519(c, d, r);\n }\n for (i = 0; i < 16; i++) {\n x[i + 16] = a[i];\n x[i + 32] = c[i];\n x[i + 48] = b[i];\n x[i + 64] = d[i];\n }\n const x32 = x.subarray(32);\n const x16 = x.subarray(16);\n inv25519(x32, x32);\n M(x16, x16, x32);\n pack25519(q, x16);\n return 0;\n}\n\nfunction crypto_scalarmult_base(q: Uint8Array, n: Uint8Array): number {\n return crypto_scalarmult(q, n, _9);\n}\n\nexport function crypto_scalarmult_noclamp(\n q: Uint8Array,\n n: Uint8Array,\n p: Uint8Array,\n): number {\n const z = new Uint8Array(32);\n const x = new Float64Array(80);\n let r;\n let i;\n const a = gf(),\n b = gf(),\n c = gf(),\n d = gf(),\n e = gf(),\n f = gf();\n for (i = 0; i < 31; i++) z[i] = n[i];\n unpack25519(x, p);\n for (i = 0; i < 16; i++) {\n b[i] = x[i];\n d[i] = a[i] = c[i] = 0;\n }\n a[0] = d[0] = 1;\n for (i = 254; i >= 0; --i) {\n r = (z[i >>> 3] >>> (i & 7)) & 1;\n sel25519(a, b, r);\n sel25519(c, d, r);\n A(e, a, c);\n Z(a, a, c);\n A(c, b, d);\n Z(b, b, d);\n S(d, e);\n S(f, a);\n M(a, c, a);\n M(c, b, e);\n A(e, a, c);\n Z(a, a, c);\n S(b, a);\n Z(c, d, f);\n M(a, c, _121665);\n A(a, a, d);\n M(c, c, a);\n M(a, d, f);\n M(d, b, x);\n S(b, e);\n sel25519(a, b, r);\n sel25519(c, d, r);\n }\n for (i = 0; i < 16; i++) {\n x[i + 16] = a[i];\n x[i + 32] = c[i];\n x[i + 48] = b[i];\n x[i + 64] = d[i];\n }\n const x32 = x.subarray(32);\n const x16 = x.subarray(16);\n inv25519(x32, x32);\n M(x16, x16, x32);\n pack25519(q, x16);\n return 0;\n}\n\nexport function crypto_scalarmult_base_noclamp(\n q: Uint8Array,\n n: Uint8Array,\n): number {\n return crypto_scalarmult_noclamp(q, n, _9);\n}\n\n// prettier-ignore\nconst K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction crypto_hashblocks_hl(\n hh: Int32Array,\n hl: Int32Array,\n m: Uint8Array,\n n: number,\n): number {\n const wh = new Int32Array(16),\n wl = new Int32Array(16);\n let bh0,\n bh1,\n bh2,\n bh3,\n bh4,\n bh5,\n bh6,\n bh7,\n bl0,\n bl1,\n bl2,\n bl3,\n bl4,\n bl5,\n bl6,\n bl7,\n th,\n tl,\n i,\n j,\n h,\n l,\n a,\n b,\n c,\n d;\n\n let ah0 = hh[0],\n ah1 = hh[1],\n ah2 = hh[2],\n ah3 = hh[3],\n ah4 = hh[4],\n ah5 = hh[5],\n ah6 = hh[6],\n ah7 = hh[7],\n al0 = hl[0],\n al1 = hl[1],\n al2 = hl[2],\n al3 = hl[3],\n al4 = hl[4],\n al5 = hl[5],\n al6 = hl[6],\n al7 = hl[7];\n\n let pos = 0;\n while (n >= 128) {\n for (i = 0; i < 16; i++) {\n j = 8 * i + pos;\n wh[i] = (m[j + 0] << 24) | (m[j + 1] << 16) | (m[j + 2] << 8) | m[j + 3];\n wl[i] = (m[j + 4] << 24) | (m[j + 5] << 16) | (m[j + 6] << 8) | m[j + 7];\n }\n for (i = 0; i < 80; i++) {\n bh0 = ah0;\n bh1 = ah1;\n bh2 = ah2;\n bh3 = ah3;\n bh4 = ah4;\n bh5 = ah5;\n bh6 = ah6;\n bh7 = ah7;\n\n bl0 = al0;\n bl1 = al1;\n bl2 = al2;\n bl3 = al3;\n bl4 = al4;\n bl5 = al5;\n bl6 = al6;\n bl7 = al7;\n\n // add\n h = ah7;\n l = al7;\n\n a = l & 0xffff;\n b = l >>> 16;\n c = h & 0xffff;\n d = h >>> 16;\n\n // Sigma1\n h =\n ((ah4 >>> 14) | (al4 << (32 - 14))) ^\n ((ah4 >>> 18) | (al4 << (32 - 18))) ^\n ((al4 >>> (41 - 32)) | (ah4 << (32 - (41 - 32))));\n l =\n ((al4 >>> 14) | (ah4 << (32 - 14))) ^\n ((al4 >>> 18) | (ah4 << (32 - 18))) ^\n ((ah4 >>> (41 - 32)) | (al4 << (32 - (41 - 32))));\n\n a += l & 0xffff;\n b += l >>> 16;\n c += h & 0xffff;\n d += h >>> 16;\n\n // Ch\n h = (ah4 & ah5) ^ (~ah4 & ah6);\n l = (al4 & al5) ^ (~al4 & al6);\n\n a += l & 0xffff;\n b += l >>> 16;\n c += h & 0xffff;\n d += h >>> 16;\n\n // K\n h = K[i * 2];\n l = K[i * 2 + 1];\n\n a += l & 0xffff;\n b += l >>> 16;\n c += h & 0xffff;\n d += h >>> 16;\n\n // w\n h = wh[i % 16];\n l = wl[i % 16];\n\n a += l & 0xffff;\n b += l >>> 16;\n c += h & 0xffff;\n d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n th = (c & 0xffff) | (d << 16);\n tl = (a & 0xffff) | (b << 16);\n\n // add\n h = th;\n l = tl;\n\n a = l & 0xffff;\n b = l >>> 16;\n c = h & 0xffff;\n d = h >>> 16;\n\n // Sigma0\n h =\n ((ah0 >>> 28) | (al0 << (32 - 28))) ^\n ((al0 >>> (34 - 32)) | (ah0 << (32 - (34 - 32)))) ^\n ((al0 >>> (39 - 32)) | (ah0 << (32 - (39 - 32))));\n l =\n ((al0 >>> 28) | (ah0 << (32 - 28))) ^\n ((ah0 >>> (34 - 32)) | (al0 << (32 - (34 - 32)))) ^\n ((ah0 >>> (39 - 32)) | (al0 << (32 - (39 - 32))));\n\n a += l & 0xffff;\n b += l >>> 16;\n c += h & 0xffff;\n d += h >>> 16;\n\n // Maj\n h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);\n l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);\n\n a += l & 0xffff;\n b += l >>> 16;\n c += h & 0xffff;\n d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh7 = (c & 0xffff) | (d << 16);\n bl7 = (a & 0xffff) | (b << 16);\n\n // add\n h = bh3;\n l = bl3;\n\n a = l & 0xffff;\n b = l >>> 16;\n c = h & 0xffff;\n d = h >>> 16;\n\n h = th;\n l = tl;\n\n a += l & 0xffff;\n b += l >>> 16;\n c += h & 0xffff;\n d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh3 = (c & 0xffff) | (d << 16);\n bl3 = (a & 0xffff) | (b << 16);\n\n ah1 = bh0;\n ah2 = bh1;\n ah3 = bh2;\n ah4 = bh3;\n ah5 = bh4;\n ah6 = bh5;\n ah7 = bh6;\n ah0 = bh7;\n\n al1 = bl0;\n al2 = bl1;\n al3 = bl2;\n al4 = bl3;\n al5 = bl4;\n al6 = bl5;\n al7 = bl6;\n al0 = bl7;\n\n if (i % 16 === 15) {\n for (j = 0; j < 16; j++) {\n // add\n h = wh[j];\n l = wl[j];\n\n a = l & 0xffff;\n b = l >>> 16;\n c = h & 0xffff;\n d = h >>> 16;\n\n h = wh[(j + 9) % 16];\n l = wl[(j + 9) % 16];\n\n a += l & 0xffff;\n b += l >>> 16;\n c += h & 0xffff;\n d += h >>> 16;\n\n // sigma0\n th = wh[(j + 1) % 16];\n tl = wl[(j + 1) % 16];\n h =\n ((th >>> 1) | (tl << (32 - 1))) ^\n ((th >>> 8) | (tl << (32 - 8))) ^\n (th >>> 7);\n l =\n ((tl >>> 1) | (th << (32 - 1))) ^\n ((tl >>> 8) | (th << (32 - 8))) ^\n ((tl >>> 7) | (th << (32 - 7)));\n\n a += l & 0xffff;\n b += l >>> 16;\n c += h & 0xffff;\n d += h >>> 16;\n\n // sigma1\n th = wh[(j + 14) % 16];\n tl = wl[(j + 14) % 16];\n h =\n ((th >>> 19) | (tl << (32 - 19))) ^\n ((tl >>> (61 - 32)) | (th << (32 - (61 - 32)))) ^\n (th >>> 6);\n l =\n ((tl >>> 19) | (th << (32 - 19))) ^\n ((th >>> (61 - 32)) | (tl << (32 - (61 - 32)))) ^\n ((tl >>> 6) | (th << (32 - 6)));\n\n a += l & 0xffff;\n b += l >>> 16;\n c += h & 0xffff;\n d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n wh[j] = (c & 0xffff) | (d << 16);\n wl[j] = (a & 0xffff) | (b << 16);\n }\n }\n }\n\n // add\n h = ah0;\n l = al0;\n\n a = l & 0xffff;\n b = l >>> 16;\n c = h & 0xffff;\n d = h >>> 16;\n\n h = hh[0];\n l = hl[0];\n\n a += l & 0xffff;\n b += l >>> 16;\n c += h & 0xffff;\n d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[0] = ah0 = (c & 0xffff) | (d << 16);\n hl[0] = al0 = (a & 0xffff) | (b << 16);\n\n h = ah1;\n l = al1;\n\n a = l & 0xffff;\n b = l >>> 16;\n c = h & 0xffff;\n d = h >>> 16;\n\n h = hh[1];\n l = hl[1];\n\n a += l & 0xffff;\n b += l >>> 16;\n c += h & 0xffff;\n d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[1] = ah1 = (c & 0xffff) | (d << 16);\n hl[1] = al1 = (a & 0xffff) | (b << 16);\n\n h = ah2;\n l = al2;\n\n a = l & 0xffff;\n b = l >>> 16;\n c = h & 0xffff;\n d = h >>> 16;\n\n h = hh[2];\n l = hl[2];\n\n a += l & 0xffff;\n b += l >>> 16;\n c += h & 0xffff;\n d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[2] = ah2 = (c & 0xffff) | (d << 16);\n hl[2] = al2 = (a & 0xffff) | (b << 16);\n\n h = ah3;\n l = al3;\n\n a = l & 0xffff;\n b = l >>> 16;\n c = h & 0xffff;\n d = h >>> 16;\n\n h = hh[3];\n l = hl[3];\n\n a += l & 0xffff;\n b += l >>> 16;\n c += h & 0xffff;\n d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[3] = ah3 = (c & 0xffff) | (d << 16);\n hl[3] = al3 = (a & 0xffff) | (b << 16);\n\n h = ah4;\n l = al4;\n\n a = l & 0xffff;\n b = l >>> 16;\n c = h & 0xffff;\n d = h >>> 16;\n\n h = hh[4];\n l = hl[4];\n\n a += l & 0xffff;\n b += l >>> 16;\n c += h & 0xffff;\n d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[4] = ah4 = (c & 0xffff) | (d << 16);\n hl[4] = al4 = (a & 0xffff) | (b << 16);\n\n h = ah5;\n l = al5;\n\n a = l & 0xffff;\n b = l >>> 16;\n c = h & 0xffff;\n d = h >>> 16;\n\n h = hh[5];\n l = hl[5];\n\n a += l & 0xffff;\n b += l >>> 16;\n c += h & 0xffff;\n d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[5] = ah5 = (c & 0xffff) | (d << 16);\n hl[5] = al5 = (a & 0xffff) | (b << 16);\n\n h = ah6;\n l = al6;\n\n a = l & 0xffff;\n b = l >>> 16;\n c = h & 0xffff;\n d = h >>> 16;\n\n h = hh[6];\n l = hl[6];\n\n a += l & 0xffff;\n b += l >>> 16;\n c += h & 0xffff;\n d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[6] = ah6 = (c & 0xffff) | (d << 16);\n hl[6] = al6 = (a & 0xffff) | (b << 16);\n\n h = ah7;\n l = al7;\n\n a = l & 0xffff;\n b = l >>> 16;\n c = h & 0xffff;\n d = h >>> 16;\n\n h = hh[7];\n l = hl[7];\n\n a += l & 0xffff;\n b += l >>> 16;\n c += h & 0xffff;\n d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[7] = ah7 = (c & 0xffff) | (d << 16);\n hl[7] = al7 = (a & 0xffff) | (b << 16);\n\n pos += 128;\n n -= 128;\n }\n\n return n;\n}\n\nfunction crypto_hash(out: Uint8Array, m: Uint8Array, n: number): number {\n const hh = new Int32Array(8);\n const hl = new Int32Array(8);\n const x = new Uint8Array(256);\n const b = n;\n\n hh[0] = 0x6a09e667;\n hh[1] = 0xbb67ae85;\n hh[2] = 0x3c6ef372;\n hh[3] = 0xa54ff53a;\n hh[4] = 0x510e527f;\n hh[5] = 0x9b05688c;\n hh[6] = 0x1f83d9ab;\n hh[7] = 0x5be0cd19;\n\n hl[0] = 0xf3bcc908;\n hl[1] = 0x84caa73b;\n hl[2] = 0xfe94f82b;\n hl[3] = 0x5f1d36f1;\n hl[4] = 0xade682d1;\n hl[5] = 0x2b3e6c1f;\n hl[6] = 0xfb41bd6b;\n hl[7] = 0x137e2179;\n\n crypto_hashblocks_hl(hh, hl, m, n);\n n %= 128;\n\n for (let i = 0; i < n; i++) x[i] = m[b - n + i];\n x[n] = 128;\n\n n = 256 - 128 * (n < 112 ? 1 : 0);\n x[n - 9] = 0;\n ts64(x, n - 8, (b / 0x20000000) | 0, b << 3);\n crypto_hashblocks_hl(hh, hl, x, n);\n\n for (let i = 0; i < 8; i++) ts64(out, 8 * i, hh[i], hl[i]);\n\n return 0;\n}\n\n/**\n * Incremental version of crypto_hash.\n */\nexport class HashState {\n private hh = new Int32Array(8);\n private hl = new Int32Array(8);\n\n private next = new Uint8Array(128);\n private p = 0;\n private total = 0;\n\n constructor() {\n this.hh[0] = 0x6a09e667;\n this.hh[1] = 0xbb67ae85;\n this.hh[2] = 0x3c6ef372;\n this.hh[3] = 0xa54ff53a;\n this.hh[4] = 0x510e527f;\n this.hh[5] = 0x9b05688c;\n this.hh[6] = 0x1f83d9ab;\n this.hh[7] = 0x5be0cd19;\n\n this.hl[0] = 0xf3bcc908;\n this.hl[1] = 0x84caa73b;\n this.hl[2] = 0xfe94f82b;\n this.hl[3] = 0x5f1d36f1;\n this.hl[4] = 0xade682d1;\n this.hl[5] = 0x2b3e6c1f;\n this.hl[6] = 0xfb41bd6b;\n this.hl[7] = 0x137e2179;\n }\n\n update(data: Uint8Array): HashState {\n this.total += data.length;\n let i = 0;\n while (i < data.length) {\n const r = 128 - this.p;\n if (r > data.length - i) {\n for (let j = 0; i + j < data.length; j++) {\n this.next[this.p + j] = data[i + j];\n }\n this.p += data.length - i;\n break;\n } else {\n for (let j = 0; this.p + j < 128; j++) {\n this.next[this.p + j] = data[i + j];\n }\n crypto_hashblocks_hl(this.hh, this.hl, this.next, 128);\n i += 128 - this.p;\n this.p = 0;\n }\n }\n return this;\n }\n\n finish(): Uint8Array {\n const out = new Uint8Array(64);\n let n = this.p;\n const x = new Uint8Array(256);\n const b = this.total;\n for (let i = 0; i < n; i++) x[i] = this.next[i];\n x[n] = 128;\n\n n = 256 - 128 * (n < 112 ? 1 : 0);\n x[n - 9] = 0;\n ts64(x, n - 8, (b / 0x20000000) | 0, b << 3);\n crypto_hashblocks_hl(this.hh, this.hl, x, n);\n\n for (let i = 0; i < 8; i++) ts64(out, 8 * i, this.hh[i], this.hl[i]);\n return out;\n }\n}\n\nfunction add(p: Float64Array[], q: Float64Array[]): void {\n const a = gf(),\n b = gf(),\n c = gf(),\n d = gf(),\n e = gf(),\n f = gf(),\n g = gf(),\n h = gf(),\n t = gf();\n\n Z(a, p[1], p[0]);\n Z(t, q[1], q[0]);\n M(a, a, t);\n A(b, p[0], p[1]);\n A(t, q[0], q[1]);\n M(b, b, t);\n M(c, p[3], q[3]);\n M(c, c, D2);\n M(d, p[2], q[2]);\n A(d, d, d);\n Z(e, b, a);\n Z(f, d, c);\n A(g, d, c);\n A(h, b, a);\n\n M(p[0], e, f);\n M(p[1], h, g);\n M(p[2], g, f);\n M(p[3], e, h);\n}\n\nfunction cswap(p: Float64Array[], q: Float64Array[], b: number): void {\n let i;\n for (i = 0; i < 4; i++) {\n sel25519(p[i], q[i], b);\n }\n}\n\nfunction pack(r: Uint8Array, p: Float64Array[]): void {\n const tx = gf(),\n ty = gf(),\n zi = gf();\n inv25519(zi, p[2]);\n M(tx, p[0], zi);\n M(ty, p[1], zi);\n pack25519(r, ty);\n r[31] ^= par25519(tx) << 7;\n}\n\n/**\n * Ed25519 scalar multiplication\n */\nfunction scalarmult(p: Float64Array[], q: Float64Array[], s: Uint8Array): void {\n let b, i;\n set25519(p[0], gf0);\n set25519(p[1], gf1);\n set25519(p[2], gf1);\n set25519(p[3], gf0);\n for (i = 255; i >= 0; --i) {\n b = (s[(i / 8) | 0] >> (i & 7)) & 1;\n cswap(p, q, b);\n add(q, p);\n add(p, p);\n cswap(p, q, b);\n }\n}\n\nfunction scalarbase(p: Float64Array[], s: Uint8Array): void {\n const q = [gf(), gf(), gf(), gf()];\n set25519(q[0], X);\n set25519(q[1], Y);\n set25519(q[2], gf1);\n M(q[3], X, Y);\n scalarmult(p, q, s);\n}\n\nfunction crypto_sign_keypair(\n pk: Uint8Array,\n sk: Uint8Array,\n seeded: boolean,\n): number {\n const d = new Uint8Array(64);\n const p = [gf(), gf(), gf(), gf()];\n\n if (!seeded) randombytes(sk, 32);\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n scalarbase(p, d);\n pack(pk, p);\n\n for (let i = 0; i < 32; i++) sk[i + 32] = pk[i];\n return 0;\n}\n\nexport const L = new Float64Array([\n 0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde,\n 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10,\n]);\n\nfunction modL(r: Uint8Array, x: Float64Array): void {\n let carry, i, j, k;\n for (i = 63; i >= 32; --i) {\n carry = 0;\n for (j = i - 32, k = i - 12; j < k; ++j) {\n x[j] += carry - 16 * x[i] * L[j - (i - 32)];\n carry = Math.floor((x[j] + 128) / 256);\n x[j] -= carry * 256;\n }\n x[j] += carry;\n x[i] = 0;\n }\n carry = 0;\n for (j = 0; j < 32; j++) {\n x[j] += carry - (x[31] >> 4) * L[j];\n carry = x[j] >> 8;\n x[j] &= 255;\n }\n for (j = 0; j < 32; j++) x[j] -= carry * L[j];\n for (i = 0; i < 32; i++) {\n x[i + 1] += x[i] >> 8;\n r[i] = x[i] & 255;\n }\n}\n\nfunction reduce(r: Uint8Array): void {\n const x = new Float64Array(64);\n for (let i = 0; i < 64; i++) x[i] = r[i];\n for (let i = 0; i < 64; i++) r[i] = 0;\n modL(r, x);\n}\n\n// Note: difference from C - smlen returned, not passed as argument.\nfunction crypto_sign(\n sm: Uint8Array,\n m: Uint8Array,\n n: number,\n sk: Uint8Array,\n): number {\n const d = new Uint8Array(64),\n h = new Uint8Array(64),\n r = new Uint8Array(64);\n let i, j;\n const x = new Float64Array(64);\n const p = [gf(), gf(), gf(), gf()];\n\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n const smlen = n + 64;\n for (i = 0; i < n; i++) sm[64 + i] = m[i];\n for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];\n\n crypto_hash(r, sm.subarray(32), n + 32);\n reduce(r);\n scalarbase(p, r);\n pack(sm, p);\n\n for (i = 32; i < 64; i++) sm[i] = sk[i];\n crypto_hash(h, sm, n + 64);\n reduce(h);\n\n for (i = 0; i < 64; i++) x[i] = 0;\n for (i = 0; i < 32; i++) x[i] = r[i];\n for (i = 0; i < 32; i++) {\n for (j = 0; j < 32; j++) {\n x[i + j] += h[i] * d[j];\n }\n }\n\n modL(sm.subarray(32), x);\n return smlen;\n}\n\nfunction unpackpos(r: Float64Array[], p: Uint8Array): number {\n // FIXME: implement directly\n const q = [gf(), gf(), gf(), gf()];\n if (unpackneg(q, p)) return -1;\n const scalar0 = new Uint8Array(32);\n const scalar1 = new Uint8Array(32);\n scalar1[0] = 1;\n const scalarNeg1 = crypto_core_ed25519_scalar_sub(scalar0, scalar1);\n scalarmult(r, q, scalarNeg1);\n return 0;\n}\n\nfunction unpackneg(r: Float64Array[], p: Uint8Array): number {\n const t = gf();\n const chk = gf();\n const num = gf();\n const den = gf();\n const den2 = gf();\n const den4 = gf();\n const den6 = gf();\n\n set25519(r[2], gf1);\n unpack25519(r[1], p);\n S(num, r[1]);\n M(den, num, D);\n Z(num, num, r[2]);\n A(den, r[2], den);\n\n S(den2, den);\n S(den4, den2);\n M(den6, den4, den2);\n M(t, den6, num);\n M(t, t, den);\n\n pow2523(t, t);\n M(t, t, num);\n M(t, t, den);\n M(t, t, den);\n M(r[0], t, den);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) M(r[0], r[0], I);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) return -1;\n\n if (par25519(r[0]) === p[31] >> 7) Z(r[0], gf0, r[0]);\n\n M(r[3], r[0], r[1]);\n return 0;\n}\n\nexport function crypto_scalarmult_ed25519_base_noclamp(\n s: Uint8Array,\n): Uint8Array {\n const r = new Uint8Array(32);\n const p = [gf(), gf(), gf(), gf()];\n\n scalarbase(p, s);\n pack(r, p);\n return r;\n}\n\nexport function crypto_scalarmult_ed25519_noclamp(\n s: Uint8Array,\n q: Uint8Array,\n): Uint8Array {\n const r = new Uint8Array(32);\n const p = [gf(), gf(), gf(), gf()];\n const ql = [gf(), gf(), gf(), gf()];\n\n if (unpackpos(ql, q)) throw new Error();\n scalarmult(p, ql, s);\n pack(r, p);\n return r;\n}\n\nexport function crypto_core_ed25519_add(\n p1: Uint8Array,\n p2: Uint8Array,\n): Uint8Array {\n const q1 = [gf(), gf(), gf(), gf()];\n const q2 = [gf(), gf(), gf(), gf()];\n const res = new Uint8Array(32);\n if (unpackpos(q1, p1)) throw new Error();\n if (unpackpos(q2, p2)) throw new Error();\n add(q1, q2);\n pack(res, q1);\n return res;\n}\n\nfunction crypto_sign_open(\n m: Uint8Array,\n sm: Uint8Array,\n n: number,\n pk: Uint8Array,\n): number {\n let i, mlen;\n const t = new Uint8Array(32),\n h = new Uint8Array(64);\n const p = [gf(), gf(), gf(), gf()],\n q = [gf(), gf(), gf(), gf()];\n\n mlen = -1;\n if (n < 64) return -1;\n\n if (unpackneg(q, pk)) return -1;\n\n for (i = 0; i < n; i++) m[i] = sm[i];\n for (i = 0; i < 32; i++) m[i + 32] = pk[i];\n crypto_hash(h, m, n);\n reduce(h);\n scalarmult(p, q, h);\n\n scalarbase(q, sm.subarray(32));\n add(p, q);\n pack(t, p);\n\n n -= 64;\n if (crypto_verify_32(sm, 0, t, 0)) {\n for (i = 0; i < n; i++) m[i] = 0;\n return -1;\n }\n\n for (i = 0; i < n; i++) m[i] = sm[i + 64];\n mlen = n;\n return mlen;\n}\n\nconst crypto_secretbox_KEYBYTES = 32;\nconst crypto_secretbox_NONCEBYTES = 24;\nconst crypto_secretbox_ZEROBYTES = 32;\nconst crypto_secretbox_BOXZEROBYTES = 16;\nconst crypto_scalarmult_BYTES = 32;\nconst crypto_scalarmult_SCALARBYTES = 32;\nconst crypto_sign_BYTES = 64;\nconst crypto_sign_PUBLICKEYBYTES = 32;\nconst crypto_sign_SECRETKEYBYTES = 64;\nconst crypto_sign_SEEDBYTES = 32;\nconst crypto_hash_BYTES = 64;\n\n/* High-level API */\n\nfunction checkLengths(k: Uint8Array, n: Uint8Array) {\n if (k.length !== crypto_secretbox_KEYBYTES) throw new Error(\"bad key size\");\n if (n.length !== crypto_secretbox_NONCEBYTES)\n throw new Error(\"bad nonce size\");\n}\n\nfunction checkArrayTypes(...args: Uint8Array[]): void {\n for (let i = 0; i < args.length; i++) {\n if (!(args[i] instanceof Uint8Array))\n throw new TypeError(\"unexpected type, use Uint8Array\");\n }\n}\n\nexport function randomBytes(n: number): Uint8Array {\n const b = new Uint8Array(n);\n randombytes(b, n);\n return b;\n}\n\nexport function scalarMult(n: Uint8Array, p: Uint8Array): Uint8Array {\n checkArrayTypes(n, p);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error(\"bad n size\");\n if (p.length !== crypto_scalarmult_BYTES) throw new Error(\"bad p size\");\n const q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult(q, n, p);\n return q;\n}\n\nexport function scalarMult_base(n: Uint8Array): Uint8Array {\n checkArrayTypes(n);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error(\"bad n size\");\n const q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult_base(q, n);\n return q;\n}\n\nexport const scalarMult_scalarLength = crypto_scalarmult_SCALARBYTES;\nexport const scalarMult_groupElementLength = crypto_scalarmult_BYTES;\n\nexport function sign(msg: Uint8Array, secretKey: Uint8Array): Uint8Array {\n checkArrayTypes(msg, secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error(\"bad secret key size\");\n const signedMsg = new Uint8Array(crypto_sign_BYTES + msg.length);\n crypto_sign(signedMsg, msg, msg.length, secretKey);\n return signedMsg;\n}\n\nexport function sign_open(\n signedMsg: Uint8Array,\n publicKey: Uint8Array,\n): Uint8Array | null {\n checkArrayTypes(signedMsg, publicKey);\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error(\"bad public key size\");\n const tmp = new Uint8Array(signedMsg.length);\n const mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);\n if (mlen < 0) return null;\n const m = new Uint8Array(mlen);\n for (let i = 0; i < m.length; i++) m[i] = tmp[i];\n return m;\n}\n\nexport function sign_detached(\n msg: Uint8Array,\n secretKey: Uint8Array,\n): Uint8Array {\n const signedMsg = sign(msg, secretKey);\n const sig = new Uint8Array(crypto_sign_BYTES);\n for (let i = 0; i < sig.length; i++) sig[i] = signedMsg[i];\n return sig;\n}\n\nexport function sign_detached_verify(\n msg: Uint8Array,\n sig: Uint8Array,\n publicKey: Uint8Array,\n): boolean {\n checkArrayTypes(msg, sig, publicKey);\n if (sig.length !== crypto_sign_BYTES) throw new Error(\"bad signature size\");\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error(\"bad public key size\");\n const sm = new Uint8Array(crypto_sign_BYTES + msg.length);\n const m = new Uint8Array(crypto_sign_BYTES + msg.length);\n let i;\n for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];\n for (i = 0; i < msg.length; i++) sm[i + crypto_sign_BYTES] = msg[i];\n return crypto_sign_open(m, sm, sm.length, publicKey) >= 0;\n}\n\nexport function sign_keyPair(): {\n publicKey: Uint8Array;\n secretKey: Uint8Array;\n} {\n const pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n const sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n crypto_sign_keypair(pk, sk, false);\n return { publicKey: pk, secretKey: sk };\n}\n\nexport function x25519_edwards_keyPair_fromSecretKey(\n secretKey: Uint8Array,\n): Uint8Array {\n const p = [gf(), gf(), gf(), gf()];\n const pk = new Uint8Array(32);\n\n const d = new Uint8Array(64);\n if (secretKey.length != 32) {\n throw new Error(\"bad secret key size\");\n }\n d.set(secretKey, 0);\n\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n scalarbase(p, d);\n pack(pk, p);\n\n return pk;\n}\n\nexport function crypto_sign_keyPair_fromSecretKey(secretKey: Uint8Array): {\n publicKey: Uint8Array;\n secretKey: Uint8Array;\n} {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error(\"bad secret key size\");\n const pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n for (let i = 0; i < pk.length; i++) pk[i] = secretKey[32 + i];\n return { publicKey: pk, secretKey: new Uint8Array(secretKey) };\n}\n\nexport function crypto_sign_keyPair_fromSeed(seed: Uint8Array): {\n publicKey: Uint8Array;\n secretKey: Uint8Array;\n} {\n checkArrayTypes(seed);\n if (seed.length !== crypto_sign_SEEDBYTES)\n throw new Error(`bad seed size: ${seed.length}`);\n const pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n const sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n for (let i = 0; i < 32; i++) sk[i] = seed[i];\n crypto_sign_keypair(pk, sk, true);\n return { publicKey: pk, secretKey: sk };\n}\n\nexport const sign_publicKeyLength = crypto_sign_PUBLICKEYBYTES;\nexport const sign_secretKeyLength = crypto_sign_SECRETKEYBYTES;\nexport const sign_seedLength = crypto_sign_SEEDBYTES;\nexport const sign_signatureLength = crypto_sign_BYTES;\n\nexport function hash(msg: Uint8Array): Uint8Array {\n checkArrayTypes(msg);\n const h = new Uint8Array(crypto_hash_BYTES);\n crypto_hash(h, msg, msg.length);\n return h;\n}\n\nexport const hash_hashLength = crypto_hash_BYTES;\n\nexport function verify(x: Uint8Array, y: Uint8Array): boolean {\n checkArrayTypes(x, y);\n // Zero length arguments are considered not equal.\n if (x.length === 0 || y.length === 0) return false;\n if (x.length !== y.length) return false;\n return vn(x, 0, y, 0, x.length) === 0 ? true : false;\n}\n\nexport function setPRNG(fn: (x: Uint8Array, n: number) => void): void {\n randombytes = fn;\n}\n\nexport function sign_ed25519_pk_to_curve25519(\n ed25519_pk: Uint8Array,\n): Uint8Array {\n const ge_a = [gf(), gf(), gf(), gf()];\n const x = gf();\n const one_minus_y = gf();\n const x25519_pk = new Uint8Array(32);\n\n if (unpackneg(ge_a, ed25519_pk)) {\n throw Error(\"invalid public key\");\n }\n\n set25519(one_minus_y, gf1);\n Z(one_minus_y, one_minus_y, ge_a[1]);\n\n set25519(x, gf1);\n A(x, x, ge_a[1]);\n\n inv25519(one_minus_y, one_minus_y);\n M(x, x, one_minus_y);\n pack25519(x25519_pk, x);\n\n return x25519_pk;\n}\n\nexport function secretbox(\n msg: Uint8Array,\n nonce: Uint8Array,\n key: Uint8Array,\n): Uint8Array {\n checkArrayTypes(msg, nonce, key);\n checkLengths(key, nonce);\n var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);\n var c = new Uint8Array(m.length);\n for (var i = 0; i < msg.length; i++)\n m[i + crypto_secretbox_ZEROBYTES] = msg[i];\n crypto_secretbox(c, m, m.length, nonce, key);\n return c.subarray(crypto_secretbox_BOXZEROBYTES);\n}\n\nexport function secretbox_open(\n box: Uint8Array,\n nonce: Uint8Array,\n key: Uint8Array,\n): Uint8Array | undefined {\n checkArrayTypes(box, nonce, key);\n checkLengths(key, nonce);\n var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);\n var m = new Uint8Array(c.length);\n for (var i = 0; i < box.length; i++)\n c[i + crypto_secretbox_BOXZEROBYTES] = box[i];\n if (c.length < 32) return undefined;\n if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return undefined;\n return m.subarray(crypto_secretbox_ZEROBYTES);\n}\n\nexport function crypto_core_ed25519_scalar_add(\n x: Uint8Array,\n y: Uint8Array,\n): Uint8Array {\n const z = new Float64Array(64);\n for (let i = 0; i < 32; i++) {\n z[i] = x[i] + y[i];\n }\n const o = new Uint8Array(32);\n modL(o, z);\n return o;\n}\n\n/**\n * Reduce a scalar \"s\" to \"s mod L\". The input can be up to 64 bytes long.\n */\nexport function crypto_core_ed25519_scalar_reduce(x: Uint8Array): Uint8Array {\n const len = x.length;\n const z = new Float64Array(64);\n for (let i = 0; i < len; i++) z[i] = x[i];\n const o = new Uint8Array(32);\n modL(o, z);\n return o;\n}\n\nexport function crypto_core_ed25519_scalar_sub(\n x: Uint8Array,\n y: Uint8Array,\n): Uint8Array {\n const z = new Float64Array(64);\n for (let i = 0; i < 32; i++) {\n z[i] = x[i] - y[i];\n }\n const o = new Uint8Array(32);\n modL(o, z);\n return o;\n}\n\nexport function crypto_edx25519_private_key_create(): Uint8Array {\n const seed = new Uint8Array(32);\n randombytes(seed, 32);\n return crypto_edx25519_private_key_create_from_seed(seed);\n}\n\nexport function crypto_edx25519_private_key_create_from_seed(\n seed: Uint8Array,\n): Uint8Array {\n const pk = hash(seed);\n pk[0] &= 248;\n pk[31] &= 127;\n pk[31] |= 64;\n return pk;\n}\n\nexport function crypto_edx25519_get_public(priv: Uint8Array): Uint8Array {\n return crypto_scalarmult_ed25519_base_noclamp(priv.subarray(0, 32));\n}\n\nexport function crypto_edx25519_sign_detached(\n m: Uint8Array,\n skx: Uint8Array,\n pkx: Uint8Array,\n): Uint8Array {\n const n: number = m.length;\n const h = new Uint8Array(64);\n const r = new Uint8Array(64);\n let i, j;\n const x = new Float64Array(64);\n const p = [gf(), gf(), gf(), gf()];\n\n const sm = new Uint8Array(n + 64);\n\n for (i = 0; i < n; i++) sm[64 + i] = m[i];\n for (i = 0; i < 32; i++) sm[32 + i] = skx[32 + i];\n\n crypto_hash(r, sm.subarray(32), n + 32);\n reduce(r);\n scalarbase(p, r);\n pack(sm, p);\n\n for (i = 32; i < 64; i++) sm[i] = pkx[i - 32];\n crypto_hash(h, sm, n + 64);\n reduce(h);\n\n for (i = 0; i < 64; i++) x[i] = 0;\n for (i = 0; i < 32; i++) x[i] = r[i];\n for (i = 0; i < 32; i++) {\n for (j = 0; j < 32; j++) {\n x[i + j] += h[i] * skx[j];\n }\n }\n\n modL(sm.subarray(32), x);\n return sm.subarray(0, 64);\n}\n\nexport function crypto_edx25519_sign_detached_verify(\n msg: Uint8Array,\n sig: Uint8Array,\n publicKey: Uint8Array,\n): boolean {\n checkArrayTypes(msg, sig, publicKey);\n if (sig.length !== crypto_sign_BYTES) throw new Error(\"bad signature size\");\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error(\"bad public key size\");\n const sm = new Uint8Array(crypto_sign_BYTES + msg.length);\n const m = new Uint8Array(crypto_sign_BYTES + msg.length);\n let i;\n for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];\n for (i = 0; i < msg.length; i++) sm[i + crypto_sign_BYTES] = msg[i];\n return crypto_sign_open(m, sm, sm.length, publicKey) >= 0;\n}\n", "import { setPRNG } from \"./nacl-fast.js\";\n\nexport function loadBrowserPrng() {\n // Initialize PRNG if environment provides CSPRNG.\n // If not, methods calling randombytes will throw.\n // @ts-ignore-error\n const cr = typeof self !== \"undefined\" ? self.crypto || self.msCrypto : null;\n\n const QUOTA = 65536;\n setPRNG(function (x: Uint8Array, n: number) {\n let i;\n const v = new Uint8Array(n);\n for (i = 0; i < n; i += QUOTA) {\n cr.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));\n }\n for (i = 0; i < n; i++) x[i] = v[i];\n for (i = 0; i < v.length; i++) v[i] = 0;\n });\n}\n", "/*\n This file is part of GNU Taler\n Copyright (C) 2012-2020 Taler Systems SA\n\n GNU Taler is free software: you can redistribute it and/or modify it\n under the terms of the GNU Lesser General Public License as published\n by the Free Software Foundation, either version 3 of the License,\n or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but\n WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with this program. If not, see <http://www.gnu.org/licenses/>.\n\n SPDX-License-Identifier: LGPL3.0-or-later\n\n Note: the LGPL does not apply to all components of GNU Taler,\n but it does apply to this file.\n */\n\nexport enum TalerErrorCode {\n\n\n /**\n * Special code to indicate success (no error).\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n NONE = 0,\n\n\n /**\n * A non-integer error code was returned in the JSON response.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n INVALID = 1,\n\n\n /**\n * An internal failure happened on the client side.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_CLIENT_INTERNAL_ERROR = 2,\n\n\n /**\n * The response we got from the server was not even in JSON format.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_INVALID_RESPONSE = 10,\n\n\n /**\n * An operation timed out.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_TIMEOUT = 11,\n\n\n /**\n * The version string given does not follow the expected CURRENT:REVISION:AGE Format.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_VERSION_MALFORMED = 12,\n\n\n /**\n * The service responded with a reply that was in JSON but did not satsify the protocol. Note that invalid cryptographic signatures should have signature-specific error codes.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_REPLY_MALFORMED = 13,\n\n\n /**\n * There is an error in the client-side configuration, for example the base URL specified is malformed.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_CONFIGURATION_INVALID = 14,\n\n\n /**\n * The client made a request to a service, but received an error response it does not know how to handle.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_UNEXPECTED_REQUEST_ERROR = 15,\n\n\n /**\n * The HTTP method used is invalid for this endpoint.\n * Returned with an HTTP status code of #MHD_HTTP_METHOD_NOT_ALLOWED (405).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_METHOD_INVALID = 20,\n\n\n /**\n * There is no endpoint defined for the URL provided by the client.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_ENDPOINT_UNKNOWN = 21,\n\n\n /**\n * The JSON in the client's request was malformed (generic parse error).\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_JSON_INVALID = 22,\n\n\n /**\n * Some of the HTTP headers provided by the client caused the server to not be able to handle the request.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_HTTP_HEADERS_MALFORMED = 23,\n\n\n /**\n * The payto:// URI provided by the client is malformed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_PAYTO_URI_MALFORMED = 24,\n\n\n /**\n * A required parameter in the request was missing.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_PARAMETER_MISSING = 25,\n\n\n /**\n * A parameter in the request was malformed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_PARAMETER_MALFORMED = 26,\n\n\n /**\n * The reserve public key given as part of a /reserves/ endpoint was malformed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_RESERVE_PUB_MALFORMED = 27,\n\n\n /**\n * The currencies involved in the operation do not match.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_CURRENCY_MISMATCH = 30,\n\n\n /**\n * The URI is longer than the longest URI the HTTP server is willing to parse.\n * Returned with an HTTP status code of #MHD_HTTP_URI_TOO_LONG (414).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_URI_TOO_LONG = 31,\n\n\n /**\n * The body is too large to be permissible for the endpoint.\n * Returned with an HTTP status code of #MHD_HTTP_PAYLOAD_TOO_LARGE (413).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_UPLOAD_EXCEEDS_LIMIT = 32,\n\n\n /**\n * The service failed initialize its connection to the database.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_DB_SETUP_FAILED = 50,\n\n\n /**\n * The service encountered an error event to just start the database transaction.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_DB_START_FAILED = 51,\n\n\n /**\n * The service failed to store information in its database.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_DB_STORE_FAILED = 52,\n\n\n /**\n * The service failed to fetch information from its database.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_DB_FETCH_FAILED = 53,\n\n\n /**\n * The service encountered an error event to commit the database transaction (hard, unrecoverable error).\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_DB_COMMIT_FAILED = 54,\n\n\n /**\n * The service encountered an error event to commit the database transaction, even after repeatedly retrying it there was always a conflicting transaction. (This indicates a repeated serialization error; should only happen if some client maliciously tries to create conflicting concurrent transactions.)\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_DB_SOFT_FAILURE = 55,\n\n\n /**\n * The service's database is inconsistent and violates service-internal invariants.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_DB_INVARIANT_FAILURE = 56,\n\n\n /**\n * The HTTP server experienced an internal invariant failure (bug).\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_INTERNAL_INVARIANT_FAILURE = 60,\n\n\n /**\n * The service could not compute a cryptographic hash over some JSON value.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_FAILED_COMPUTE_JSON_HASH = 61,\n\n\n /**\n * The service could not compute an amount.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_FAILED_COMPUTE_AMOUNT = 62,\n\n\n /**\n * The HTTP server had insufficient memory to parse the request.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_PARSER_OUT_OF_MEMORY = 70,\n\n\n /**\n * The HTTP server failed to allocate memory.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_ALLOCATION_FAILURE = 71,\n\n\n /**\n * The HTTP server failed to allocate memory for building JSON reply.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_JSON_ALLOCATION_FAILURE = 72,\n\n\n /**\n * The HTTP server failed to allocate memory for making a CURL request.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_CURL_ALLOCATION_FAILURE = 73,\n\n\n /**\n * The backend could not locate a required template to generate an HTML reply.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_FAILED_TO_LOAD_TEMPLATE = 74,\n\n\n /**\n * The backend could not expand the template to generate an HTML reply.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_FAILED_TO_EXPAND_TEMPLATE = 75,\n\n\n /**\n * Exchange is badly configured and thus cannot operate.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_BAD_CONFIGURATION = 1000,\n\n\n /**\n * Operation specified unknown for this endpoint.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_OPERATION_UNKNOWN = 1001,\n\n\n /**\n * The number of segments included in the URI does not match the number of segments expected by the endpoint.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_WRONG_NUMBER_OF_SEGMENTS = 1002,\n\n\n /**\n * The same coin was already used with a different denomination previously.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_COIN_CONFLICTING_DENOMINATION_KEY = 1003,\n\n\n /**\n * The public key of given to a \"/coins/\" endpoint of the exchange was malformed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_COINS_INVALID_COIN_PUB = 1004,\n\n\n /**\n * The exchange is not aware of the denomination key the wallet requested for the operation.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_DENOMINATION_KEY_UNKNOWN = 1005,\n\n\n /**\n * The signature of the denomination key over the coin is not valid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DENOMINATION_SIGNATURE_INVALID = 1006,\n\n\n /**\n * The exchange failed to perform the operation as it could not find the private keys. This is a problem with the exchange setup, not with the client's request.\n * Returned with an HTTP status code of #MHD_HTTP_SERVICE_UNAVAILABLE (503).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_KEYS_MISSING = 1007,\n\n\n /**\n * Validity period of the denomination lies in the future.\n * Returned with an HTTP status code of #MHD_HTTP_PRECONDITION_FAILED (412).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_DENOMINATION_VALIDITY_IN_FUTURE = 1008,\n\n\n /**\n * Denomination key of the coin is past its expiration time for the requested operation.\n * Returned with an HTTP status code of #MHD_HTTP_GONE (410).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_DENOMINATION_EXPIRED = 1009,\n\n\n /**\n * Denomination key of the coin has been revoked.\n * Returned with an HTTP status code of #MHD_HTTP_GONE (410).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_DENOMINATION_REVOKED = 1010,\n\n\n /**\n * An operation where the exchange interacted with a security module timed out.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_SECMOD_TIMEOUT = 1011,\n\n\n /**\n * The respective coin did not have sufficient residual value for the operation. The \"history\" in this response provides the \"residual_value\" of the coin, which may be less than its \"original_value\".\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_INSUFFICIENT_FUNDS = 1012,\n\n\n /**\n * The exchange had an internal error reconstructing the transaction history of the coin that was being processed.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_COIN_HISTORY_COMPUTATION_FAILED = 1013,\n\n\n /**\n * The exchange failed to obtain the transaction history of the given coin from the database while generating an insufficient funds errors.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_HISTORY_DB_ERROR_INSUFFICIENT_FUNDS = 1014,\n\n\n /**\n * The same coin was already used with a different age hash previously.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_COIN_CONFLICTING_AGE_HASH = 1015,\n\n\n /**\n * The requested operation is not valid for the cipher used by the selected denomination.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_INVALID_DENOMINATION_CIPHER_FOR_OPERATION = 1016,\n\n\n /**\n * The provided arguments for the operation use inconsistent ciphers.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_CIPHER_MISMATCH = 1017,\n\n\n /**\n * The number of denominations specified in the request exceeds the limit of the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_NEW_DENOMS_ARRAY_SIZE_EXCESSIVE = 1018,\n\n\n /**\n * The time at the server is too far off from the time specified in the request. Most likely the client system time is wrong.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_CLOCK_SKEW = 1020,\n\n\n /**\n * The specified amount for the coin is higher than the value of the denomination of the coin.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_AMOUNT_EXCEEDS_DENOMINATION_VALUE = 1021,\n\n\n /**\n * The exchange was not properly configured with global fees.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_GLOBAL_FEES_MISSING = 1022,\n\n\n /**\n * The exchange was not properly configured with wire fees.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_WIRE_FEES_MISSING = 1023,\n\n\n /**\n * The purse public key was malformed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_PURSE_PUB_MALFORMED = 1024,\n\n\n /**\n * The purse is unknown.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_PURSE_UNKNOWN = 1025,\n\n\n /**\n * The purse has expired.\n * Returned with an HTTP status code of #MHD_HTTP_GONE (410).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_PURSE_EXPIRED = 1026,\n\n\n /**\n * The exchange has no information about the \"reserve_pub\" that was given.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_RESERVE_UNKNOWN = 1027,\n\n\n /**\n * The exchange is not allowed to proceed with the operation until the client has satisfied a KYC check.\n * Returned with an HTTP status code of #MHD_HTTP_UNAVAILABLE_FOR_LEGAL_REASONS (451).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_KYC_REQUIRED = 1028,\n\n\n /**\n * Inconsistency between provided age commitment and attest: either none or both must be provided\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_DEPOSIT_COIN_CONFLICTING_ATTEST_VS_AGE_COMMITMENT = 1029,\n\n\n /**\n * The provided attestation for the minimum age couldn't be verified by the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_DEPOSIT_COIN_AGE_ATTESTATION_FAILURE = 1030,\n\n\n /**\n * The purse was deleted.\n * Returned with an HTTP status code of #MHD_HTTP_GONE (410).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_PURSE_DELETED = 1031,\n\n\n /**\n * The public key of the AML officer in the URL was malformed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_AML_OFFICER_PUB_MALFORMED = 1032,\n\n\n /**\n * The signature affirming the GET request of the AML officer is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_AML_OFFICER_GET_SIGNATURE_INVALID = 1033,\n\n\n /**\n * The specified AML officer does not have access at this time.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_AML_OFFICER_ACCESS_DENIED = 1034,\n\n\n /**\n * The requested operation is denied pending the resolution of an anti-money laundering investigation by the exchange operator. This is a manual process, please wait and retry later.\n * Returned with an HTTP status code of #MHD_HTTP_UNAVAILABLE_FOR_LEGAL_REASONS (451).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_AML_PENDING = 1035,\n\n\n /**\n * The requested operation is denied as the account was frozen on suspicion of money laundering. Please contact the exchange operator.\n * Returned with an HTTP status code of #MHD_HTTP_UNAVAILABLE_FOR_LEGAL_REASONS (451).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_AML_FROZEN = 1036,\n\n\n /**\n * The exchange did not find information about the specified transaction in the database.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DEPOSITS_GET_NOT_FOUND = 1100,\n\n\n /**\n * The wire hash of given to a \"/deposits/\" handler was malformed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DEPOSITS_GET_INVALID_H_WIRE = 1101,\n\n\n /**\n * The merchant key of given to a \"/deposits/\" handler was malformed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DEPOSITS_GET_INVALID_MERCHANT_PUB = 1102,\n\n\n /**\n * The hash of the contract terms given to a \"/deposits/\" handler was malformed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DEPOSITS_GET_INVALID_H_CONTRACT_TERMS = 1103,\n\n\n /**\n * The coin public key of given to a \"/deposits/\" handler was malformed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DEPOSITS_GET_INVALID_COIN_PUB = 1104,\n\n\n /**\n * The signature returned by the exchange in a /deposits/ request was malformed.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DEPOSITS_GET_INVALID_SIGNATURE_BY_EXCHANGE = 1105,\n\n\n /**\n * The signature of the merchant is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DEPOSITS_GET_MERCHANT_SIGNATURE_INVALID = 1106,\n\n\n /**\n * The provided policy data was not accepted\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DEPOSITS_POLICY_NOT_ACCEPTED = 1107,\n\n\n /**\n * The given reserve does not have sufficient funds to admit the requested withdraw operation at this time. The response includes the current \"balance\" of the reserve as well as the transaction \"history\" that lead to this balance.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_WITHDRAW_INSUFFICIENT_FUNDS = 1150,\n\n\n /**\n * The given reserve does not have sufficient funds to admit the requested age-withdraw operation at this time. The response includes the current \"balance\" of the reserve as well as the transaction \"history\" that lead to this balance.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_AGE_WITHDRAW_INSUFFICIENT_FUNDS = 1151,\n\n\n /**\n * The amount to withdraw together with the fee exceeds the numeric range for Taler amounts. This is not a client failure, as the coin value and fees come from the exchange's configuration.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_WITHDRAW_AMOUNT_FEE_OVERFLOW = 1152,\n\n\n /**\n * The exchange failed to create the signature using the denomination key.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_WITHDRAW_SIGNATURE_FAILED = 1153,\n\n\n /**\n * The signature of the reserve is not valid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_WITHDRAW_RESERVE_SIGNATURE_INVALID = 1154,\n\n\n /**\n * When computing the reserve history, we ended up with a negative overall balance, which should be impossible.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RESERVE_HISTORY_ERROR_INSUFFICIENT_FUNDS = 1155,\n\n\n /**\n * The reserve did not have sufficient funds in it to pay for a full reserve history statement.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GET_RESERVE_HISTORY_ERROR_INSUFFICIENT_BALANCE = 1156,\n\n\n /**\n * Withdraw period of the coin to be withdrawn is in the past.\n * Returned with an HTTP status code of #MHD_HTTP_GONE (410).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_WITHDRAW_DENOMINATION_KEY_LOST = 1158,\n\n\n /**\n * The client failed to unblind the blind signature.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_WITHDRAW_UNBLIND_FAILURE = 1159,\n\n\n /**\n * The client re-used a withdraw nonce, which is not allowed.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_WITHDRAW_NONCE_REUSE = 1160,\n\n\n /**\n * The batch withdraw included a planchet that was already withdrawn. This is not allowed.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_WITHDRAW_BATCH_IDEMPOTENT_PLANCHET = 1175,\n\n\n /**\n * The signature made by the coin over the deposit permission is not valid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DEPOSIT_COIN_SIGNATURE_INVALID = 1205,\n\n\n /**\n * The same coin was already deposited for the same merchant and contract with other details.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DEPOSIT_CONFLICTING_CONTRACT = 1206,\n\n\n /**\n * The stated value of the coin after the deposit fee is subtracted would be negative.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DEPOSIT_NEGATIVE_VALUE_AFTER_FEE = 1207,\n\n\n /**\n * The stated refund deadline is after the wire deadline.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DEPOSIT_REFUND_DEADLINE_AFTER_WIRE_DEADLINE = 1208,\n\n\n /**\n * The stated wire deadline is \"never\", which makes no sense.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DEPOSIT_WIRE_DEADLINE_IS_NEVER = 1209,\n\n\n /**\n * The exchange failed to canonicalize and hash the given wire format. For example, the merchant failed to provide the \"salt\" or a valid payto:// URI in the wire details. Note that while the exchange will do some basic sanity checking on the wire details, it cannot warrant that the banking system will ultimately be able to route to the specified address, even if this check passed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DEPOSIT_INVALID_WIRE_FORMAT_JSON = 1210,\n\n\n /**\n * The hash of the given wire address does not match the wire hash specified in the proposal data.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DEPOSIT_INVALID_WIRE_FORMAT_CONTRACT_HASH_CONFLICT = 1211,\n\n\n /**\n * The signature provided by the exchange is not valid.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DEPOSIT_INVALID_SIGNATURE_BY_EXCHANGE = 1221,\n\n\n /**\n * The deposited amount is smaller than the deposit fee, which would result in a negative contribution.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DEPOSIT_FEE_ABOVE_AMOUNT = 1222,\n\n\n /**\n * The proof of policy fulfillment was invalid.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_EXTENSIONS_INVALID_FULFILLMENT = 1240,\n\n\n /**\n * The reserve balance, status or history was requested for a reserve which is not known to the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RESERVES_STATUS_UNKNOWN = 1250,\n\n\n /**\n * The reserve status was requested with a bad signature.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RESERVES_STATUS_BAD_SIGNATURE = 1251,\n\n\n /**\n * The reserve history was requested with a bad signature.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RESERVES_HISTORY_BAD_SIGNATURE = 1252,\n\n\n /**\n * The exchange encountered melt fees exceeding the melted coin's contribution.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MELT_FEES_EXCEED_CONTRIBUTION = 1302,\n\n\n /**\n * The signature made with the coin to be melted is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MELT_COIN_SIGNATURE_INVALID = 1303,\n\n\n /**\n * The denomination of the given coin has past its expiration date and it is also not a valid zombie (that is, was not refreshed with the fresh coin being subjected to recoup).\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MELT_COIN_EXPIRED_NO_ZOMBIE = 1305,\n\n\n /**\n * The signature returned by the exchange in a melt request was malformed.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MELT_INVALID_SIGNATURE_BY_EXCHANGE = 1306,\n\n\n /**\n * The provided transfer keys do not match up with the original commitment. Information about the original commitment is included in the response.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFRESHES_REVEAL_COMMITMENT_VIOLATION = 1353,\n\n\n /**\n * Failed to produce the blinded signatures over the coins to be returned.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFRESHES_REVEAL_SIGNING_ERROR = 1354,\n\n\n /**\n * The exchange is unaware of the refresh session specified in the request.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFRESHES_REVEAL_SESSION_UNKNOWN = 1355,\n\n\n /**\n * The size of the cut-and-choose dimension of the private transfer keys request does not match #TALER_CNC_KAPPA - 1.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFRESHES_REVEAL_CNC_TRANSFER_ARRAY_SIZE_INVALID = 1356,\n\n\n /**\n * The number of envelopes given does not match the number of denomination keys given.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFRESHES_REVEAL_NEW_DENOMS_ARRAY_SIZE_MISMATCH = 1358,\n\n\n /**\n * The exchange encountered a numeric overflow totaling up the cost for the refresh operation.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFRESHES_REVEAL_COST_CALCULATION_OVERFLOW = 1359,\n\n\n /**\n * The exchange's cost calculation shows that the melt amount is below the costs of the transaction.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFRESHES_REVEAL_AMOUNT_INSUFFICIENT = 1360,\n\n\n /**\n * The signature made with the coin over the link data is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFRESHES_REVEAL_LINK_SIGNATURE_INVALID = 1361,\n\n\n /**\n * The refresh session hash given to a /refreshes/ handler was malformed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFRESHES_REVEAL_INVALID_RCH = 1362,\n\n\n /**\n * Operation specified invalid for this endpoint.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFRESHES_REVEAL_OPERATION_INVALID = 1363,\n\n\n /**\n * The client provided age commitment data, but age restriction is not supported on this server.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFRESHES_REVEAL_AGE_RESTRICTION_NOT_SUPPORTED = 1364,\n\n\n /**\n * The client provided invalid age commitment data: missing, not an array, or array of invalid size.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFRESHES_REVEAL_AGE_RESTRICTION_COMMITMENT_INVALID = 1365,\n\n\n /**\n * The coin specified in the link request is unknown to the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_LINK_COIN_UNKNOWN = 1400,\n\n\n /**\n * The public key of given to a /transfers/ handler was malformed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_TRANSFERS_GET_WTID_MALFORMED = 1450,\n\n\n /**\n * The exchange did not find information about the specified wire transfer identifier in the database.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_TRANSFERS_GET_WTID_NOT_FOUND = 1451,\n\n\n /**\n * The exchange did not find information about the wire transfer fees it charged.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_TRANSFERS_GET_WIRE_FEE_NOT_FOUND = 1452,\n\n\n /**\n * The exchange found a wire fee that was above the total transfer value (and thus could not have been charged).\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_TRANSFERS_GET_WIRE_FEE_INCONSISTENT = 1453,\n\n\n /**\n * The wait target of the URL was not in the set of expected values.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSES_INVALID_WAIT_TARGET = 1475,\n\n\n /**\n * The signature on the purse status returned by the exchange was invalid.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSES_GET_INVALID_SIGNATURE_BY_EXCHANGE = 1476,\n\n\n /**\n * The exchange knows literally nothing about the coin we were asked to refund. But without a transaction history, we cannot issue a refund. This is kind-of OK, the owner should just refresh it directly without executing the refund.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFUND_COIN_NOT_FOUND = 1500,\n\n\n /**\n * We could not process the refund request as the coin's transaction history does not permit the requested refund because then refunds would exceed the deposit amount. The \"history\" in the response proves this.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFUND_CONFLICT_DEPOSIT_INSUFFICIENT = 1501,\n\n\n /**\n * The exchange knows about the coin we were asked to refund, but not about the specific /deposit operation. Hence, we cannot issue a refund (as we do not know if this merchant public key is authorized to do a refund).\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFUND_DEPOSIT_NOT_FOUND = 1502,\n\n\n /**\n * The exchange can no longer refund the customer/coin as the money was already transferred (paid out) to the merchant. (It should be past the refund deadline.)\n * Returned with an HTTP status code of #MHD_HTTP_GONE (410).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFUND_MERCHANT_ALREADY_PAID = 1503,\n\n\n /**\n * The refund fee specified for the request is lower than the refund fee charged by the exchange for the given denomination key of the refunded coin.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFUND_FEE_TOO_LOW = 1504,\n\n\n /**\n * The refunded amount is smaller than the refund fee, which would result in a negative refund.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFUND_FEE_ABOVE_AMOUNT = 1505,\n\n\n /**\n * The signature of the merchant is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFUND_MERCHANT_SIGNATURE_INVALID = 1506,\n\n\n /**\n * Merchant backend failed to create the refund confirmation signature.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFUND_MERCHANT_SIGNING_FAILED = 1507,\n\n\n /**\n * The signature returned by the exchange in a refund request was malformed.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFUND_INVALID_SIGNATURE_BY_EXCHANGE = 1508,\n\n\n /**\n * The failure proof returned by the exchange is incorrect.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFUND_INVALID_FAILURE_PROOF_BY_EXCHANGE = 1509,\n\n\n /**\n * Conflicting refund granted before with different amount but same refund transaction ID.\n * Returned with an HTTP status code of #MHD_HTTP_FAILED_DEPENDENCY (424).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFUND_INCONSISTENT_AMOUNT = 1510,\n\n\n /**\n * The given coin signature is invalid for the request.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RECOUP_SIGNATURE_INVALID = 1550,\n\n\n /**\n * The exchange could not find the corresponding withdraw operation. The request is denied.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RECOUP_WITHDRAW_NOT_FOUND = 1551,\n\n\n /**\n * The coin's remaining balance is zero. The request is denied.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RECOUP_COIN_BALANCE_ZERO = 1552,\n\n\n /**\n * The exchange failed to reproduce the coin's blinding.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RECOUP_BLINDING_FAILED = 1553,\n\n\n /**\n * The coin's remaining balance is zero. The request is denied.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RECOUP_COIN_BALANCE_NEGATIVE = 1554,\n\n\n /**\n * The coin's denomination has not been revoked yet.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RECOUP_NOT_ELIGIBLE = 1555,\n\n\n /**\n * The given coin signature is invalid for the request.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RECOUP_REFRESH_SIGNATURE_INVALID = 1575,\n\n\n /**\n * The exchange could not find the corresponding melt operation. The request is denied.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RECOUP_REFRESH_MELT_NOT_FOUND = 1576,\n\n\n /**\n * The exchange failed to reproduce the coin's blinding.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RECOUP_REFRESH_BLINDING_FAILED = 1578,\n\n\n /**\n * The coin's denomination has not been revoked yet.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RECOUP_REFRESH_NOT_ELIGIBLE = 1580,\n\n\n /**\n * This exchange does not allow clients to request /keys for times other than the current (exchange) time.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_KEYS_TIMETRAVEL_FORBIDDEN = 1600,\n\n\n /**\n * A signature in the server's response was malformed.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_WIRE_SIGNATURE_INVALID = 1650,\n\n\n /**\n * No bank accounts are enabled for the exchange. The administrator should enable-account using the taler-exchange-offline tool.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_WIRE_NO_ACCOUNTS_CONFIGURED = 1651,\n\n\n /**\n * The payto:// URI stored in the exchange database for its bank account is malformed.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_WIRE_INVALID_PAYTO_CONFIGURED = 1652,\n\n\n /**\n * No wire fees are configured for an enabled wire method of the exchange. The administrator must set the wire-fee using the taler-exchange-offline tool.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_WIRE_FEES_NOT_CONFIGURED = 1653,\n\n\n /**\n * This purse was previously created with different meta data.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RESERVES_PURSE_CREATE_CONFLICTING_META_DATA = 1675,\n\n\n /**\n * This purse was previously merged with different meta data.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RESERVES_PURSE_MERGE_CONFLICTING_META_DATA = 1676,\n\n\n /**\n * The reserve has insufficient funds to create another purse.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RESERVES_PURSE_CREATE_INSUFFICIENT_FUNDS = 1677,\n\n\n /**\n * The purse fee specified for the request is lower than the purse fee charged by the exchange at this time.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RESERVES_PURSE_FEE_TOO_LOW = 1678,\n\n\n /**\n * The payment request cannot be deleted anymore, as it either already completed or timed out.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_DELETE_ALREADY_DECIDED = 1679,\n\n\n /**\n * The signature affirming the purse deletion is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_DELETE_SIGNATURE_INVALID = 1680,\n\n\n /**\n * The exchange failed to talk to the process responsible for its private denomination keys.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DENOMINATION_HELPER_UNAVAILABLE = 1700,\n\n\n /**\n * The response from the denomination key helper process was malformed.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DENOMINATION_HELPER_BUG = 1701,\n\n\n /**\n * The helper refuses to sign with the key, because it is too early: the validity period has not yet started.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DENOMINATION_HELPER_TOO_EARLY = 1702,\n\n\n /**\n * The signature of the exchange on the reply was invalid.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_DEPOSIT_EXCHANGE_SIGNATURE_INVALID = 1725,\n\n\n /**\n * The exchange failed to talk to the process responsible for its private signing keys.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_SIGNKEY_HELPER_UNAVAILABLE = 1750,\n\n\n /**\n * The response from the online signing key helper process was malformed.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_SIGNKEY_HELPER_BUG = 1751,\n\n\n /**\n * The helper refuses to sign with the key, because it is too early: the validity period has not yet started.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_SIGNKEY_HELPER_TOO_EARLY = 1752,\n\n\n /**\n * The purse expiration time is in the past at the time of its creation.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RESERVES_PURSE_EXPIRATION_BEFORE_NOW = 1775,\n\n\n /**\n * The purse expiration time is set to never, which is not allowed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RESERVES_PURSE_EXPIRATION_IS_NEVER = 1776,\n\n\n /**\n * The signature affirming the merge of the purse is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RESERVES_PURSE_MERGE_SIGNATURE_INVALID = 1777,\n\n\n /**\n * The signature by the reserve affirming the merge is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RESERVES_RESERVE_MERGE_SIGNATURE_INVALID = 1778,\n\n\n /**\n * The signature by the reserve affirming the open operation is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RESERVES_OPEN_BAD_SIGNATURE = 1785,\n\n\n /**\n * The signature by the reserve affirming the close operation is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RESERVES_CLOSE_BAD_SIGNATURE = 1786,\n\n\n /**\n * The signature by the reserve affirming the attestion request is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RESERVES_ATTEST_BAD_SIGNATURE = 1787,\n\n\n /**\n * The exchange does not know an origin account to which the remaining reserve balance could be wired to, and the wallet failed to provide one.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RESERVES_CLOSE_NO_TARGET_ACCOUNT = 1788,\n\n\n /**\n * The reserve balance is insufficient to pay for the open operation.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RESERVES_OPEN_INSUFFICIENT_FUNDS = 1789,\n\n\n /**\n * The auditor that was supposed to be disabled is unknown to this exchange.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_AUDITOR_NOT_FOUND = 1800,\n\n\n /**\n * The exchange has a more recently signed conflicting instruction and is thus refusing the current change (replay detected).\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_AUDITOR_MORE_RECENT_PRESENT = 1801,\n\n\n /**\n * The signature to add or enable the auditor does not validate.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_AUDITOR_ADD_SIGNATURE_INVALID = 1802,\n\n\n /**\n * The signature to disable the auditor does not validate.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_AUDITOR_DEL_SIGNATURE_INVALID = 1803,\n\n\n /**\n * The signature to revoke the denomination does not validate.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_DENOMINATION_REVOKE_SIGNATURE_INVALID = 1804,\n\n\n /**\n * The signature to revoke the online signing key does not validate.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_SIGNKEY_REVOKE_SIGNATURE_INVALID = 1805,\n\n\n /**\n * The exchange has a more recently signed conflicting instruction and is thus refusing the current change (replay detected).\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_WIRE_MORE_RECENT_PRESENT = 1806,\n\n\n /**\n * The signingkey specified is unknown to the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_KEYS_SIGNKEY_UNKNOWN = 1807,\n\n\n /**\n * The signature to publish wire account does not validate.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_WIRE_DETAILS_SIGNATURE_INVALID = 1808,\n\n\n /**\n * The signature to add the wire account does not validate.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_WIRE_ADD_SIGNATURE_INVALID = 1809,\n\n\n /**\n * The signature to disable the wire account does not validate.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_WIRE_DEL_SIGNATURE_INVALID = 1810,\n\n\n /**\n * The wire account to be disabled is unknown to the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_WIRE_NOT_FOUND = 1811,\n\n\n /**\n * The signature to affirm wire fees does not validate.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_WIRE_FEE_SIGNATURE_INVALID = 1812,\n\n\n /**\n * The signature conflicts with a previous signature affirming different fees.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_WIRE_FEE_MISMATCH = 1813,\n\n\n /**\n * The signature affirming the denomination key is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_KEYS_DENOMKEY_ADD_SIGNATURE_INVALID = 1814,\n\n\n /**\n * The signature affirming the signing key is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_KEYS_SIGNKEY_ADD_SIGNATURE_INVALID = 1815,\n\n\n /**\n * The signature conflicts with a previous signature affirming different fees.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_GLOBAL_FEE_MISMATCH = 1816,\n\n\n /**\n * The signature affirming the fee structure is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_GLOBAL_FEE_SIGNATURE_INVALID = 1817,\n\n\n /**\n * The signature affirming the profit drain is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_DRAIN_PROFITS_SIGNATURE_INVALID = 1818,\n\n\n /**\n * The signature affirming the AML decision is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_AML_DECISION_ADD_SIGNATURE_INVALID = 1825,\n\n\n /**\n * The AML officer specified is not allowed to make AML decisions right now.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_AML_DECISION_INVALID_OFFICER = 1826,\n\n\n /**\n * There is a more recent AML decision on file. The decision was rejected as timestamps of AML decisions must be monotonically increasing.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_AML_DECISION_MORE_RECENT_PRESENT = 1827,\n\n\n /**\n * There AML decision would impose an AML check of a type that is not provided by any KYC provider known to the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_AML_DECISION_UNKNOWN_CHECK = 1828,\n\n\n /**\n * The signature affirming the change in the AML officer status is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_UPDATE_AML_OFFICER_SIGNATURE_INVALID = 1830,\n\n\n /**\n * A more recent decision about the AML officer status is known to the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_AML_OFFICERS_MORE_RECENT_PRESENT = 1831,\n\n\n /**\n * The purse was previously created with different meta data.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_CREATE_CONFLICTING_META_DATA = 1850,\n\n\n /**\n * The purse was previously created with a different contract.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_CREATE_CONFLICTING_CONTRACT_STORED = 1851,\n\n\n /**\n * A coin signature for a deposit into the purse is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_CREATE_COIN_SIGNATURE_INVALID = 1852,\n\n\n /**\n * The purse expiration time is in the past.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_CREATE_EXPIRATION_BEFORE_NOW = 1853,\n\n\n /**\n * The purse expiration time is \"never\".\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_CREATE_EXPIRATION_IS_NEVER = 1854,\n\n\n /**\n * The purse signature over the purse meta data is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_CREATE_SIGNATURE_INVALID = 1855,\n\n\n /**\n * The signature over the encrypted contract is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_ECONTRACT_SIGNATURE_INVALID = 1856,\n\n\n /**\n * The signature from the exchange over the confirmation is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_CREATE_EXCHANGE_SIGNATURE_INVALID = 1857,\n\n\n /**\n * The coin was previously deposited with different meta data.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_DEPOSIT_CONFLICTING_META_DATA = 1858,\n\n\n /**\n * The encrypted contract was previously uploaded with different meta data.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_ECONTRACT_CONFLICTING_META_DATA = 1859,\n\n\n /**\n * The deposited amount is less than the purse fee.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_CREATE_PURSE_NEGATIVE_VALUE_AFTER_FEE = 1860,\n\n\n /**\n * The signature using the merge key is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_MERGE_INVALID_MERGE_SIGNATURE = 1876,\n\n\n /**\n * The signature using the reserve key is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_MERGE_INVALID_RESERVE_SIGNATURE = 1877,\n\n\n /**\n * The targeted purse is not yet full and thus cannot be merged. Retrying the request later may succeed.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_NOT_FULL = 1878,\n\n\n /**\n * The signature from the exchange over the confirmation is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_MERGE_EXCHANGE_SIGNATURE_INVALID = 1879,\n\n\n /**\n * The exchange of the target account is not a partner of this exchange.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MERGE_PURSE_PARTNER_UNKNOWN = 1880,\n\n\n /**\n * The signature affirming the new partner is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_ADD_PARTNER_SIGNATURE_INVALID = 1890,\n\n\n /**\n * Conflicting data for the partner already exists with the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_ADD_PARTNER_DATA_CONFLICT = 1891,\n\n\n /**\n * The auditor signature over the denomination meta data is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_AUDITORS_AUDITOR_SIGNATURE_INVALID = 1900,\n\n\n /**\n * The auditor that was specified is unknown to this exchange.\n * Returned with an HTTP status code of #MHD_HTTP_PRECONDITION_FAILED (412).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_AUDITORS_AUDITOR_UNKNOWN = 1901,\n\n\n /**\n * The auditor that was specified is no longer used by this exchange.\n * Returned with an HTTP status code of #MHD_HTTP_GONE (410).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_AUDITORS_AUDITOR_INACTIVE = 1902,\n\n\n /**\n * The signature affirming the wallet's KYC request was invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_KYC_WALLET_SIGNATURE_INVALID = 1925,\n\n\n /**\n * The exchange received an unexpected malformed response from its KYC backend.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_GATEWAY (502).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_KYC_PROOF_BACKEND_INVALID_RESPONSE = 1926,\n\n\n /**\n * The backend signaled an unexpected failure.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_GATEWAY (502).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_KYC_PROOF_BACKEND_ERROR = 1927,\n\n\n /**\n * The backend signaled an authorization failure.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_KYC_PROOF_BACKEND_AUTHORIZATION_FAILED = 1928,\n\n\n /**\n * The exchange is unaware of having made an the authorization request.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_KYC_PROOF_REQUEST_UNKNOWN = 1929,\n\n\n /**\n * The payto-URI hash did not match. Hence the request was denied.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_KYC_CHECK_AUTHORIZATION_FAILED = 1930,\n\n\n /**\n * The request used a logic specifier that is not known to the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_KYC_GENERIC_LOGIC_UNKNOWN = 1931,\n\n\n /**\n * The request requires a logic which is no longer configured at the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_KYC_GENERIC_LOGIC_GONE = 1932,\n\n\n /**\n * The logic plugin had a bug in its interaction with the KYC provider.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_KYC_GENERIC_LOGIC_BUG = 1933,\n\n\n /**\n * The exchange could not process the request with its KYC provider because the provider refused access to the service. This indicates some configuration issue at the Taler exchange operator.\n * Returned with an HTTP status code of #MHD_HTTP_NETWORK_AUTHENTICATION_REQUIRED (511).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_KYC_GENERIC_PROVIDER_ACCESS_REFUSED = 1934,\n\n\n /**\n * There was a timeout in the interaction between the exchange and the KYC provider. The most likely cause is some networking problem. Trying again later might succeed.\n * Returned with an HTTP status code of #MHD_HTTP_GATEWAY_TIMEOUT (504).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_KYC_GENERIC_PROVIDER_TIMEOUT = 1935,\n\n\n /**\n * The KYC provider responded with a status that was completely unexpected by the KYC logic of the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_GATEWAY (502).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_KYC_GENERIC_PROVIDER_UNEXPECTED_REPLY = 1936,\n\n\n /**\n * The rate limit of the exchange at the KYC provider has been exceeded. Trying much later might work.\n * Returned with an HTTP status code of #MHD_HTTP_SERVICE_UNAVAILABLE (503).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_KYC_GENERIC_PROVIDER_RATE_LIMIT_EXCEEDED = 1937,\n\n\n /**\n * The request to the webhook lacked proper authorization or authentication data.\n * Returned with an HTTP status code of #MHD_HTTP_UNAUTHORIZED (401).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_KYC_WEBHOOK_UNAUTHORIZED = 1938,\n\n\n /**\n * The exchange does not know a contract under the given contract public key.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_CONTRACTS_UNKNOWN = 1950,\n\n\n /**\n * The URL does not encode a valid exchange public key in its path.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_CONTRACTS_INVALID_CONTRACT_PUB = 1951,\n\n\n /**\n * The returned encrypted contract did not decrypt.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_CONTRACTS_DECRYPTION_FAILED = 1952,\n\n\n /**\n * The signature on the encrypted contract did not validate.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_CONTRACTS_SIGNATURE_INVALID = 1953,\n\n\n /**\n * The decrypted contract was malformed.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_CONTRACTS_DECODING_FAILED = 1954,\n\n\n /**\n * A coin signature for a deposit into the purse is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_DEPOSIT_COIN_SIGNATURE_INVALID = 1975,\n\n\n /**\n * It is too late to deposit coins into the purse.\n * Returned with an HTTP status code of #MHD_HTTP_GONE (410).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_DEPOSIT_DECIDED_ALREADY = 1976,\n\n\n /**\n * The backend could not find the merchant instance specified in the request.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GENERIC_INSTANCE_UNKNOWN = 2000,\n\n\n /**\n * The start and end-times in the wire fee structure leave a hole. This is not allowed.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GENERIC_HOLE_IN_WIRE_FEE_STRUCTURE = 2001,\n\n\n /**\n * The merchant was unable to obtain a valid answer to /wire from the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_GATEWAY (502).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GENERIC_EXCHANGE_WIRE_REQUEST_FAILED = 2002,\n\n\n /**\n * The proposal is not known to the backend.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GENERIC_ORDER_UNKNOWN = 2005,\n\n\n /**\n * The order provided to the backend could not be completed, because a product to be completed via inventory data is not actually in our inventory.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GENERIC_PRODUCT_UNKNOWN = 2006,\n\n\n /**\n * The tip ID is unknown. This could happen if the tip has expired.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GENERIC_TIP_ID_UNKNOWN = 2007,\n\n\n /**\n * The contract obtained from the merchant backend was malformed.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GENERIC_DB_CONTRACT_CONTENT_INVALID = 2008,\n\n\n /**\n * The order we found does not match the provided contract hash.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GENERIC_CONTRACT_HASH_DOES_NOT_MATCH_ORDER = 2009,\n\n\n /**\n * The exchange failed to provide a valid response to the merchant's /keys request.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_GATEWAY (502).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GENERIC_EXCHANGE_KEYS_FAILURE = 2010,\n\n\n /**\n * The exchange failed to respond to the merchant on time.\n * Returned with an HTTP status code of #MHD_HTTP_GATEWAY_TIMEOUT (504).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GENERIC_EXCHANGE_TIMEOUT = 2011,\n\n\n /**\n * The merchant failed to talk to the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GENERIC_EXCHANGE_CONNECT_FAILURE = 2012,\n\n\n /**\n * The exchange returned a maformed response.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_GATEWAY (502).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GENERIC_EXCHANGE_REPLY_MALFORMED = 2013,\n\n\n /**\n * The exchange returned an unexpected response status.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_GATEWAY (502).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GENERIC_EXCHANGE_UNEXPECTED_STATUS = 2014,\n\n\n /**\n * The merchant refused the request due to lack of authorization.\n * Returned with an HTTP status code of #MHD_HTTP_UNAUTHORIZED (401).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GENERIC_UNAUTHORIZED = 2015,\n\n\n /**\n * The merchant instance specified in the request was deleted.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GENERIC_INSTANCE_DELETED = 2016,\n\n\n /**\n * The backend could not find the inbound wire transfer specified in the request.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GENERIC_TRANSFER_UNKNOWN = 2017,\n\n\n /**\n * The backend could not find the template(id) because it is not exist.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GENERIC_TEMPLATE_UNKNOWN = 2018,\n\n\n /**\n * The backend could not find the webhook(id) because it is not exist.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GENERIC_WEBHOOK_UNKNOWN = 2019,\n\n\n /**\n * The backend could not find the webhook(serial) because it is not exist.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GENERIC_PENDING_WEBHOOK_UNKNOWN = 2020,\n\n\n /**\n * The exchange failed to provide a valid answer to the tracking request, thus those details are not in the response.\n * Returned with an HTTP status code of #MHD_HTTP_OK (200).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GET_ORDERS_EXCHANGE_TRACKING_FAILURE = 2100,\n\n\n /**\n * The merchant backend failed to construct the request for tracking to the exchange, thus tracking details are not in the response.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GET_ORDERS_ID_EXCHANGE_REQUEST_FAILURE = 2103,\n\n\n /**\n * The merchant backend failed trying to contact the exchange for tracking details, thus those details are not in the response.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GET_ORDERS_ID_EXCHANGE_LOOKUP_START_FAILURE = 2104,\n\n\n /**\n * The claim token used to authenticate the client is invalid for this order.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GET_ORDERS_ID_INVALID_TOKEN = 2105,\n\n\n /**\n * The contract terms hash used to authenticate the client is invalid for this order.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GET_ORDERS_ID_INVALID_CONTRACT_HASH = 2106,\n\n\n /**\n * The exchange responded saying that funds were insufficient (for example, due to double-spending).\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_INSUFFICIENT_FUNDS = 2150,\n\n\n /**\n * The denomination key used for payment is not listed among the denomination keys of the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_DENOMINATION_KEY_NOT_FOUND = 2151,\n\n\n /**\n * The denomination key used for payment is not audited by an auditor approved by the merchant.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_DENOMINATION_KEY_AUDITOR_FAILURE = 2152,\n\n\n /**\n * There was an integer overflow totaling up the amounts or deposit fees in the payment.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_AMOUNT_OVERFLOW = 2153,\n\n\n /**\n * The deposit fees exceed the total value of the payment.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_FEES_EXCEED_PAYMENT = 2154,\n\n\n /**\n * After considering deposit and wire fees, the payment is insufficient to satisfy the required amount for the contract. The client should revisit the logic used to calculate fees it must cover.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_ACCEPTABLE (406).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_INSUFFICIENT_DUE_TO_FEES = 2155,\n\n\n /**\n * Even if we do not consider deposit and wire fees, the payment is insufficient to satisfy the required amount for the contract.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_ACCEPTABLE (406).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_PAYMENT_INSUFFICIENT = 2156,\n\n\n /**\n * The signature over the contract of one of the coins was invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_COIN_SIGNATURE_INVALID = 2157,\n\n\n /**\n * When we tried to find information about the exchange to issue the deposit, we failed. This usually only happens if the merchant backend is somehow unable to get its own HTTP client logic to work.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_EXCHANGE_LOOKUP_FAILED = 2158,\n\n\n /**\n * The refund deadline in the contract is after the transfer deadline.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_REFUND_DEADLINE_PAST_WIRE_TRANSFER_DEADLINE = 2159,\n\n\n /**\n * The order was already paid (maybe by another wallet).\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_ALREADY_PAID = 2160,\n\n\n /**\n * The payment is too late, the offer has expired.\n * Returned with an HTTP status code of #MHD_HTTP_GONE (410).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_OFFER_EXPIRED = 2161,\n\n\n /**\n * The \"merchant\" field is missing in the proposal data. This is an internal error as the proposal is from the merchant's own database at this point.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_MERCHANT_FIELD_MISSING = 2162,\n\n\n /**\n * Failed to locate merchant's account information matching the wire hash given in the proposal.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_WIRE_HASH_UNKNOWN = 2163,\n\n\n /**\n * The deposit time for the denomination has expired.\n * Returned with an HTTP status code of #MHD_HTTP_GONE (410).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_DENOMINATION_DEPOSIT_EXPIRED = 2165,\n\n\n /**\n * The exchange of the deposited coin charges a wire fee that could not be added to the total (total amount too high).\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_EXCHANGE_WIRE_FEE_ADDITION_FAILED = 2166,\n\n\n /**\n * The contract was not fully paid because of refunds. Note that clients MAY treat this as paid if, for example, contracts must be executed despite of refunds.\n * Returned with an HTTP status code of #MHD_HTTP_PAYMENT_REQUIRED (402).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_REFUNDED = 2167,\n\n\n /**\n * According to our database, we have refunded more than we were paid (which should not be possible).\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_REFUNDS_EXCEED_PAYMENTS = 2168,\n\n\n /**\n * Legacy stuff. Remove me with protocol v1.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n DEAD_QQQ_PAY_MERCHANT_POST_ORDERS_ID_ABORT_REFUND_REFUSED_PAYMENT_COMPLETE = 2169,\n\n\n /**\n * The payment failed at the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_GATEWAY (502).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_EXCHANGE_FAILED = 2170,\n\n\n /**\n * The payment required a minimum age but one of the coins (of a denomination with support for age restriction) did not provide any age_commitment.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_AGE_COMMITMENT_MISSING = 2171,\n\n\n /**\n * The payment required a minimum age but one of the coins provided an age_commitment that contained a wrong number of public keys compared to the number of age groups defined in the denomination of the coin.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_AGE_COMMITMENT_SIZE_MISMATCH = 2172,\n\n\n /**\n * The payment required a minimum age but one of the coins provided a minimum_age_sig that couldn't be verified with the given age_commitment for that particular minimum age.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_AGE_VERIFICATION_FAILED = 2173,\n\n\n /**\n * The payment required no minimum age but one of the coins (of a denomination with support for age restriction) did not provide the required h_age_commitment.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_AGE_COMMITMENT_HASH_MISSING = 2174,\n\n\n /**\n * The contract hash does not match the given order ID.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAID_CONTRACT_HASH_MISMATCH = 2200,\n\n\n /**\n * The signature of the merchant is not valid for the given contract hash.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAID_COIN_SIGNATURE_INVALID = 2201,\n\n\n /**\n * The merchant failed to send the exchange the refund request.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_ABORT_EXCHANGE_REFUND_FAILED = 2251,\n\n\n /**\n * The merchant failed to find the exchange to process the lookup.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_ABORT_EXCHANGE_LOOKUP_FAILED = 2252,\n\n\n /**\n * The merchant could not find the contract.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_ABORT_CONTRACT_NOT_FOUND = 2253,\n\n\n /**\n * The payment was already completed and thus cannot be aborted anymore.\n * Returned with an HTTP status code of #MHD_HTTP_PRECONDITION_FAILED (412).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_ABORT_REFUND_REFUSED_PAYMENT_COMPLETE = 2254,\n\n\n /**\n * The hash provided by the wallet does not match the order.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_ABORT_CONTRACT_HASH_MISSMATCH = 2255,\n\n\n /**\n * The array of coins cannot be empty.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_ABORT_COINS_ARRAY_EMPTY = 2256,\n\n\n /**\n * We could not claim the order because the backend is unaware of it.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_CLAIM_NOT_FOUND = 2300,\n\n\n /**\n * We could not claim the order because someone else claimed it first.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_CLAIM_ALREADY_CLAIMED = 2301,\n\n\n /**\n * The client-side experienced an internal failure.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_CLAIM_CLIENT_INTERNAL_FAILURE = 2302,\n\n\n /**\n * The backend failed to sign the refund request.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_REFUND_SIGNATURE_FAILED = 2350,\n\n\n /**\n * The client failed to unblind the signature returned by the merchant.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_TIP_PICKUP_UNBLIND_FAILURE = 2400,\n\n\n /**\n * The exchange returned a failure code for the withdraw operation.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_GATEWAY (502).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_TIP_PICKUP_EXCHANGE_ERROR = 2403,\n\n\n /**\n * The merchant failed to add up the amounts to compute the pick up value.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_TIP_PICKUP_SUMMATION_FAILED = 2404,\n\n\n /**\n * The tip expired.\n * Returned with an HTTP status code of #MHD_HTTP_GONE (410).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_TIP_PICKUP_HAS_EXPIRED = 2405,\n\n\n /**\n * The requested withdraw amount exceeds the amount remaining to be picked up.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_TIP_PICKUP_AMOUNT_EXCEEDS_TIP_REMAINING = 2406,\n\n\n /**\n * The merchant did not find the specified denomination key in the exchange's key set.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_TIP_PICKUP_DENOMINATION_UNKNOWN = 2407,\n\n\n /**\n * The backend lacks a wire transfer method configuration option for the given instance. Thus, this instance is unavailable (not findable for creating new orders).\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_ORDERS_INSTANCE_CONFIGURATION_LACKS_WIRE = 2500,\n\n\n /**\n * The proposal had no timestamp and the backend failed to obtain the local time. Likely to be an internal error.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_ORDERS_NO_LOCALTIME = 2501,\n\n\n /**\n * The order provided to the backend could not be parsed, some required fields were missing or ill-formed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_ORDERS_PROPOSAL_PARSE_ERROR = 2502,\n\n\n /**\n * The backend encountered an error: the proposal already exists.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_ORDERS_ALREADY_EXISTS = 2503,\n\n\n /**\n * The request is invalid: the wire deadline is before the refund deadline.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_ORDERS_REFUND_AFTER_WIRE_DEADLINE = 2504,\n\n\n /**\n * The request is invalid: a delivery date was given, but it is in the past.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_ORDERS_DELIVERY_DATE_IN_PAST = 2505,\n\n\n /**\n * The request is invalid: the wire deadline for the order would be \"never\".\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_ORDERS_WIRE_DEADLINE_IS_NEVER = 2506,\n\n\n /**\n * The request is invalid: a payment deadline was given, but it is in the past.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_ORDERS_PAY_DEADLINE_IN_PAST = 2507,\n\n\n /**\n * The request is invalid: a refund deadline was given, but it is in the past.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_ORDERS_REFUND_DEADLINE_IN_PAST = 2508,\n\n\n /**\n * One of the paths to forget is malformed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_PATCH_ORDERS_ID_FORGET_PATH_SYNTAX_INCORRECT = 2510,\n\n\n /**\n * One of the paths to forget was not marked as forgettable.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_PATCH_ORDERS_ID_FORGET_PATH_NOT_FORGETTABLE = 2511,\n\n\n /**\n * The order provided to the backend could not be deleted, our offer is still valid and awaiting payment.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_DELETE_ORDERS_AWAITING_PAYMENT = 2520,\n\n\n /**\n * The order provided to the backend could not be deleted as the order was already paid.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_DELETE_ORDERS_ALREADY_PAID = 2521,\n\n\n /**\n * The amount to be refunded is inconsistent: either is lower than the previous amount being awarded, or it is too big to be paid back. In this second case, the fault stays on the business dept. side.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_ORDERS_ID_REFUND_INCONSISTENT_AMOUNT = 2530,\n\n\n /**\n * The frontend gave an unpaid order id to issue the refund to.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_ORDERS_ID_REFUND_ORDER_UNPAID = 2531,\n\n\n /**\n * The refund delay was set to 0 and thus no refunds are allowed for this order.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_ORDERS_ID_REFUND_NOT_ALLOWED_BY_CONTRACT = 2532,\n\n\n /**\n * The exchange says it does not know this transfer.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_GATEWAY (502).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_TRANSFERS_EXCHANGE_UNKNOWN = 2550,\n\n\n /**\n * We internally failed to execute the /track/transfer request.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_GATEWAY (502).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_TRANSFERS_REQUEST_ERROR = 2551,\n\n\n /**\n * The amount transferred differs between what was submitted and what the exchange claimed.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_TRANSFERS_CONFLICTING_TRANSFERS = 2552,\n\n\n /**\n * The exchange gave conflicting information about a coin which has been wire transferred.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_TRANSFERS_CONFLICTING_REPORTS = 2553,\n\n\n /**\n * The exchange charged a different wire fee than what it originally advertised, and it is higher.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_GATEWAY (502).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_TRANSFERS_BAD_WIRE_FEE = 2554,\n\n\n /**\n * We did not find the account that the transfer was made to.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_TRANSFERS_ACCOUNT_NOT_FOUND = 2555,\n\n\n /**\n * The backend could not delete the transfer as the echange already replied to our inquiry about it and we have integrated the result.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_DELETE_TRANSFERS_ALREADY_CONFIRMED = 2556,\n\n\n /**\n * The backend was previously informed about a wire transfer with the same ID but a different amount. Multiple wire transfers with the same ID are not allowed. If the new amount is correct, the old transfer should first be deleted.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_TRANSFERS_CONFLICTING_SUBMISSION = 2557,\n\n\n /**\n * The merchant backend cannot create an instance under the given identifier as one already exists. Use PATCH to modify the existing entry.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_INSTANCES_ALREADY_EXISTS = 2600,\n\n\n /**\n * The merchant backend cannot create an instance because the authentication configuration field is malformed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_INSTANCES_BAD_AUTH = 2601,\n\n\n /**\n * The merchant backend cannot update an instance's authentication settings because the provided authentication settings are malformed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_INSTANCE_AUTH_BAD_AUTH = 2602,\n\n\n /**\n * The merchant backend cannot create an instance under the given identifier, the previous one was deleted but must be purged first.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_INSTANCES_PURGE_REQUIRED = 2603,\n\n\n /**\n * The merchant backend cannot update an instance under the given identifier, the previous one was deleted but must be purged first.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_PATCH_INSTANCES_PURGE_REQUIRED = 2625,\n\n\n /**\n * The product ID exists.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_PRODUCTS_CONFLICT_PRODUCT_EXISTS = 2650,\n\n\n /**\n * The update would have reduced the total amount of product lost, which is not allowed.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_PATCH_PRODUCTS_TOTAL_LOST_REDUCED = 2660,\n\n\n /**\n * The update would have mean that more stocks were lost than what remains from total inventory after sales, which is not allowed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_PATCH_PRODUCTS_TOTAL_LOST_EXCEEDS_STOCKS = 2661,\n\n\n /**\n * The update would have reduced the total amount of product in stock, which is not allowed.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_PATCH_PRODUCTS_TOTAL_STOCKED_REDUCED = 2662,\n\n\n /**\n * The update would have reduced the total amount of product sold, which is not allowed.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_PATCH_PRODUCTS_TOTAL_SOLD_REDUCED = 2663,\n\n\n /**\n * The lock request is for more products than we have left (unlocked) in stock.\n * Returned with an HTTP status code of #MHD_HTTP_GONE (410).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_PRODUCTS_LOCK_INSUFFICIENT_STOCKS = 2670,\n\n\n /**\n * The deletion request is for a product that is locked.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_DELETE_PRODUCTS_CONFLICTING_LOCK = 2680,\n\n\n /**\n * The requested wire method is not supported by the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_RESERVES_UNSUPPORTED_WIRE_METHOD = 2700,\n\n\n /**\n * The reserve could not be deleted because it is unknown.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_DELETE_RESERVES_NO_SUCH_RESERVE = 2710,\n\n\n /**\n * The reserve that was used to fund the tips has expired.\n * Returned with an HTTP status code of #MHD_HTTP_GONE (410).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_TIP_AUTHORIZE_RESERVE_EXPIRED = 2750,\n\n\n /**\n * The reserve that was used to fund the tips was not found in the DB.\n * Returned with an HTTP status code of #MHD_HTTP_SERVICE_UNAVAILABLE (503).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_TIP_AUTHORIZE_RESERVE_UNKNOWN = 2751,\n\n\n /**\n * The backend knows the instance that was supposed to support the tip, and it was configured for tipping. However, the funds remaining are insufficient to cover the tip, and the merchant should top up the reserve.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_TIP_AUTHORIZE_INSUFFICIENT_FUNDS = 2752,\n\n\n /**\n * The backend failed to find a reserve needed to authorize the tip.\n * Returned with an HTTP status code of #MHD_HTTP_SERVICE_UNAVAILABLE (503).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_TIP_AUTHORIZE_RESERVE_NOT_FOUND = 2753,\n\n\n /**\n * The merchant backend encountered a failure in computing the deposit total.\n * Returned with an HTTP status code of #MHD_HTTP_OK (200).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_GET_ORDERS_ID_AMOUNT_ARITHMETIC_FAILURE = 2800,\n\n\n /**\n * The template ID already exists.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_TEMPLATES_CONFLICT_TEMPLATE_EXISTS = 2850,\n\n\n /**\n * Amount given in the using template and in the template contract. There is a conflict.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_USING_TEMPLATES_AMOUNT_CONFLICT_TEMPLATES_CONTRACT_AMOUNT = 2860,\n\n\n /**\n * Subject given in the using template and in the template contract. There is a conflict.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_USING_TEMPLATES_SUMMARY_CONFLICT_TEMPLATES_CONTRACT_SUBJECT = 2861,\n\n\n /**\n * Amount not given in the using template and in the template contract. There is a conflict.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_USING_TEMPLATES_NO_AMOUNT = 2862,\n\n\n /**\n * Subject not given in the using template and in the template contract. There is a conflict.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_USING_TEMPLATES_NO_SUMMARY = 2863,\n\n\n /**\n * The webhook ID elready exists.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_WEBHOOKS_CONFLICT_WEBHOOK_EXISTS = 2900,\n\n\n /**\n * The webhook serial elready exists.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_PENDING_WEBHOOKS_CONFLICT_PENDING_WEBHOOK_EXISTS = 2910,\n\n\n /**\n * The signature from the exchange on the deposit confirmation is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n AUDITOR_DEPOSIT_CONFIRMATION_SIGNATURE_INVALID = 3100,\n\n\n /**\n * The exchange key used for the signature on the deposit confirmation was revoked.\n * Returned with an HTTP status code of #MHD_HTTP_GONE (410).\n * (A value of 0 indicates that the error is generated client-side).\n */\n AUDITOR_EXCHANGE_SIGNING_KEY_REVOKED = 3101,\n\n\n /**\n * Wire transfer attempted with credit and debit party being the same bank account.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n BANK_SAME_ACCOUNT = 5101,\n\n\n /**\n * Wire transfer impossible, due to financial limitation of the party that attempted the payment.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n BANK_UNALLOWED_DEBIT = 5102,\n\n\n /**\n * Negative numbers are not allowed (as value and/or fraction) to instantiate an amount object.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n BANK_NEGATIVE_NUMBER_AMOUNT = 5103,\n\n\n /**\n * A too big number was used (as value and/or fraction) to instantiate an amount object.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n BANK_NUMBER_TOO_BIG = 5104,\n\n\n /**\n * Could not login for the requested operation.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n BANK_LOGIN_FAILED = 5105,\n\n\n /**\n * The bank account referenced in the requested operation was not found.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n BANK_UNKNOWN_ACCOUNT = 5106,\n\n\n /**\n * The transaction referenced in the requested operation (typically a reject operation), was not found.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n BANK_TRANSACTION_NOT_FOUND = 5107,\n\n\n /**\n * Bank received a malformed amount string.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n BANK_BAD_FORMAT_AMOUNT = 5108,\n\n\n /**\n * The client does not own the account credited by the transaction which is to be rejected, so it has no rights do reject it.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n BANK_REJECT_NO_RIGHTS = 5109,\n\n\n /**\n * This error code is returned when no known exception types captured the exception.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n BANK_UNMANAGED_EXCEPTION = 5110,\n\n\n /**\n * This error code is used for all those exceptions that do not really need a specific error code to return to the client. Used for example when a client is trying to register with a unavailable username.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n BANK_SOFT_EXCEPTION = 5111,\n\n\n /**\n * The request UID for a request to transfer funds has already been used, but with different details for the transfer.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n BANK_TRANSFER_REQUEST_UID_REUSED = 5112,\n\n\n /**\n * The withdrawal operation already has a reserve selected. The current request conflicts with the existing selection.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n BANK_WITHDRAWAL_OPERATION_RESERVE_SELECTION_CONFLICT = 5113,\n\n\n /**\n * The wire transfer subject duplicates an existing reserve public key. But wire transfer subjects must be unique.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n BANK_DUPLICATE_RESERVE_PUB_SUBJECT = 5114,\n\n\n /**\n * The client requested a transaction that is so far in the past, that it has been forgotten by the bank.\n * Returned with an HTTP status code of #MHD_HTTP_GONE (410).\n * (A value of 0 indicates that the error is generated client-side).\n */\n BANK_ANCIENT_TRANSACTION_GONE = 5115,\n\n\n /**\n * The client attempted to abort a transaction that was already confirmed.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n BANK_ABORT_CONFIRM_CONFLICT = 5116,\n\n\n /**\n * The client attempted to confirm a transaction that was already aborted.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n BANK_CONFIRM_ABORT_CONFLICT = 5117,\n\n\n /**\n * The client attempted to register an account with the same name.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n BANK_REGISTER_CONFLICT = 5118,\n\n\n /**\n * The client attempted to confirm a withdrawal operation before the wallet posted the required details.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n BANK_POST_WITHDRAWAL_OPERATION_REQUIRED = 5119,\n\n\n /**\n * The sync service failed find the account in its database.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n SYNC_ACCOUNT_UNKNOWN = 6100,\n\n\n /**\n * The SHA-512 hash provided in the If-None-Match header is malformed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n SYNC_BAD_IF_NONE_MATCH = 6101,\n\n\n /**\n * The SHA-512 hash provided in the If-Match header is malformed or missing.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n SYNC_BAD_IF_MATCH = 6102,\n\n\n /**\n * The signature provided in the \"Sync-Signature\" header is malformed or missing.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n SYNC_BAD_SYNC_SIGNATURE = 6103,\n\n\n /**\n * The signature provided in the \"Sync-Signature\" header does not match the account, old or new Etags.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n SYNC_INVALID_SIGNATURE = 6104,\n\n\n /**\n * The \"Content-length\" field for the upload is not a number.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n SYNC_MALFORMED_CONTENT_LENGTH = 6105,\n\n\n /**\n * The \"Content-length\" field for the upload is too big based on the server's terms of service.\n * Returned with an HTTP status code of #MHD_HTTP_PAYLOAD_TOO_LARGE (413).\n * (A value of 0 indicates that the error is generated client-side).\n */\n SYNC_EXCESSIVE_CONTENT_LENGTH = 6106,\n\n\n /**\n * The server is out of memory to handle the upload. Trying again later may succeed.\n * Returned with an HTTP status code of #MHD_HTTP_PAYLOAD_TOO_LARGE (413).\n * (A value of 0 indicates that the error is generated client-side).\n */\n SYNC_OUT_OF_MEMORY_ON_CONTENT_LENGTH = 6107,\n\n\n /**\n * The uploaded data does not match the Etag.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n SYNC_INVALID_UPLOAD = 6108,\n\n\n /**\n * HTTP server experienced a timeout while awaiting promised payment.\n * Returned with an HTTP status code of #MHD_HTTP_REQUEST_TIMEOUT (408).\n * (A value of 0 indicates that the error is generated client-side).\n */\n SYNC_PAYMENT_GENERIC_TIMEOUT = 6109,\n\n\n /**\n * Sync could not setup the payment request with its own backend.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n SYNC_PAYMENT_CREATE_BACKEND_ERROR = 6110,\n\n\n /**\n * The sync service failed find the backup to be updated in its database.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n SYNC_PREVIOUS_BACKUP_UNKNOWN = 6111,\n\n\n /**\n * The \"Content-length\" field for the upload is missing.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n SYNC_MISSING_CONTENT_LENGTH = 6112,\n\n\n /**\n * Sync had problems communicating with its payment backend.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_GATEWAY (502).\n * (A value of 0 indicates that the error is generated client-side).\n */\n SYNC_GENERIC_BACKEND_ERROR = 6113,\n\n\n /**\n * Sync experienced a timeout communicating with its payment backend.\n * Returned with an HTTP status code of #MHD_HTTP_GATEWAY_TIMEOUT (504).\n * (A value of 0 indicates that the error is generated client-side).\n */\n SYNC_GENERIC_BACKEND_TIMEOUT = 6114,\n\n\n /**\n * The wallet does not implement a version of the exchange protocol that is compatible with the protocol version of the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_IMPLEMENTED (501).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_EXCHANGE_PROTOCOL_VERSION_INCOMPATIBLE = 7000,\n\n\n /**\n * The wallet encountered an unexpected exception. This is likely a bug in the wallet implementation.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_UNEXPECTED_EXCEPTION = 7001,\n\n\n /**\n * The wallet received a response from a server, but the response can't be parsed.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_RECEIVED_MALFORMED_RESPONSE = 7002,\n\n\n /**\n * The wallet tried to make a network request, but it received no response.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_NETWORK_ERROR = 7003,\n\n\n /**\n * The wallet tried to make a network request, but it was throttled.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_HTTP_REQUEST_THROTTLED = 7004,\n\n\n /**\n * The wallet made a request to a service, but received an error response it does not know how to handle.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_UNEXPECTED_REQUEST_ERROR = 7005,\n\n\n /**\n * The denominations offered by the exchange are insufficient. Likely the exchange is badly configured or not maintained.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_EXCHANGE_DENOMINATIONS_INSUFFICIENT = 7006,\n\n\n /**\n * The wallet does not support the operation requested by a client.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_CORE_API_OPERATION_UNKNOWN = 7007,\n\n\n /**\n * The given taler://pay URI is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_INVALID_TALER_PAY_URI = 7008,\n\n\n /**\n * The signature on a coin by the exchange's denomination key is invalid after unblinding it.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_EXCHANGE_COIN_SIGNATURE_INVALID = 7009,\n\n\n /**\n * The exchange does not know about the reserve (yet), and thus withdrawal can't progress.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_EXCHANGE_WITHDRAW_RESERVE_UNKNOWN_AT_EXCHANGE = 7010,\n\n\n /**\n * The wallet core service is not available.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_CORE_NOT_AVAILABLE = 7011,\n\n\n /**\n * The bank has aborted a withdrawal operation, and thus a withdrawal can't complete.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_WITHDRAWAL_OPERATION_ABORTED_BY_BANK = 7012,\n\n\n /**\n * An HTTP request made by the wallet timed out.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_HTTP_REQUEST_GENERIC_TIMEOUT = 7013,\n\n\n /**\n * The order has already been claimed by another wallet.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_ORDER_ALREADY_CLAIMED = 7014,\n\n\n /**\n * A group of withdrawal operations (typically for the same reserve at the same exchange) has errors and will be tried again later.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_WITHDRAWAL_GROUP_INCOMPLETE = 7015,\n\n\n /**\n * The signature on a coin by the exchange's denomination key (obtained through the merchant via tipping) is invalid after unblinding it.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_TIPPING_COIN_SIGNATURE_INVALID = 7016,\n\n\n /**\n * The wallet does not implement a version of the bank integration API that is compatible with the version offered by the bank.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_BANK_INTEGRATION_PROTOCOL_VERSION_INCOMPATIBLE = 7017,\n\n\n /**\n * The wallet processed a taler://pay URI, but the merchant base URL in the downloaded contract terms does not match the merchant base URL derived from the URI.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_CONTRACT_TERMS_BASE_URL_MISMATCH = 7018,\n\n\n /**\n * The merchant's signature on the contract terms is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_CONTRACT_TERMS_SIGNATURE_INVALID = 7019,\n\n\n /**\n * The contract terms given by the merchant are malformed.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_CONTRACT_TERMS_MALFORMED = 7020,\n\n\n /**\n * A pending operation failed, and thus the request can't be completed.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_PENDING_OPERATION_FAILED = 7021,\n\n\n /**\n * A payment was attempted, but the merchant had an internal server error (5xx).\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_PAY_MERCHANT_SERVER_ERROR = 7022,\n\n\n /**\n * The crypto worker failed.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_CRYPTO_WORKER_ERROR = 7023,\n\n\n /**\n * The crypto worker received a bad request.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_CRYPTO_WORKER_BAD_REQUEST = 7024,\n\n\n /**\n * A KYC step is required before withdrawal can proceed.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_WITHDRAWAL_KYC_REQUIRED = 7025,\n\n\n /**\n * The wallet does not have sufficient balance to create a deposit group.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_DEPOSIT_GROUP_INSUFFICIENT_BALANCE = 7026,\n\n\n /**\n * The wallet does not have sufficient balance to create a peer push payment.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_PEER_PUSH_PAYMENT_INSUFFICIENT_BALANCE = 7027,\n\n\n /**\n * The wallet does not have sufficient balance to pay for an invoice.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_PEER_PULL_PAYMENT_INSUFFICIENT_BALANCE = 7028,\n\n\n /**\n * A group of refresh operations has errors and will be tried again later.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_REFRESH_GROUP_INCOMPLETE = 7029,\n\n\n /**\n * We encountered a timeout with our payment backend.\n * Returned with an HTTP status code of #MHD_HTTP_GATEWAY_TIMEOUT (504).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_GENERIC_BACKEND_TIMEOUT = 8000,\n\n\n /**\n * The backend requested payment, but the request is malformed.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_GENERIC_INVALID_PAYMENT_REQUEST = 8001,\n\n\n /**\n * The backend got an unexpected reply from the payment processor.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_GATEWAY (502).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_GENERIC_BACKEND_ERROR = 8002,\n\n\n /**\n * The \"Content-length\" field for the upload is missing.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_GENERIC_MISSING_CONTENT_LENGTH = 8003,\n\n\n /**\n * The \"Content-length\" field for the upload is malformed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_GENERIC_MALFORMED_CONTENT_LENGTH = 8004,\n\n\n /**\n * The backend failed to setup an order with the payment processor.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_GATEWAY (502).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_GENERIC_ORDER_CREATE_BACKEND_ERROR = 8005,\n\n\n /**\n * The backend was not authorized to check for payment with the payment processor.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_GENERIC_PAYMENT_CHECK_UNAUTHORIZED = 8006,\n\n\n /**\n * The backend could not check payment status with the payment processor.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_GENERIC_PAYMENT_CHECK_START_FAILED = 8007,\n\n\n /**\n * The Anastasis provider could not be reached.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_GENERIC_PROVIDER_UNREACHABLE = 8008,\n\n\n /**\n * HTTP server experienced a timeout while awaiting promised payment.\n * Returned with an HTTP status code of #MHD_HTTP_REQUEST_TIMEOUT (408).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_PAYMENT_GENERIC_TIMEOUT = 8009,\n\n\n /**\n * The key share is unknown to the provider.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_TRUTH_UNKNOWN = 8108,\n\n\n /**\n * The authorization method used for the key share is no longer supported by the provider.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_TRUTH_AUTHORIZATION_METHOD_NO_LONGER_SUPPORTED = 8109,\n\n\n /**\n * The client needs to respond to the challenge.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_TRUTH_CHALLENGE_RESPONSE_REQUIRED = 8110,\n\n\n /**\n * The client's response to the challenge was invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_TRUTH_CHALLENGE_FAILED = 8111,\n\n\n /**\n * The backend is not aware of having issued the provided challenge code. Either this is the wrong code, or it has expired.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_TRUTH_CHALLENGE_UNKNOWN = 8112,\n\n\n /**\n * The backend failed to initiate the authorization process.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_TRUTH_AUTHORIZATION_START_FAILED = 8114,\n\n\n /**\n * The authorization succeeded, but the key share is no longer available.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_TRUTH_KEY_SHARE_GONE = 8115,\n\n\n /**\n * The backend forgot the order we asked the client to pay for\n * Returned with an HTTP status code of #MHD_HTTP_BAD_GATEWAY (502).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_TRUTH_ORDER_DISAPPEARED = 8116,\n\n\n /**\n * The backend itself reported a bad exchange interaction.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_GATEWAY (502).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_TRUTH_BACKEND_EXCHANGE_BAD = 8117,\n\n\n /**\n * The backend reported a payment status we did not expect.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_TRUTH_UNEXPECTED_PAYMENT_STATUS = 8118,\n\n\n /**\n * The backend failed to setup the order for payment.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_GATEWAY (502).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_TRUTH_PAYMENT_CREATE_BACKEND_ERROR = 8119,\n\n\n /**\n * The decryption of the key share failed with the provided key.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_TRUTH_DECRYPTION_FAILED = 8120,\n\n\n /**\n * The request rate is too high. The server is refusing requests to guard against brute-force attacks.\n * Returned with an HTTP status code of #MHD_HTTP_TOO_MANY_REQUESTS (429).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_TRUTH_RATE_LIMITED = 8121,\n\n\n /**\n * A request to issue a challenge is not valid for this authentication method.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_TRUTH_CHALLENGE_WRONG_METHOD = 8123,\n\n\n /**\n * The backend failed to store the key share because the UUID is already in use.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_TRUTH_UPLOAD_UUID_EXISTS = 8150,\n\n\n /**\n * The backend failed to store the key share because the authorization method is not supported.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_TRUTH_UPLOAD_METHOD_NOT_SUPPORTED = 8151,\n\n\n /**\n * The provided phone number is not an acceptable number.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_SMS_PHONE_INVALID = 8200,\n\n\n /**\n * Failed to run the SMS transmission helper process.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_SMS_HELPER_EXEC_FAILED = 8201,\n\n\n /**\n * Provider failed to send SMS. Helper terminated with a non-successful result.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_SMS_HELPER_COMMAND_FAILED = 8202,\n\n\n /**\n * The provided email address is not an acceptable address.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_EMAIL_INVALID = 8210,\n\n\n /**\n * Failed to run the E-mail transmission helper process.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_EMAIL_HELPER_EXEC_FAILED = 8211,\n\n\n /**\n * Provider failed to send E-mail. Helper terminated with a non-successful result.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_EMAIL_HELPER_COMMAND_FAILED = 8212,\n\n\n /**\n * The provided postal address is not an acceptable address.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_POST_INVALID = 8220,\n\n\n /**\n * Failed to run the mail transmission helper process.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_POST_HELPER_EXEC_FAILED = 8221,\n\n\n /**\n * Provider failed to send mail. Helper terminated with a non-successful result.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_POST_HELPER_COMMAND_FAILED = 8222,\n\n\n /**\n * The provided IBAN address is not an acceptable IBAN.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_IBAN_INVALID = 8230,\n\n\n /**\n * The provider has not yet received the IBAN wire transfer authorizing the disclosure of the key share.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_IBAN_MISSING_TRANSFER = 8231,\n\n\n /**\n * The backend did not find a TOTP key in the data provided.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_TOTP_KEY_MISSING = 8240,\n\n\n /**\n * The key provided does not satisfy the format restrictions for an Anastasis TOTP key.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_TOTP_KEY_INVALID = 8241,\n\n\n /**\n * The given if-none-match header is malformed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_POLICY_BAD_IF_NONE_MATCH = 8301,\n\n\n /**\n * The server is out of memory to handle the upload. Trying again later may succeed.\n * Returned with an HTTP status code of #MHD_HTTP_PAYLOAD_TOO_LARGE (413).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_POLICY_OUT_OF_MEMORY_ON_CONTENT_LENGTH = 8304,\n\n\n /**\n * The signature provided in the \"Anastasis-Policy-Signature\" header is malformed or missing.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_POLICY_BAD_SIGNATURE = 8305,\n\n\n /**\n * The given if-match header is malformed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_POLICY_BAD_IF_MATCH = 8306,\n\n\n /**\n * The uploaded data does not match the Etag.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_POLICY_INVALID_UPLOAD = 8307,\n\n\n /**\n * The provider is unaware of the requested policy.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_POLICY_NOT_FOUND = 8350,\n\n\n /**\n * The given action is invalid for the current state of the reducer.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_ACTION_INVALID = 8400,\n\n\n /**\n * The given state of the reducer is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_STATE_INVALID = 8401,\n\n\n /**\n * The given input to the reducer is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_INPUT_INVALID = 8402,\n\n\n /**\n * The selected authentication method does not work for the Anastasis provider.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_AUTHENTICATION_METHOD_NOT_SUPPORTED = 8403,\n\n\n /**\n * The given input and action do not work for the current state.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_INPUT_INVALID_FOR_STATE = 8404,\n\n\n /**\n * We experienced an unexpected failure interacting with the backend.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_BACKEND_FAILURE = 8405,\n\n\n /**\n * The contents of a resource file did not match our expectations.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_RESOURCE_MALFORMED = 8406,\n\n\n /**\n * A required resource file is missing.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_RESOURCE_MISSING = 8407,\n\n\n /**\n * An input did not match the regular expression.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_INPUT_REGEX_FAILED = 8408,\n\n\n /**\n * An input did not match the custom validation logic.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_INPUT_VALIDATION_FAILED = 8409,\n\n\n /**\n * Our attempts to download the recovery document failed with all providers. Most likely the personal information you entered differs from the information you provided during the backup process and you should go back to the previous step. Alternatively, if you used a backup provider that is unknown to this application, you should add that provider manually.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_POLICY_LOOKUP_FAILED = 8410,\n\n\n /**\n * Anastasis provider reported a fatal failure.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_BACKUP_PROVIDER_FAILED = 8411,\n\n\n /**\n * Anastasis provider failed to respond to the configuration request.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_PROVIDER_CONFIG_FAILED = 8412,\n\n\n /**\n * The policy we downloaded is malformed. Must have been a client error while creating the backup.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_POLICY_MALFORMED = 8413,\n\n\n /**\n * We failed to obtain the policy, likely due to a network issue.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_NETWORK_FAILED = 8414,\n\n\n /**\n * The recovered secret did not match the required syntax.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_SECRET_MALFORMED = 8415,\n\n\n /**\n * The challenge data provided is too large for the available providers.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_CHALLENGE_DATA_TOO_BIG = 8416,\n\n\n /**\n * The provided core secret is too large for some of the providers.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_SECRET_TOO_BIG = 8417,\n\n\n /**\n * The provider returned in invalid configuration.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_PROVIDER_INVALID_CONFIG = 8418,\n\n\n /**\n * The reducer encountered an internal error, likely a bug that needs to be reported.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_INTERNAL_ERROR = 8419,\n\n\n /**\n * The reducer already synchronized with all providers.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_PROVIDERS_ALREADY_SYNCED = 8420,\n\n\n /**\n * A generic error happened in the LibEuFin nexus. See the enclose details JSON for more information.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n LIBEUFIN_NEXUS_GENERIC_ERROR = 9000,\n\n\n /**\n * An uncaught exception happened in the LibEuFin nexus service.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n LIBEUFIN_NEXUS_UNCAUGHT_EXCEPTION = 9001,\n\n\n /**\n * A generic error happened in the LibEuFin sandbox. See the enclose details JSON for more information.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n LIBEUFIN_SANDBOX_GENERIC_ERROR = 9500,\n\n\n /**\n * An uncaught exception happened in the LibEuFin sandbox service.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n LIBEUFIN_SANDBOX_UNCAUGHT_EXCEPTION = 9501,\n\n\n /**\n * This validation method is not supported by the service.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n TALDIR_METHOD_NOT_SUPPORTED = 9600,\n\n\n /**\n * Number of allowed attempts for initiating a challenge exceeded.\n * Returned with an HTTP status code of #MHD_HTTP_TOO_MANY_REQUESTS (429).\n * (A value of 0 indicates that the error is generated client-side).\n */\n TALDIR_REGISTER_RATE_LIMITED = 9601,\n\n\n /**\n * End of error code range.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n END = 9999,\n\n\n}\n", "/*\n This file is part of GNU Taler\n (C) 2018-2019 GNUnet e.V.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n * Type-safe codecs for converting from/to JSON.\n */\n\n/* eslint-disable @typescript-eslint/ban-types */\n\n/**\n * Error thrown when decoding fails.\n */\nexport class DecodingError extends Error {\n constructor(message: string) {\n super(message);\n Object.setPrototypeOf(this, DecodingError.prototype);\n this.name = \"DecodingError\";\n }\n}\n\n/**\n * Context information to show nicer error messages when decoding fails.\n */\nexport interface Context {\n readonly path?: string[];\n}\n\nexport function renderContext(c?: Context): string {\n const p = c?.path;\n if (p) {\n return p.join(\".\");\n } else {\n return \"(unknown)\";\n }\n}\n\nfunction joinContext(c: Context | undefined, part: string): Context {\n const path = c?.path ?? [];\n return {\n path: path.concat([part]),\n };\n}\n\n/**\n * A codec converts untyped JSON to a typed object.\n */\nexport interface Codec<V> {\n /**\n * Decode untyped JSON to an object of type [[V]].\n */\n readonly decode: (x: any, c?: Context) => V;\n}\n\ntype SingletonRecord<K extends keyof any, V> = { [Y in K]: V };\n\ninterface Prop {\n name: string;\n codec: Codec<any>;\n}\n\ninterface Alternative {\n tagValue: any;\n codec: Codec<any>;\n}\n\nclass ObjectCodecBuilder<OutputType, PartialOutputType> {\n private propList: Prop[] = [];\n\n /**\n * Define a property for the object.\n */\n property<K extends keyof OutputType & string, V extends OutputType[K]>(\n x: K,\n codec: Codec<V>,\n ): ObjectCodecBuilder<OutputType, PartialOutputType & SingletonRecord<K, V>> {\n if (!codec) {\n throw Error(\"inner codec must be defined\");\n }\n this.propList.push({ name: x, codec: codec });\n return this as any;\n }\n\n /**\n * Return the built codec.\n *\n * @param objectDisplayName name of the object that this codec operates on,\n * used in error messages.\n */\n build(objectDisplayName: string): Codec<PartialOutputType> {\n const propList = this.propList;\n return {\n decode(x: any, c?: Context): PartialOutputType {\n if (!c) {\n c = {\n path: [`(${objectDisplayName})`],\n };\n }\n if (typeof x !== \"object\") {\n throw new DecodingError(\n `expected object for ${objectDisplayName} at ${renderContext(\n c,\n )} but got ${typeof x}`,\n );\n }\n const obj: any = {};\n for (const prop of propList) {\n const propRawVal = x[prop.name];\n const propVal = prop.codec.decode(\n propRawVal,\n joinContext(c, prop.name),\n );\n obj[prop.name] = propVal;\n }\n return obj as PartialOutputType;\n },\n };\n }\n}\n\nclass UnionCodecBuilder<\n TargetType,\n TagPropertyLabel extends keyof TargetType,\n CommonBaseType,\n PartialTargetType,\n> {\n private alternatives = new Map<any, Alternative>();\n\n constructor(\n private discriminator: TagPropertyLabel,\n private baseCodec?: Codec<CommonBaseType>,\n ) {}\n\n /**\n * Define a property for the object.\n */\n alternative<V>(\n tagValue: TargetType[TagPropertyLabel],\n codec: Codec<V>,\n ): UnionCodecBuilder<\n TargetType,\n TagPropertyLabel,\n CommonBaseType,\n PartialTargetType | V\n > {\n if (!codec) {\n throw Error(\"inner codec must be defined\");\n }\n this.alternatives.set(tagValue, { codec, tagValue });\n return this as any;\n }\n\n /**\n * Return the built codec.\n *\n * @param objectDisplayName name of the object that this codec operates on,\n * used in error messages.\n */\n build<R extends PartialTargetType & CommonBaseType = never>(\n objectDisplayName: string,\n ): Codec<R> {\n const alternatives = this.alternatives;\n const discriminator = this.discriminator;\n const baseCodec = this.baseCodec;\n return {\n decode(x: any, c?: Context): R {\n if (!c) {\n c = {\n path: [`(${objectDisplayName})`],\n };\n }\n const d = x[discriminator];\n if (d === undefined) {\n throw new DecodingError(\n `expected tag for ${objectDisplayName} at ${renderContext(\n c,\n )}.${String(discriminator)}`,\n );\n }\n const alt = alternatives.get(d);\n if (!alt) {\n throw new DecodingError(\n `unknown tag for ${objectDisplayName} ${d} at ${renderContext(\n c,\n )}.${String(discriminator)}`,\n );\n }\n const altDecoded = alt.codec.decode(x);\n if (baseCodec) {\n const baseDecoded = baseCodec.decode(x, c);\n return { ...baseDecoded, ...altDecoded };\n } else {\n return altDecoded;\n }\n },\n };\n }\n}\n\nexport class UnionCodecPreBuilder<T> {\n discriminateOn<D extends keyof T, B = {}>(\n discriminator: D,\n baseCodec?: Codec<B>,\n ): UnionCodecBuilder<T, D, B, never> {\n return new UnionCodecBuilder<T, D, B, never>(discriminator, baseCodec);\n }\n}\n\n/**\n * Return a builder for a codec that decodes an object with properties.\n */\nexport function buildCodecForObject<T>(): ObjectCodecBuilder<T, {}> {\n return new ObjectCodecBuilder<T, {}>();\n}\n\nexport function buildCodecForUnion<T>(): UnionCodecPreBuilder<T> {\n return new UnionCodecPreBuilder<T>();\n}\n\n/**\n * Return a codec for a mapping from a string to values described by the inner codec.\n */\nexport function codecForMap<T>(\n innerCodec: Codec<T>,\n): Codec<{ [x: string]: T }> {\n if (!innerCodec) {\n throw Error(\"inner codec must be defined\");\n }\n return {\n decode(x: any, c?: Context): { [x: string]: T } {\n const map: { [x: string]: T } = {};\n if (typeof x !== \"object\") {\n throw new DecodingError(`expected object at ${renderContext(c)}`);\n }\n for (const i in x) {\n map[i] = innerCodec.decode(x[i], joinContext(c, `[${i}]`));\n }\n return map;\n },\n };\n}\n\n/**\n * Return a codec for a list, containing values described by the inner codec.\n */\nexport function codecForList<T>(innerCodec: Codec<T>): Codec<T[]> {\n if (!innerCodec) {\n throw Error(\"inner codec must be defined\");\n }\n return {\n decode(x: any, c?: Context): T[] {\n const arr: T[] = [];\n if (!Array.isArray(x)) {\n throw new DecodingError(`expected array at ${renderContext(c)}`);\n }\n for (const i in x) {\n arr.push(innerCodec.decode(x[i], joinContext(c, `[${i}]`)));\n }\n return arr;\n },\n };\n}\n\n/**\n * Return a codec for a value that must be a number.\n */\nexport function codecForNumber(): Codec<number> {\n return {\n decode(x: any, c?: Context): number {\n if (typeof x === \"number\") {\n return x;\n }\n throw new DecodingError(\n `expected number at ${renderContext(c)} but got ${typeof x}`,\n );\n },\n };\n}\n\n/**\n * Return a codec for a value that must be a number.\n */\nexport function codecForBoolean(): Codec<boolean> {\n return {\n decode(x: any, c?: Context): boolean {\n if (typeof x === \"boolean\") {\n return x;\n }\n throw new DecodingError(\n `expected boolean at ${renderContext(c)} but got ${typeof x}`,\n );\n },\n };\n}\n\n/**\n * Return a codec for a value that must be a string.\n */\nexport function codecForString(): Codec<string> {\n return {\n decode(x: any, c?: Context): string {\n if (typeof x === \"string\") {\n return x;\n }\n throw new DecodingError(\n `expected string at ${renderContext(c)} but got ${typeof x}`,\n );\n },\n };\n}\n\n/**\n * Codec that allows any value.\n */\nexport function codecForAny(): Codec<any> {\n return {\n decode(x: any, c?: Context): any {\n return x;\n },\n };\n}\n\n/**\n * Return a codec for a value that must be a string.\n */\nexport function codecForConstString<V extends string>(s: V): Codec<V> {\n return {\n decode(x: any, c?: Context): V {\n if (x === s) {\n return x;\n }\n if (typeof x !== \"string\") {\n throw new DecodingError(\n `expected string constant \"${s}\" at ${renderContext(\n c,\n )} but got ${typeof x}`,\n );\n }\n throw new DecodingError(\n `expected string constant \"${s}\" at ${renderContext(\n c,\n )} but got string value \"${x}\"`,\n );\n },\n };\n}\n\n/**\n * Return a codec for a boolean true constant.\n */\nexport function codecForConstTrue(): Codec<true> {\n return {\n decode(x: any, c?: Context): true {\n if (x === true) {\n return x;\n }\n throw new DecodingError(\n `expected boolean true at ${renderContext(c)} but got ${typeof x}`,\n );\n },\n };\n}\n\n/**\n * Return a codec for a boolean true constant.\n */\nexport function codecForConstFalse(): Codec<false> {\n return {\n decode(x: any, c?: Context): false {\n if (x === false) {\n return x;\n }\n throw new DecodingError(\n `expected boolean false at ${renderContext(c)} but got ${typeof x}`,\n );\n },\n };\n}\n\n/**\n * Return a codec for a value that must be a constant number.\n */\nexport function codecForConstNumber<V extends number>(n: V): Codec<V> {\n return {\n decode(x: any, c?: Context): V {\n if (x === n) {\n return x;\n }\n throw new DecodingError(\n `expected number constant \"${n}\" at ${renderContext(\n c,\n )} but got ${typeof x}`,\n );\n },\n };\n}\n\nexport function codecOptional<V>(innerCodec: Codec<V>): Codec<V | undefined> {\n return {\n decode(x: any, c?: Context): V | undefined {\n if (x === undefined || x === null) {\n return undefined;\n }\n return innerCodec.decode(x, c);\n },\n };\n}\n\nexport type CodecType<T> = T extends Codec<infer X> ? X : any;\n\nexport function codecForEither<T extends Array<Codec<unknown>>>(\n ...alts: [...T]\n): Codec<CodecType<T[number]>> {\n return {\n decode(x: any, c?: Context): any {\n for (const alt of alts) {\n try {\n return alt.decode(x, c);\n } catch (e) {\n continue;\n }\n }\n throw new DecodingError(\n `No alternative matched at at ${renderContext(c)}`,\n );\n },\n };\n}\n\nconst x = codecForEither(codecForString(), codecForNumber());\n", "/*\n This file is part of GNU Taler\n (C) 2019 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n * Types and helper functions for dealing with Taler amounts.\n */\n\n/**\n * Imports.\n */\nimport {\n buildCodecForObject,\n codecForString,\n codecForNumber,\n Codec,\n} from \"./codec.js\";\nimport { AmountString } from \"./taler-types.js\";\n\n/**\n * Number of fractional units that one value unit represents.\n */\nexport const amountFractionalBase = 1e8;\n\n/**\n * How many digits behind the comma are required to represent the\n * fractional value in human readable decimal format? Must match\n * lg(fractionalBase)\n */\nexport const amountFractionalLength = 8;\n\n/**\n * Maximum allowed value field of an amount.\n */\nexport const amountMaxValue = 2 ** 52;\n\n/**\n * Non-negative financial amount. Fractional values are expressed as multiples\n * of 1e-8.\n */\nexport interface AmountJson {\n /**\n * Value, must be an integer.\n */\n readonly value: number;\n\n /**\n * Fraction, must be an integer. Represent 1/1e8 of a unit.\n */\n readonly fraction: number;\n\n /**\n * Currency of the amount.\n */\n readonly currency: string;\n}\n\nexport const codecForAmountJson = (): Codec<AmountJson> =>\n buildCodecForObject<AmountJson>()\n .property(\"currency\", codecForString())\n .property(\"value\", codecForNumber())\n .property(\"fraction\", codecForNumber())\n .build(\"AmountJson\");\n\nexport const codecForAmountString = (): Codec<AmountString> => codecForString();\n\n/**\n * Result of a possibly overflowing operation.\n */\nexport interface Result {\n /**\n * Resulting, possibly saturated amount.\n */\n amount: AmountJson;\n /**\n * Was there an over-/underflow?\n */\n saturated: boolean;\n}\n\n/**\n * Type for things that are treated like amounts.\n */\nexport type AmountLike = AmountString | AmountJson;\n\n/**\n * Helper class for dealing with amounts.\n */\nexport class Amounts {\n private constructor() {\n throw Error(\"not instantiable\");\n }\n\n static currencyOf(amount: AmountLike) {\n const amt = Amounts.parseOrThrow(amount);\n return amt.currency;\n }\n\n static zeroOfAmount(amount: AmountLike): AmountJson {\n const amt = Amounts.parseOrThrow(amount);\n return {\n currency: amt.currency,\n fraction: 0,\n value: 0,\n };\n }\n\n /**\n * Get an amount that represents zero units of a currency.\n */\n static zeroOfCurrency(currency: string): AmountJson {\n return {\n currency,\n fraction: 0,\n value: 0,\n };\n }\n\n static jsonifyAmount(amt: AmountLike): AmountJson {\n if (typeof amt === \"string\") {\n return Amounts.parseOrThrow(amt);\n }\n return amt;\n }\n\n static sum(amounts: AmountLike[]): Result {\n if (amounts.length <= 0) {\n throw Error(\"can't sum zero amounts\");\n }\n const jsonAmounts = amounts.map((x) => Amounts.jsonifyAmount(x));\n return Amounts.add(jsonAmounts[0], ...jsonAmounts.slice(1));\n }\n\n static sumOrZero(currency: string, amounts: AmountLike[]): Result {\n if (amounts.length <= 0) {\n return {\n amount: Amounts.zeroOfCurrency(currency),\n saturated: false,\n };\n }\n const jsonAmounts = amounts.map((x) => Amounts.jsonifyAmount(x));\n return Amounts.add(jsonAmounts[0], ...jsonAmounts.slice(1));\n }\n\n /**\n * Add two amounts. Return the result and whether\n * the addition overflowed. The overflow is always handled\n * by saturating and never by wrapping.\n *\n * Throws when currencies don't match.\n */\n static add(first: AmountLike, ...rest: AmountLike[]): Result {\n const firstJ = Amounts.jsonifyAmount(first);\n const currency = firstJ.currency;\n let value =\n firstJ.value + Math.floor(firstJ.fraction / amountFractionalBase);\n if (value > amountMaxValue) {\n return {\n amount: {\n currency,\n value: amountMaxValue,\n fraction: amountFractionalBase - 1,\n },\n saturated: true,\n };\n }\n let fraction = firstJ.fraction % amountFractionalBase;\n for (const x of rest) {\n const xJ = Amounts.jsonifyAmount(x);\n if (xJ.currency.toUpperCase() !== currency.toUpperCase()) {\n throw Error(`Mismatched currency: ${xJ.currency} and ${currency}`);\n }\n\n value =\n value +\n xJ.value +\n Math.floor((fraction + xJ.fraction) / amountFractionalBase);\n fraction = Math.floor((fraction + xJ.fraction) % amountFractionalBase);\n if (value > amountMaxValue) {\n return {\n amount: {\n currency,\n value: amountMaxValue,\n fraction: amountFractionalBase - 1,\n },\n saturated: true,\n };\n }\n }\n return { amount: { currency, value, fraction }, saturated: false };\n }\n\n /**\n * Subtract two amounts. Return the result and whether\n * the subtraction overflowed. The overflow is always handled\n * by saturating and never by wrapping.\n *\n * Throws when currencies don't match.\n */\n static sub(a: AmountLike, ...rest: AmountLike[]): Result {\n const aJ = Amounts.jsonifyAmount(a);\n const currency = aJ.currency;\n let value = aJ.value;\n let fraction = aJ.fraction;\n\n for (const b of rest) {\n const bJ = Amounts.jsonifyAmount(b);\n if (bJ.currency.toUpperCase() !== aJ.currency.toUpperCase()) {\n throw Error(`Mismatched currency: ${bJ.currency} and ${currency}`);\n }\n if (fraction < bJ.fraction) {\n if (value < 1) {\n return {\n amount: { currency, value: 0, fraction: 0 },\n saturated: true,\n };\n }\n value--;\n fraction += amountFractionalBase;\n }\n console.assert(fraction >= bJ.fraction);\n fraction -= bJ.fraction;\n if (value < bJ.value) {\n return { amount: { currency, value: 0, fraction: 0 }, saturated: true };\n }\n value -= bJ.value;\n }\n\n return { amount: { currency, value, fraction }, saturated: false };\n }\n\n /**\n * Compare two amounts. Returns 0 when equal, -1 when a < b\n * and +1 when a > b. Throws when currencies don't match.\n */\n static cmp(a: AmountLike, b: AmountLike): -1 | 0 | 1 {\n a = Amounts.jsonifyAmount(a);\n b = Amounts.jsonifyAmount(b);\n if (a.currency !== b.currency) {\n throw Error(`Mismatched currency: ${a.currency} and ${b.currency}`);\n }\n const av = a.value + Math.floor(a.fraction / amountFractionalBase);\n const af = a.fraction % amountFractionalBase;\n const bv = b.value + Math.floor(b.fraction / amountFractionalBase);\n const bf = b.fraction % amountFractionalBase;\n switch (true) {\n case av < bv:\n return -1;\n case av > bv:\n return 1;\n case af < bf:\n return -1;\n case af > bf:\n return 1;\n case af === bf:\n return 0;\n default:\n throw Error(\"assertion failed\");\n }\n }\n\n /**\n * Create a copy of an amount.\n */\n static copy(a: AmountJson): AmountJson {\n return {\n currency: a.currency,\n fraction: a.fraction,\n value: a.value,\n };\n }\n\n /**\n * Divide an amount. Throws on division by zero.\n */\n static divide(a: AmountJson, n: number): AmountJson {\n if (n === 0) {\n throw Error(`Division by 0`);\n }\n if (n === 1) {\n return { value: a.value, fraction: a.fraction, currency: a.currency };\n }\n const r = a.value % n;\n return {\n currency: a.currency,\n fraction: Math.floor((r * amountFractionalBase + a.fraction) / n),\n value: Math.floor(a.value / n),\n };\n }\n\n /**\n * Check if an amount is non-zero.\n */\n static isNonZero(a: AmountLike): boolean {\n a = Amounts.jsonifyAmount(a);\n return a.value > 0 || a.fraction > 0;\n }\n\n static isZero(a: AmountLike): boolean {\n a = Amounts.jsonifyAmount(a);\n return a.value === 0 && a.fraction === 0;\n }\n\n /**\n * Parse an amount like 'EUR:20.5' for 20 Euros and 50 ct.\n */\n static parse(s: string): AmountJson | undefined {\n const res = s.match(/^([a-zA-Z0-9_*-]+):([0-9]+)([.][0-9]+)?$/);\n if (!res) {\n return undefined;\n }\n const tail = res[3] || \".0\";\n if (tail.length > amountFractionalLength + 1) {\n return undefined;\n }\n const value = Number.parseInt(res[2]);\n if (value > amountMaxValue) {\n return undefined;\n }\n return {\n currency: res[1].toUpperCase(),\n fraction: Math.round(amountFractionalBase * Number.parseFloat(tail)),\n value,\n };\n }\n\n /**\n * Parse amount in standard string form (like 'EUR:20.5'),\n * throw if the input is not a valid amount.\n */\n static parseOrThrow(s: AmountLike): AmountJson {\n if (typeof s === \"object\") {\n if (typeof s.currency !== \"string\") {\n throw Error(\"invalid amount object\");\n }\n if (typeof s.value !== \"number\") {\n throw Error(\"invalid amount object\");\n }\n if (typeof s.fraction !== \"number\") {\n throw Error(\"invalid amount object\");\n }\n return { currency: s.currency, value: s.value, fraction: s.fraction };\n } else if (typeof s === \"string\") {\n const res = Amounts.parse(s);\n if (!res) {\n throw Error(`Can't parse amount: \"${s}\"`);\n }\n return res;\n } else {\n throw Error(\"invalid amount (illegal type)\");\n }\n }\n\n /**\n * Convert a float to a Taler amount.\n * Loss of precision possible.\n */\n static fromFloat(floatVal: number, currency: string): AmountJson {\n return {\n currency,\n fraction: Math.floor(\n (floatVal - Math.floor(floatVal)) * amountFractionalBase,\n ),\n value: Math.floor(floatVal),\n };\n }\n\n static min(a: AmountLike, b: AmountLike): AmountJson {\n const cr = Amounts.cmp(a, b);\n if (cr >= 0) {\n return Amounts.jsonifyAmount(b);\n } else {\n return Amounts.jsonifyAmount(a);\n }\n }\n\n static max(a: AmountLike, b: AmountLike): AmountJson {\n const cr = Amounts.cmp(a, b);\n if (cr >= 0) {\n return Amounts.jsonifyAmount(a);\n } else {\n return Amounts.jsonifyAmount(b);\n }\n }\n\n static mult(a: AmountLike, n: number): Result {\n a = this.jsonifyAmount(a);\n if (!Number.isInteger(n)) {\n throw Error(\"amount can only be multipied by an integer\");\n }\n if (n < 0) {\n throw Error(\"amount can only be multiplied by a positive integer\");\n }\n if (n == 0) {\n return {\n amount: Amounts.zeroOfCurrency(a.currency),\n saturated: false,\n };\n }\n let x = a;\n let acc = Amounts.zeroOfCurrency(a.currency);\n while (n > 1) {\n if (n % 2 == 0) {\n n = n / 2;\n } else {\n n = (n - 1) / 2;\n const r2 = Amounts.add(acc, x);\n if (r2.saturated) {\n return r2;\n }\n acc = r2.amount;\n }\n const r2 = Amounts.add(x, x);\n if (r2.saturated) {\n return r2;\n }\n x = r2.amount;\n }\n return Amounts.add(acc, x);\n }\n\n /**\n * Check if the argument is a valid amount in string form.\n */\n static check(a: any): boolean {\n if (typeof a !== \"string\") {\n return false;\n }\n try {\n const parsedAmount = Amounts.parse(a);\n return !!parsedAmount;\n } catch {\n return false;\n }\n }\n\n /**\n * Convert to standard human-readable string representation that's\n * also used in JSON formats.\n */\n static stringify(a: AmountLike): string {\n a = Amounts.jsonifyAmount(a);\n const s = this.stringifyValue(a);\n\n return `${a.currency}:${s}`;\n }\n\n static isSameCurrency(a1: AmountLike, a2: AmountLike): boolean {\n const x1 = this.jsonifyAmount(a1);\n const x2 = this.jsonifyAmount(a2);\n return x1.currency.toUpperCase() === x2.currency.toUpperCase();\n }\n\n static stringifyValue(a: AmountLike, minFractional = 0): string {\n const aJ = Amounts.jsonifyAmount(a);\n const av = aJ.value + Math.floor(aJ.fraction / amountFractionalBase);\n const af = aJ.fraction % amountFractionalBase;\n let s = av.toString();\n\n if (af || minFractional) {\n s = s + \".\";\n let n = af;\n for (let i = 0; i < amountFractionalLength; i++) {\n if (!n && i >= minFractional) {\n break;\n }\n s = s + Math.floor((n / amountFractionalBase) * 10).toString();\n n = (n * 10) % amountFractionalBase;\n }\n }\n\n return s;\n }\n\n /**\n * Number of fractional digits needed to fully represent the amount\n * @param a amount\n * @returns\n */\n static maxFractionalDigits(a: AmountJson): number {\n if (a.fraction === 0) return 0;\n if (a.fraction < 0) {\n console.error(\"amount fraction can not be negative\", a);\n return 0;\n }\n let i = 0;\n let check = true;\n let rest = a.fraction;\n while (rest > 0 && check) {\n check = rest % 10 === 0;\n rest = rest / 10;\n i++;\n }\n return amountFractionalLength - i + 1;\n }\n}\n", "/*\n This file is part of GNU Taler\n (C) 2020 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n * Type declarations for the backup content format.\n *\n * Contains some redundancy with the other type declarations,\n * as the backup schema must remain very stable and should be self-contained.\n *\n * Future:\n * 1. Ghost spends (coin unexpectedly spent by a wallet with shared data)\n * 2. Ghost withdrawals (reserve unexpectedly emptied by another wallet with shared data)\n * 3. Track losses through re-denomination of payments/refreshes\n * 4. (Feature:) Payments to own bank account and P2P-payments need to be backed up\n * 5. Track last/next update time, so on restore we need to do less work\n * 6. Currency render preferences?\n *\n * Questions:\n * 1. What happens when two backups are merged that have\n * the same coin in different refresh groups?\n * => Both are added, one will eventually fail\n * 2. Should we make more information forgettable? I.e. is\n * the coin selection still relevant for a purchase after the coins\n * are legally expired?\n * => Yes, still needs to be implemented\n * 3. What about re-denominations / re-selection of payment coins?\n * Is it enough to store a clock value for the selection?\n * => Coin derivation should also consider denom pub hash\n *\n * General considerations / decisions:\n * 1. Information about previously occurring errors and\n * retries is never backed up.\n * 2. The ToS text of an exchange is never backed up.\n * 3. Derived information is never backed up (hashed values, public keys\n * when we know the private key).\n *\n * Problems:\n *\n * Withdrawal group fork/merging loses money:\n * - Before the withdrawal happens, wallet forks into two backups.\n * - Both wallets need to re-denominate the withdrawal (unlikely but possible).\n * - Because the backup doesn't store planchets where a withdrawal was attempted,\n * after merging some money will be list.\n * - Fix: backup withdrawal objects also store planchets where withdrawal has been attempted\n *\n * @author Florian Dold <dold@taler.net>\n */\n\n/**\n * Imports.\n */\nimport { DenominationPubKey, UnblindedSignature } from \"./taler-types.js\";\nimport { TalerProtocolDuration, TalerProtocolTimestamp } from \"./time.js\";\n\nexport const BACKUP_TAG = \"gnu-taler-wallet-backup-content\" as const;\n/**\n * Major version. Each increment means a backwards-incompatible change.\n * Typically this means that a custom converter needs to be written.\n */\nexport const BACKUP_VERSION_MAJOR = 1 as const;\n\n/**\n * Minor version. Each increment means that information is added to the backup\n * in a backwards-compatible way.\n *\n * Wallets can always import a smaller minor version than their own backup code version.\n * When importing a bigger version, data loss is possible and the user should be urged to\n * upgrade their wallet first.\n */\nexport const BACKUP_VERSION_MINOR = 1 as const;\n\n/**\n * Type alias for strings that are to be treated like amounts.\n */\ntype BackupAmountString = string;\n\n/**\n * A human-recognizable identifier here that is\n * reasonable unique and assigned the first time the wallet is\n * started/installed, such as:\n *\n * `${wallet-implementation} ${os} ${hostname} (${short-uid})`\n * => e.g. \"GNU Taler Android iceking ABC123\"\n */\ntype DeviceIdString = string;\n\n/**\n * Contract terms JSON.\n */\ntype RawContractTerms = any;\n\n/**\n * Unique identifier for an operation, used to either (a) reference\n * the operation in a tombstone (b) disambiguate conflicting writes.\n */\ntype OperationUid = string;\n\n/**\n * Content of the backup.\n *\n * The contents of the wallet must be serialized in a deterministic\n * way across implementations, so that the normalized backup content\n * JSON is identical when the wallet's content is identical.\n */\nexport interface WalletBackupContentV1 {\n /**\n * Magic constant to identify that this is a backup content JSON.\n */\n schema_id: typeof BACKUP_TAG;\n\n /**\n * Version of the schema.\n */\n schema_version: typeof BACKUP_VERSION_MAJOR;\n\n minor_version: number;\n\n /**\n * Root public key of the wallet. This field is present as\n * a sanity check if the backup content JSON is loaded from file.\n */\n wallet_root_pub: string;\n\n /**\n * Current device identifier that \"owns\" the backup.\n *\n * This identifier allows one wallet to notice when another\n * wallet is \"alive\" and connected to the same sync provider.\n */\n current_device_id: DeviceIdString;\n\n /**\n * Timestamp of the backup.\n *\n * This timestamp should only be advanced if the content\n * of the backup changes.\n */\n timestamp: TalerProtocolTimestamp;\n\n /**\n * Per-exchange data sorted by exchange master public key.\n *\n * Sorted by the exchange public key.\n */\n exchanges: BackupExchange[];\n\n exchange_details: BackupExchangeDetails[];\n\n /**\n * Withdrawal groups.\n *\n * Sorted by the withdrawal group ID.\n */\n withdrawal_groups: BackupWithdrawalGroup[];\n\n /**\n * Grouped refresh sessions.\n *\n * Sorted by the refresh group ID.\n */\n refresh_groups: BackupRefreshGroup[];\n\n /**\n * Tips.\n *\n * Sorted by the wallet tip ID.\n */\n tips: BackupTip[];\n\n /**\n * Accepted purchases.\n *\n * Sorted by the proposal ID.\n */\n purchases: BackupPurchase[];\n\n /**\n * All backup providers. Backup providers\n * in this list should be considered \"active\".\n *\n * Sorted by the provider base URL.\n */\n backup_providers: BackupBackupProvider[];\n\n /**\n * Recoup groups.\n */\n recoup_groups: BackupRecoupGroup[];\n\n /**\n * Trusted auditors, either for official (3 letter) or local (4-12 letter)\n * currencies.\n *\n * Auditors are sorted by their canonicalized base URL.\n */\n trusted_auditors: { [currency: string]: BackupTrustAuditor[] };\n\n /**\n * Trusted exchange. Only applicable for local currencies (4-12 letter currency code).\n *\n * Exchanges are sorted by their canonicalized base URL.\n */\n trusted_exchanges: { [currency: string]: BackupTrustExchange[] };\n\n /**\n * Interning table for forgettable values of contract terms.\n *\n * Used to reduce storage space, as many forgettable items (product image,\n * addresses, etc.) might be shared among many contract terms.\n */\n intern_table: { [hash: string]: any };\n\n /**\n * Permanent error reports.\n */\n error_reports: BackupErrorReport[];\n\n /**\n * Deletion tombstones. Lexically sorted.\n */\n tombstones: Tombstone[];\n}\n\nexport enum BackupOperationStatus {\n Cancelled = \"cancelled\",\n Finished = \"finished\",\n Pending = \"pending\",\n}\n\nexport enum BackupWgType {\n BankManual = \"bank-manual\",\n BankIntegrated = \"bank-integrated\",\n PeerPullCredit = \"peer-pull-credit\",\n PeerPushCredit = \"peer-push-credit\",\n Recoup = \"recoup\",\n}\n\nexport type BackupWgInfo =\n | {\n type: BackupWgType.BankManual;\n }\n | {\n type: BackupWgType.BankIntegrated;\n taler_withdraw_uri: string;\n\n /**\n * URL that the user can be redirected to, and allows\n * them to confirm (or abort) the bank-integrated withdrawal.\n */\n confirm_url?: string;\n\n /**\n * Exchange payto URI that the bank will use to fund the reserve.\n */\n exchange_payto_uri: string;\n\n /**\n * Time when the information about this reserve was posted to the bank.\n *\n * Only applies if bankWithdrawStatusUrl is defined.\n *\n * Set to undefined if that hasn't happened yet.\n */\n timestamp_reserve_info_posted?: TalerProtocolTimestamp;\n\n /**\n * Time when the reserve was confirmed by the bank.\n *\n * Set to undefined if not confirmed yet.\n */\n timestamp_bank_confirmed?: TalerProtocolTimestamp;\n }\n | {\n type: BackupWgType.PeerPullCredit;\n contract_terms: any;\n contract_priv: string;\n }\n | {\n type: BackupWgType.PeerPushCredit;\n contract_terms: any;\n }\n | {\n type: BackupWgType.Recoup;\n };\n\n/**\n * FIXME: Open questions:\n * - Do we have to store the denomination selection? Why?\n * (If deterministic, amount shouldn't change. Not storing it is simpler.)\n */\nexport interface BackupWithdrawalGroup {\n withdrawal_group_id: string;\n\n /**\n * Detailed info based on the type of withdrawal group.\n */\n info: BackupWgInfo;\n\n secret_seed: string;\n\n reserve_priv: string;\n\n exchange_base_url: string;\n\n timestamp_created: TalerProtocolTimestamp;\n\n timestamp_finish?: TalerProtocolTimestamp;\n\n operation_status: BackupOperationStatus;\n\n instructed_amount: BackupAmountString;\n\n /**\n * Amount including fees (i.e. the amount subtracted from the\n * reserve to withdraw all coins in this withdrawal session).\n *\n * Note that this *includes* the amount remaining in the reserve\n * that is too small to be withdrawn, and thus can't be derived\n * from selectedDenoms.\n */\n raw_withdrawal_amount: BackupAmountString;\n\n effective_withdrawal_amount: BackupAmountString;\n\n /**\n * Restrict withdrawals from this reserve to this age.\n */\n restrict_age?: number;\n\n /**\n * Multiset of denominations selected for withdrawal.\n */\n selected_denoms: BackupDenomSel;\n\n selected_denoms_uid: OperationUid;\n}\n\n/**\n * Tombstone in the format \"<type>:<key>\"\n */\nexport type Tombstone = string;\n\n/**\n * Detailed error report.\n *\n * For auditor-relevant reports with attached cryptographic proof,\n * the error report also should contain the submission status to\n * the auditor(s).\n */\ninterface BackupErrorReport {\n // FIXME: specify!\n}\n\n/**\n * Trust declaration for an auditor.\n *\n * The trust applies based on the public key of\n * the auditor, irrespective of what base URL the exchange\n * is referencing.\n */\nexport interface BackupTrustAuditor {\n /**\n * Base URL of the auditor.\n */\n auditor_base_url: string;\n\n /**\n * Public key of the auditor.\n */\n auditor_pub: string;\n\n /**\n * UIDs for the operation of adding this auditor\n * as a trusted auditor.\n */\n uids: OperationUid;\n}\n\n/**\n * Trust declaration for an exchange.\n *\n * The trust only applies for the combination of base URL\n * and public key. If the master public key changes while the base\n * URL stays the same, the exchange has to be re-added by a wallet update\n * or by the user.\n */\nexport interface BackupTrustExchange {\n /**\n * Canonicalized exchange base URL.\n */\n exchange_base_url: string;\n\n /**\n * Master public key of the exchange.\n */\n exchange_master_pub: string;\n\n /**\n * UIDs for the operation of adding this exchange\n * as trusted.\n */\n uids: OperationUid;\n}\n\nexport class BackupBackupProviderTerms {\n /**\n * Last known supported protocol version.\n */\n supported_protocol_version: string;\n\n /**\n * Last known annual fee.\n */\n annual_fee: BackupAmountString;\n\n /**\n * Last known storage limit.\n */\n storage_limit_in_megabytes: number;\n}\n\n/**\n * Backup information about one backup storage provider.\n */\nexport class BackupBackupProvider {\n /**\n * Canonicalized base URL of the provider.\n */\n base_url: string;\n\n /**\n * Last known terms. Might be unavailable in some situations, such\n * as directly after restoring form a backup recovery document.\n */\n terms?: BackupBackupProviderTerms;\n\n /**\n * Proposal IDs for payments to this provider.\n */\n pay_proposal_ids: string[];\n\n /**\n * UIDs for adding this backup provider.\n */\n uids: OperationUid[];\n}\n\n/**\n * Status of recoup operations that were grouped together.\n *\n * The remaining amount of the corresponding coins must be set to\n * zero when the recoup group is created/imported.\n */\nexport interface BackupRecoupGroup {\n /**\n * Unique identifier for the recoup group record.\n */\n recoup_group_id: string;\n\n /**\n * Timestamp when the recoup was started.\n */\n timestamp_created: TalerProtocolTimestamp;\n\n timestamp_finish?: TalerProtocolTimestamp;\n finish_clock?: TalerProtocolTimestamp;\n // FIXME: Use some enum here!\n finish_is_failure?: boolean;\n\n /**\n * Information about each coin being recouped.\n */\n coins: {\n coin_pub: string;\n recoup_finished: boolean;\n }[];\n}\n\n/**\n * Types of coin sources.\n */\nexport enum BackupCoinSourceType {\n Withdraw = \"withdraw\",\n Refresh = \"refresh\",\n Tip = \"tip\",\n}\n\n/**\n * Metadata about a coin obtained via withdrawing.\n */\nexport interface BackupWithdrawCoinSource {\n type: BackupCoinSourceType.Withdraw;\n\n /**\n * Can be the empty string for orphaned coins.\n */\n withdrawal_group_id: string;\n\n /**\n * Index of the coin in the withdrawal session.\n */\n coin_index: number;\n\n /**\n * Reserve public key for the reserve we got this coin from.\n */\n reserve_pub: string;\n}\n\n/**\n * Metadata about a coin obtained from refreshing.\n *\n * FIXME: Currently does not link to the refreshGroupId because\n * the wallet DB doesn't do this. Not really necessary,\n * but would be more consistent.\n */\nexport interface BackupRefreshCoinSource {\n type: BackupCoinSourceType.Refresh;\n\n /**\n * Public key of the coin that was refreshed into this coin.\n */\n old_coin_pub: string;\n\n refresh_group_id: string;\n}\n\n/**\n * Metadata about a coin obtained from a tip.\n */\nexport interface BackupTipCoinSource {\n type: BackupCoinSourceType.Tip;\n\n /**\n * Wallet's identifier for the tip that this coin\n * originates from.\n */\n wallet_tip_id: string;\n\n /**\n * Index in the tip planchets of the tip.\n */\n coin_index: number;\n}\n\n/**\n * Metadata about a coin depending on the origin.\n */\nexport type BackupCoinSource =\n | BackupWithdrawCoinSource\n | BackupRefreshCoinSource\n | BackupTipCoinSource;\n\n/**\n * Backup information about a coin.\n *\n * (Always part of a BackupExchange/BackupDenom)\n */\nexport interface BackupCoin {\n /**\n * Where did the coin come from? Used for recouping coins.\n */\n coin_source: BackupCoinSource;\n\n /**\n * Private key to authorize operations on the coin.\n */\n coin_priv: string;\n\n /**\n * Unblinded signature by the exchange.\n */\n denom_sig: UnblindedSignature;\n\n /**\n * Information about where and how the coin was spent.\n */\n spend_allocation:\n | {\n id: string;\n amount: BackupAmountString;\n }\n | undefined;\n\n /**\n * Blinding key used when withdrawing the coin.\n * Potentionally used again during payback.\n */\n blinding_key: string;\n\n /**\n * Does the wallet think that the coin is still fresh?\n *\n * Note that even if a fresh coin is imported, it should still\n * be refreshed in most situations.\n */\n fresh: boolean;\n}\n\n/**\n * Status of a tip we got from a merchant.\n */\nexport interface BackupTip {\n /**\n * Tip ID chosen by the wallet.\n */\n wallet_tip_id: string;\n\n /**\n * The merchant's identifier for this tip.\n */\n merchant_tip_id: string;\n\n /**\n * Secret seed used for the tipping planchets.\n */\n secret_seed: string;\n\n /**\n * Has the user accepted the tip? Only after the tip has been accepted coins\n * withdrawn from the tip may be used.\n */\n timestamp_accepted: TalerProtocolTimestamp | undefined;\n\n /**\n * When was the tip first scanned by the wallet?\n */\n timestamp_created: TalerProtocolTimestamp;\n\n timestamp_finished?: TalerProtocolTimestamp;\n finish_is_failure?: boolean;\n\n /**\n * The tipped amount.\n */\n tip_amount_raw: BackupAmountString;\n\n /**\n * Timestamp, the tip can't be picked up anymore after this deadline.\n */\n timestamp_expiration: TalerProtocolTimestamp;\n\n /**\n * The exchange that will sign our coins, chosen by the merchant.\n */\n exchange_base_url: string;\n\n /**\n * Base URL of the merchant that is giving us the tip.\n */\n merchant_base_url: string;\n\n /**\n * Selected denominations. Determines the effective tip amount.\n */\n selected_denoms: BackupDenomSel;\n\n /**\n * The url to be redirected after the tip is accepted.\n */\n next_url: string | undefined;\n\n /**\n * UID for the denomination selection.\n * Used to disambiguate when merging.\n */\n selected_denoms_uid: OperationUid;\n}\n\n/**\n * Reasons for why a coin is being refreshed.\n */\nexport enum BackupRefreshReason {\n Manual = \"manual\",\n Pay = \"pay\",\n Refund = \"refund\",\n AbortPay = \"abort-pay\",\n Recoup = \"recoup\",\n BackupRestored = \"backup-restored\",\n Scheduled = \"scheduled\",\n}\n\n/**\n * Information about one refresh session, always part\n * of a refresh group.\n *\n * (Public key of the old coin is stored in the refresh group.)\n */\nexport interface BackupRefreshSession {\n /**\n * Hashed denominations of the newly requested coins.\n */\n new_denoms: BackupDenomSel;\n\n /**\n * Seed used to derive the planchets and\n * transfer private keys for this refresh session.\n */\n session_secret_seed: string;\n\n /**\n * The no-reveal-index after we've done the melting.\n */\n noreveal_index?: number;\n}\n\n/**\n * Refresh session for one coin inside a refresh group.\n */\nexport interface BackupRefreshOldCoin {\n /**\n * Public key of the old coin,\n */\n coin_pub: string;\n\n /**\n * Requested amount to refresh. Must be subtracted from the coin's remaining\n * amount as soon as the coin is added to the refresh group.\n */\n input_amount: BackupAmountString;\n\n /**\n * Estimated output (may change if it takes a long time to create the\n * actual session).\n */\n estimated_output_amount: BackupAmountString;\n\n /**\n * Did the refresh session finish (or was it unnecessary/impossible to create\n * one)\n */\n finished: boolean;\n\n /**\n * Refresh session (if created) or undefined it not created yet.\n */\n refresh_session: BackupRefreshSession | undefined;\n}\n\n/**\n * Information about one refresh group.\n *\n * May span more than one exchange, but typically doesn't\n */\nexport interface BackupRefreshGroup {\n refresh_group_id: string;\n\n reason: BackupRefreshReason;\n\n /**\n * Details per old coin.\n */\n old_coins: BackupRefreshOldCoin[];\n\n timestamp_created: TalerProtocolTimestamp;\n\n timestamp_finish?: TalerProtocolTimestamp;\n finish_is_failure?: boolean;\n}\n\nexport enum BackupRefundState {\n Failed = \"failed\",\n Applied = \"applied\",\n Pending = \"pending\",\n}\n\n/**\n * Common information about a refund.\n */\nexport interface BackupRefundItemCommon {\n /**\n * Execution time as claimed by the merchant\n */\n execution_time: TalerProtocolTimestamp;\n\n /**\n * Time when the wallet became aware of the refund.\n */\n obtained_time: TalerProtocolTimestamp;\n\n /**\n * Amount refunded for the coin.\n */\n refund_amount: BackupAmountString;\n\n /**\n * Coin being refunded.\n */\n coin_pub: string;\n\n /**\n * The refund transaction ID for the refund.\n */\n rtransaction_id: number;\n\n /**\n * Upper bound on the refresh cost incurred by\n * applying this refund.\n *\n * Might be lower in practice when two refunds on the same\n * coin are refreshed in the same refresh operation.\n *\n * Used to display fees, and stored since it's expensive to recompute\n * accurately.\n */\n total_refresh_cost_bound: BackupAmountString;\n}\n\n/**\n * Failed refund, either because the merchant did\n * something wrong or it expired.\n */\nexport interface BackupRefundFailedItem extends BackupRefundItemCommon {\n type: BackupRefundState.Failed;\n}\n\nexport interface BackupRefundPendingItem extends BackupRefundItemCommon {\n type: BackupRefundState.Pending;\n}\n\nexport interface BackupRefundAppliedItem extends BackupRefundItemCommon {\n type: BackupRefundState.Applied;\n}\n\n/**\n * State of one refund from the merchant, maintained by the wallet.\n */\nexport type BackupRefundItem =\n | BackupRefundFailedItem\n | BackupRefundPendingItem\n | BackupRefundAppliedItem;\n\n/**\n * Data we store when the payment was accepted.\n */\nexport interface BackupPayInfo {\n pay_coins: {\n /**\n * Public keys of the coins that were selected.\n */\n coin_pub: string;\n\n /**\n * Amount that each coin contributes.\n */\n contribution: BackupAmountString;\n }[];\n\n /**\n * Unique ID to disambiguate pay coin selection on merge.\n */\n pay_coins_uid: OperationUid;\n\n /**\n * Total cost initially shown to the user.\n *\n * This includes the amount taken by the merchant, fees (wire/deposit) contributed\n * by the customer, refreshing fees, fees for withdraw-after-refresh and \"trimmings\"\n * of coins that are too small to spend.\n *\n * Note that in rare situations, this cost might not be accurate (e.g.\n * when the payment or refresh gets re-denominated).\n * We might show adjustments to this later, but currently we don't do so.\n */\n total_pay_cost: BackupAmountString;\n}\n\nexport interface BackupPurchase {\n /**\n * Proposal ID for this purchase. Uniquely identifies the\n * purchase and the proposal.\n */\n proposal_id: string;\n\n /**\n * Status of the proposal.\n */\n proposal_status: BackupProposalStatus;\n\n /**\n * Proposal that this one got \"redirected\" to as part of\n * the repurchase detection.\n */\n repurchase_proposal_id: string | undefined;\n\n /**\n * Session ID we got when downloading the contract.\n */\n download_session_id?: string;\n\n /**\n * Merchant-assigned order ID of the proposal.\n */\n order_id: string;\n\n /**\n * Base URL of the merchant that proposed the purchase.\n */\n merchant_base_url: string;\n\n /**\n * Claim token initially given by the merchant.\n */\n claim_token: string | undefined;\n\n /**\n * Contract terms we got from the merchant.\n */\n contract_terms_raw?: RawContractTerms;\n\n /**\n * Signature on the contract terms.\n *\n * FIXME: Better name needed.\n */\n merchant_sig?: string;\n\n /**\n * Private key for the nonce. Might eventually be used\n * to prove ownership of the contract.\n */\n nonce_priv: string;\n\n pay_info: BackupPayInfo | undefined;\n\n /**\n * Timestamp of the first time that sending a payment to the merchant\n * for this purchase was successful.\n */\n timestamp_first_successful_pay: TalerProtocolTimestamp | undefined;\n\n /**\n * Signature by the merchant confirming the payment.\n */\n merchant_pay_sig: string | undefined;\n\n timestamp_proposed: TalerProtocolTimestamp;\n\n /**\n * When was the purchase made?\n * Refers to the time that the user accepted.\n */\n timestamp_accepted: TalerProtocolTimestamp | undefined;\n\n /**\n * Pending refunds for the purchase. A refund is pending\n * when the merchant reports a transient error from the exchange.\n */\n refunds: BackupRefundItem[];\n\n /**\n * Continue querying the refund status until this deadline has expired.\n */\n auto_refund_deadline: TalerProtocolTimestamp | undefined;\n}\n\n/**\n * Info about one denomination in the backup.\n *\n * Note that the wallet only backs up validated denominations.\n */\nexport interface BackupDenomination {\n /**\n * Value of one coin of the denomination.\n */\n value: BackupAmountString;\n\n /**\n * The denomination public key.\n */\n denom_pub: DenominationPubKey;\n\n /**\n * Fee for withdrawing.\n */\n fee_withdraw: BackupAmountString;\n\n /**\n * Fee for depositing.\n */\n fee_deposit: BackupAmountString;\n\n /**\n * Fee for refreshing.\n */\n fee_refresh: BackupAmountString;\n\n /**\n * Fee for refunding.\n */\n fee_refund: BackupAmountString;\n\n /**\n * Validity start date of the denomination.\n */\n stamp_start: TalerProtocolTimestamp;\n\n /**\n * Date after which the currency can't be withdrawn anymore.\n */\n stamp_expire_withdraw: TalerProtocolTimestamp;\n\n /**\n * Date after the denomination officially doesn't exist anymore.\n */\n stamp_expire_legal: TalerProtocolTimestamp;\n\n /**\n * Data after which coins of this denomination can't be deposited anymore.\n */\n stamp_expire_deposit: TalerProtocolTimestamp;\n\n /**\n * Signature by the exchange's master key over the denomination\n * information.\n */\n master_sig: string;\n\n /**\n * Was this denomination still offered by the exchange the last time\n * we checked?\n * Only false when the exchange redacts a previously published denomination.\n */\n is_offered: boolean;\n\n /**\n * Did the exchange revoke the denomination?\n * When this field is set to true in the database, the same transaction\n * should also mark all affected coins as revoked.\n */\n is_revoked: boolean;\n\n /**\n * Coins of this denomination.\n */\n coins: BackupCoin[];\n\n /**\n * The list issue date of the exchange \"/keys\" response\n * that this denomination was last seen in.\n */\n list_issue_date: TalerProtocolTimestamp;\n}\n\n/**\n * Denomination selection.\n */\nexport type BackupDenomSel = {\n denom_pub_hash: string;\n count: number;\n}[];\n\n/**\n * Wire fee for one wire payment target type as stored in the\n * wallet's database.\n *\n * (Flattened to a list to make the declaration simpler).\n */\nexport interface BackupExchangeWireFee {\n wire_type: string;\n\n /**\n * Fee for wire transfers.\n */\n wire_fee: string;\n\n /**\n * Fees to close and refund a reserve.\n */\n closing_fee: string;\n\n /**\n * Start date of the fee.\n */\n start_stamp: TalerProtocolTimestamp;\n\n /**\n * End date of the fee.\n */\n end_stamp: TalerProtocolTimestamp;\n\n /**\n * Signature made by the exchange master key.\n */\n sig: string;\n}\n\n/**\n * Global fee as stored in the wallet's database.\n *\n */\nexport interface BackupExchangeGlobalFees {\n startDate: TalerProtocolTimestamp;\n endDate: TalerProtocolTimestamp;\n\n historyFee: BackupAmountString;\n accountFee: BackupAmountString;\n purseFee: BackupAmountString;\n\n historyTimeout: TalerProtocolDuration;\n purseTimeout: TalerProtocolDuration;\n\n purseLimit: number;\n\n signature: string;\n}\n/**\n * Structure of one exchange signing key in the /keys response.\n */\nexport class BackupExchangeSignKey {\n stamp_start: TalerProtocolTimestamp;\n stamp_expire: TalerProtocolTimestamp;\n stamp_end: TalerProtocolTimestamp;\n key: string;\n master_sig: string;\n}\n\n/**\n * Signature by the auditor that a particular denomination key is audited.\n */\nexport class BackupAuditorDenomSig {\n /**\n * Denomination public key's hash.\n */\n denom_pub_h: string;\n\n /**\n * The signature.\n */\n auditor_sig: string;\n}\n\n/**\n * Auditor information as given by the exchange in /keys.\n */\nexport class BackupExchangeAuditor {\n /**\n * Auditor's public key.\n */\n auditor_pub: string;\n\n /**\n * Base URL of the auditor.\n */\n auditor_url: string;\n\n /**\n * List of signatures for denominations by the auditor.\n */\n denomination_keys: BackupAuditorDenomSig[];\n}\n\n/**\n * Backup information for an exchange. Serves effectively\n * as a pointer to the exchange details identified by\n * the base URL, master public key and currency.\n */\nexport interface BackupExchange {\n base_url: string;\n\n master_public_key: string;\n\n currency: string;\n\n /**\n * Time when the pointer to the exchange details\n * was last updated.\n *\n * Used to facilitate automatic merging.\n */\n update_clock: TalerProtocolTimestamp;\n}\n\n/**\n * Backup information about an exchange's details.\n *\n * Note that one base URL can have multiple exchange\n * details. The BackupExchange stores a pointer\n * to the current exchange details.\n */\nexport interface BackupExchangeDetails {\n /**\n * Canonicalized base url of the exchange.\n */\n base_url: string;\n\n /**\n * Master public key of the exchange.\n */\n master_public_key: string;\n\n /**\n * Auditors (partially) auditing the exchange.\n */\n auditors: BackupExchangeAuditor[];\n\n /**\n * Currency that the exchange offers.\n */\n currency: string;\n\n /**\n * Denominations offered by the exchange.\n */\n denominations: BackupDenomination[];\n\n /**\n * Last observed protocol version.\n */\n protocol_version: string;\n\n /**\n * Closing delay of reserves.\n */\n reserve_closing_delay: TalerProtocolDuration;\n\n /**\n * Signing keys we got from the exchange, can also contain\n * older signing keys that are not returned by /keys anymore.\n */\n signing_keys: BackupExchangeSignKey[];\n\n wire_fees: BackupExchangeWireFee[];\n\n global_fees: BackupExchangeGlobalFees[];\n\n /**\n * Bank accounts offered by the exchange;\n */\n accounts: {\n payto_uri: string;\n master_sig: string;\n }[];\n\n /**\n * ETag for last terms of service download.\n */\n tos_accepted_etag: string | undefined;\n\n /**\n * Timestamp when the ToS has been accepted.\n */\n tos_accepted_timestamp: TalerProtocolTimestamp | undefined;\n}\n\nexport enum BackupProposalStatus {\n /**\n * Proposed (and either downloaded or not,\n * depending on whether contract terms are present),\n * but the user needs to accept/reject it.\n */\n Proposed = \"proposed\",\n /**\n * The user has rejected the proposal.\n */\n Refused = \"refused\",\n /**\n * Downloading or processing the proposal has failed permanently.\n *\n * FIXME: Should this be modeled as a \"misbehavior report\" instead?\n */\n PermanentlyFailed = \"permanently-failed\",\n /**\n * Downloaded proposal was detected as a re-purchase.\n */\n Repurchase = \"repurchase\",\n\n Paid = \"paid\",\n}\n\nexport interface BackupRecovery {\n walletRootPriv: string;\n providers: {\n name: string;\n url: string;\n }[];\n}\n", "/*\nCopyright Mathias Bynens <https://mathiasbynens.be/>\nCopyright (c) 2022 Taler Systems S.A.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = \"-\"; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7E]/; // non-ASCII chars\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n overflow: \"Overflow: input needs wider integers to process\",\n \"not-basic\": \"Illegal input >= 0x80 (not a basic code point)\",\n \"invalid-input\": \"Invalid input\",\n} as { [x: string]: string };\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type: string) {\n throw new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array: any[], fn: (arg0: any) => any) {\n const result = [];\n let length = array.length;\n while (length--) {\n result[length] = fn(array[length]);\n }\n return result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {Array} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(\n string: string,\n fn: { (string: any): any; (string: any): any; (arg0: any): any },\n) {\n const parts = string.split(\"@\");\n let result = \"\";\n if (parts.length > 1) {\n // In email addresses, only the domain name should be punycoded. Leave\n // the local part (i.e. everything up to `@`) intact.\n result = parts[0] + \"@\";\n string = parts[1];\n }\n // Avoid `split(regex)` for IE8 compatibility. See #17.\n string = string.replace(regexSeparators, \"\\x2E\");\n const labels = string.split(\".\");\n const encoded = map(labels, fn).join(\".\");\n return result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string: string) {\n const output = [];\n let counter = 0;\n const length = string.length;\n while (counter < length) {\n const value = string.charCodeAt(counter++);\n if (value >= 0xd800 && value <= 0xdbff && counter < length) {\n // It's a high surrogate, and there is a next character.\n const extra = string.charCodeAt(counter++);\n if ((extra & 0xfc00) == 0xdc00) {\n // Low surrogate.\n output.push(((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000);\n } else {\n // It's an unmatched surrogate; only append this code unit, in case the\n // next code unit is the high surrogate of a surrogate pair.\n output.push(value);\n counter--;\n }\n } else {\n output.push(value);\n }\n }\n return output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = (array: any): string => String.fromCodePoint(...array);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function (codePoint: number) {\n if (codePoint - 0x30 < 0x0a) {\n return codePoint - 0x16;\n }\n if (codePoint - 0x41 < 0x1a) {\n return codePoint - 0x41;\n }\n if (codePoint - 0x61 < 0x1a) {\n return codePoint - 0x61;\n }\n return base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function (digit: number, flag: number) {\n // 0..25 map to ASCII a..z or A..Z\n // 26..35 map to ASCII 0..9\n return digit + 22 + 75 * Number(digit < 26) - (Number(flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function (delta: number, numPoints: number, firstTime: boolean) {\n let k = 0;\n delta = firstTime ? floor(delta / damp) : delta >> 1;\n delta += floor(delta / numPoints);\n for (\n ;\n /* no initialization */ delta > (baseMinusTMin * tMax) >> 1;\n k += base\n ) {\n delta = floor(delta / baseMinusTMin);\n }\n return floor(k + ((baseMinusTMin + 1) * delta) / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function (input: string) {\n // Don't use UCS-2.\n const output = [];\n const inputLength = input.length;\n let i = 0;\n let n = initialN;\n let bias = initialBias;\n\n // Handle the basic code points: let `basic` be the number of input code\n // points before the last delimiter, or `0` if there is none, then copy\n // the first basic code points to the output.\n\n let basic = input.lastIndexOf(delimiter);\n if (basic < 0) {\n basic = 0;\n }\n\n for (let j = 0; j < basic; ++j) {\n // if it's not a basic code point\n if (input.charCodeAt(j) >= 0x80) {\n error(\"not-basic\");\n }\n output.push(input.charCodeAt(j));\n }\n\n // Main decoding loop: start just after the last delimiter if any basic code\n // points were copied; start at the beginning otherwise.\n\n for (\n let index = basic > 0 ? basic + 1 : 0;\n index < inputLength /* no final expression */;\n\n ) {\n // `index` is the index of the next character to be consumed.\n // Decode a generalized variable-length integer into `delta`,\n // which gets added to `i`. The overflow checking is easier\n // if we increase `i` as we go, then subtract off its starting\n // value at the end to obtain `delta`.\n let oldi = i;\n for (let w = 1, k = base /* no condition */; ; k += base) {\n if (index >= inputLength) {\n error(\"invalid-input\");\n }\n\n const digit = basicToDigit(input.charCodeAt(index++));\n\n if (digit >= base || digit > floor((maxInt - i) / w)) {\n error(\"overflow\");\n }\n\n i += digit * w;\n const t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;\n\n if (digit < t) {\n break;\n }\n\n const baseMinusT = base - t;\n if (w > floor(maxInt / baseMinusT)) {\n error(\"overflow\");\n }\n\n w *= baseMinusT;\n }\n\n const out = output.length + 1;\n bias = adapt(i - oldi, out, oldi == 0);\n\n // `i` was supposed to wrap around from `out` to `0`,\n // incrementing `n` each time, so we'll fix that now:\n if (floor(i / out) > maxInt - n) {\n error(\"overflow\");\n }\n\n n += floor(i / out);\n i %= out;\n\n // Insert `n` at position `i` of the output.\n output.splice(i++, 0, n);\n }\n\n return String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function (inputArg: string) {\n const output = [];\n\n // Convert the input in UCS-2 to an array of Unicode code points.\n let input = ucs2decode(inputArg);\n\n // Cache the length.\n let inputLength = input.length;\n\n // Initialize the state.\n let n = initialN;\n let delta = 0;\n let bias = initialBias;\n\n // Handle the basic code points.\n for (const currentValue of input) {\n if (currentValue < 0x80) {\n output.push(stringFromCharCode(currentValue));\n }\n }\n\n let basicLength = output.length;\n let handledCPCount = basicLength;\n\n // `handledCPCount` is the number of code points that have been handled;\n // `basicLength` is the number of basic code points.\n\n // Finish the basic string with a delimiter unless it's empty.\n if (basicLength) {\n output.push(delimiter);\n }\n\n // Main encoding loop:\n while (handledCPCount < inputLength) {\n // All non-basic code points < n have been handled already. Find the next\n // larger one:\n let m = maxInt;\n for (const currentValue of input) {\n if (currentValue >= n && currentValue < m) {\n m = currentValue;\n }\n }\n\n // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n // but guard against overflow.\n const handledCPCountPlusOne = handledCPCount + 1;\n if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n error(\"overflow\");\n }\n\n delta += (m - n) * handledCPCountPlusOne;\n n = m;\n\n for (const currentValue of input) {\n if (currentValue < n && ++delta > maxInt) {\n error(\"overflow\");\n }\n if (currentValue == n) {\n // Represent delta as a generalized variable-length integer.\n let q = delta;\n for (let k = base /* no condition */; ; k += base) {\n const t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;\n if (q < t) {\n break;\n }\n const qMinusT = q - t;\n const baseMinusT = base - t;\n output.push(\n stringFromCharCode(digitToBasic(t + (qMinusT % baseMinusT), 0)),\n );\n q = floor(qMinusT / baseMinusT);\n }\n\n output.push(stringFromCharCode(digitToBasic(q, 0)));\n bias = adapt(\n delta,\n handledCPCountPlusOne,\n handledCPCount == basicLength,\n );\n delta = 0;\n ++handledCPCount;\n }\n }\n\n ++delta;\n ++n;\n }\n return output.join(\"\");\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function (input: string) {\n return mapDomain(input, function (string) {\n return regexPunycode.test(string)\n ? decode(string.slice(4).toLowerCase())\n : string;\n });\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function (input: string) {\n return mapDomain(input, function (string) {\n return regexNonASCII.test(string) ? \"xn--\" + encode(string) : string;\n });\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nexport const punycode = {\n /**\n * A string representing the current Punycode.js version number.\n * @memberOf punycode\n * @type String\n */\n version: \"2.1.0\",\n /**\n * An object of methods to convert from JavaScript's internal character\n * representation (UCS-2) to Unicode code points, and back.\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode\n * @type Object\n */\n ucs2: {\n decode: ucs2decode,\n encode: ucs2encode,\n },\n decode: decode,\n encode: encode,\n toASCII: toASCII,\n toUnicode: toUnicode,\n};\n", "/*\nThe MIT License (MIT)\n\nCopyright (c) Sebastian Mayr\nCopyright (c) 2022 Taler Systems S.A.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n*/\n\n// Vendored with modifications (TypeScript etc.) from https://github.com/jsdom/whatwg-url\n\nconst utf8Encoder = new TextEncoder();\nconst utf8Decoder = new TextDecoder(\"utf-8\", { ignoreBOM: true });\n\nfunction utf8Encode(string: string | undefined) {\n return utf8Encoder.encode(string);\n}\n\nfunction utf8DecodeWithoutBOM(\n bytes: DataView | ArrayBuffer | null | undefined,\n) {\n return utf8Decoder.decode(bytes);\n}\n\n// https://url.spec.whatwg.org/#concept-urlencoded-parser\nfunction parseUrlencoded(input: Uint8Array) {\n const sequences = strictlySplitByteSequence(input, p(\"&\"));\n const output = [];\n for (const bytes of sequences) {\n if (bytes.length === 0) {\n continue;\n }\n\n let name, value;\n const indexOfEqual = bytes.indexOf(p(\"=\")!);\n\n if (indexOfEqual >= 0) {\n name = bytes.slice(0, indexOfEqual);\n value = bytes.slice(indexOfEqual + 1);\n } else {\n name = bytes;\n value = new Uint8Array(0);\n }\n\n name = replaceByteInByteSequence(name, 0x2b, 0x20);\n value = replaceByteInByteSequence(value, 0x2b, 0x20);\n\n const nameString = utf8DecodeWithoutBOM(percentDecodeBytes(name));\n const valueString = utf8DecodeWithoutBOM(percentDecodeBytes(value));\n\n output.push([nameString, valueString]);\n }\n return output;\n}\n\n// https://url.spec.whatwg.org/#concept-urlencoded-string-parser\nfunction parseUrlencodedString(input: string | undefined) {\n return parseUrlencoded(utf8Encode(input));\n}\n\n// https://url.spec.whatwg.org/#concept-urlencoded-serializer\nfunction serializeUrlencoded(tuples: any[], encodingOverride = undefined) {\n let encoding = \"utf-8\";\n if (encodingOverride !== undefined) {\n // TODO \"get the output encoding\", i.e. handle encoding labels vs. names.\n encoding = encodingOverride;\n }\n\n let output = \"\";\n for (const [i, tuple] of tuples.entries()) {\n // TODO: handle encoding override\n\n const name = utf8PercentEncodeString(\n tuple[0],\n isURLEncodedPercentEncode,\n true,\n );\n\n let value = tuple[1];\n if (tuple.length > 2 && tuple[2] !== undefined) {\n if (tuple[2] === \"hidden\" && name === \"_charset_\") {\n value = encoding;\n } else if (tuple[2] === \"file\") {\n // value is a File object\n value = value.name;\n }\n }\n\n value = utf8PercentEncodeString(value, isURLEncodedPercentEncode, true);\n\n if (i !== 0) {\n output += \"&\";\n }\n output += `${name}=${value}`;\n }\n return output;\n}\n\nfunction strictlySplitByteSequence(buf: Uint8Array, cp: any) {\n const list = [];\n let last = 0;\n let i = buf.indexOf(cp);\n while (i >= 0) {\n list.push(buf.slice(last, i));\n last = i + 1;\n i = buf.indexOf(cp, last);\n }\n if (last !== buf.length) {\n list.push(buf.slice(last));\n }\n return list;\n}\n\nfunction replaceByteInByteSequence(buf: Uint8Array, from: number, to: number) {\n let i = buf.indexOf(from);\n while (i >= 0) {\n buf[i] = to;\n i = buf.indexOf(from, i + 1);\n }\n return buf;\n}\n\nfunction p(char: string) {\n return char.codePointAt(0);\n}\n\n// https://url.spec.whatwg.org/#percent-encode\nfunction percentEncode(c: number) {\n let hex = c.toString(16).toUpperCase();\n if (hex.length === 1) {\n hex = `0${hex}`;\n }\n\n return `%${hex}`;\n}\n\n// https://url.spec.whatwg.org/#percent-decode\nfunction percentDecodeBytes(input: Uint8Array) {\n const output = new Uint8Array(input.byteLength);\n let outputIndex = 0;\n for (let i = 0; i < input.byteLength; ++i) {\n const byte = input[i];\n if (byte !== 0x25) {\n output[outputIndex++] = byte;\n } else if (\n byte === 0x25 &&\n (!isASCIIHex(input[i + 1]) || !isASCIIHex(input[i + 2]))\n ) {\n output[outputIndex++] = byte;\n } else {\n const bytePoint = parseInt(\n String.fromCodePoint(input[i + 1], input[i + 2]),\n 16,\n );\n output[outputIndex++] = bytePoint;\n i += 2;\n }\n }\n\n return output.slice(0, outputIndex);\n}\n\n// https://url.spec.whatwg.org/#string-percent-decode\nfunction percentDecodeString(input: string) {\n const bytes = utf8Encode(input);\n return percentDecodeBytes(bytes);\n}\n\n// https://url.spec.whatwg.org/#c0-control-percent-encode-set\nfunction isC0ControlPercentEncode(c: number) {\n return c <= 0x1f || c > 0x7e;\n}\n\n// https://url.spec.whatwg.org/#fragment-percent-encode-set\nconst extraFragmentPercentEncodeSet = new Set([\n p(\" \"),\n p('\"'),\n p(\"<\"),\n p(\">\"),\n p(\"`\"),\n]);\n\nfunction isFragmentPercentEncode(c: number) {\n return isC0ControlPercentEncode(c) || extraFragmentPercentEncodeSet.has(c);\n}\n\n// https://url.spec.whatwg.org/#query-percent-encode-set\nconst extraQueryPercentEncodeSet = new Set([\n p(\" \"),\n p('\"'),\n p(\"#\"),\n p(\"<\"),\n p(\">\"),\n]);\n\nfunction isQueryPercentEncode(c: number) {\n return isC0ControlPercentEncode(c) || extraQueryPercentEncodeSet.has(c);\n}\n\n// https://url.spec.whatwg.org/#special-query-percent-encode-set\nfunction isSpecialQueryPercentEncode(c: number) {\n return isQueryPercentEncode(c) || c === p(\"'\");\n}\n\n// https://url.spec.whatwg.org/#path-percent-encode-set\nconst extraPathPercentEncodeSet = new Set([p(\"?\"), p(\"`\"), p(\"{\"), p(\"}\")]);\nfunction isPathPercentEncode(c: number) {\n return isQueryPercentEncode(c) || extraPathPercentEncodeSet.has(c);\n}\n\n// https://url.spec.whatwg.org/#userinfo-percent-encode-set\nconst extraUserinfoPercentEncodeSet = new Set([\n p(\"/\"),\n p(\":\"),\n p(\";\"),\n p(\"=\"),\n p(\"@\"),\n p(\"[\"),\n p(\"\\\\\"),\n p(\"]\"),\n p(\"^\"),\n p(\"|\"),\n]);\nfunction isUserinfoPercentEncode(c: number) {\n return isPathPercentEncode(c) || extraUserinfoPercentEncodeSet.has(c);\n}\n\n// https://url.spec.whatwg.org/#component-percent-encode-set\nconst extraComponentPercentEncodeSet = new Set([\n p(\"$\"),\n p(\"%\"),\n p(\"&\"),\n p(\"+\"),\n p(\",\"),\n]);\nfunction isComponentPercentEncode(c: number) {\n return isUserinfoPercentEncode(c) || extraComponentPercentEncodeSet.has(c);\n}\n\n// https://url.spec.whatwg.org/#application-x-www-form-urlencoded-percent-encode-set\nconst extraURLEncodedPercentEncodeSet = new Set([\n p(\"!\"),\n p(\"'\"),\n p(\"(\"),\n p(\")\"),\n p(\"~\"),\n]);\n\nfunction isURLEncodedPercentEncode(c: number) {\n return isComponentPercentEncode(c) || extraURLEncodedPercentEncodeSet.has(c);\n}\n\n// https://url.spec.whatwg.org/#code-point-percent-encode-after-encoding\n// https://url.spec.whatwg.org/#utf-8-percent-encode\n// Assuming encoding is always utf-8 allows us to trim one of the logic branches. TODO: support encoding.\n// The \"-Internal\" variant here has code points as JS strings. The external version used by other files has code points\n// as JS numbers, like the rest of the codebase.\nfunction utf8PercentEncodeCodePointInternal(\n codePoint: string,\n percentEncodePredicate: (arg0: number) => any,\n) {\n const bytes = utf8Encode(codePoint);\n let output = \"\";\n for (const byte of bytes) {\n // Our percentEncodePredicate operates on bytes, not code points, so this is slightly different from the spec.\n if (!percentEncodePredicate(byte)) {\n output += String.fromCharCode(byte);\n } else {\n output += percentEncode(byte);\n }\n }\n\n return output;\n}\n\nfunction utf8PercentEncodeCodePoint(\n codePoint: number,\n percentEncodePredicate: (arg0: number) => any,\n) {\n return utf8PercentEncodeCodePointInternal(\n String.fromCodePoint(codePoint),\n percentEncodePredicate,\n );\n}\n\n// https://url.spec.whatwg.org/#string-percent-encode-after-encoding\n// https://url.spec.whatwg.org/#string-utf-8-percent-encode\nfunction utf8PercentEncodeString(\n input: string,\n percentEncodePredicate: {\n (c: number): boolean;\n (c: number): boolean;\n (arg0: number): any;\n },\n spaceAsPlus = false,\n) {\n let output = \"\";\n for (const codePoint of input) {\n if (spaceAsPlus && codePoint === \" \") {\n output += \"+\";\n } else {\n output += utf8PercentEncodeCodePointInternal(\n codePoint,\n percentEncodePredicate,\n );\n }\n }\n return output;\n}\n\n// Note that we take code points as JS numbers, not JS strings.\n\nfunction isASCIIDigit(c: number) {\n return c >= 0x30 && c <= 0x39;\n}\n\nfunction isASCIIAlpha(c: number) {\n return (c >= 0x41 && c <= 0x5a) || (c >= 0x61 && c <= 0x7a);\n}\n\nfunction isASCIIAlphanumeric(c: number) {\n return isASCIIAlpha(c) || isASCIIDigit(c);\n}\n\nfunction isASCIIHex(c: number) {\n return (\n isASCIIDigit(c) || (c >= 0x41 && c <= 0x46) || (c >= 0x61 && c <= 0x66)\n );\n}\n\nexport class URLSearchParamsImpl {\n _list: any[];\n _url: any;\n constructor(init: any, { doNotStripQMark = false }: any = {}) {\n this._list = [];\n this._url = null;\n\n if (!doNotStripQMark && typeof init === \"string\" && init[0] === \"?\") {\n init = init.slice(1);\n }\n\n if (Array.isArray(init)) {\n for (const pair of init) {\n if (pair.length !== 2) {\n throw new TypeError(\n \"Failed to construct 'URLSearchParams': parameter 1 sequence's element does not \" +\n \"contain exactly two elements.\",\n );\n }\n this._list.push([pair[0], pair[1]]);\n }\n } else if (\n typeof init === \"object\" &&\n Object.getPrototypeOf(init) === null\n ) {\n for (const name of Object.keys(init)) {\n const value = init[name];\n this._list.push([name, value]);\n }\n } else {\n this._list = parseUrlencodedString(init);\n }\n }\n\n _updateSteps() {\n if (this._url !== null) {\n let query: string | null = serializeUrlencoded(this._list);\n if (query === \"\") {\n query = null;\n }\n this._url._url.query = query;\n }\n }\n\n append(name: string, value: string) {\n this._list.push([name, value]);\n this._updateSteps();\n }\n\n delete(name: string) {\n let i = 0;\n while (i < this._list.length) {\n if (this._list[i][0] === name) {\n this._list.splice(i, 1);\n } else {\n i++;\n }\n }\n this._updateSteps();\n }\n\n get(name: string) {\n for (const tuple of this._list) {\n if (tuple[0] === name) {\n return tuple[1];\n }\n }\n return null;\n }\n\n getAll(name: string) {\n const output = [];\n for (const tuple of this._list) {\n if (tuple[0] === name) {\n output.push(tuple[1]);\n }\n }\n return output;\n }\n\n forEach(\n callbackfn: (\n value: string,\n key: string,\n parent: URLSearchParamsImpl,\n ) => void,\n thisArg?: any,\n ): void {\n for (const tuple of this._list) {\n callbackfn.call(thisArg, tuple[1], tuple[0], this);\n }\n }\n\n has(name: string) {\n for (const tuple of this._list) {\n if (tuple[0] === name) {\n return true;\n }\n }\n return false;\n }\n\n set(name: string, value: string) {\n let found = false;\n let i = 0;\n while (i < this._list.length) {\n if (this._list[i][0] === name) {\n if (found) {\n this._list.splice(i, 1);\n } else {\n found = true;\n this._list[i][1] = value;\n i++;\n }\n } else {\n i++;\n }\n }\n if (!found) {\n this._list.push([name, value]);\n }\n this._updateSteps();\n }\n\n sort() {\n this._list.sort((a, b) => {\n if (a[0] < b[0]) {\n return -1;\n }\n if (a[0] > b[0]) {\n return 1;\n }\n return 0;\n });\n\n this._updateSteps();\n }\n\n [Symbol.iterator]() {\n return this._list[Symbol.iterator]();\n }\n\n toString() {\n return serializeUrlencoded(this._list);\n }\n}\n\nconst specialSchemes = {\n ftp: 21,\n file: null,\n http: 80,\n https: 443,\n ws: 80,\n wss: 443,\n} as { [x: string]: number | null };\n\nconst failure = Symbol(\"failure\");\n\nfunction countSymbols(str: any) {\n return [...str].length;\n}\n\nfunction at(input: any, idx: any) {\n const c = input[idx];\n return isNaN(c) ? undefined : String.fromCodePoint(c);\n}\n\nfunction isSingleDot(buffer: string) {\n return buffer === \".\" || buffer.toLowerCase() === \"%2e\";\n}\n\nfunction isDoubleDot(buffer: string) {\n buffer = buffer.toLowerCase();\n return (\n buffer === \"..\" ||\n buffer === \"%2e.\" ||\n buffer === \".%2e\" ||\n buffer === \"%2e%2e\"\n );\n}\n\nfunction isWindowsDriveLetterCodePoints(cp1: number, cp2: number) {\n return isASCIIAlpha(cp1) && (cp2 === p(\":\") || cp2 === p(\"|\"));\n}\n\nfunction isWindowsDriveLetterString(string: string) {\n return (\n string.length === 2 &&\n isASCIIAlpha(string.codePointAt(0)!) &&\n (string[1] === \":\" || string[1] === \"|\")\n );\n}\n\nfunction isNormalizedWindowsDriveLetterString(string: string) {\n return (\n string.length === 2 &&\n isASCIIAlpha(string.codePointAt(0)!) &&\n string[1] === \":\"\n );\n}\n\nfunction containsForbiddenHostCodePoint(string: string) {\n return (\n string.search(\n /\\u0000|\\u0009|\\u000A|\\u000D|\\u0020|#|\\/|:|<|>|\\?|@|\\[|\\\\|\\]|\\^|\\|/u,\n ) !== -1\n );\n}\n\nfunction containsForbiddenDomainCodePoint(string: string) {\n return (\n containsForbiddenHostCodePoint(string) ||\n string.search(/[\\u0000-\\u001F]|%|\\u007F/u) !== -1\n );\n}\n\nfunction isSpecialScheme(scheme: string) {\n return specialSchemes[scheme] !== undefined;\n}\n\nfunction isSpecial(url: any) {\n return isSpecialScheme(url.scheme);\n}\n\nfunction isNotSpecial(url: UrlObj) {\n return !isSpecialScheme(url.scheme);\n}\n\nfunction defaultPort(scheme: string) {\n return specialSchemes[scheme];\n}\n\nfunction parseIPv4Number(input: string) {\n if (input === \"\") {\n return failure;\n }\n\n let R = 10;\n\n if (\n input.length >= 2 &&\n input.charAt(0) === \"0\" &&\n input.charAt(1).toLowerCase() === \"x\"\n ) {\n input = input.substring(2);\n R = 16;\n } else if (input.length >= 2 && input.charAt(0) === \"0\") {\n input = input.substring(1);\n R = 8;\n }\n\n if (input === \"\") {\n return 0;\n }\n\n let regex = /[^0-7]/u;\n if (R === 10) {\n regex = /[^0-9]/u;\n }\n if (R === 16) {\n regex = /[^0-9A-Fa-f]/u;\n }\n\n if (regex.test(input)) {\n return failure;\n }\n\n return parseInt(input, R);\n}\n\nfunction parseIPv4(input: string) {\n const parts = input.split(\".\");\n if (parts[parts.length - 1] === \"\") {\n if (parts.length > 1) {\n parts.pop();\n }\n }\n\n if (parts.length > 4) {\n return failure;\n }\n\n const numbers = [];\n for (const part of parts) {\n const n = parseIPv4Number(part);\n if (n === failure) {\n return failure;\n }\n\n numbers.push(n);\n }\n\n for (let i = 0; i < numbers.length - 1; ++i) {\n if (numbers[i] > 255) {\n return failure;\n }\n }\n if (numbers[numbers.length - 1] >= 256 ** (5 - numbers.length)) {\n return failure;\n }\n\n let ipv4 = numbers.pop();\n let counter = 0;\n\n for (const n of numbers) {\n ipv4! += n * 256 ** (3 - counter);\n ++counter;\n }\n\n return ipv4;\n}\n\nfunction serializeIPv4(address: number) {\n let output = \"\";\n let n = address;\n\n for (let i = 1; i <= 4; ++i) {\n output = String(n % 256) + output;\n if (i !== 4) {\n output = `.${output}`;\n }\n n = Math.floor(n / 256);\n }\n\n return output;\n}\n\nfunction parseIPv6(inputArg: string) {\n const address = [0, 0, 0, 0, 0, 0, 0, 0];\n let pieceIndex = 0;\n let compress = null;\n let pointer = 0;\n\n const input = Array.from(inputArg, (c) => c.codePointAt(0));\n\n if (input[pointer] === p(\":\")) {\n if (input[pointer + 1] !== p(\":\")) {\n return failure;\n }\n\n pointer += 2;\n ++pieceIndex;\n compress = pieceIndex;\n }\n\n while (pointer < input.length) {\n if (pieceIndex === 8) {\n return failure;\n }\n\n if (input[pointer] === p(\":\")) {\n if (compress !== null) {\n return failure;\n }\n ++pointer;\n ++pieceIndex;\n compress = pieceIndex;\n continue;\n }\n\n let value = 0;\n let length = 0;\n\n while (length < 4 && isASCIIHex(input[pointer]!)) {\n value = value * 0x10 + parseInt(at(input, pointer)!, 16);\n ++pointer;\n ++length;\n }\n\n if (input[pointer] === p(\".\")) {\n if (length === 0) {\n return failure;\n }\n\n pointer -= length;\n\n if (pieceIndex > 6) {\n return failure;\n }\n\n let numbersSeen = 0;\n\n while (input[pointer] !== undefined) {\n let ipv4Piece = null;\n\n if (numbersSeen > 0) {\n if (input[pointer] === p(\".\") && numbersSeen < 4) {\n ++pointer;\n } else {\n return failure;\n }\n }\n\n if (!isASCIIDigit(input[pointer]!)) {\n return failure;\n }\n\n while (isASCIIDigit(input[pointer]!)) {\n const number = parseInt(at(input, pointer)!);\n if (ipv4Piece === null) {\n ipv4Piece = number;\n } else if (ipv4Piece === 0) {\n return failure;\n } else {\n ipv4Piece = ipv4Piece * 10 + number;\n }\n if (ipv4Piece > 255) {\n return failure;\n }\n ++pointer;\n }\n\n address[pieceIndex] = address[pieceIndex] * 0x100 + ipv4Piece!;\n\n ++numbersSeen;\n\n if (numbersSeen === 2 || numbersSeen === 4) {\n ++pieceIndex;\n }\n }\n\n if (numbersSeen !== 4) {\n return failure;\n }\n\n break;\n } else if (input[pointer] === p(\":\")) {\n ++pointer;\n if (input[pointer] === undefined) {\n return failure;\n }\n } else if (input[pointer] !== undefined) {\n return failure;\n }\n\n address[pieceIndex] = value;\n ++pieceIndex;\n }\n\n if (compress !== null) {\n let swaps = pieceIndex - compress;\n pieceIndex = 7;\n while (pieceIndex !== 0 && swaps > 0) {\n const temp = address[compress + swaps - 1];\n address[compress + swaps - 1] = address[pieceIndex];\n address[pieceIndex] = temp;\n --pieceIndex;\n --swaps;\n }\n } else if (compress === null && pieceIndex !== 8) {\n return failure;\n }\n\n return address;\n}\n\nfunction serializeIPv6(address: any[]) {\n let output = \"\";\n const compress = findLongestZeroSequence(address);\n let ignore0 = false;\n\n for (let pieceIndex = 0; pieceIndex <= 7; ++pieceIndex) {\n if (ignore0 && address[pieceIndex] === 0) {\n continue;\n } else if (ignore0) {\n ignore0 = false;\n }\n\n if (compress === pieceIndex) {\n const separator = pieceIndex === 0 ? \"::\" : \":\";\n output += separator;\n ignore0 = true;\n continue;\n }\n\n output += address[pieceIndex].toString(16);\n\n if (pieceIndex !== 7) {\n output += \":\";\n }\n }\n\n return output;\n}\n\nfunction parseHost(input: string, isNotSpecialArg = false) {\n if (input[0] === \"[\") {\n if (input[input.length - 1] !== \"]\") {\n return failure;\n }\n\n return parseIPv6(input.substring(1, input.length - 1));\n }\n\n if (isNotSpecialArg) {\n return parseOpaqueHost(input);\n }\n\n const domain = utf8DecodeWithoutBOM(percentDecodeString(input));\n const asciiDomain = domainToASCII(domain);\n if (asciiDomain === failure) {\n return failure;\n }\n\n if (containsForbiddenDomainCodePoint(asciiDomain)) {\n return failure;\n }\n\n if (endsInANumber(asciiDomain)) {\n return parseIPv4(asciiDomain);\n }\n\n return asciiDomain;\n}\n\nfunction endsInANumber(input: string) {\n const parts = input.split(\".\");\n if (parts[parts.length - 1] === \"\") {\n if (parts.length === 1) {\n return false;\n }\n parts.pop();\n }\n\n const last = parts[parts.length - 1];\n if (parseIPv4Number(last) !== failure) {\n return true;\n }\n\n if (/^[0-9]+$/u.test(last)) {\n return true;\n }\n\n return false;\n}\n\nfunction parseOpaqueHost(input: string) {\n if (containsForbiddenHostCodePoint(input)) {\n return failure;\n }\n\n return utf8PercentEncodeString(input, isC0ControlPercentEncode);\n}\n\nfunction findLongestZeroSequence(arr: number[]) {\n let maxIdx = null;\n let maxLen = 1; // only find elements > 1\n let currStart = null;\n let currLen = 0;\n\n for (let i = 0; i < arr.length; ++i) {\n if (arr[i] !== 0) {\n if (currLen > maxLen) {\n maxIdx = currStart;\n maxLen = currLen;\n }\n\n currStart = null;\n currLen = 0;\n } else {\n if (currStart === null) {\n currStart = i;\n }\n ++currLen;\n }\n }\n\n // if trailing zeros\n if (currLen > maxLen) {\n return currStart;\n }\n\n return maxIdx;\n}\n\nfunction serializeHost(host: number | number[] | string) {\n if (typeof host === \"number\") {\n return serializeIPv4(host);\n }\n\n // IPv6 serializer\n if (host instanceof Array) {\n return `[${serializeIPv6(host)}]`;\n }\n\n return host;\n}\n\nimport { punycode } from \"./punycode.js\";\n\nfunction domainToASCII(domain: string, beStrict = false) {\n // const result = tr46.toASCII(domain, {\n // checkBidi: true,\n // checkHyphens: false,\n // checkJoiners: true,\n // useSTD3ASCIIRules: beStrict,\n // verifyDNSLength: beStrict,\n // });\n let result;\n try {\n result = punycode.toASCII(domain);\n } catch (e) {\n return failure;\n }\n if (result === null || result === \"\") {\n return failure;\n }\n return result;\n}\n\nfunction trimControlChars(url: string) {\n return url.replace(/^[\\u0000-\\u001F\\u0020]+|[\\u0000-\\u001F\\u0020]+$/gu, \"\");\n}\n\nfunction trimTabAndNewline(url: string) {\n return url.replace(/\\u0009|\\u000A|\\u000D/gu, \"\");\n}\n\nfunction shortenPath(url: UrlObj) {\n const { path } = url;\n if (path.length === 0) {\n return;\n }\n if (\n url.scheme === \"file\" &&\n path.length === 1 &&\n isNormalizedWindowsDriveLetter(path[0])\n ) {\n return;\n }\n\n path.pop();\n}\n\nfunction includesCredentials(url: UrlObj) {\n return url.username !== \"\" || url.password !== \"\";\n}\n\nfunction cannotHaveAUsernamePasswordPort(url: UrlObj) {\n return url.host === null || url.host === \"\" || url.scheme === \"file\";\n}\n\nfunction hasAnOpaquePath(url: UrlObj) {\n return typeof url.path === \"string\";\n}\n\nfunction isNormalizedWindowsDriveLetter(string: string) {\n return /^[A-Za-z]:$/u.test(string);\n}\n\nexport interface UrlObj {\n scheme: string;\n username: string;\n password: string;\n host: string | number[] | number | null | undefined;\n port: number | null;\n path: string[];\n query: any;\n fragment: any;\n}\n\nclass URLStateMachine {\n pointer: number;\n input: number[];\n base: any;\n encodingOverride: string;\n url: UrlObj;\n state: string;\n stateOverride: string;\n failure: boolean;\n parseError: boolean;\n buffer: string;\n atFlag: boolean;\n arrFlag: boolean;\n passwordTokenSeenFlag: boolean;\n\n constructor(\n input: string,\n base: any,\n encodingOverride: string,\n url: UrlObj,\n stateOverride: string,\n ) {\n this.pointer = 0;\n this.base = base || null;\n this.encodingOverride = encodingOverride || \"utf-8\";\n this.url = url;\n this.failure = false;\n this.parseError = false;\n\n if (!this.url) {\n this.url = {\n scheme: \"\",\n username: \"\",\n password: \"\",\n host: null,\n port: null,\n path: [],\n query: null,\n fragment: null,\n };\n\n const res = trimControlChars(input);\n if (res !== input) {\n this.parseError = true;\n }\n input = res;\n }\n\n const res = trimTabAndNewline(input);\n if (res !== input) {\n this.parseError = true;\n }\n input = res;\n\n this.state = stateOverride || \"scheme start\";\n\n this.buffer = \"\";\n this.atFlag = false;\n this.arrFlag = false;\n this.passwordTokenSeenFlag = false;\n\n this.input = Array.from(input, (c) => c.codePointAt(0)!);\n\n for (; this.pointer <= this.input.length; ++this.pointer) {\n const c = this.input[this.pointer];\n const cStr = isNaN(c) ? undefined : String.fromCodePoint(c);\n\n // exec state machine\n const ret = this.table[`parse ${this.state}`].call(this, c, cStr!);\n if (!ret) {\n break; // terminate algorithm\n } else if (ret === failure) {\n this.failure = true;\n break;\n }\n }\n }\n\n table = {\n \"parse scheme start\": this.parseSchemeStart,\n \"parse scheme\": this.parseScheme,\n \"parse no scheme\": this.parseNoScheme,\n \"parse special relative or authority\": this.parseSpecialRelativeOrAuthority,\n \"parse path or authority\": this.parsePathOrAuthority,\n \"parse relative\": this.parseRelative,\n \"parse relative slash\": this.parseRelativeSlash,\n \"parse special authority slashes\": this.parseSpecialAuthoritySlashes,\n \"parse special authority ignore slashes\":\n this.parseSpecialAuthorityIgnoreSlashes,\n \"parse authority\": this.parseAuthority,\n \"parse host\": this.parseHostName,\n \"parse hostname\": this.parseHostName /* intentional duplication */,\n \"parse port\": this.parsePort,\n \"parse file\": this.parseFile,\n \"parse file slash\": this.parseFileSlash,\n \"parse file host\": this.parseFileHost,\n \"parse path start\": this.parsePathStart,\n \"parse path\": this.parsePath,\n \"parse opaque path\": this.parseOpaquePath,\n \"parse query\": this.parseQuery,\n \"parse fragment\": this.parseFragment,\n } as { [x: string]: (c: number, cStr: string) => any };\n\n parseSchemeStart(c: number, cStr: string) {\n if (isASCIIAlpha(c)) {\n this.buffer += cStr.toLowerCase();\n this.state = \"scheme\";\n } else if (!this.stateOverride) {\n this.state = \"no scheme\";\n --this.pointer;\n } else {\n this.parseError = true;\n return failure;\n }\n\n return true;\n }\n\n parseScheme(c: number, cStr: string) {\n if (\n isASCIIAlphanumeric(c) ||\n c === p(\"+\") ||\n c === p(\"-\") ||\n c === p(\".\")\n ) {\n this.buffer += cStr.toLowerCase();\n } else if (c === p(\":\")) {\n if (this.stateOverride) {\n if (isSpecial(this.url) && !isSpecialScheme(this.buffer)) {\n return false;\n }\n\n if (!isSpecial(this.url) && isSpecialScheme(this.buffer)) {\n return false;\n }\n\n if (\n (includesCredentials(this.url) || this.url.port !== null) &&\n this.buffer === \"file\"\n ) {\n return false;\n }\n\n if (this.url.scheme === \"file\" && this.url.host === \"\") {\n return false;\n }\n }\n this.url.scheme = this.buffer;\n if (this.stateOverride) {\n if (this.url.port === defaultPort(this.url.scheme)) {\n this.url.port = null;\n }\n return false;\n }\n this.buffer = \"\";\n if (this.url.scheme === \"file\") {\n if (\n this.input[this.pointer + 1] !== p(\"/\") ||\n this.input[this.pointer + 2] !== p(\"/\")\n ) {\n this.parseError = true;\n }\n this.state = \"file\";\n } else if (\n isSpecial(this.url) &&\n this.base !== null &&\n this.base.scheme === this.url.scheme\n ) {\n this.state = \"special relative or authority\";\n } else if (isSpecial(this.url)) {\n this.state = \"special authority slashes\";\n } else if (this.input[this.pointer + 1] === p(\"/\")) {\n this.state = \"path or authority\";\n ++this.pointer;\n } else {\n this.url.path = [\"\"];\n this.state = \"opaque path\";\n }\n } else if (!this.stateOverride) {\n this.buffer = \"\";\n this.state = \"no scheme\";\n this.pointer = -1;\n } else {\n this.parseError = true;\n return failure;\n }\n\n return true;\n }\n\n parseNoScheme(c: number) {\n if (this.base === null || (hasAnOpaquePath(this.base) && c !== p(\"#\"))) {\n return failure;\n } else if (hasAnOpaquePath(this.base) && c === p(\"#\")) {\n this.url.scheme = this.base.scheme;\n this.url.path = this.base.path;\n this.url.query = this.base.query;\n this.url.fragment = \"\";\n this.state = \"fragment\";\n } else if (this.base.scheme === \"file\") {\n this.state = \"file\";\n --this.pointer;\n } else {\n this.state = \"relative\";\n --this.pointer;\n }\n\n return true;\n }\n\n parseSpecialRelativeOrAuthority(c: number) {\n if (c === p(\"/\") && this.input[this.pointer + 1] === p(\"/\")) {\n this.state = \"special authority ignore slashes\";\n ++this.pointer;\n } else {\n this.parseError = true;\n this.state = \"relative\";\n --this.pointer;\n }\n\n return true;\n }\n\n parsePathOrAuthority(c: number) {\n if (c === p(\"/\")) {\n this.state = \"authority\";\n } else {\n this.state = \"path\";\n --this.pointer;\n }\n\n return true;\n }\n\n parseRelative(c: number) {\n this.url.scheme = this.base.scheme;\n if (c === p(\"/\")) {\n this.state = \"relative slash\";\n } else if (isSpecial(this.url) && c === p(\"\\\\\")) {\n this.parseError = true;\n this.state = \"relative slash\";\n } else {\n this.url.username = this.base.username;\n this.url.password = this.base.password;\n this.url.host = this.base.host;\n this.url.port = this.base.port;\n this.url.path = this.base.path.slice();\n this.url.query = this.base.query;\n if (c === p(\"?\")) {\n this.url.query = \"\";\n this.state = \"query\";\n } else if (c === p(\"#\")) {\n this.url.fragment = \"\";\n this.state = \"fragment\";\n } else if (!isNaN(c)) {\n this.url.query = null;\n this.url.path.pop();\n this.state = \"path\";\n --this.pointer;\n }\n }\n\n return true;\n }\n\n parseRelativeSlash(c: number) {\n if (isSpecial(this.url) && (c === p(\"/\") || c === p(\"\\\\\"))) {\n if (c === p(\"\\\\\")) {\n this.parseError = true;\n }\n this.state = \"special authority ignore slashes\";\n } else if (c === p(\"/\")) {\n this.state = \"authority\";\n } else {\n this.url.username = this.base.username;\n this.url.password = this.base.password;\n this.url.host = this.base.host;\n this.url.port = this.base.port;\n this.state = \"path\";\n --this.pointer;\n }\n\n return true;\n }\n\n parseSpecialAuthoritySlashes(c: number) {\n if (c === p(\"/\") && this.input[this.pointer + 1] === p(\"/\")) {\n this.state = \"special authority ignore slashes\";\n ++this.pointer;\n } else {\n this.parseError = true;\n this.state = \"special authority ignore slashes\";\n --this.pointer;\n }\n\n return true;\n }\n\n parseSpecialAuthorityIgnoreSlashes(c: number) {\n if (c !== p(\"/\") && c !== p(\"\\\\\")) {\n this.state = \"authority\";\n --this.pointer;\n } else {\n this.parseError = true;\n }\n\n return true;\n }\n\n parseAuthority(c: number, cStr: string) {\n if (c === p(\"@\")) {\n this.parseError = true;\n if (this.atFlag) {\n this.buffer = `%40${this.buffer}`;\n }\n this.atFlag = true;\n\n // careful, this is based on buffer and has its own pointer (this.pointer != pointer) and inner chars\n const len = countSymbols(this.buffer);\n for (let pointer = 0; pointer < len; ++pointer) {\n const codePoint = this.buffer.codePointAt(pointer);\n\n if (codePoint === p(\":\") && !this.passwordTokenSeenFlag) {\n this.passwordTokenSeenFlag = true;\n continue;\n }\n const encodedCodePoints = utf8PercentEncodeCodePoint(\n codePoint!,\n isUserinfoPercentEncode,\n );\n if (this.passwordTokenSeenFlag) {\n this.url.password += encodedCodePoints;\n } else {\n this.url.username += encodedCodePoints;\n }\n }\n this.buffer = \"\";\n } else if (\n isNaN(c) ||\n c === p(\"/\") ||\n c === p(\"?\") ||\n c === p(\"#\") ||\n (isSpecial(this.url) && c === p(\"\\\\\"))\n ) {\n if (this.atFlag && this.buffer === \"\") {\n this.parseError = true;\n return failure;\n }\n this.pointer -= countSymbols(this.buffer) + 1;\n this.buffer = \"\";\n this.state = \"host\";\n } else {\n this.buffer += cStr;\n }\n\n return true;\n }\n\n parseHostName(c: number, cStr: string) {\n if (this.stateOverride && this.url.scheme === \"file\") {\n --this.pointer;\n this.state = \"file host\";\n } else if (c === p(\":\") && !this.arrFlag) {\n if (this.buffer === \"\") {\n this.parseError = true;\n return failure;\n }\n\n if (this.stateOverride === \"hostname\") {\n return false;\n }\n\n const host = parseHost(this.buffer, isNotSpecial(this.url));\n if (host === failure) {\n return failure;\n }\n\n this.url.host = host;\n this.buffer = \"\";\n this.state = \"port\";\n } else if (\n isNaN(c) ||\n c === p(\"/\") ||\n c === p(\"?\") ||\n c === p(\"#\") ||\n (isSpecial(this.url) && c === p(\"\\\\\"))\n ) {\n --this.pointer;\n if (isSpecial(this.url) && this.buffer === \"\") {\n this.parseError = true;\n return failure;\n } else if (\n this.stateOverride &&\n this.buffer === \"\" &&\n (includesCredentials(this.url) || this.url.port !== null)\n ) {\n this.parseError = true;\n return false;\n }\n\n const host = parseHost(this.buffer, isNotSpecial(this.url));\n if (host === failure) {\n return failure;\n }\n\n this.url.host = host;\n this.buffer = \"\";\n this.state = \"path start\";\n if (this.stateOverride) {\n return false;\n }\n } else {\n if (c === p(\"[\")) {\n this.arrFlag = true;\n } else if (c === p(\"]\")) {\n this.arrFlag = false;\n }\n this.buffer += cStr;\n }\n\n return true;\n }\n\n parsePort(c: number, cStr: any) {\n if (isASCIIDigit(c)) {\n this.buffer += cStr;\n } else if (\n isNaN(c) ||\n c === p(\"/\") ||\n c === p(\"?\") ||\n c === p(\"#\") ||\n (isSpecial(this.url) && c === p(\"\\\\\")) ||\n this.stateOverride\n ) {\n if (this.buffer !== \"\") {\n const port = parseInt(this.buffer);\n if (port > 2 ** 16 - 1) {\n this.parseError = true;\n return failure;\n }\n this.url.port = port === defaultPort(this.url.scheme) ? null : port;\n this.buffer = \"\";\n }\n if (this.stateOverride) {\n return false;\n }\n this.state = \"path start\";\n --this.pointer;\n } else {\n this.parseError = true;\n return failure;\n }\n\n return true;\n }\n\n parseFile(c: number) {\n this.url.scheme = \"file\";\n this.url.host = \"\";\n\n if (c === p(\"/\") || c === p(\"\\\\\")) {\n if (c === p(\"\\\\\")) {\n this.parseError = true;\n }\n this.state = \"file slash\";\n } else if (this.base !== null && this.base.scheme === \"file\") {\n this.url.host = this.base.host;\n this.url.path = this.base.path.slice();\n this.url.query = this.base.query;\n if (c === p(\"?\")) {\n this.url.query = \"\";\n this.state = \"query\";\n } else if (c === p(\"#\")) {\n this.url.fragment = \"\";\n this.state = \"fragment\";\n } else if (!isNaN(c)) {\n this.url.query = null;\n if (!startsWithWindowsDriveLetter(this.input, this.pointer)) {\n shortenPath(this.url);\n } else {\n this.parseError = true;\n this.url.path = [];\n }\n\n this.state = \"path\";\n --this.pointer;\n }\n } else {\n this.state = \"path\";\n --this.pointer;\n }\n\n return true;\n }\n\n parseFileSlash(c: number) {\n if (c === p(\"/\") || c === p(\"\\\\\")) {\n if (c === p(\"\\\\\")) {\n this.parseError = true;\n }\n this.state = \"file host\";\n } else {\n if (this.base !== null && this.base.scheme === \"file\") {\n if (\n !startsWithWindowsDriveLetter(this.input, this.pointer) &&\n isNormalizedWindowsDriveLetterString(this.base.path[0])\n ) {\n this.url.path.push(this.base.path[0]);\n }\n this.url.host = this.base.host;\n }\n this.state = \"path\";\n --this.pointer;\n }\n\n return true;\n }\n\n parseFileHost(c: number, cStr: string) {\n if (\n isNaN(c) ||\n c === p(\"/\") ||\n c === p(\"\\\\\") ||\n c === p(\"?\") ||\n c === p(\"#\")\n ) {\n --this.pointer;\n if (!this.stateOverride && isWindowsDriveLetterString(this.buffer)) {\n this.parseError = true;\n this.state = \"path\";\n } else if (this.buffer === \"\") {\n this.url.host = \"\";\n if (this.stateOverride) {\n return false;\n }\n this.state = \"path start\";\n } else {\n let host = parseHost(this.buffer, isNotSpecial(this.url));\n if (host === failure) {\n return failure;\n }\n if (host === \"localhost\") {\n host = \"\";\n }\n this.url.host = host as any;\n\n if (this.stateOverride) {\n return false;\n }\n\n this.buffer = \"\";\n this.state = \"path start\";\n }\n } else {\n this.buffer += cStr;\n }\n\n return true;\n }\n\n parsePathStart(c: number) {\n if (isSpecial(this.url)) {\n if (c === p(\"\\\\\")) {\n this.parseError = true;\n }\n this.state = \"path\";\n\n if (c !== p(\"/\") && c !== p(\"\\\\\")) {\n --this.pointer;\n }\n } else if (!this.stateOverride && c === p(\"?\")) {\n this.url.query = \"\";\n this.state = \"query\";\n } else if (!this.stateOverride && c === p(\"#\")) {\n this.url.fragment = \"\";\n this.state = \"fragment\";\n } else if (c !== undefined) {\n this.state = \"path\";\n if (c !== p(\"/\")) {\n --this.pointer;\n }\n } else if (this.stateOverride && this.url.host === null) {\n this.url.path.push(\"\");\n }\n\n return true;\n }\n\n parsePath(c: number) {\n if (\n isNaN(c) ||\n c === p(\"/\") ||\n (isSpecial(this.url) && c === p(\"\\\\\")) ||\n (!this.stateOverride && (c === p(\"?\") || c === p(\"#\")))\n ) {\n if (isSpecial(this.url) && c === p(\"\\\\\")) {\n this.parseError = true;\n }\n\n if (isDoubleDot(this.buffer)) {\n shortenPath(this.url);\n if (c !== p(\"/\") && !(isSpecial(this.url) && c === p(\"\\\\\"))) {\n this.url.path.push(\"\");\n }\n } else if (\n isSingleDot(this.buffer) &&\n c !== p(\"/\") &&\n !(isSpecial(this.url) && c === p(\"\\\\\"))\n ) {\n this.url.path.push(\"\");\n } else if (!isSingleDot(this.buffer)) {\n if (\n this.url.scheme === \"file\" &&\n this.url.path.length === 0 &&\n isWindowsDriveLetterString(this.buffer)\n ) {\n this.buffer = `${this.buffer[0]}:`;\n }\n this.url.path.push(this.buffer);\n }\n this.buffer = \"\";\n if (c === p(\"?\")) {\n this.url.query = \"\";\n this.state = \"query\";\n }\n if (c === p(\"#\")) {\n this.url.fragment = \"\";\n this.state = \"fragment\";\n }\n } else {\n // TODO: If c is not a URL code point and not \"%\", parse error.\n\n if (\n c === p(\"%\") &&\n (!isASCIIHex(this.input[this.pointer + 1]) ||\n !isASCIIHex(this.input[this.pointer + 2]))\n ) {\n this.parseError = true;\n }\n\n this.buffer += utf8PercentEncodeCodePoint(c, isPathPercentEncode);\n }\n\n return true;\n }\n\n parseOpaquePath(c: number) {\n if (c === p(\"?\")) {\n this.url.query = \"\";\n this.state = \"query\";\n } else if (c === p(\"#\")) {\n this.url.fragment = \"\";\n this.state = \"fragment\";\n } else {\n // TODO: Add: not a URL code point\n if (!isNaN(c) && c !== p(\"%\")) {\n this.parseError = true;\n }\n\n if (\n c === p(\"%\") &&\n (!isASCIIHex(this.input[this.pointer + 1]) ||\n !isASCIIHex(this.input[this.pointer + 2]))\n ) {\n this.parseError = true;\n }\n\n if (!isNaN(c)) {\n // @ts-ignore\n this.url.path += utf8PercentEncodeCodePoint(\n c,\n isC0ControlPercentEncode,\n );\n }\n }\n\n return true;\n }\n\n parseQuery(c: number, cStr: string) {\n if (\n !isSpecial(this.url) ||\n this.url.scheme === \"ws\" ||\n this.url.scheme === \"wss\"\n ) {\n this.encodingOverride = \"utf-8\";\n }\n\n if ((!this.stateOverride && c === p(\"#\")) || isNaN(c)) {\n const queryPercentEncodePredicate = isSpecial(this.url)\n ? isSpecialQueryPercentEncode\n : isQueryPercentEncode;\n this.url.query += utf8PercentEncodeString(\n this.buffer,\n queryPercentEncodePredicate,\n );\n\n this.buffer = \"\";\n\n if (c === p(\"#\")) {\n this.url.fragment = \"\";\n this.state = \"fragment\";\n }\n } else if (!isNaN(c)) {\n // TODO: If c is not a URL code point and not \"%\", parse error.\n\n if (\n c === p(\"%\") &&\n (!isASCIIHex(this.input[this.pointer + 1]) ||\n !isASCIIHex(this.input[this.pointer + 2]))\n ) {\n this.parseError = true;\n }\n\n this.buffer += cStr;\n }\n\n return true;\n }\n\n parseFragment(c: number) {\n if (!isNaN(c)) {\n // TODO: If c is not a URL code point and not \"%\", parse error.\n if (\n c === p(\"%\") &&\n (!isASCIIHex(this.input[this.pointer + 1]) ||\n !isASCIIHex(this.input[this.pointer + 2]))\n ) {\n this.parseError = true;\n }\n\n this.url.fragment += utf8PercentEncodeCodePoint(\n c,\n isFragmentPercentEncode,\n );\n }\n\n return true;\n }\n}\n\nconst fileOtherwiseCodePoints = new Set([p(\"/\"), p(\"\\\\\"), p(\"?\"), p(\"#\")]);\n\nfunction startsWithWindowsDriveLetter(input: number[], pointer: number) {\n const length = input.length - pointer;\n return (\n length >= 2 &&\n isWindowsDriveLetterCodePoints(input[pointer], input[pointer + 1]) &&\n (length === 2 || fileOtherwiseCodePoints.has(input[pointer + 2]))\n );\n}\n\nfunction serializeURL(url: any, excludeFragment?: boolean) {\n let output = `${url.scheme}:`;\n if (url.host !== null) {\n output += \"//\";\n\n if (url.username !== \"\" || url.password !== \"\") {\n output += url.username;\n if (url.password !== \"\") {\n output += `:${url.password}`;\n }\n output += \"@\";\n }\n\n output += serializeHost(url.host);\n\n if (url.port !== null) {\n output += `:${url.port}`;\n }\n }\n\n if (\n url.host === null &&\n !hasAnOpaquePath(url) &&\n url.path.length > 1 &&\n url.path[0] === \"\"\n ) {\n output += \"/.\";\n }\n output += serializePath(url);\n\n if (url.query !== null) {\n output += `?${url.query}`;\n }\n\n if (!excludeFragment && url.fragment !== null) {\n output += `#${url.fragment}`;\n }\n\n return output;\n}\n\nfunction serializeOrigin(tuple: {\n scheme: string;\n port: number;\n host: number | number[] | string;\n}) {\n let result = `${tuple.scheme}://`;\n result += serializeHost(tuple.host);\n\n if (tuple.port !== null) {\n result += `:${tuple.port}`;\n }\n\n return result;\n}\n\nfunction serializePath(url: UrlObj): string {\n if (typeof url.path === \"string\") {\n return url.path;\n }\n\n let output = \"\";\n for (const segment of url.path) {\n output += `/${segment}`;\n }\n return output;\n}\n\nfunction serializeURLOrigin(url: any): any {\n // https://url.spec.whatwg.org/#concept-url-origin\n switch (url.scheme) {\n case \"blob\":\n try {\n return serializeURLOrigin(parseURL(serializePath(url)));\n } catch (e) {\n // serializing an opaque origin returns \"null\"\n return \"null\";\n }\n case \"ftp\":\n case \"http\":\n case \"https\":\n case \"ws\":\n case \"wss\":\n return serializeOrigin({\n scheme: url.scheme,\n host: url.host,\n port: url.port,\n });\n case \"file\":\n // The spec says:\n // > Unfortunate as it is, this is left as an exercise to the reader. When in doubt, return a new opaque origin.\n // Browsers tested so far:\n // - Chrome says \"file://\", but treats file: URLs as cross-origin for most (all?) purposes; see e.g.\n // https://bugs.chromium.org/p/chromium/issues/detail?id=37586\n // - Firefox says \"null\", but treats file: URLs as same-origin sometimes based on directory stuff; see\n // https://developer.mozilla.org/en-US/docs/Archive/Misc_top_level/Same-origin_policy_for_file:_URIs\n return \"null\";\n default:\n // serializing an opaque origin returns \"null\"\n return \"null\";\n }\n}\n\nexport function basicURLParse(input: string, options?: any) {\n if (options === undefined) {\n options = {};\n }\n\n const usm = new URLStateMachine(\n input,\n options.baseURL,\n options.encodingOverride,\n options.url,\n options.stateOverride,\n );\n\n if (usm.failure) {\n return null;\n }\n\n return usm.url;\n}\n\nfunction setTheUsername(url: UrlObj, username: string) {\n url.username = utf8PercentEncodeString(username, isUserinfoPercentEncode);\n}\n\nfunction setThePassword(url: UrlObj, password: string) {\n url.password = utf8PercentEncodeString(password, isUserinfoPercentEncode);\n}\n\nfunction serializeInteger(integer: number) {\n return String(integer);\n}\n\nfunction parseURL(\n input: any,\n options?: { baseURL?: any; encodingOverride?: any },\n) {\n if (options === undefined) {\n options = {};\n }\n\n // We don't handle blobs, so this just delegates:\n return basicURLParse(input, {\n baseURL: options.baseURL,\n encodingOverride: options.encodingOverride,\n });\n}\n\nexport class URLImpl {\n constructor(url: string, base?: string) {\n let parsedBase = null;\n if (base !== undefined) {\n parsedBase = basicURLParse(base);\n if (parsedBase === null) {\n throw new TypeError(`Invalid base URL: ${base}`);\n }\n }\n\n const parsedURL = basicURLParse(url, { baseURL: parsedBase });\n if (parsedURL === null) {\n throw new TypeError(`Invalid URL: ${url}`);\n }\n\n const query = parsedURL.query !== null ? parsedURL.query : \"\";\n\n this._url = parsedURL;\n\n // We cannot invoke the \"new URLSearchParams object\" algorithm without going through the constructor, which strips\n // question mark by default. Therefore the doNotStripQMark hack is used.\n this._query = new URLSearchParamsImpl(query, {\n doNotStripQMark: true,\n });\n this._query._url = this;\n }\n\n get href() {\n return serializeURL(this._url);\n }\n\n set href(v) {\n const parsedURL = basicURLParse(v);\n if (parsedURL === null) {\n throw new TypeError(`Invalid URL: ${v}`);\n }\n\n this._url = parsedURL;\n\n this._query._list.splice(0);\n const { query } = parsedURL;\n if (query !== null) {\n this._query._list = parseUrlencodedString(query);\n }\n }\n\n get origin() {\n return serializeURLOrigin(this._url);\n }\n\n get protocol() {\n return `${this._url.scheme}:`;\n }\n\n set protocol(v) {\n basicURLParse(`${v}:`, {\n url: this._url,\n stateOverride: \"scheme start\",\n });\n }\n\n get username() {\n return this._url.username;\n }\n\n set username(v) {\n if (cannotHaveAUsernamePasswordPort(this._url)) {\n return;\n }\n\n setTheUsername(this._url, v);\n }\n\n get password() {\n return this._url.password;\n }\n\n set password(v) {\n if (cannotHaveAUsernamePasswordPort(this._url)) {\n return;\n }\n\n setThePassword(this._url, v);\n }\n\n get host() {\n const url = this._url;\n\n if (url.host === null) {\n return \"\";\n }\n\n if (url.port === null) {\n return serializeHost(url.host);\n }\n\n return `${serializeHost(url.host)}:${serializeInteger(url.port)}`;\n }\n\n set host(v) {\n if (hasAnOpaquePath(this._url)) {\n return;\n }\n\n basicURLParse(v, { url: this._url, stateOverride: \"host\" });\n }\n\n get hostname() {\n if (this._url.host === null) {\n return \"\";\n }\n\n return serializeHost(this._url.host);\n }\n\n set hostname(v) {\n if (hasAnOpaquePath(this._url)) {\n return;\n }\n\n basicURLParse(v, { url: this._url, stateOverride: \"hostname\" });\n }\n\n get port() {\n if (this._url.port === null) {\n return \"\";\n }\n\n return serializeInteger(this._url.port);\n }\n\n set port(v) {\n if (cannotHaveAUsernamePasswordPort(this._url)) {\n return;\n }\n\n if (v === \"\") {\n this._url.port = null;\n } else {\n basicURLParse(v, { url: this._url, stateOverride: \"port\" });\n }\n }\n\n get pathname() {\n return serializePath(this._url);\n }\n\n set pathname(v: string) {\n if (hasAnOpaquePath(this._url)) {\n return;\n }\n\n this._url.path = [];\n basicURLParse(v, { url: this._url, stateOverride: \"path start\" });\n }\n\n get search() {\n if (this._url.query === null || this._url.query === \"\") {\n return \"\";\n }\n\n return `?${this._url.query}`;\n }\n\n set search(v) {\n const url = this._url;\n\n if (v === \"\") {\n url.query = null;\n this._query._list = [];\n return;\n }\n\n const input = v[0] === \"?\" ? v.substring(1) : v;\n url.query = \"\";\n basicURLParse(input, { url, stateOverride: \"query\" });\n this._query._list = parseUrlencodedString(input);\n }\n\n get searchParams() {\n return this._query;\n }\n\n get hash() {\n if (this._url.fragment === null || this._url.fragment === \"\") {\n return \"\";\n }\n\n return `#${this._url.fragment}`;\n }\n\n set hash(v) {\n if (v === \"\") {\n this._url.fragment = null;\n return;\n }\n\n const input = v[0] === \"#\" ? v.substring(1) : v;\n this._url.fragment = \"\";\n basicURLParse(input, { url: this._url, stateOverride: \"fragment\" });\n }\n\n toJSON() {\n return this.href;\n }\n\n // FIXME: type!\n _url: any;\n _query: any;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2020 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\nimport { URLImpl, URLSearchParamsImpl } from \"./whatwg-url.js\";\n\ninterface URL {\n hash: string;\n host: string;\n hostname: string;\n href: string;\n toString(): string;\n readonly origin: string;\n password: string;\n pathname: string;\n port: string;\n protocol: string;\n search: string;\n readonly searchParams: URLSearchParams;\n username: string;\n toJSON(): string;\n}\n\ninterface URLSearchParams {\n append(name: string, value: string): void;\n delete(name: string): void;\n get(name: string): string | null;\n getAll(name: string): string[];\n has(name: string): boolean;\n set(name: string, value: string): void;\n sort(): void;\n toString(): string;\n forEach(\n callbackfn: (value: string, key: string, parent: URLSearchParams) => void,\n thisArg?: any,\n ): void;\n entries(): IterableIterator<[string, string]>;\n keys(): IterableIterator<string>;\n values(): IterableIterator<string>;\n [Symbol.iterator](): IterableIterator<[string, string]>;\n}\n\nexport interface URLSearchParamsCtor {\n new (\n init?:\n | URLSearchParams\n | string\n | Record<string, string | ReadonlyArray<string>>\n | Iterable<[string, string]>\n | ReadonlyArray<[string, string]>,\n ): URLSearchParams;\n}\n\nexport interface URLCtor {\n new (url: string, base?: string | URL): URL;\n}\n\n// globalThis polyfill, see https://mathiasbynens.be/notes/globalthis\n(function () {\n if (typeof globalThis === \"object\") return;\n Object.defineProperty(Object.prototype, \"__magic__\", {\n get: function () {\n return this;\n },\n configurable: true, // This makes it possible to `delete` the getter later.\n });\n // @ts-ignore: polyfill magic\n __magic__.globalThis = __magic__; // lolwat\n // @ts-ignore: polyfill magic\n delete Object.prototype.__magic__;\n})();\n\n// Use native or pure JS URL implementation?\nconst useOwnUrlImp = true;\n\n// @ts-ignore\nlet _URL = globalThis.URL;\nif (useOwnUrlImp || !_URL) {\n // @ts-ignore\n globalThis.URL = _URL = URLImpl;\n // @ts-ignore\n _URL = URLImpl;\n}\n\nexport const URL: URLCtor = _URL;\n\n// @ts-ignore\nlet _URLSearchParams = globalThis.URLSearchParams;\n\nif (useOwnUrlImp || !_URLSearchParams) {\n // @ts-ignore\n globalThis.URLSearchParams = URLSearchParamsImpl;\n // @ts-ignore\n _URLSearchParams = URLSearchParamsImpl;\n}\n\nexport const URLSearchParams: URLSearchParamsCtor = _URLSearchParams;\n", "/*\n This file is part of TALER\n (C) 2016 GNUnet e.V.\n\n TALER is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n TALER is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n * Small helper functions that don't fit anywhere else.\n */\n\n/**\n * Imports.\n */\nimport { AmountJson } from \"./amounts.js\";\nimport * as Amounts from \"./amounts.js\";\nimport { URL } from \"./url.js\";\n\n/**\n * Show an amount in a form suitable for the user.\n * FIXME: In the future, this should consider currency-specific\n * settings such as significant digits or currency symbols.\n */\nexport function amountToPretty(amount: AmountJson): string {\n const x = amount.value + amount.fraction / Amounts.amountFractionalBase;\n return `${x} ${amount.currency}`;\n}\n\n/**\n * Canonicalize a base url, typically for the exchange.\n *\n * See http://api.taler.net/wallet.html#general\n */\nexport function canonicalizeBaseUrl(url: string): string {\n if (!url.startsWith(\"http\") && !url.startsWith(\"https\")) {\n url = \"https://\" + url;\n }\n const x = new URL(url);\n if (!x.pathname.endsWith(\"/\")) {\n x.pathname = x.pathname + \"/\";\n }\n x.search = \"\";\n x.hash = \"\";\n return x.href;\n}\n\n/**\n * Convert object to JSON with canonical ordering of keys\n * and whitespace omitted.\n *\n * See RFC 4885 (https://tools.ietf.org/html/rfc8785).\n */\nexport function canonicalJson(obj: any): string {\n // Check for cycles, etc.\n obj = JSON.parse(JSON.stringify(obj));\n if (typeof obj === \"string\") {\n return JSON.stringify(obj);\n }\n if (typeof obj === \"number\" || typeof obj === \"boolean\" || obj === null) {\n return JSON.stringify(obj);\n }\n if (Array.isArray(obj)) {\n const objs: string[] = obj.map((e) => canonicalJson(e));\n return `[${objs.join(\",\")}]`;\n }\n const keys: string[] = [];\n for (const key in obj) {\n keys.push(key);\n }\n keys.sort();\n let s = \"{\";\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n s += JSON.stringify(key) + \":\" + canonicalJson(obj[key]);\n if (i !== keys.length - 1) {\n s += \",\";\n }\n }\n return s + \"}\";\n}\n\n/**\n * Lexically compare two strings.\n */\nexport function strcmp(s1: string, s2: string): -1 | 0 | 1 {\n if (s1 < s2) {\n return -1;\n }\n if (s1 > s2) {\n return 1;\n }\n return 0;\n}\n\n/**\n * Shorthand function for formatted JSON stringification.\n */\nexport function j2s(x: any): string {\n return JSON.stringify(x, undefined, 2);\n}\n\n/**\n * Use this to filter null or undefined from an array in a type-safe fashion\n *\n * example:\n * const array: Array<T | undefined> = [undefined, null]\n * const filtered: Array<T> = array.filter(notEmpty)\n *\n * @param value\n * @returns\n */\nexport function notEmpty<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined;\n}\n\n/**\n * Safe function to stringify errors.\n */\nexport function stringifyError(x: any): string {\n if (typeof x === \"undefined\") {\n return \"<thrown undefined>\";\n }\n if (x === null) {\n return `<thrown null>`;\n }\n if (typeof x === \"object\") {\n return x.toString();\n }\n return `<thrown ${typeof x}>`;\n}\n", "/*\n This file is part of TALER\n (C) 2017 GNUnet e.V.\n\n TALER is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n TALER is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n * Semantic versioning, but libtool-style.\n * See https://www.gnu.org/software/libtool/manual/html_node/Libtool-versioning.html\n */\n\n/**\n * Result of comparing two libtool versions.\n */\nexport interface VersionMatchResult {\n /**\n * Is the first version compatible with the second?\n */\n compatible: boolean;\n\n /**\n * Is the first version older (-1), newer (+1) or\n * identical (0)?\n */\n currentCmp: number;\n}\n\nexport interface Version {\n current: number;\n revision: number;\n age: number;\n}\n\nexport namespace LibtoolVersion {\n /**\n * Compare two libtool-style version strings.\n */\n export function compare(\n me: string,\n other: string,\n ): VersionMatchResult | undefined {\n const meVer = parseVersion(me);\n const otherVer = parseVersion(other);\n\n if (!(meVer && otherVer)) {\n return undefined;\n }\n\n const compatible =\n meVer.current - meVer.age <= otherVer.current &&\n meVer.current >= otherVer.current - otherVer.age;\n\n const currentCmp = Math.sign(meVer.current - otherVer.current);\n\n return { compatible, currentCmp };\n }\n\n export function parseVersion(v: string): Version | undefined {\n const [currentStr, revisionStr, ageStr, ...rest] = v.split(\":\");\n if (rest.length !== 0) {\n return undefined;\n }\n const current = Number.parseInt(currentStr);\n const revision = Number.parseInt(revisionStr);\n const age = Number.parseInt(ageStr);\n\n if (Number.isNaN(current)) {\n return undefined;\n }\n\n if (Number.isNaN(revision)) {\n return undefined;\n }\n\n if (Number.isNaN(age)) {\n return undefined;\n }\n\n return { current, revision, age };\n }\n}\n", "/*\n This file is part of GNU Taler\n (C) 2019 GNUnet e.V.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n * Type and schema definitions for notifications from the wallet to clients\n * of the wallet.\n */\n\n/**\n * Imports.\n */\nimport { TalerErrorDetail } from \"./wallet-types.js\";\n\nexport enum NotificationType {\n CoinWithdrawn = \"coin-withdrawn\",\n ProposalAccepted = \"proposal-accepted\",\n ProposalDownloaded = \"proposal-downloaded\",\n RefundsSubmitted = \"refunds-submitted\",\n RecoupStarted = \"recoup-started\",\n RecoupFinished = \"recoup-finished\",\n RefreshRevealed = \"refresh-revealed\",\n RefreshMelted = \"refresh-melted\",\n RefreshStarted = \"refresh-started\",\n RefreshUnwarranted = \"refresh-unwarranted\",\n ReserveUpdated = \"reserve-updated\",\n ReserveConfirmed = \"reserve-confirmed\",\n ReserveCreated = \"reserve-created\",\n WithdrawGroupCreated = \"withdraw-group-created\",\n WithdrawGroupFinished = \"withdraw-group-finished\",\n WaitingForRetry = \"waiting-for-retry\",\n RefundStarted = \"refund-started\",\n RefundQueried = \"refund-queried\",\n RefundFinished = \"refund-finished\",\n ExchangeOperationError = \"exchange-operation-error\",\n ExchangeAdded = \"exchange-added\",\n RefreshOperationError = \"refresh-operation-error\",\n RecoupOperationError = \"recoup-operation-error\",\n RefundApplyOperationError = \"refund-apply-error\",\n RefundStatusOperationError = \"refund-status-error\",\n ProposalOperationError = \"proposal-error\",\n BackupOperationError = \"backup-error\",\n TipOperationError = \"tip-error\",\n PayOperationError = \"pay-error\",\n PayOperationSuccess = \"pay-operation-success\",\n WithdrawOperationError = \"withdraw-error\",\n ReserveNotYetFound = \"reserve-not-yet-found\",\n ReserveOperationError = \"reserve-error\",\n InternalError = \"internal-error\",\n PendingOperationProcessed = \"pending-operation-processed\",\n ProposalRefused = \"proposal-refused\",\n ReserveRegisteredWithBank = \"reserve-registered-with-bank\",\n WithdrawalGroupKycRequested = \"withdrawal-group-kyc-requested\",\n WithdrawalGroupBankConfirmed = \"withdrawal-group-bank-confirmed\",\n WithdrawalGroupReserveReady = \"withdrawal-group-reserve-ready\",\n PeerPullCreditReady = \"peer-pull-credit-ready\",\n DepositOperationError = \"deposit-operation-error\",\n}\n\nexport interface ProposalAcceptedNotification {\n type: NotificationType.ProposalAccepted;\n proposalId: string;\n}\n\nexport interface InternalErrorNotification {\n type: NotificationType.InternalError;\n message: string;\n exception: any;\n}\n\nexport interface ReserveNotYetFoundNotification {\n type: NotificationType.ReserveNotYetFound;\n reservePub: string;\n}\n\nexport interface CoinWithdrawnNotification {\n type: NotificationType.CoinWithdrawn;\n numWithdrawn: number;\n numTotal: number;\n}\n\nexport interface RefundStartedNotification {\n type: NotificationType.RefundStarted;\n}\n\nexport interface RefundQueriedNotification {\n type: NotificationType.RefundQueried;\n /**\n * Transaction ID of the purchase (NOT the refund transaction).\n */\n transactionId: string;\n}\n\nexport interface ProposalDownloadedNotification {\n type: NotificationType.ProposalDownloaded;\n proposalId: string;\n}\n\nexport interface RefundsSubmittedNotification {\n type: NotificationType.RefundsSubmitted;\n proposalId: string;\n}\n\nexport interface RecoupStartedNotification {\n type: NotificationType.RecoupStarted;\n}\n\nexport interface RecoupFinishedNotification {\n type: NotificationType.RecoupFinished;\n}\n\nexport interface RefreshMeltedNotification {\n type: NotificationType.RefreshMelted;\n}\n\nexport interface WithdrawalGroupKycRequested {\n type: NotificationType.WithdrawalGroupKycRequested;\n transactionId: string;\n kycUrl: string;\n}\n\nexport interface WithdrawalGroupBankConfirmed {\n type: NotificationType.WithdrawalGroupBankConfirmed;\n transactionId: string;\n}\n\nexport interface WithdrawalGroupReserveReadyNotification {\n type: NotificationType.WithdrawalGroupReserveReady;\n transactionId: string;\n}\n\n/**\n * The purse creation of a peer-pull-credit transaction\n * is done, and the other party can now pay.\n */\nexport interface PeerPullCreditReadyNotification {\n type: NotificationType.PeerPullCreditReady;\n transactionId: string;\n}\n\nexport interface RefreshRevealedNotification {\n type: NotificationType.RefreshRevealed;\n}\n\nexport interface RefreshStartedNotification {\n type: NotificationType.RefreshStarted;\n}\n\nexport interface RefreshRefusedNotification {\n type: NotificationType.RefreshUnwarranted;\n}\n\nexport interface ReserveConfirmedNotification {\n type: NotificationType.ReserveConfirmed;\n}\n\nexport interface WithdrawalGroupCreatedNotification {\n type: NotificationType.WithdrawGroupCreated;\n withdrawalGroupId: string;\n}\n\nexport interface WithdrawalGroupFinishedNotification {\n type: NotificationType.WithdrawGroupFinished;\n reservePub: string;\n}\n\nexport interface WaitingForRetryNotification {\n type: NotificationType.WaitingForRetry;\n numPending: number;\n numGivingLiveness: number;\n numDue: number;\n}\n\nexport interface RefundFinishedNotification {\n type: NotificationType.RefundFinished;\n\n /**\n * Transaction ID of the purchase (NOT the refund transaction).\n */\n transactionId: string;\n}\n\nexport interface ExchangeAddedNotification {\n type: NotificationType.ExchangeAdded;\n}\n\nexport interface ExchangeOperationErrorNotification {\n type: NotificationType.ExchangeOperationError;\n error: TalerErrorDetail;\n}\n\nexport interface RefreshOperationErrorNotification {\n type: NotificationType.RefreshOperationError;\n error: TalerErrorDetail;\n}\n\nexport interface BackupOperationErrorNotification {\n type: NotificationType.BackupOperationError;\n error: TalerErrorDetail;\n}\n\nexport interface RefundStatusOperationErrorNotification {\n type: NotificationType.RefundStatusOperationError;\n error: TalerErrorDetail;\n}\n\nexport interface RefundApplyOperationErrorNotification {\n type: NotificationType.RefundApplyOperationError;\n error: TalerErrorDetail;\n}\n\nexport interface PayOperationErrorNotification {\n type: NotificationType.PayOperationError;\n error: TalerErrorDetail;\n}\n\nexport interface ProposalOperationErrorNotification {\n type: NotificationType.ProposalOperationError;\n error: TalerErrorDetail;\n}\n\nexport interface TipOperationErrorNotification {\n type: NotificationType.TipOperationError;\n error: TalerErrorDetail;\n}\n\nexport interface WithdrawOperationErrorNotification {\n type: NotificationType.WithdrawOperationError;\n error: TalerErrorDetail;\n}\n\nexport interface RecoupOperationErrorNotification {\n type: NotificationType.RecoupOperationError;\n error: TalerErrorDetail;\n}\n\nexport interface DepositOperationErrorNotification {\n type: NotificationType.DepositOperationError;\n error: TalerErrorDetail;\n}\n\nexport interface ReserveOperationErrorNotification {\n type: NotificationType.ReserveOperationError;\n error: TalerErrorDetail;\n}\n\nexport interface ReserveCreatedNotification {\n type: NotificationType.ReserveCreated;\n reservePub: string;\n}\n\nexport interface PendingOperationProcessedNotification {\n type: NotificationType.PendingOperationProcessed;\n id: string;\n}\n\nexport interface ProposalRefusedNotification {\n type: NotificationType.ProposalRefused;\n}\n\nexport interface ReserveRegisteredWithBankNotification {\n type: NotificationType.ReserveRegisteredWithBank;\n}\n\n/**\n * Notification sent when a pay (or pay replay) operation succeeded.\n *\n * We send this notification because the confirmPay request can return\n * a \"confirmed\" response that indicates that the payment has been confirmed\n * by the user, but we're still waiting for the payment to succeed or fail.\n */\nexport interface PayOperationSuccessNotification {\n type: NotificationType.PayOperationSuccess;\n proposalId: string;\n}\n\nexport type WalletNotification =\n | BackupOperationErrorNotification\n | WithdrawOperationErrorNotification\n | ReserveOperationErrorNotification\n | ExchangeAddedNotification\n | ExchangeOperationErrorNotification\n | RefreshOperationErrorNotification\n | RefundStatusOperationErrorNotification\n | RefundApplyOperationErrorNotification\n | ProposalOperationErrorNotification\n | PayOperationErrorNotification\n | TipOperationErrorNotification\n | ProposalAcceptedNotification\n | ProposalDownloadedNotification\n | RefundsSubmittedNotification\n | RecoupStartedNotification\n | RecoupFinishedNotification\n | RefreshMeltedNotification\n | RefreshRevealedNotification\n | RefreshStartedNotification\n | RefreshRefusedNotification\n | ReserveCreatedNotification\n | ReserveConfirmedNotification\n | WithdrawalGroupFinishedNotification\n | WaitingForRetryNotification\n | RefundStartedNotification\n | RefundFinishedNotification\n | RefundQueriedNotification\n | WithdrawalGroupCreatedNotification\n | CoinWithdrawnNotification\n | RecoupOperationErrorNotification\n | DepositOperationErrorNotification\n | InternalErrorNotification\n | PendingOperationProcessedNotification\n | ProposalRefusedNotification\n | ReserveRegisteredWithBankNotification\n | ReserveNotYetFoundNotification\n | PayOperationSuccessNotification\n | WithdrawalGroupKycRequested\n | WithdrawalGroupBankConfirmed\n | WithdrawalGroupReserveReadyNotification\n | PeerPullCreditReadyNotification;\n", "// SHA-256 for JavaScript.\n//\n// Written in 2014-2016 by Dmitry Chestnykh.\n// Public domain, no warranty.\n//\n// Functions (accept and return Uint8Arrays):\n//\n// sha256(message) -> hash\n// sha256.hmac(key, message) -> mac\n//\n// Classes:\n//\n// new sha256.Hash()\nexport const digestLength = 32;\nexport const blockSize = 64;\n\n// SHA-256 constants\nconst K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1,\n 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786,\n 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b,\n 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a,\n 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n]);\n\nfunction hashBlocks(\n w: Int32Array,\n v: Int32Array,\n p: Uint8Array,\n pos: number,\n len: number,\n): number {\n let a: number,\n b: number,\n c: number,\n d: number,\n e: number,\n f: number,\n g: number,\n h: number,\n u: number,\n i: number,\n j: number,\n t1: number,\n t2: number;\n while (len >= 64) {\n a = v[0];\n b = v[1];\n c = v[2];\n d = v[3];\n e = v[4];\n f = v[5];\n g = v[6];\n h = v[7];\n\n for (i = 0; i < 16; i++) {\n j = pos + i * 4;\n w[i] =\n ((p[j] & 0xff) << 24) |\n ((p[j + 1] & 0xff) << 16) |\n ((p[j + 2] & 0xff) << 8) |\n (p[j + 3] & 0xff);\n }\n\n for (i = 16; i < 64; i++) {\n u = w[i - 2];\n t1 =\n ((u >>> 17) | (u << (32 - 17))) ^\n ((u >>> 19) | (u << (32 - 19))) ^\n (u >>> 10);\n\n u = w[i - 15];\n t2 =\n ((u >>> 7) | (u << (32 - 7))) ^\n ((u >>> 18) | (u << (32 - 18))) ^\n (u >>> 3);\n\n w[i] = ((t1 + w[i - 7]) | 0) + ((t2 + w[i - 16]) | 0);\n }\n\n for (i = 0; i < 64; i++) {\n t1 =\n ((((((e >>> 6) | (e << (32 - 6))) ^\n ((e >>> 11) | (e << (32 - 11))) ^\n ((e >>> 25) | (e << (32 - 25)))) +\n ((e & f) ^ (~e & g))) |\n 0) +\n ((h + ((K[i] + w[i]) | 0)) | 0)) |\n 0;\n\n t2 =\n ((((a >>> 2) | (a << (32 - 2))) ^\n ((a >>> 13) | (a << (32 - 13))) ^\n ((a >>> 22) | (a << (32 - 22)))) +\n ((a & b) ^ (a & c) ^ (b & c))) |\n 0;\n\n h = g;\n g = f;\n f = e;\n e = (d + t1) | 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) | 0;\n }\n\n v[0] += a;\n v[1] += b;\n v[2] += c;\n v[3] += d;\n v[4] += e;\n v[5] += f;\n v[6] += g;\n v[7] += h;\n\n pos += 64;\n len -= 64;\n }\n return pos;\n}\n\n// Hash implements SHA256 hash algorithm.\nexport class HashSha256 {\n digestLength: number = digestLength;\n blockSize: number = blockSize;\n\n // Note: Int32Array is used instead of Uint32Array for performance reasons.\n private state: Int32Array = new Int32Array(8); // hash state\n private temp: Int32Array = new Int32Array(64); // temporary state\n private buffer: Uint8Array = new Uint8Array(128); // buffer for data to hash\n private bufferLength = 0; // number of bytes in buffer\n private bytesHashed = 0; // number of total bytes hashed\n\n finished = false; // indicates whether the hash was finalized\n\n constructor() {\n this.reset();\n }\n\n // Resets hash state making it possible\n // to re-use this instance to hash other data.\n reset(): this {\n this.state[0] = 0x6a09e667;\n this.state[1] = 0xbb67ae85;\n this.state[2] = 0x3c6ef372;\n this.state[3] = 0xa54ff53a;\n this.state[4] = 0x510e527f;\n this.state[5] = 0x9b05688c;\n this.state[6] = 0x1f83d9ab;\n this.state[7] = 0x5be0cd19;\n this.bufferLength = 0;\n this.bytesHashed = 0;\n this.finished = false;\n return this;\n }\n\n // Cleans internal buffers and re-initializes hash state.\n clean(): void {\n for (let i = 0; i < this.buffer.length; i++) {\n this.buffer[i] = 0;\n }\n for (let i = 0; i < this.temp.length; i++) {\n this.temp[i] = 0;\n }\n this.reset();\n }\n\n // Updates hash state with the given data.\n //\n // Optionally, length of the data can be specified to hash\n // fewer bytes than data.length.\n //\n // Throws error when trying to update already finalized hash:\n // instance must be reset to use it again.\n update(data: Uint8Array, dataLength: number = data.length): this {\n if (this.finished) {\n throw new Error(\"SHA256: can't update because hash was finished.\");\n }\n let dataPos = 0;\n this.bytesHashed += dataLength;\n if (this.bufferLength > 0) {\n while (this.bufferLength < 64 && dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n if (this.bufferLength === 64) {\n hashBlocks(this.temp, this.state, this.buffer, 0, 64);\n this.bufferLength = 0;\n }\n }\n if (dataLength >= 64) {\n dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength);\n dataLength %= 64;\n }\n while (dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n return this;\n }\n\n // Finalizes hash state and puts hash into out.\n //\n // If hash was already finalized, puts the same value.\n finish(out: Uint8Array): this {\n if (!this.finished) {\n const bytesHashed = this.bytesHashed;\n const left = this.bufferLength;\n const bitLenHi = (bytesHashed / 0x20000000) | 0;\n const bitLenLo = bytesHashed << 3;\n const padLength = bytesHashed % 64 < 56 ? 64 : 128;\n\n this.buffer[left] = 0x80;\n for (let i = left + 1; i < padLength - 8; i++) {\n this.buffer[i] = 0;\n }\n this.buffer[padLength - 8] = (bitLenHi >>> 24) & 0xff;\n this.buffer[padLength - 7] = (bitLenHi >>> 16) & 0xff;\n this.buffer[padLength - 6] = (bitLenHi >>> 8) & 0xff;\n this.buffer[padLength - 5] = (bitLenHi >>> 0) & 0xff;\n this.buffer[padLength - 4] = (bitLenLo >>> 24) & 0xff;\n this.buffer[padLength - 3] = (bitLenLo >>> 16) & 0xff;\n this.buffer[padLength - 2] = (bitLenLo >>> 8) & 0xff;\n this.buffer[padLength - 1] = (bitLenLo >>> 0) & 0xff;\n\n hashBlocks(this.temp, this.state, this.buffer, 0, padLength);\n\n this.finished = true;\n }\n\n for (let i = 0; i < 8; i++) {\n out[i * 4 + 0] = (this.state[i] >>> 24) & 0xff;\n out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n }\n\n return this;\n }\n\n // Returns the final hash digest.\n digest(): Uint8Array {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n }\n\n // Internal function for use in HMAC for optimization.\n _saveState(out: Uint32Array): void {\n for (let i = 0; i < this.state.length; i++) {\n out[i] = this.state[i];\n }\n }\n\n // Internal function for use in HMAC for optimization.\n _restoreState(from: Uint32Array, bytesHashed: number): void {\n for (let i = 0; i < this.state.length; i++) {\n this.state[i] = from[i];\n }\n this.bytesHashed = bytesHashed;\n this.finished = false;\n this.bufferLength = 0;\n }\n}\n\n// HMAC implements HMAC-SHA256 message authentication algorithm.\nexport class HMAC {\n private inner: HashSha256 = new HashSha256();\n private outer: HashSha256 = new HashSha256();\n\n blockSize: number = this.inner.blockSize;\n digestLength: number = this.inner.digestLength;\n\n // Copies of hash states after keying.\n // Need for quick reset without hashing they key again.\n private istate: Uint32Array;\n private ostate: Uint32Array;\n\n constructor(key: Uint8Array) {\n const pad = new Uint8Array(this.blockSize);\n if (key.length > this.blockSize) {\n new HashSha256().update(key).finish(pad).clean();\n } else {\n for (let i = 0; i < key.length; i++) {\n pad[i] = key[i];\n }\n }\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36;\n }\n this.inner.update(pad);\n\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36 ^ 0x5c;\n }\n this.outer.update(pad);\n\n this.istate = new Uint32Array(8);\n this.ostate = new Uint32Array(8);\n\n this.inner._saveState(this.istate);\n this.outer._saveState(this.ostate);\n\n for (let i = 0; i < pad.length; i++) {\n pad[i] = 0;\n }\n }\n\n // Returns HMAC state to the state initialized with key\n // to make it possible to run HMAC over the other data with the same\n // key without creating a new instance.\n reset(): this {\n this.inner._restoreState(this.istate, this.inner.blockSize);\n this.outer._restoreState(this.ostate, this.outer.blockSize);\n return this;\n }\n\n // Cleans HMAC state.\n clean(): void {\n for (let i = 0; i < this.istate.length; i++) {\n this.ostate[i] = this.istate[i] = 0;\n }\n this.inner.clean();\n this.outer.clean();\n }\n\n // Updates state with provided data.\n update(data: Uint8Array): this {\n this.inner.update(data);\n return this;\n }\n\n // Finalizes HMAC and puts the result in out.\n finish(out: Uint8Array): this {\n if (this.outer.finished) {\n this.outer.finish(out);\n } else {\n this.inner.finish(out);\n this.outer.update(out, this.digestLength).finish(out);\n }\n return this;\n }\n\n // Returns message authentication code.\n digest(): Uint8Array {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n }\n}\n\n// Returns SHA256 hash of data.\nexport function sha256(data: Uint8Array): Uint8Array {\n const h = new HashSha256().update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\n\n// Returns HMAC-SHA256 of data under the key.\nexport function hmacSha256(key: Uint8Array, data: Uint8Array): Uint8Array {\n const h = new HMAC(key).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2019 GNUnet e.V.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\nimport * as nacl from \"./nacl-fast.js\";\nimport { sha256 } from \"./sha256.js\";\n\nexport function sha512(data: Uint8Array): Uint8Array {\n return nacl.hash(data);\n}\n\nexport function hmac(\n digest: (d: Uint8Array) => Uint8Array,\n blockSize: number,\n key: Uint8Array,\n message: Uint8Array,\n): Uint8Array {\n if (key.byteLength > blockSize) {\n key = digest(key);\n }\n if (key.byteLength < blockSize) {\n const k = key;\n key = new Uint8Array(blockSize);\n key.set(k, 0);\n }\n const okp = new Uint8Array(blockSize);\n const ikp = new Uint8Array(blockSize);\n for (let i = 0; i < blockSize; i++) {\n ikp[i] = key[i] ^ 0x36;\n okp[i] = key[i] ^ 0x5c;\n }\n const b1 = new Uint8Array(blockSize + message.byteLength);\n b1.set(ikp, 0);\n b1.set(message, blockSize);\n const h0 = digest(b1);\n const b2 = new Uint8Array(blockSize + h0.length);\n b2.set(okp, 0);\n b2.set(h0, blockSize);\n return digest(b2);\n}\n\nexport function hmacSha512(key: Uint8Array, message: Uint8Array): Uint8Array {\n return hmac(sha512, 128, key, message);\n}\n\nexport function hmacSha256(key: Uint8Array, message: Uint8Array): Uint8Array {\n return hmac(sha256, 64, key, message);\n}\n", "/*\n This file is part of GNU Taler\n (C) 2019 GNUnet e.V.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n * Native implementation of GNU Taler crypto primitives.\n */\n\n/**\n * Imports.\n */\nimport * as nacl from \"./nacl-fast.js\";\nimport { hmacSha256, hmacSha512 } from \"./kdf.js\";\nimport bigint from \"big-integer\";\nimport {\n CoinEnvelope,\n CoinPublicKeyString,\n DenominationPubKey,\n DenomKeyType,\n HashCodeString,\n} from \"./taler-types.js\";\nimport { Logger } from \"./logging.js\";\nimport { secretbox } from \"./nacl-fast.js\";\nimport * as fflate from \"fflate\";\nimport { canonicalJson } from \"./helpers.js\";\n\nexport type Flavor<T, FlavorT extends string> = T & {\n _flavor?: `taler.${FlavorT}`;\n};\n\nexport type FlavorP<T, FlavorT extends string, S extends number> = T & {\n _flavor?: `taler.${FlavorT}`;\n _size?: S;\n};\n\nexport function getRandomBytes(n: number): Uint8Array {\n return nacl.randomBytes(n);\n}\n\nexport function getRandomBytesF<T extends number, N extends string>(\n n: T,\n): FlavorP<Uint8Array, N, T> {\n return nacl.randomBytes(n);\n}\n\nexport const useNative = true;\n\n/**\n * Interface of the native Taler runtime library.\n */\ninterface NativeTartLib {\n decodeUtf8(buf: Uint8Array): string;\n decodeUtf8(str: string): Uint8Array;\n randomBytes(n: number): Uint8Array;\n encodeCrock(buf: Uint8Array | ArrayBuffer): string;\n decodeCrock(str: string): Uint8Array;\n hash(buf: Uint8Array): Uint8Array;\n eddsaGetPublic(buf: Uint8Array): Uint8Array;\n ecdheGetPublic(buf: Uint8Array): Uint8Array;\n eddsaSign(msg: Uint8Array, priv: Uint8Array): Uint8Array;\n eddsaVerify(msg: Uint8Array, sig: Uint8Array, pub: Uint8Array): boolean;\n kdf(\n outLen: number,\n ikm: Uint8Array,\n salt?: Uint8Array,\n info?: Uint8Array,\n ): Uint8Array;\n keyExchangeEcdhEddsa(ecdhPriv: Uint8Array, eddsaPub: Uint8Array): Uint8Array;\n keyExchangeEddsaEcdh(eddsaPriv: Uint8Array, ecdhPub: Uint8Array): Uint8Array;\n rsaBlind(hmsg: Uint8Array, bks: Uint8Array, rsaPub: Uint8Array): Uint8Array;\n rsaUnblind(\n blindSig: Uint8Array,\n rsaPub: Uint8Array,\n bks: Uint8Array,\n ): Uint8Array;\n rsaVerify(hmsg: Uint8Array, rsaSig: Uint8Array, rsaPub: Uint8Array): boolean;\n hashStateInit(): any;\n hashStateUpdate(st: any, data: Uint8Array): any;\n hashStateFinish(st: any): Uint8Array;\n}\n\n// @ts-ignore\nlet tart: NativeTartLib | undefined;\n\nif (useNative) {\n // @ts-ignore\n tart = globalThis._tart;\n}\n\nconst encTable = \"0123456789ABCDEFGHJKMNPQRSTVWXYZ\";\n\nclass EncodingError extends Error {\n constructor() {\n super(\"Encoding error\");\n Object.setPrototypeOf(this, EncodingError.prototype);\n }\n}\n\nfunction getValue(chr: string): number {\n let a = chr;\n switch (chr) {\n case \"O\":\n case \"o\":\n a = \"0;\";\n break;\n case \"i\":\n case \"I\":\n case \"l\":\n case \"L\":\n a = \"1\";\n break;\n case \"u\":\n case \"U\":\n a = \"V\";\n }\n\n if (a >= \"0\" && a <= \"9\") {\n return a.charCodeAt(0) - \"0\".charCodeAt(0);\n }\n\n if (a >= \"a\" && a <= \"z\") a = a.toUpperCase();\n let dec = 0;\n if (a >= \"A\" && a <= \"Z\") {\n if (\"I\" < a) dec++;\n if (\"L\" < a) dec++;\n if (\"O\" < a) dec++;\n if (\"U\" < a) dec++;\n return a.charCodeAt(0) - \"A\".charCodeAt(0) + 10 - dec;\n }\n throw new EncodingError();\n}\n\nexport function encodeCrock(data: ArrayBuffer): string {\n if (tart) {\n return tart.encodeCrock(data);\n }\n const dataBytes = new Uint8Array(data);\n let sb = \"\";\n const size = data.byteLength;\n let bitBuf = 0;\n let numBits = 0;\n let pos = 0;\n while (pos < size || numBits > 0) {\n if (pos < size && numBits < 5) {\n const d = dataBytes[pos++];\n bitBuf = (bitBuf << 8) | d;\n numBits += 8;\n }\n if (numBits < 5) {\n // zero-padding\n bitBuf = bitBuf << (5 - numBits);\n numBits = 5;\n }\n const v = (bitBuf >>> (numBits - 5)) & 31;\n sb += encTable[v];\n numBits -= 5;\n }\n return sb;\n}\n\nexport function kdf(\n outputLength: number,\n ikm: Uint8Array,\n salt?: Uint8Array,\n info?: Uint8Array,\n): Uint8Array {\n if (tart) {\n return tart.kdf(outputLength, ikm, salt, info);\n }\n salt = salt ?? new Uint8Array(64);\n // extract\n const prk = hmacSha512(salt, ikm);\n\n info = info ?? new Uint8Array(0);\n\n // expand\n const N = Math.ceil(outputLength / 32);\n const output = new Uint8Array(N * 32);\n for (let i = 0; i < N; i++) {\n let buf;\n if (i == 0) {\n buf = new Uint8Array(info.byteLength + 1);\n buf.set(info, 0);\n } else {\n buf = new Uint8Array(info.byteLength + 1 + 32);\n for (let j = 0; j < 32; j++) {\n buf[j] = output[(i - 1) * 32 + j];\n }\n buf.set(info, 32);\n }\n buf[buf.length - 1] = i + 1;\n const chunk = hmacSha256(prk, buf);\n output.set(chunk, i * 32);\n }\n\n return output.slice(0, outputLength);\n}\n\n/**\n * HMAC-SHA512-SHA256 (see RFC 5869).\n */\nexport function kdfKw(args: {\n outputLength: number;\n ikm: Uint8Array;\n salt?: Uint8Array;\n info?: Uint8Array;\n}) {\n return kdf(args.outputLength, args.ikm, args.salt, args.info);\n}\n\nexport function decodeCrock(encoded: string): Uint8Array {\n if (tart) {\n return tart.decodeCrock(encoded);\n }\n const size = encoded.length;\n let bitpos = 0;\n let bitbuf = 0;\n let readPosition = 0;\n const outLen = Math.floor((size * 5) / 8);\n const out = new Uint8Array(outLen);\n let outPos = 0;\n\n while (readPosition < size || bitpos > 0) {\n if (readPosition < size) {\n const v = getValue(encoded[readPosition++]);\n bitbuf = (bitbuf << 5) | v;\n bitpos += 5;\n }\n while (bitpos >= 8) {\n const d = (bitbuf >>> (bitpos - 8)) & 0xff;\n out[outPos++] = d;\n bitpos -= 8;\n }\n if (readPosition == size && bitpos > 0) {\n bitbuf = (bitbuf << (8 - bitpos)) & 0xff;\n bitpos = bitbuf == 0 ? 0 : 8;\n }\n }\n return out;\n}\n\nexport function eddsaGetPublic(eddsaPriv: Uint8Array): Uint8Array {\n if (tart) {\n return tart.eddsaGetPublic(eddsaPriv);\n }\n const pair = nacl.crypto_sign_keyPair_fromSeed(eddsaPriv);\n return pair.publicKey;\n}\n\nexport function ecdhGetPublic(ecdhePriv: Uint8Array): Uint8Array {\n if (tart) {\n return tart.ecdheGetPublic(ecdhePriv);\n }\n return nacl.scalarMult_base(ecdhePriv);\n}\n\nexport function keyExchangeEddsaEcdh(\n eddsaPriv: Uint8Array,\n ecdhPub: Uint8Array,\n): Uint8Array {\n if (tart) {\n return tart.keyExchangeEddsaEcdh(eddsaPriv, ecdhPub);\n }\n const ph = hash(eddsaPriv);\n const a = new Uint8Array(32);\n for (let i = 0; i < 32; i++) {\n a[i] = ph[i];\n }\n const x = nacl.scalarMult(a, ecdhPub);\n return hash(x);\n}\n\nexport function keyExchangeEcdhEddsa(\n ecdhPriv: Uint8Array & MaterialEcdhePriv,\n eddsaPub: Uint8Array & MaterialEddsaPub,\n): Uint8Array {\n if (tart) {\n return tart.keyExchangeEcdhEddsa(ecdhPriv, eddsaPub);\n }\n const curve25519Pub = nacl.sign_ed25519_pk_to_curve25519(eddsaPub);\n const x = nacl.scalarMult(ecdhPriv, curve25519Pub);\n return hash(x);\n}\n\ninterface RsaPub {\n N: bigint.BigInteger;\n e: bigint.BigInteger;\n}\n\n/**\n * KDF modulo a big integer.\n */\nfunction kdfMod(\n n: bigint.BigInteger,\n ikm: Uint8Array,\n salt: Uint8Array,\n info: Uint8Array,\n): bigint.BigInteger {\n const nbits = n.bitLength().toJSNumber();\n const buflen = Math.floor((nbits - 1) / 8 + 1);\n const mask = (1 << (8 - (buflen * 8 - nbits))) - 1;\n let counter = 0;\n while (true) {\n const ctx = new Uint8Array(info.byteLength + 2);\n ctx.set(info, 0);\n ctx[ctx.length - 2] = (counter >>> 8) & 0xff;\n ctx[ctx.length - 1] = counter & 0xff;\n const buf = kdf(buflen, ikm, salt, ctx);\n const arr = Array.from(buf);\n arr[0] = arr[0] & mask;\n const r = bigint.fromArray(arr, 256, false);\n if (r.lt(n)) {\n return r;\n }\n counter++;\n }\n}\n\nfunction csKdfMod(\n n: bigint.BigInteger,\n ikm: Uint8Array,\n salt: Uint8Array,\n info: Uint8Array,\n): Uint8Array {\n const nbits = n.bitLength().toJSNumber();\n const buflen = Math.floor((nbits - 1) / 8 + 1);\n const mask = (1 << (8 - (buflen * 8 - nbits))) - 1;\n let counter = 0;\n while (true) {\n const ctx = new Uint8Array(info.byteLength + 2);\n ctx.set(info, 0);\n ctx[ctx.length - 2] = (counter >>> 8) & 0xff;\n ctx[ctx.length - 1] = counter & 0xff;\n const buf = kdf(buflen, ikm, salt, ctx);\n const arr = Array.from(buf);\n arr[0] = arr[0] & mask;\n const r = bigint.fromArray(arr, 256, false);\n if (r.lt(n)) {\n return new Uint8Array(arr);\n }\n counter++;\n }\n}\n\n// Newer versions of node have TextEncoder and TextDecoder as a global,\n// just like modern browsers.\n// In older versions of node or environments that do not have these\n// globals, they must be polyfilled (by adding them to globa/globalThis)\n// before stringToBytes or bytesToString is called the first time.\n\nlet encoder: any;\nlet decoder: any;\n\nexport function stringToBytes(s: string): Uint8Array {\n if (!encoder) {\n encoder = new TextEncoder();\n }\n return encoder.encode(s);\n}\n\nexport function bytesToString(b: Uint8Array): string {\n if (!decoder) {\n decoder = new TextDecoder();\n }\n return decoder.decode(b);\n}\n\nfunction loadBigInt(arr: Uint8Array): bigint.BigInteger {\n return bigint.fromArray(Array.from(arr), 256, false);\n}\n\nfunction rsaBlindingKeyDerive(\n rsaPub: RsaPub,\n bks: Uint8Array,\n): bigint.BigInteger {\n const salt = stringToBytes(\"Blinding KDF extractor HMAC key\");\n const info = stringToBytes(\"Blinding KDF\");\n return kdfMod(rsaPub.N, bks, salt, info);\n}\n\n/*\n * Test for malicious RSA key.\n *\n * Assuming n is an RSA modulous and r is generated using a call to\n * GNUNET_CRYPTO_kdf_mod_mpi, if gcd(r,n) != 1 then n must be a\n * malicious RSA key designed to deanomize the user.\n *\n * @param r KDF result\n * @param n RSA modulus of the public key\n */\nfunction rsaGcdValidate(r: bigint.BigInteger, n: bigint.BigInteger): void {\n const t = bigint.gcd(r, n);\n if (!t.equals(bigint.one)) {\n throw Error(\"malicious RSA public key\");\n }\n}\n\nfunction rsaFullDomainHash(hm: Uint8Array, rsaPub: RsaPub): bigint.BigInteger {\n const info = stringToBytes(\"RSA-FDA FTpsW!\");\n const salt = rsaPubEncode(rsaPub);\n const r = kdfMod(rsaPub.N, hm, salt, info);\n rsaGcdValidate(r, rsaPub.N);\n return r;\n}\n\nfunction rsaPubDecode(rsaPub: Uint8Array): RsaPub {\n const modulusLength = (rsaPub[0] << 8) | rsaPub[1];\n const exponentLength = (rsaPub[2] << 8) | rsaPub[3];\n if (4 + exponentLength + modulusLength != rsaPub.length) {\n throw Error(\"invalid RSA public key (format wrong)\");\n }\n const modulus = rsaPub.slice(4, 4 + modulusLength);\n const exponent = rsaPub.slice(\n 4 + modulusLength,\n 4 + modulusLength + exponentLength,\n );\n const res = {\n N: loadBigInt(modulus),\n e: loadBigInt(exponent),\n };\n return res;\n}\n\nfunction rsaPubEncode(rsaPub: RsaPub): Uint8Array {\n const mb = rsaPub.N.toArray(256).value;\n const eb = rsaPub.e.toArray(256).value;\n const out = new Uint8Array(4 + mb.length + eb.length);\n out[0] = (mb.length >>> 8) & 0xff;\n out[1] = mb.length & 0xff;\n out[2] = (eb.length >>> 8) & 0xff;\n out[3] = eb.length & 0xff;\n out.set(mb, 4);\n out.set(eb, 4 + mb.length);\n return out;\n}\n\nexport function rsaBlind(\n hm: Uint8Array,\n bks: Uint8Array,\n rsaPubEnc: Uint8Array,\n): Uint8Array {\n if (tart) {\n return tart.rsaBlind(hm, bks, rsaPubEnc);\n }\n const rsaPub = rsaPubDecode(rsaPubEnc);\n const data = rsaFullDomainHash(hm, rsaPub);\n const r = rsaBlindingKeyDerive(rsaPub, bks);\n const r_e = r.modPow(rsaPub.e, rsaPub.N);\n const bm = r_e.multiply(data).mod(rsaPub.N);\n return new Uint8Array(bm.toArray(256).value);\n}\n\nexport function rsaUnblind(\n sig: Uint8Array,\n rsaPubEnc: Uint8Array,\n bks: Uint8Array,\n): Uint8Array {\n if (tart) {\n return tart.rsaUnblind(sig, rsaPubEnc, bks);\n }\n const rsaPub = rsaPubDecode(rsaPubEnc);\n const blinded_s = loadBigInt(sig);\n const r = rsaBlindingKeyDerive(rsaPub, bks);\n const r_inv = r.modInv(rsaPub.N);\n const s = blinded_s.multiply(r_inv).mod(rsaPub.N);\n return new Uint8Array(s.toArray(256).value);\n}\n\nexport function rsaVerify(\n hm: Uint8Array,\n rsaSig: Uint8Array,\n rsaPubEnc: Uint8Array,\n): boolean {\n if (tart) {\n return tart.rsaVerify(hm, rsaSig, rsaPubEnc);\n }\n const rsaPub = rsaPubDecode(rsaPubEnc);\n const d = rsaFullDomainHash(hm, rsaPub);\n const sig = loadBigInt(rsaSig);\n const sig_e = sig.modPow(rsaPub.e, rsaPub.N);\n return sig_e.equals(d);\n}\n\nexport type CsSignature = {\n s: Uint8Array;\n rPub: Uint8Array;\n};\n\nexport type CsBlindSignature = {\n sBlind: Uint8Array;\n rPubBlind: Uint8Array;\n};\n\nexport type CsBlindingSecrets = {\n alpha: [Uint8Array, Uint8Array];\n beta: [Uint8Array, Uint8Array];\n};\n\nexport function typedArrayConcat(chunks: Uint8Array[]): Uint8Array {\n let payloadLen = 0;\n for (const c of chunks) {\n payloadLen += c.byteLength;\n }\n const buf = new ArrayBuffer(payloadLen);\n const u8buf = new Uint8Array(buf);\n let p = 0;\n for (const c of chunks) {\n u8buf.set(c, p);\n p += c.byteLength;\n }\n return u8buf;\n}\n\n/**\n * Map to scalar subgroup function\n * perform clamping as described in RFC7748\n * @param scalar\n */\nfunction mtoSS(scalar: Uint8Array): Uint8Array {\n scalar[0] &= 248;\n scalar[31] &= 127;\n scalar[31] |= 64;\n return scalar;\n}\n\n/**\n * The function returns the CS blinding secrets from a seed\n * @param bseed seed to derive blinding secrets\n * @returns blinding secrets\n */\nexport function deriveSecrets(bseed: Uint8Array): CsBlindingSecrets {\n const outLen = 130;\n const salt = stringToBytes(\"alphabeta\");\n const rndout = kdf(outLen, bseed, salt);\n const secrets: CsBlindingSecrets = {\n alpha: [mtoSS(rndout.slice(0, 32)), mtoSS(rndout.slice(64, 96))],\n beta: [mtoSS(rndout.slice(32, 64)), mtoSS(rndout.slice(96, 128))],\n };\n return secrets;\n}\n\n/**\n * calculation of the blinded public point R in CS\n * @param csPub denomination publik key\n * @param secrets client blinding secrets\n * @param rPub public R received from /csr API\n */\nexport async function calcRBlind(\n csPub: Uint8Array,\n secrets: CsBlindingSecrets,\n rPub: [Uint8Array, Uint8Array],\n): Promise<[Uint8Array, Uint8Array]> {\n const aG0 = nacl.crypto_scalarmult_ed25519_base_noclamp(secrets.alpha[0]);\n const aG1 = nacl.crypto_scalarmult_ed25519_base_noclamp(secrets.alpha[1]);\n\n const bDp0 = nacl.crypto_scalarmult_ed25519_noclamp(secrets.beta[0], csPub);\n const bDp1 = nacl.crypto_scalarmult_ed25519_noclamp(secrets.beta[1], csPub);\n\n const res0 = nacl.crypto_core_ed25519_add(aG0, bDp0);\n const res1 = nacl.crypto_core_ed25519_add(aG1, bDp1);\n return [\n nacl.crypto_core_ed25519_add(rPub[0], res0),\n nacl.crypto_core_ed25519_add(rPub[1], res1),\n ];\n}\n\n/**\n * FDH function used in CS\n * @param hm message hash\n * @param rPub public R included in FDH\n * @param csPub denomination public key as context\n * @returns mapped Curve25519 scalar\n */\nfunction csFDH(\n hm: Uint8Array,\n rPub: Uint8Array,\n csPub: Uint8Array,\n): Uint8Array {\n const lMod = Array.from(\n new Uint8Array([\n 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x14, 0xde, 0xf9, 0xde, 0xa2, 0xf7, 0x9c, 0xd6,\n 0x58, 0x12, 0x63, 0x1a, 0x5c, 0xf5, 0xd3, 0xed,\n ]),\n );\n const L = bigint.fromArray(lMod, 256, false);\n\n const info = stringToBytes(\"Curve25519FDH\");\n const preshash = hash(typedArrayConcat([rPub, hm]));\n return csKdfMod(L, preshash, csPub, info).reverse();\n}\n\n/**\n * blinding seed derived from coin private key\n * @param coinPriv private key of the corresponding coin\n * @param rPub public R received from /csr API\n * @returns blinding seed\n */\nexport function deriveBSeed(\n coinPriv: Uint8Array,\n rPub: [Uint8Array, Uint8Array],\n): Uint8Array {\n const outLen = 32;\n const salt = stringToBytes(\"b-seed\");\n const ikm = typedArrayConcat([coinPriv, rPub[0], rPub[1]]);\n return kdf(outLen, ikm, salt);\n}\n\n/**\n * Derive withdraw nonce, used in /csr request\n * Note: In withdraw protocol, the nonce is chosen randomly\n * @param coinPriv coin private key\n * @returns nonce\n */\nexport function deriveWithdrawNonce(coinPriv: Uint8Array): Uint8Array {\n const outLen = 32;\n const salt = stringToBytes(\"n\");\n return kdf(outLen, coinPriv, salt);\n}\n\n/**\n * Blind operation for CS signatures, used after /csr call\n * @param bseed blinding seed to derive blinding secrets\n * @param rPub public R received from /csr\n * @param csPub denomination public key\n * @param hm message to blind\n * @returns two blinded c\n */\nexport async function csBlind(\n bseed: Uint8Array,\n rPub: [Uint8Array, Uint8Array],\n csPub: Uint8Array,\n hm: Uint8Array,\n): Promise<[Uint8Array, Uint8Array]> {\n const secrets = deriveSecrets(bseed);\n const rPubBlind = await calcRBlind(csPub, secrets, rPub);\n const c_0 = csFDH(hm, rPubBlind[0], csPub);\n const c_1 = csFDH(hm, rPubBlind[1], csPub);\n return [\n nacl.crypto_core_ed25519_scalar_add(c_0, secrets.beta[0]),\n nacl.crypto_core_ed25519_scalar_add(c_1, secrets.beta[1]),\n ];\n}\n\n/**\n * Unblind operation to unblind the signature\n * @param bseed seed to derive secrets\n * @param rPub public R received from /csr\n * @param csPub denomination publick key\n * @param b returned from exchange to select c\n * @param csSig blinded signature\n * @returns unblinded signature\n */\nexport async function csUnblind(\n bseed: Uint8Array,\n rPub: [Uint8Array, Uint8Array],\n csPub: Uint8Array,\n b: number,\n csSig: CsBlindSignature,\n): Promise<CsSignature> {\n if (b != 0 && b != 1) {\n throw new Error();\n }\n const secrets = deriveSecrets(bseed);\n const rPubDash = (await calcRBlind(csPub, secrets, rPub))[b];\n const sig: CsSignature = {\n s: nacl.crypto_core_ed25519_scalar_add(csSig.sBlind, secrets.alpha[b]),\n rPub: rPubDash,\n };\n return sig;\n}\n\n/**\n * Verification algorithm for CS signatures\n * @param hm message signed\n * @param csSig unblinded signature\n * @param csPub denomination publick key\n * @returns true if valid, false if invalid\n */\nexport async function csVerify(\n hm: Uint8Array,\n csSig: CsSignature,\n csPub: Uint8Array,\n): Promise<boolean> {\n const cDash = csFDH(hm, csSig.rPub, csPub);\n const sG = nacl.crypto_scalarmult_ed25519_base_noclamp(csSig.s);\n const cbDp = nacl.crypto_scalarmult_ed25519_noclamp(cDash, csPub);\n const sGeq = nacl.crypto_core_ed25519_add(csSig.rPub, cbDp);\n return nacl.verify(sG, sGeq);\n}\n\nexport interface EddsaKeyPair {\n eddsaPub: Uint8Array;\n eddsaPriv: Uint8Array;\n}\n\nexport interface EcdheKeyPair {\n ecdhePub: Uint8Array;\n ecdhePriv: Uint8Array;\n}\n\nexport interface Edx25519Keypair {\n edxPub: string;\n edxPriv: string;\n}\n\nexport function createEddsaKeyPair(): EddsaKeyPair {\n const eddsaPriv = nacl.randomBytes(32);\n const eddsaPub = eddsaGetPublic(eddsaPriv);\n return { eddsaPriv, eddsaPub };\n}\n\nexport function createEcdheKeyPair(): EcdheKeyPair {\n const ecdhePriv = nacl.randomBytes(32);\n const ecdhePub = ecdhGetPublic(ecdhePriv);\n return { ecdhePriv, ecdhePub };\n}\n\nexport function hash(d: Uint8Array): Uint8Array {\n if (tart) {\n return tart.hash(d);\n }\n return nacl.hash(d);\n}\n\n/**\n * Hash the input with SHA-512 and truncate the result\n * to 32 bytes.\n */\nexport function hashTruncate32(d: Uint8Array): Uint8Array {\n const sha512HashCode = hash(d);\n return sha512HashCode.subarray(0, 32);\n}\n\nexport function hashCoinEv(\n coinEv: CoinEnvelope,\n denomPubHash: HashCodeString,\n): Uint8Array {\n const hashContext = createHashContext();\n hashContext.update(decodeCrock(denomPubHash));\n hashCoinEvInner(coinEv, hashContext);\n return hashContext.finish();\n}\n\nconst logger = new Logger(\"talerCrypto.ts\");\n\nexport function hashCoinEvInner(\n coinEv: CoinEnvelope,\n hashState: TalerHashState,\n): void {\n const hashInputBuf = new ArrayBuffer(4);\n const uint8ArrayBuf = new Uint8Array(hashInputBuf);\n const dv = new DataView(hashInputBuf);\n dv.setUint32(0, DenomKeyType.toIntTag(coinEv.cipher));\n hashState.update(uint8ArrayBuf);\n switch (coinEv.cipher) {\n case DenomKeyType.Rsa:\n hashState.update(decodeCrock(coinEv.rsa_blinded_planchet));\n return;\n default:\n throw new Error();\n }\n}\n\nexport function hashCoinPub(\n coinPub: CoinPublicKeyString,\n ach?: HashCodeString,\n): Uint8Array {\n if (!ach) {\n return hash(decodeCrock(coinPub));\n }\n\n return hash(typedArrayConcat([decodeCrock(coinPub), decodeCrock(ach)]));\n}\n\n/**\n * Hash a denomination public key.\n */\nexport function hashDenomPub(pub: DenominationPubKey): Uint8Array {\n if (pub.cipher === DenomKeyType.Rsa) {\n const pubBuf = decodeCrock(pub.rsa_public_key);\n const hashInputBuf = new ArrayBuffer(pubBuf.length + 4 + 4);\n const uint8ArrayBuf = new Uint8Array(hashInputBuf);\n const dv = new DataView(hashInputBuf);\n dv.setUint32(0, pub.age_mask ?? 0);\n dv.setUint32(4, DenomKeyType.toIntTag(pub.cipher));\n uint8ArrayBuf.set(pubBuf, 8);\n return hash(uint8ArrayBuf);\n } else if (pub.cipher === DenomKeyType.ClauseSchnorr) {\n const pubBuf = decodeCrock(pub.cs_public_key);\n const hashInputBuf = new ArrayBuffer(pubBuf.length + 4 + 4);\n const uint8ArrayBuf = new Uint8Array(hashInputBuf);\n const dv = new DataView(hashInputBuf);\n dv.setUint32(0, pub.age_mask ?? 0);\n dv.setUint32(4, DenomKeyType.toIntTag(pub.cipher));\n uint8ArrayBuf.set(pubBuf, 8);\n return hash(uint8ArrayBuf);\n } else {\n throw Error(\n `unsupported cipher (${\n (pub as DenominationPubKey).cipher\n }), unable to hash`,\n );\n }\n}\n\nexport function eddsaSign(msg: Uint8Array, eddsaPriv: Uint8Array): Uint8Array {\n if (tart) {\n return tart.eddsaSign(msg, eddsaPriv);\n }\n const pair = nacl.crypto_sign_keyPair_fromSeed(eddsaPriv);\n return nacl.sign_detached(msg, pair.secretKey);\n}\n\nexport function eddsaVerify(\n msg: Uint8Array,\n sig: Uint8Array,\n eddsaPub: Uint8Array,\n): boolean {\n if (tart) {\n return tart.eddsaVerify(msg, sig, eddsaPub);\n }\n return nacl.sign_detached_verify(msg, sig, eddsaPub);\n}\n\nexport interface TalerHashState {\n update(data: Uint8Array): void;\n finish(): Uint8Array;\n}\n\nexport function createHashContext(): TalerHashState {\n if (tart) {\n const t = tart;\n const st = tart.hashStateInit();\n return {\n finish: () => t.hashStateFinish(st),\n update: (d) => t.hashStateUpdate(st, d),\n };\n }\n return new nacl.HashState();\n}\n\nexport interface FreshCoin {\n coinPub: Uint8Array;\n coinPriv: Uint8Array;\n bks: Uint8Array;\n maxAge: number;\n ageCommitmentProof: AgeCommitmentProof | undefined;\n}\n\nexport function bufferForUint32(n: number): Uint8Array {\n const arrBuf = new ArrayBuffer(4);\n const buf = new Uint8Array(arrBuf);\n const dv = new DataView(arrBuf);\n dv.setUint32(0, n);\n return buf;\n}\n\nexport function bufferForUint8(n: number): Uint8Array {\n const arrBuf = new ArrayBuffer(1);\n const buf = new Uint8Array(arrBuf);\n const dv = new DataView(arrBuf);\n dv.setUint8(0, n);\n return buf;\n}\n\nexport async function setupTipPlanchet(\n secretSeed: Uint8Array,\n denomPub: DenominationPubKey,\n coinNumber: number,\n): Promise<FreshCoin> {\n const info = stringToBytes(\"taler-tip-coin-derivation\");\n const saltArrBuf = new ArrayBuffer(4);\n const salt = new Uint8Array(saltArrBuf);\n const saltDataView = new DataView(saltArrBuf);\n saltDataView.setUint32(0, coinNumber);\n const out = kdf(64, secretSeed, salt, info);\n const coinPriv = out.slice(0, 32);\n const bks = out.slice(32, 64);\n let maybeAcp: AgeCommitmentProof | undefined;\n if (denomPub.age_mask != 0) {\n maybeAcp = await AgeRestriction.restrictionCommitSeeded(\n denomPub.age_mask,\n AgeRestriction.AGE_UNRESTRICTED,\n secretSeed,\n );\n }\n return {\n bks,\n coinPriv,\n coinPub: eddsaGetPublic(coinPriv),\n maxAge: AgeRestriction.AGE_UNRESTRICTED,\n ageCommitmentProof: maybeAcp,\n };\n}\n/**\n *\n * @param paytoUri\n * @param salt 16-byte salt\n * @returns\n */\nexport function hashWire(paytoUri: string, salt: string): string {\n const r = kdf(\n 64,\n stringToBytes(paytoUri + \"\\0\"),\n decodeCrock(salt),\n stringToBytes(\"merchant-wire-signature\"),\n );\n return encodeCrock(r);\n}\n\nexport enum TalerSignaturePurpose {\n MERCHANT_TRACK_TRANSACTION = 1103,\n WALLET_RESERVE_WITHDRAW = 1200,\n WALLET_COIN_DEPOSIT = 1201,\n GLOBAL_FEES = 1022,\n MASTER_DENOMINATION_KEY_VALIDITY = 1025,\n MASTER_WIRE_FEES = 1028,\n MASTER_WIRE_DETAILS = 1030,\n WALLET_COIN_MELT = 1202,\n TEST = 4242,\n MERCHANT_PAYMENT_OK = 1104,\n MERCHANT_CONTRACT = 1101,\n WALLET_COIN_RECOUP = 1203,\n WALLET_COIN_LINK = 1204,\n WALLET_COIN_RECOUP_REFRESH = 1206,\n WALLET_AGE_ATTESTATION = 1207,\n WALLET_PURSE_CREATE = 1210,\n WALLET_PURSE_DEPOSIT = 1211,\n WALLET_PURSE_MERGE = 1213,\n WALLET_ACCOUNT_MERGE = 1214,\n WALLET_PURSE_ECONTRACT = 1216,\n EXCHANGE_CONFIRM_RECOUP = 1039,\n EXCHANGE_CONFIRM_RECOUP_REFRESH = 1041,\n ANASTASIS_POLICY_UPLOAD = 1400,\n ANASTASIS_POLICY_DOWNLOAD = 1401,\n SYNC_BACKUP_UPLOAD = 1450,\n}\n\nexport const enum WalletAccountMergeFlags {\n /**\n * Not a legal mode!\n */\n None = 0,\n\n /**\n * We are merging a fully paid-up purse into a reserve.\n */\n MergeFullyPaidPurse = 1,\n\n CreateFromPurseQuota = 2,\n\n CreateWithPurseFee = 3,\n}\n\nexport class SignaturePurposeBuilder {\n private chunks: Uint8Array[] = [];\n\n constructor(private purposeNum: number) {}\n\n put(bytes: Uint8Array): SignaturePurposeBuilder {\n this.chunks.push(Uint8Array.from(bytes));\n return this;\n }\n\n build(): Uint8Array {\n let payloadLen = 0;\n for (const c of this.chunks) {\n payloadLen += c.byteLength;\n }\n const buf = new ArrayBuffer(4 + 4 + payloadLen);\n const u8buf = new Uint8Array(buf);\n let p = 8;\n for (const c of this.chunks) {\n u8buf.set(c, p);\n p += c.byteLength;\n }\n const dvbuf = new DataView(buf);\n dvbuf.setUint32(0, payloadLen + 4 + 4);\n dvbuf.setUint32(4, this.purposeNum);\n return u8buf;\n }\n}\n\nexport function buildSigPS(purposeNum: number): SignaturePurposeBuilder {\n return new SignaturePurposeBuilder(purposeNum);\n}\n\nexport type OpaqueData = Flavor<Uint8Array, any>;\nexport type Edx25519PublicKey = FlavorP<Uint8Array, \"Edx25519PublicKey\", 32>;\nexport type Edx25519PrivateKey = FlavorP<Uint8Array, \"Edx25519PrivateKey\", 64>;\nexport type Edx25519Signature = FlavorP<Uint8Array, \"Edx25519Signature\", 64>;\n\nexport type Edx25519PublicKeyEnc = FlavorP<string, \"Edx25519PublicKeyEnc\", 32>;\nexport type Edx25519PrivateKeyEnc = FlavorP<\n string,\n \"Edx25519PrivateKeyEnc\",\n 64\n>;\n\n/**\n * Convert a big integer to a fixed-size, little-endian array.\n */\nexport function bigintToNaclArr(\n x: bigint.BigInteger,\n size: number,\n): Uint8Array {\n const byteArr = new Uint8Array(size);\n const arr = x.toArray(256).value.reverse();\n byteArr.set(arr, 0);\n return byteArr;\n}\n\nexport function bigintFromNaclArr(arr: Uint8Array): bigint.BigInteger {\n let rev = new Uint8Array(arr);\n rev = rev.reverse();\n return bigint.fromArray(Array.from(rev), 256, false);\n}\n\nexport namespace Edx25519 {\n const revL = [\n 0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2,\n 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10,\n ];\n\n const L = bigint.fromArray(revL.reverse(), 256, false);\n\n export async function keyCreateFromSeed(\n seed: OpaqueData,\n ): Promise<Edx25519PrivateKey> {\n return nacl.crypto_edx25519_private_key_create_from_seed(seed);\n }\n\n export async function keyCreate(): Promise<Edx25519PrivateKey> {\n return nacl.crypto_edx25519_private_key_create();\n }\n\n export async function getPublic(\n priv: Edx25519PrivateKey,\n ): Promise<Edx25519PublicKey> {\n return nacl.crypto_edx25519_get_public(priv);\n }\n\n export function sign(\n msg: OpaqueData,\n key: Edx25519PrivateKey,\n ): Promise<Edx25519Signature> {\n throw Error(\"not implemented\");\n }\n\n async function deriveFactor(\n pub: Edx25519PublicKey,\n seed: OpaqueData,\n ): Promise<OpaqueData> {\n const res = kdfKw({\n outputLength: 64,\n salt: seed,\n ikm: pub,\n info: stringToBytes(\"edx25519-derivation\"),\n });\n\n return res;\n }\n\n export async function privateKeyDerive(\n priv: Edx25519PrivateKey,\n seed: OpaqueData,\n ): Promise<Edx25519PrivateKey> {\n const pub = await getPublic(priv);\n const privDec = priv;\n const a = bigintFromNaclArr(privDec.subarray(0, 32));\n const factorEnc = await deriveFactor(pub, seed);\n const factorModL = bigintFromNaclArr(factorEnc).mod(L);\n\n const aPrime = a.divide(8).multiply(factorModL).mod(L).multiply(8).mod(L);\n const bPrime = nacl\n .hash(typedArrayConcat([privDec.subarray(32, 64), factorEnc]))\n .subarray(0, 32);\n\n const newPriv = typedArrayConcat([bigintToNaclArr(aPrime, 32), bPrime]);\n\n return newPriv;\n }\n\n export async function publicKeyDerive(\n pub: Edx25519PublicKey,\n seed: OpaqueData,\n ): Promise<Edx25519PublicKey> {\n const factorEnc = await deriveFactor(pub, seed);\n const factorReduced = nacl.crypto_core_ed25519_scalar_reduce(factorEnc);\n const res = nacl.crypto_scalarmult_ed25519_noclamp(factorReduced, pub);\n return res;\n }\n}\n\nexport interface AgeCommitment {\n mask: number;\n\n /**\n * Public keys, one for each age group specified in the age mask.\n */\n publicKeys: Edx25519PublicKeyEnc[];\n}\n\nexport interface AgeProof {\n /**\n * Private keys. Typically smaller than the number of public keys,\n * because we drop private keys from age groups that are restricted.\n */\n privateKeys: Edx25519PrivateKeyEnc[];\n}\n\nexport interface AgeCommitmentProof {\n commitment: AgeCommitment;\n proof: AgeProof;\n}\n\nfunction invariant(cond: boolean): asserts cond {\n if (!cond) {\n throw Error(\"invariant failed\");\n }\n}\n\nexport namespace AgeRestriction {\n /**\n * Smallest age value that the protocol considers \"unrestricted\".\n */\n export const AGE_UNRESTRICTED = 32;\n\n export function hashCommitment(ac: AgeCommitment): HashCodeString {\n const hc = new nacl.HashState();\n for (const pub of ac.publicKeys) {\n hc.update(decodeCrock(pub));\n }\n return encodeCrock(hc.finish().subarray(0, 32));\n }\n\n export function countAgeGroups(mask: number): number {\n let count = 0;\n let m = mask;\n while (m > 0) {\n count += m & 1;\n m = m >> 1;\n }\n return count;\n }\n\n /**\n * Get the starting points for age groups in the mask.\n */\n export function getAgeGroupsFromMask(mask: number): number[] {\n const groups: number[] = [];\n let age = 1;\n let m = mask >> 1;\n while (m > 0) {\n if (m & 1) {\n groups.push(age);\n }\n m = m >> 1;\n age++;\n }\n return groups;\n }\n\n export function getAgeGroupIndex(mask: number, age: number): number {\n invariant((mask & 1) === 1);\n let i = 0;\n let m = mask;\n let a = age;\n while (m > 0) {\n if (a <= 0) {\n break;\n }\n m = m >> 1;\n i += m & 1;\n a--;\n }\n return i;\n }\n\n export function ageGroupSpecToMask(ageGroupSpec: string): number {\n throw Error(\"not implemented\");\n }\n\n export async function restrictionCommit(\n ageMask: number,\n age: number,\n ): Promise<AgeCommitmentProof> {\n invariant((ageMask & 1) === 1);\n const numPubs = countAgeGroups(ageMask) - 1;\n const numPrivs = getAgeGroupIndex(ageMask, age);\n\n const pubs: Edx25519PublicKey[] = [];\n const privs: Edx25519PrivateKey[] = [];\n\n for (let i = 0; i < numPubs; i++) {\n const priv = await Edx25519.keyCreate();\n const pub = await Edx25519.getPublic(priv);\n pubs.push(pub);\n if (i < numPrivs) {\n privs.push(priv);\n }\n }\n\n return {\n commitment: {\n mask: ageMask,\n publicKeys: pubs.map((x) => encodeCrock(x)),\n },\n proof: {\n privateKeys: privs.map((x) => encodeCrock(x)),\n },\n };\n }\n\n export async function restrictionCommitSeeded(\n ageMask: number,\n age: number,\n seed: Uint8Array,\n ): Promise<AgeCommitmentProof> {\n invariant((ageMask & 1) === 1);\n const numPubs = countAgeGroups(ageMask) - 1;\n const numPrivs = getAgeGroupIndex(ageMask, age);\n\n const pubs: Edx25519PublicKey[] = [];\n const privs: Edx25519PrivateKey[] = [];\n\n for (let i = 0; i < numPubs; i++) {\n const privSeed = await kdfKw({\n outputLength: 32,\n ikm: seed,\n info: stringToBytes(\"age-restriction-commit\"),\n salt: bufferForUint32(i),\n });\n const priv = await Edx25519.keyCreateFromSeed(privSeed);\n const pub = await Edx25519.getPublic(priv);\n pubs.push(pub);\n if (i < numPrivs) {\n privs.push(priv);\n }\n }\n\n return {\n commitment: {\n mask: ageMask,\n publicKeys: pubs.map((x) => encodeCrock(x)),\n },\n proof: {\n privateKeys: privs.map((x) => encodeCrock(x)),\n },\n };\n }\n\n /**\n * Check that c1 = c2*salt\n */\n export async function commitCompare(\n c1: AgeCommitment,\n c2: AgeCommitment,\n salt: OpaqueData,\n ): Promise<boolean> {\n if (c1.publicKeys.length != c2.publicKeys.length) {\n return false;\n }\n for (let i = 0; i < c1.publicKeys.length; i++) {\n const k1 = decodeCrock(c1.publicKeys[i]);\n const k2 = await Edx25519.publicKeyDerive(\n decodeCrock(c2.publicKeys[i]),\n salt,\n );\n if (k1 != k2) {\n return false;\n }\n }\n return true;\n }\n\n export async function commitmentDerive(\n commitmentProof: AgeCommitmentProof,\n salt: OpaqueData,\n ): Promise<AgeCommitmentProof> {\n const newPrivs: Edx25519PrivateKey[] = [];\n const newPubs: Edx25519PublicKey[] = [];\n\n for (const oldPub of commitmentProof.commitment.publicKeys) {\n newPubs.push(await Edx25519.publicKeyDerive(decodeCrock(oldPub), salt));\n }\n\n for (const oldPriv of commitmentProof.proof.privateKeys) {\n newPrivs.push(\n await Edx25519.privateKeyDerive(decodeCrock(oldPriv), salt),\n );\n }\n\n return {\n commitment: {\n mask: commitmentProof.commitment.mask,\n publicKeys: newPubs.map((x) => encodeCrock(x)),\n },\n proof: {\n privateKeys: newPrivs.map((x) => encodeCrock(x)),\n },\n };\n }\n\n export function commitmentAttest(\n commitmentProof: AgeCommitmentProof,\n age: number,\n ): Edx25519Signature {\n const d = buildSigPS(TalerSignaturePurpose.WALLET_AGE_ATTESTATION)\n .put(bufferForUint32(commitmentProof.commitment.mask))\n .put(bufferForUint32(age))\n .build();\n const group = getAgeGroupIndex(commitmentProof.commitment.mask, age);\n if (group === 0) {\n // No attestation required.\n return new Uint8Array(64);\n }\n const priv = commitmentProof.proof.privateKeys[group - 1];\n const pub = commitmentProof.commitment.publicKeys[group - 1];\n const sig = nacl.crypto_edx25519_sign_detached(\n d,\n decodeCrock(priv),\n decodeCrock(pub),\n );\n return sig;\n }\n\n export function commitmentVerify(\n commitment: AgeCommitment,\n sig: string,\n age: number,\n ): boolean {\n const d = buildSigPS(TalerSignaturePurpose.WALLET_AGE_ATTESTATION)\n .put(bufferForUint32(commitment.mask))\n .put(bufferForUint32(age))\n .build();\n const group = getAgeGroupIndex(commitment.mask, age);\n if (group === 0) {\n // No attestation required.\n return true;\n }\n const pub = commitment.publicKeys[group - 1];\n return nacl.crypto_edx25519_sign_detached_verify(\n d,\n decodeCrock(sig),\n decodeCrock(pub),\n );\n }\n}\n\n// FIXME: make it a branded type!\ntype EncryptionNonce = FlavorP<Uint8Array, \"EncryptionNonce\", 24>;\n\nasync function deriveKey(\n keySeed: OpaqueData,\n nonce: EncryptionNonce,\n salt: string,\n): Promise<Uint8Array> {\n return kdfKw({\n outputLength: 32,\n salt: nonce,\n ikm: keySeed,\n info: stringToBytes(salt),\n });\n}\n\nasync function encryptWithDerivedKey(\n nonce: EncryptionNonce,\n keySeed: OpaqueData,\n plaintext: OpaqueData,\n salt: string,\n): Promise<OpaqueData> {\n const key = await deriveKey(keySeed, nonce, salt);\n const cipherText = secretbox(plaintext, nonce, key);\n return typedArrayConcat([nonce, cipherText]);\n}\n\nconst nonceSize = 24;\n\nasync function decryptWithDerivedKey(\n ciphertext: OpaqueData,\n keySeed: OpaqueData,\n salt: string,\n): Promise<OpaqueData> {\n const ctBuf = ciphertext;\n const nonceBuf = ctBuf.slice(0, nonceSize);\n const enc = ctBuf.slice(nonceSize);\n const key = await deriveKey(keySeed, nonceBuf, salt);\n const clearText = nacl.secretbox_open(enc, nonceBuf, key);\n if (!clearText) {\n throw Error(\"could not decrypt\");\n }\n return clearText;\n}\n\nenum ContractFormatTag {\n PaymentOffer = 0,\n PaymentRequest = 1,\n}\n\ntype MaterialEddsaPub = {\n _materialType?: \"eddsa-pub\";\n _size?: 32;\n};\n\ntype MaterialEddsaPriv = {\n _materialType?: \"ecdhe-priv\";\n _size?: 32;\n};\n\ntype MaterialEcdhePub = {\n _materialType?: \"ecdhe-pub\";\n _size?: 32;\n};\n\ntype MaterialEcdhePriv = {\n _materialType?: \"ecdhe-priv\";\n _size?: 32;\n};\n\ntype PursePublicKey = FlavorP<Uint8Array, \"PursePublicKey\", 32> &\n MaterialEddsaPub;\n\ntype ContractPrivateKey = FlavorP<Uint8Array, \"ContractPrivateKey\", 32> &\n MaterialEcdhePriv;\n\ntype MergePrivateKey = FlavorP<Uint8Array, \"MergePrivateKey\", 32> &\n MaterialEddsaPriv;\n\nconst mergeSalt = \"p2p-merge-contract\";\nconst depositSalt = \"p2p-deposit-contract\";\n\nexport function encryptContractForMerge(\n pursePub: PursePublicKey,\n contractPriv: ContractPrivateKey,\n mergePriv: MergePrivateKey,\n contractTerms: any,\n): Promise<OpaqueData> {\n const contractTermsCanon = canonicalJson(contractTerms) + \"\\0\";\n const contractTermsBytes = stringToBytes(contractTermsCanon);\n const contractTermsCompressed = fflate.zlibSync(contractTermsBytes);\n const data = typedArrayConcat([\n bufferForUint32(ContractFormatTag.PaymentOffer),\n bufferForUint32(contractTermsBytes.length),\n mergePriv,\n contractTermsCompressed,\n ]);\n const key = keyExchangeEcdhEddsa(contractPriv, pursePub);\n return encryptWithDerivedKey(getRandomBytesF(24), key, data, mergeSalt);\n}\n\nexport function encryptContractForDeposit(\n pursePub: PursePublicKey,\n contractPriv: ContractPrivateKey,\n contractTerms: any,\n): Promise<OpaqueData> {\n const contractTermsCanon = canonicalJson(contractTerms) + \"\\0\";\n const contractTermsBytes = stringToBytes(contractTermsCanon);\n const contractTermsCompressed = fflate.zlibSync(contractTermsBytes);\n const data = typedArrayConcat([\n bufferForUint32(ContractFormatTag.PaymentRequest),\n bufferForUint32(contractTermsBytes.length),\n contractTermsCompressed,\n ]);\n const key = keyExchangeEcdhEddsa(contractPriv, pursePub);\n return encryptWithDerivedKey(getRandomBytesF(24), key, data, depositSalt);\n}\n\nexport interface DecryptForMergeResult {\n contractTerms: any;\n mergePriv: Uint8Array;\n}\n\nexport interface DecryptForDepositResult {\n contractTerms: any;\n}\n\nexport async function decryptContractForMerge(\n enc: OpaqueData,\n pursePub: PursePublicKey,\n contractPriv: ContractPrivateKey,\n): Promise<DecryptForMergeResult> {\n const key = keyExchangeEcdhEddsa(contractPriv, pursePub);\n const dec = await decryptWithDerivedKey(enc, key, mergeSalt);\n const mergePriv = dec.slice(8, 8 + 32);\n const contractTermsCompressed = dec.slice(8 + 32);\n const contractTermsBuf = fflate.unzlibSync(contractTermsCompressed);\n // Slice of the '\\0' at the end and decode to a string\n const contractTermsString = bytesToString(\n contractTermsBuf.slice(0, contractTermsBuf.length - 1),\n );\n return {\n mergePriv: mergePriv,\n contractTerms: JSON.parse(contractTermsString),\n };\n}\n\nexport async function decryptContractForDeposit(\n enc: OpaqueData,\n pursePub: PursePublicKey,\n contractPriv: ContractPrivateKey,\n): Promise<DecryptForDepositResult> {\n const key = keyExchangeEcdhEddsa(contractPriv, pursePub);\n const dec = await decryptWithDerivedKey(enc, key, depositSalt);\n const contractTermsCompressed = dec.slice(8);\n const contractTermsBuf = fflate.unzlibSync(contractTermsCompressed);\n // Slice of the '\\0' at the end and decode to a string\n const contractTermsString = bytesToString(\n contractTermsBuf.slice(0, contractTermsBuf.length - 1),\n );\n return {\n contractTerms: JSON.parse(contractTermsString),\n };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2017-2019 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n * Helpers for relative and absolute time.\n */\n\n/**\n * Imports.\n */\nimport { Codec, renderContext, Context } from \"./codec.js\";\n\nexport interface AbsoluteTime {\n /**\n * Timestamp in milliseconds.\n */\n readonly t_ms: number | \"never\";\n}\n\nexport interface TalerProtocolTimestamp {\n readonly t_s: number | \"never\";\n}\n\nexport namespace TalerProtocolTimestamp {\n export function now(): TalerProtocolTimestamp {\n return AbsoluteTime.toTimestamp(AbsoluteTime.now());\n }\n\n export function zero(): TalerProtocolTimestamp {\n return {\n t_s: 0,\n };\n }\n\n export function never(): TalerProtocolTimestamp {\n return {\n t_s: \"never\",\n };\n }\n\n export function fromSeconds(s: number): TalerProtocolTimestamp {\n return {\n t_s: s,\n };\n }\n export function min(\n t1: TalerProtocolTimestamp,\n t2: TalerProtocolTimestamp,\n ): TalerProtocolTimestamp {\n if (t1.t_s === \"never\") {\n return { t_s: t2.t_s };\n }\n if (t2.t_s === \"never\") {\n return { t_s: t1.t_s };\n }\n return { t_s: Math.min(t1.t_s, t2.t_s) };\n }\n export function max(\n t1: TalerProtocolTimestamp,\n t2: TalerProtocolTimestamp,\n ): TalerProtocolTimestamp {\n if (t1.t_s === \"never\" || t2.t_s === \"never\") {\n return { t_s: \"never\" };\n }\n return { t_s: Math.max(t1.t_s, t2.t_s) };\n }\n}\n\nexport interface Duration {\n /**\n * Duration in milliseconds.\n */\n readonly d_ms: number | \"forever\";\n}\n\nexport interface TalerProtocolDuration {\n readonly d_us: number | \"forever\";\n}\n\nlet timeshift = 0;\n\nexport function setDangerousTimetravel(dt: number): void {\n timeshift = dt;\n}\n\nexport namespace Duration {\n export function getRemaining(\n deadline: AbsoluteTime,\n now = AbsoluteTime.now(),\n ): Duration {\n if (deadline.t_ms === \"never\") {\n return { d_ms: \"forever\" };\n }\n if (now.t_ms === \"never\") {\n throw Error(\"invalid argument for 'now'\");\n }\n if (deadline.t_ms < now.t_ms) {\n return { d_ms: 0 };\n }\n return { d_ms: deadline.t_ms - now.t_ms };\n }\n\n export function fromPrettyString(s: string): Duration {\n let dMs = 0;\n let currentNum = \"\";\n let parsingNum = true;\n for (let i = 0; i < s.length; i++) {\n const cc = s.charCodeAt(i);\n if (cc >= \"0\".charCodeAt(0) && cc <= \"9\".charCodeAt(0)) {\n if (!parsingNum) {\n throw Error(\"invalid duration, unexpected number\");\n }\n currentNum += s[i];\n continue;\n }\n if (s[i] == \" \") {\n if (currentNum != \"\") {\n parsingNum = false;\n }\n continue;\n }\n\n if (currentNum == \"\") {\n throw Error(\"invalid duration, missing number\");\n }\n\n if (s[i] === \"s\") {\n dMs += 1000 * Number.parseInt(currentNum, 10);\n } else if (s[i] === \"m\") {\n dMs += 60 * 1000 * Number.parseInt(currentNum, 10);\n } else if (s[i] === \"h\") {\n dMs += 60 * 60 * 1000 * Number.parseInt(currentNum, 10);\n } else if (s[i] === \"d\") {\n dMs += 24 * 60 * 60 * 1000 * Number.parseInt(currentNum, 10);\n } else {\n throw Error(\"invalid duration, unsupported unit\");\n }\n currentNum = \"\";\n parsingNum = true;\n }\n return {\n d_ms: dMs,\n };\n }\n\n export function max(d1: Duration, d2: Duration): Duration {\n return durationMax(d1, d2);\n }\n\n export function min(d1: Duration, d2: Duration): Duration {\n return durationMin(d1, d2);\n }\n\n export function multiply(d1: Duration, n: number): Duration {\n return durationMul(d1, n);\n }\n\n export function toIntegerYears(d: Duration): number {\n if (typeof d.d_ms !== \"number\") {\n throw Error(\"infinite duration\");\n }\n return Math.ceil(d.d_ms / 1000 / 60 / 60 / 24 / 365);\n }\n\n export const fromSpec = durationFromSpec;\n\n export function getForever(): Duration {\n return { d_ms: \"forever\" };\n }\n\n export function getZero(): Duration {\n return { d_ms: 0 };\n }\n\n export function fromTalerProtocolDuration(\n d: TalerProtocolDuration,\n ): Duration {\n if (d.d_us === \"forever\") {\n return {\n d_ms: \"forever\",\n };\n }\n return {\n d_ms: d.d_us / 1000,\n };\n }\n\n export function toTalerProtocolDuration(d: Duration): TalerProtocolDuration {\n if (d.d_ms === \"forever\") {\n return {\n d_us: \"forever\",\n };\n }\n return {\n d_us: d.d_ms * 1000,\n };\n }\n\n export function clamp(args: {\n lower: Duration;\n upper: Duration;\n value: Duration;\n }): Duration {\n return durationMax(durationMin(args.value, args.upper), args.lower);\n }\n}\n\nexport namespace AbsoluteTime {\n export function now(): AbsoluteTime {\n return {\n t_ms: new Date().getTime() + timeshift,\n };\n }\n\n export function never(): AbsoluteTime {\n return {\n t_ms: \"never\",\n };\n }\n\n export function cmp(t1: AbsoluteTime, t2: AbsoluteTime): number {\n if (t1.t_ms === \"never\") {\n if (t2.t_ms === \"never\") {\n return 0;\n }\n return 1;\n }\n if (t2.t_ms === \"never\") {\n return -1;\n }\n if (t1.t_ms == t2.t_ms) {\n return 0;\n }\n if (t1.t_ms > t2.t_ms) {\n return 1;\n }\n return -1;\n }\n\n export function min(t1: AbsoluteTime, t2: AbsoluteTime): AbsoluteTime {\n if (t1.t_ms === \"never\") {\n return { t_ms: t2.t_ms };\n }\n if (t2.t_ms === \"never\") {\n return { t_ms: t2.t_ms };\n }\n return { t_ms: Math.min(t1.t_ms, t2.t_ms) };\n }\n\n export function max(t1: AbsoluteTime, t2: AbsoluteTime): AbsoluteTime {\n if (t1.t_ms === \"never\") {\n return { t_ms: \"never\" };\n }\n if (t2.t_ms === \"never\") {\n return { t_ms: \"never\" };\n }\n return { t_ms: Math.max(t1.t_ms, t2.t_ms) };\n }\n\n export function difference(t1: AbsoluteTime, t2: AbsoluteTime): Duration {\n if (t1.t_ms === \"never\") {\n return { d_ms: \"forever\" };\n }\n if (t2.t_ms === \"never\") {\n return { d_ms: \"forever\" };\n }\n return { d_ms: Math.abs(t1.t_ms - t2.t_ms) };\n }\n\n export function isExpired(t: AbsoluteTime) {\n return cmp(t, now()) <= 0;\n }\n\n export function fromTimestamp(t: TalerProtocolTimestamp): AbsoluteTime {\n if (t.t_s === \"never\") {\n return { t_ms: \"never\" };\n }\n return {\n t_ms: t.t_s * 1000,\n };\n }\n\n export function toTimestamp(at: AbsoluteTime): TalerProtocolTimestamp {\n if (at.t_ms === \"never\") {\n return { t_s: \"never\" };\n }\n return {\n t_s: Math.floor(at.t_ms / 1000),\n };\n }\n\n export function isBetween(\n t: AbsoluteTime,\n start: AbsoluteTime,\n end: AbsoluteTime,\n ): boolean {\n if (cmp(t, start) < 0) {\n return false;\n }\n if (cmp(t, end) > 0) {\n return false;\n }\n return true;\n }\n\n export function toIsoString(t: AbsoluteTime): string {\n if (t.t_ms === \"never\") {\n return \"<never>\";\n } else {\n return new Date(t.t_ms).toISOString();\n }\n }\n\n export function addDuration(t1: AbsoluteTime, d: Duration): AbsoluteTime {\n if (t1.t_ms === \"never\" || d.d_ms === \"forever\") {\n return { t_ms: \"never\" };\n }\n return { t_ms: t1.t_ms + d.d_ms };\n }\n\n export function subtractDuraction(\n t1: AbsoluteTime,\n d: Duration,\n ): AbsoluteTime {\n if (t1.t_ms === \"never\") {\n return { t_ms: \"never\" };\n }\n if (d.d_ms === \"forever\") {\n return { t_ms: 0 };\n }\n return { t_ms: Math.max(0, t1.t_ms - d.d_ms) };\n }\n\n export function stringify(t: AbsoluteTime): string {\n if (t.t_ms === \"never\") {\n return \"never\";\n }\n return new Date(t.t_ms).toISOString();\n }\n}\n\nconst SECONDS = 1000;\nconst MINUTES = SECONDS * 60;\nconst HOURS = MINUTES * 60;\nconst DAYS = HOURS * 24;\nconst MONTHS = DAYS * 30;\nconst YEARS = DAYS * 365;\n\nexport function durationFromSpec(spec: {\n seconds?: number;\n minutes?: number;\n hours?: number;\n days?: number;\n months?: number;\n years?: number;\n}): Duration {\n let d_ms = 0;\n d_ms += (spec.seconds ?? 0) * SECONDS;\n d_ms += (spec.minutes ?? 0) * MINUTES;\n d_ms += (spec.hours ?? 0) * HOURS;\n d_ms += (spec.days ?? 0) * DAYS;\n d_ms += (spec.months ?? 0) * MONTHS;\n d_ms += (spec.years ?? 0) * YEARS;\n return { d_ms };\n}\n\nexport function durationMin(d1: Duration, d2: Duration): Duration {\n if (d1.d_ms === \"forever\") {\n return { d_ms: d2.d_ms };\n }\n if (d2.d_ms === \"forever\") {\n return { d_ms: d1.d_ms };\n }\n return { d_ms: Math.min(d1.d_ms, d2.d_ms) };\n}\n\nexport function durationMax(d1: Duration, d2: Duration): Duration {\n if (d1.d_ms === \"forever\") {\n return { d_ms: \"forever\" };\n }\n if (d2.d_ms === \"forever\") {\n return { d_ms: \"forever\" };\n }\n return { d_ms: Math.max(d1.d_ms, d2.d_ms) };\n}\n\nexport function durationMul(d: Duration, n: number): Duration {\n if (d.d_ms === \"forever\") {\n return { d_ms: \"forever\" };\n }\n return { d_ms: Math.round(d.d_ms * n) };\n}\n\nexport function durationAdd(d1: Duration, d2: Duration): Duration {\n if (d1.d_ms === \"forever\" || d2.d_ms === \"forever\") {\n return { d_ms: \"forever\" };\n }\n return { d_ms: d1.d_ms + d2.d_ms };\n}\n\nexport const codecForAbsoluteTime: Codec<AbsoluteTime> = {\n decode(x: any, c?: Context): AbsoluteTime {\n const t_ms = x.t_ms;\n if (typeof t_ms === \"string\") {\n if (t_ms === \"never\") {\n return { t_ms: \"never\" };\n }\n } else if (typeof t_ms === \"number\") {\n return { t_ms };\n }\n throw Error(`expected timestamp at ${renderContext(c)}`);\n },\n};\n\nexport const codecForTimestamp: Codec<TalerProtocolTimestamp> = {\n decode(x: any, c?: Context): TalerProtocolTimestamp {\n // Compatibility, should be removed soon.\n const t_ms = x.t_ms;\n if (typeof t_ms === \"string\") {\n if (t_ms === \"never\") {\n return { t_s: \"never\" };\n }\n } else if (typeof t_ms === \"number\") {\n return { t_s: Math.floor(t_ms / 1000) };\n }\n const t_s = x.t_s;\n if (typeof t_s === \"string\") {\n if (t_s === \"never\") {\n return { t_s: \"never\" };\n }\n throw Error(`expected timestamp at ${renderContext(c)}`);\n }\n if (typeof t_s === \"number\") {\n return { t_s };\n }\n throw Error(`expected timestamp at ${renderContext(c)}`);\n },\n};\n\nexport const codecForDuration: Codec<TalerProtocolDuration> = {\n decode(x: any, c?: Context): TalerProtocolDuration {\n const d_us = x.d_us;\n if (typeof d_us === \"string\") {\n if (d_us === \"forever\") {\n return { d_us: \"forever\" };\n }\n throw Error(`expected duration at ${renderContext(c)}`);\n }\n if (typeof d_us === \"number\") {\n return { d_us };\n }\n throw Error(`expected duration at ${renderContext(c)}`);\n },\n};\n", "/*\n This file is part of GNU Taler\n (C) 2019 GNUnet e.V.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n * Type and schema definitions and helpers for the core GNU Taler protocol.\n *\n * Even though the rest of the wallet uses camelCase for fields, use snake_case\n * here, since that's the convention for the Taler JSON+HTTP API.\n */\n\n/**\n * Imports.\n */\n\nimport { codecForAmountString } from \"./amounts.js\";\nimport {\n buildCodecForObject,\n buildCodecForUnion,\n Codec,\n codecForAny,\n codecForBoolean,\n codecForConstNumber,\n codecForConstString,\n codecForList,\n codecForMap,\n codecForNumber,\n codecForString,\n codecOptional,\n} from \"./codec.js\";\nimport { strcmp } from \"./helpers.js\";\nimport { AgeCommitmentProof, Edx25519PublicKeyEnc } from \"./taler-crypto.js\";\nimport {\n codecForAbsoluteTime,\n codecForDuration,\n codecForTimestamp,\n TalerProtocolDuration,\n TalerProtocolTimestamp,\n} from \"./time.js\";\n\n/**\n * Denomination as found in the /keys response from the exchange.\n */\nexport class ExchangeDenomination {\n /**\n * Value of one coin of the denomination.\n */\n value: string;\n\n /**\n * Public signing key of the denomination.\n */\n denom_pub: DenominationPubKey;\n\n /**\n * Fee for withdrawing.\n */\n fee_withdraw: string;\n\n /**\n * Fee for depositing.\n */\n fee_deposit: string;\n\n /**\n * Fee for refreshing.\n */\n fee_refresh: string;\n\n /**\n * Fee for refunding.\n */\n fee_refund: string;\n\n /**\n * Start date from which withdraw is allowed.\n */\n stamp_start: TalerProtocolTimestamp;\n\n /**\n * End date for withdrawing.\n */\n stamp_expire_withdraw: TalerProtocolTimestamp;\n\n /**\n * Expiration date after which the exchange can forget about\n * the currency.\n */\n stamp_expire_legal: TalerProtocolTimestamp;\n\n /**\n * Date after which the coins of this denomination can't be\n * deposited anymore.\n */\n stamp_expire_deposit: TalerProtocolTimestamp;\n\n /**\n * Signature over the denomination information by the exchange's master\n * signing key.\n */\n master_sig: string;\n}\n\n/**\n * Signature by the auditor that a particular denomination key is audited.\n */\nexport class AuditorDenomSig {\n /**\n * Denomination public key's hash.\n */\n denom_pub_h: string;\n\n /**\n * The signature.\n */\n auditor_sig: string;\n}\n\n/**\n * Auditor information as given by the exchange in /keys.\n */\nexport class ExchangeAuditor {\n /**\n * Auditor's public key.\n */\n auditor_pub: string;\n\n /**\n * Base URL of the auditor.\n */\n auditor_url: string;\n\n /**\n * List of signatures for denominations by the auditor.\n */\n denomination_keys: AuditorDenomSig[];\n}\n\nexport type ExchangeWithdrawValue =\n | ExchangeRsaWithdrawValue\n | ExchangeCsWithdrawValue;\n\nexport interface ExchangeRsaWithdrawValue {\n cipher: \"RSA\";\n}\n\nexport interface ExchangeCsWithdrawValue {\n cipher: \"CS\";\n\n /**\n * CSR R0 value\n */\n r_pub_0: string;\n\n /**\n * CSR R1 value\n */\n r_pub_1: string;\n}\n\nexport interface RecoupRequest {\n /**\n * Hashed denomination public key of the coin we want to get\n * paid back.\n */\n denom_pub_hash: string;\n\n /**\n * Signature over the coin public key by the denomination.\n *\n * The string variant is for the legacy exchange protocol.\n */\n denom_sig: UnblindedSignature;\n\n /**\n * Blinding key that was used during withdraw,\n * used to prove that we were actually withdrawing the coin.\n */\n coin_blind_key_secret: string;\n\n /**\n * Signature of TALER_RecoupRequestPS created with the coin's private key.\n */\n coin_sig: string;\n\n ewv: ExchangeWithdrawValue;\n}\n\nexport interface RecoupRefreshRequest {\n /**\n * Hashed enomination public key of the coin we want to get\n * paid back.\n */\n denom_pub_hash: string;\n\n /**\n * Signature over the coin public key by the denomination.\n *\n * The string variant is for the legacy exchange protocol.\n */\n denom_sig: UnblindedSignature;\n\n /**\n * Coin's blinding factor.\n */\n coin_blind_key_secret: string;\n\n /**\n * Signature of TALER_RecoupRefreshRequestPS created with\n * the coin's private key.\n */\n coin_sig: string;\n\n ewv: ExchangeWithdrawValue;\n}\n\n/**\n * Response that we get from the exchange for a payback request.\n */\nexport interface RecoupConfirmation {\n /**\n * Public key of the reserve that will receive the payback.\n */\n reserve_pub?: string;\n\n /**\n * Public key of the old coin that will receive the recoup,\n * provided if refreshed was true.\n */\n old_coin_pub?: string;\n}\n\nexport type UnblindedSignature = RsaUnblindedSignature;\n\nexport interface RsaUnblindedSignature {\n cipher: DenomKeyType.Rsa;\n rsa_signature: string;\n}\n\n/**\n * Deposit permission for a single coin.\n */\nexport interface CoinDepositPermission {\n /**\n * Signature by the coin.\n */\n coin_sig: string;\n\n /**\n * Public key of the coin being spend.\n */\n coin_pub: string;\n\n /**\n * Signature made by the denomination public key.\n *\n * The string variant is for legacy protocol support.\n */\n\n ub_sig: UnblindedSignature;\n\n /**\n * The denomination public key associated with this coin.\n */\n h_denom: string;\n\n /**\n * The amount that is subtracted from this coin with this payment.\n */\n contribution: string;\n\n /**\n * URL of the exchange this coin was withdrawn from.\n */\n exchange_url: string;\n\n minimum_age_sig?: EddsaSignatureString;\n\n age_commitment?: Edx25519PublicKeyEnc[];\n\n h_age_commitment?: string;\n}\n\n/**\n * Information about an exchange as stored inside a\n * merchant's contract terms.\n */\nexport interface ExchangeHandle {\n /**\n * Master public signing key of the exchange.\n */\n master_pub: string;\n\n /**\n * Base URL of the exchange.\n */\n url: string;\n}\n\nexport interface AuditorHandle {\n /**\n * Official name of the auditor.\n */\n name: string;\n\n /**\n * Master public signing key of the auditor.\n */\n auditor_pub: string;\n\n /**\n * Base URL of the auditor.\n */\n url: string;\n}\n\n// Delivery location, loosely modeled as a subset of\n// ISO20022's PostalAddress25.\nexport interface Location {\n // Nation with its own government.\n country?: string;\n\n // Identifies a subdivision of a country such as state, region, county.\n country_subdivision?: string;\n\n // Identifies a subdivision within a country sub-division.\n district?: string;\n\n // Name of a built-up area, with defined boundaries, and a local government.\n town?: string;\n\n // Specific location name within the town.\n town_location?: string;\n\n // Identifier consisting of a group of letters and/or numbers that\n // is added to a postal address to assist the sorting of mail.\n post_code?: string;\n\n // Name of a street or thoroughfare.\n street?: string;\n\n // Name of the building or house.\n building_name?: string;\n\n // Number that identifies the position of a building on a street.\n building_number?: string;\n\n // Free-form address lines, should not exceed 7 elements.\n address_lines?: string[];\n}\n\nexport interface MerchantInfo {\n name: string;\n jurisdiction?: Location;\n address?: Location;\n logo?: string;\n website?: string;\n email?: string;\n}\n\nexport interface Tax {\n // the name of the tax\n name: string;\n\n // amount paid in tax\n tax: AmountString;\n}\n\nexport interface Product {\n // merchant-internal identifier for the product.\n product_id?: string;\n\n // Human-readable product description.\n description: string;\n\n // Map from IETF BCP 47 language tags to localized descriptions\n description_i18n?: { [lang_tag: string]: string };\n\n // The number of units of the product to deliver to the customer.\n quantity?: number;\n\n // The unit in which the product is measured (liters, kilograms, packages, etc.)\n unit?: string;\n\n // The price of the product; this is the total price for quantity times unit of this product.\n price?: AmountString;\n\n // An optional base64-encoded product image\n image?: string;\n\n // a list of taxes paid by the merchant for this product. Can be empty.\n taxes?: Tax[];\n\n // time indicating when this product should be delivered\n delivery_date?: TalerProtocolTimestamp;\n}\n\nexport interface InternationalizedString {\n [lang_tag: string]: string;\n}\n\n/**\n * Contract terms from a merchant.\n * FIXME: Add type field!\n */\nexport interface MerchantContractTerms {\n /**\n * Hash of the merchant's wire details.\n */\n h_wire: string;\n\n /**\n * Hash of the merchant's wire details.\n */\n auto_refund?: TalerProtocolDuration;\n\n /**\n * Wire method the merchant wants to use.\n */\n wire_method: string;\n\n /**\n * Human-readable short summary of the contract.\n */\n summary: string;\n\n summary_i18n?: InternationalizedString;\n\n /**\n * Nonce used to ensure freshness.\n */\n nonce: string;\n\n /**\n * Total amount payable.\n */\n amount: string;\n\n /**\n * Auditors accepted by the merchant.\n */\n auditors: AuditorHandle[];\n\n /**\n * Deadline to pay for the contract.\n */\n pay_deadline: TalerProtocolTimestamp;\n\n /**\n * Maximum deposit fee covered by the merchant.\n */\n max_fee: string;\n\n /**\n * Information about the merchant.\n */\n merchant: MerchantInfo;\n\n /**\n * Public key of the merchant.\n */\n merchant_pub: string;\n\n /**\n * Time indicating when the order should be delivered.\n * May be overwritten by individual products.\n */\n delivery_date?: TalerProtocolTimestamp;\n\n /**\n * Delivery location for (all!) products.\n */\n delivery_location?: Location;\n\n /**\n * List of accepted exchanges.\n */\n exchanges: ExchangeHandle[];\n\n /**\n * Products that are sold in this contract.\n */\n products?: Product[];\n\n /**\n * Deadline for refunds.\n */\n refund_deadline: TalerProtocolTimestamp;\n\n /**\n * Deadline for the wire transfer.\n */\n wire_transfer_deadline: TalerProtocolTimestamp;\n\n /**\n * Time when the contract was generated by the merchant.\n */\n timestamp: TalerProtocolTimestamp;\n\n /**\n * Order id to uniquely identify the purchase within\n * one merchant instance.\n */\n order_id: string;\n\n /**\n * Base URL of the merchant's backend.\n */\n merchant_base_url: string;\n\n /**\n * Fulfillment URL to view the product or\n * delivery status.\n */\n fulfillment_url?: string;\n\n /**\n * URL meant to share the shopping cart.\n */\n public_reorder_url?: string;\n\n /**\n * Plain text fulfillment message in the merchant's default language.\n */\n fulfillment_message?: string;\n\n /**\n * Internationalized fulfillment messages.\n */\n fulfillment_message_i18n?: InternationalizedString;\n\n /**\n * Share of the wire fee that must be settled with one payment.\n */\n wire_fee_amortization?: number;\n\n /**\n * Maximum wire fee that the merchant agrees to pay for.\n */\n max_wire_fee?: string;\n\n minimum_age?: number;\n\n /**\n * Extra data, interpreted by the mechant only.\n */\n extra?: any;\n}\n\n/**\n * Refund permission in the format that the merchant gives it to us.\n */\nexport interface MerchantAbortPayRefundDetails {\n /**\n * Amount to be refunded.\n */\n refund_amount: string;\n\n /**\n * Fee for the refund.\n */\n refund_fee: string;\n\n /**\n * Public key of the coin being refunded.\n */\n coin_pub: string;\n\n /**\n * Refund transaction ID between merchant and exchange.\n */\n rtransaction_id: number;\n\n /**\n * Exchange's key used for the signature.\n */\n exchange_pub?: string;\n\n /**\n * Exchange's signature to confirm the refund.\n */\n exchange_sig?: string;\n\n /**\n * Error replay from the exchange (if any).\n */\n exchange_reply?: any;\n\n /**\n * Error code from the exchange (if any).\n */\n exchange_code?: number;\n\n /**\n * HTTP status code of the exchange's response\n * to the merchant's refund request.\n */\n exchange_http_status: number;\n}\n\n/**\n * Response for a refund pickup or a /pay in abort mode.\n */\nexport interface MerchantRefundResponse {\n /**\n * Public key of the merchant\n */\n merchant_pub: string;\n\n /**\n * Contract terms hash of the contract that\n * is being refunded.\n */\n h_contract_terms: string;\n\n /**\n * The signed refund permissions, to be sent to the exchange.\n */\n refunds: MerchantAbortPayRefundDetails[];\n}\n\n/**\n * Planchet detail sent to the merchant.\n */\nexport interface TipPlanchetDetail {\n /**\n * Hashed denomination public key.\n */\n denom_pub_hash: string;\n\n /**\n * Coin's blinded public key.\n */\n coin_ev: CoinEnvelope;\n}\n\n/**\n * Request sent to the merchant to pick up a tip.\n */\nexport interface TipPickupRequest {\n /**\n * Identifier of the tip.\n */\n tip_id: string;\n\n /**\n * List of planchets the wallet wants to use for the tip.\n */\n planchets: TipPlanchetDetail[];\n}\n\n/**\n * Reserve signature, defined as separate class to facilitate\n * schema validation.\n */\nexport interface MerchantBlindSigWrapperV1 {\n /**\n * Reserve signature.\n */\n blind_sig: string;\n}\n\n/**\n * Response of the merchant\n * to the TipPickupRequest.\n */\nexport interface MerchantTipResponseV1 {\n /**\n * The order of the signatures matches the planchets list.\n */\n blind_sigs: MerchantBlindSigWrapperV1[];\n}\n\nexport interface MerchantBlindSigWrapperV2 {\n blind_sig: BlindedDenominationSignature;\n}\n\n/**\n * Response of the merchant\n * to the TipPickupRequest.\n */\nexport interface MerchantTipResponseV2 {\n /**\n * The order of the signatures matches the planchets list.\n */\n blind_sigs: MerchantBlindSigWrapperV2[];\n}\n\n/**\n * Element of the payback list that the\n * exchange gives us in /keys.\n */\nexport class Recoup {\n /**\n * The hash of the denomination public key for which the payback is offered.\n */\n h_denom_pub: string;\n}\n\n/**\n * Structure of one exchange signing key in the /keys response.\n */\nexport class ExchangeSignKeyJson {\n stamp_start: TalerProtocolTimestamp;\n stamp_expire: TalerProtocolTimestamp;\n stamp_end: TalerProtocolTimestamp;\n key: EddsaPublicKeyString;\n master_sig: EddsaSignatureString;\n}\n\n/**\n * Structure that the exchange gives us in /keys.\n */\nexport class ExchangeKeysJson {\n /**\n * List of offered denominations.\n */\n denoms: ExchangeDenomination[];\n\n /**\n * The exchange's master public key.\n */\n master_public_key: string;\n\n /**\n * The list of auditors (partially) auditing the exchange.\n */\n auditors: ExchangeAuditor[];\n\n /**\n * Timestamp when this response was issued.\n */\n list_issue_date: TalerProtocolTimestamp;\n\n /**\n * List of revoked denominations.\n */\n recoup?: Recoup[];\n\n /**\n * Short-lived signing keys used to sign online\n * responses.\n */\n signkeys: ExchangeSignKeyJson[];\n\n /**\n * Protocol version.\n */\n version: string;\n\n reserve_closing_delay: TalerProtocolDuration;\n\n global_fees: GlobalFees[];\n}\n\nexport interface GlobalFees {\n // What date (inclusive) does these fees go into effect?\n start_date: TalerProtocolTimestamp;\n\n // What date (exclusive) does this fees stop going into effect?\n end_date: TalerProtocolTimestamp;\n\n // Account history fee, charged when a user wants to\n // obtain a reserve/account history.\n history_fee: AmountString;\n\n // Annual fee charged for having an open account at the\n // exchange. Charged to the account. If the account\n // balance is insufficient to cover this fee, the account\n // is automatically deleted/closed. (Note that the exchange\n // will keep the account history around for longer for\n // regulatory reasons.)\n account_fee: AmountString;\n\n // Purse fee, charged only if a purse is abandoned\n // and was not covered by the account limit.\n purse_fee: AmountString;\n\n // How long will the exchange preserve the account history?\n // After an account was deleted/closed, the exchange will\n // retain the account history for legal reasons until this time.\n history_expiration: TalerProtocolDuration;\n\n // Non-negative number of concurrent purses that any\n // account holder is allowed to create without having\n // to pay the purse_fee.\n purse_account_limit: number;\n\n // How long does an exchange keep a purse around after a purse\n // has expired (or been successfully merged)? A 'GET' request\n // for a purse will succeed until the purse expiration time\n // plus this value.\n purse_timeout: TalerProtocolDuration;\n\n // Signature of TALER_GlobalFeesPS.\n master_sig: string;\n}\n/**\n * Wire fees as announced by the exchange.\n */\nexport class WireFeesJson {\n /**\n * Cost of a wire transfer.\n */\n wire_fee: string;\n\n /**\n * Cost of clising a reserve.\n */\n closing_fee: string;\n\n /**\n * Signature made with the exchange's master key.\n */\n sig: string;\n\n /**\n * Date from which the fee applies.\n */\n start_date: TalerProtocolTimestamp;\n\n /**\n * Data after which the fee doesn't apply anymore.\n */\n end_date: TalerProtocolTimestamp;\n}\n\nexport interface AccountInfo {\n payto_uri: string;\n master_sig: string;\n}\n\nexport interface ExchangeWireJson {\n accounts: AccountInfo[];\n fees: { [methodName: string]: WireFeesJson[] };\n}\n\n/**\n * Proposal returned from the contract URL.\n */\nexport class Proposal {\n /**\n * Contract terms for the propoal.\n * Raw, un-decoded JSON object.\n */\n contract_terms: any;\n\n /**\n * Signature over contract, made by the merchant. The public key used for signing\n * must be contract_terms.merchant_pub.\n */\n sig: string;\n}\n\n/**\n * Response from the internal merchant API.\n */\nexport class CheckPaymentResponse {\n order_status: string;\n refunded: boolean | undefined;\n refunded_amount: string | undefined;\n contract_terms: any | undefined;\n taler_pay_uri: string | undefined;\n contract_url: string | undefined;\n}\n\n/**\n * Response from the bank.\n */\nexport class WithdrawOperationStatusResponse {\n selection_done: boolean;\n\n transfer_done: boolean;\n\n aborted: boolean;\n\n amount: string;\n\n sender_wire?: string;\n\n suggested_exchange?: string;\n\n confirm_transfer_url?: string;\n\n wire_types: string[];\n}\n\n/**\n * Response from the merchant.\n */\nexport class TipPickupGetResponse {\n tip_amount: string;\n\n exchange_url: string;\n\n next_url?: string;\n\n expiration: TalerProtocolTimestamp;\n}\n\nexport enum DenomKeyType {\n Rsa = \"RSA\",\n ClauseSchnorr = \"CS\",\n}\n\nexport namespace DenomKeyType {\n export function toIntTag(t: DenomKeyType): number {\n switch (t) {\n case DenomKeyType.Rsa:\n return 1;\n case DenomKeyType.ClauseSchnorr:\n return 2;\n }\n }\n}\n\nexport interface RsaBlindedDenominationSignature {\n cipher: DenomKeyType.Rsa;\n blinded_rsa_signature: string;\n}\n\nexport interface CSBlindedDenominationSignature {\n cipher: DenomKeyType.ClauseSchnorr;\n}\n\nexport type BlindedDenominationSignature =\n | RsaBlindedDenominationSignature\n | CSBlindedDenominationSignature;\n\nexport const codecForRsaBlindedDenominationSignature = () =>\n buildCodecForObject<RsaBlindedDenominationSignature>()\n .property(\"cipher\", codecForConstString(DenomKeyType.Rsa))\n .property(\"blinded_rsa_signature\", codecForString())\n .build(\"RsaBlindedDenominationSignature\");\n\nexport const codecForBlindedDenominationSignature = () =>\n buildCodecForUnion<BlindedDenominationSignature>()\n .discriminateOn(\"cipher\")\n .alternative(DenomKeyType.Rsa, codecForRsaBlindedDenominationSignature())\n .build(\"BlindedDenominationSignature\");\n\nexport class ExchangeWithdrawResponse {\n ev_sig: BlindedDenominationSignature;\n}\n\nexport class ExchangeWithdrawBatchResponse {\n ev_sigs: ExchangeWithdrawResponse[];\n}\n\nexport interface MerchantPayResponse {\n sig: string;\n}\n\nexport interface ExchangeMeltRequest {\n coin_pub: CoinPublicKeyString;\n confirm_sig: EddsaSignatureString;\n denom_pub_hash: HashCodeString;\n denom_sig: UnblindedSignature;\n rc: string;\n value_with_fee: AmountString;\n age_commitment_hash?: HashCodeString;\n}\n\nexport interface ExchangeMeltResponse {\n /**\n * Which of the kappa indices does the client not have to reveal.\n */\n noreveal_index: number;\n\n /**\n * Signature of TALER_RefreshMeltConfirmationPS whereby the exchange\n * affirms the successful melt and confirming the noreveal_index\n */\n exchange_sig: EddsaSignatureString;\n\n /*\n * public EdDSA key of the exchange that was used to generate the signature.\n * Should match one of the exchange's signing keys from /keys. Again given\n * explicitly as the client might otherwise be confused by clock skew as to\n * which signing key was used.\n */\n exchange_pub: EddsaPublicKeyString;\n\n /*\n * Base URL to use for operations on the refresh context\n * (so the reveal operation). If not given,\n * the base URL is the same as the one used for this request.\n * Can be used if the base URL for /refreshes/ differs from that\n * for /coins/, i.e. for load balancing. Clients SHOULD\n * respect the refresh_base_url if provided. Any HTTP server\n * belonging to an exchange MUST generate a 307 or 308 redirection\n * to the correct base URL should a client uses the wrong base\n * URL, or if the base URL has changed since the melt.\n *\n * When melting the same coin twice (technically allowed\n * as the response might have been lost on the network),\n * the exchange may return different values for the refresh_base_url.\n */\n refresh_base_url?: string;\n}\n\nexport interface ExchangeRevealItem {\n ev_sig: BlindedDenominationSignature;\n}\n\nexport interface ExchangeRevealResponse {\n // List of the exchange's blinded RSA signatures on the new coins.\n ev_sigs: ExchangeRevealItem[];\n}\n\ninterface MerchantOrderStatusPaid {\n // Was the payment refunded (even partially, via refund or abort)?\n refunded: boolean;\n\n // Is any amount of the refund still waiting to be picked up (even partially)?\n refund_pending: boolean;\n\n // Amount that was refunded in total.\n refund_amount: AmountString;\n\n // Amount that already taken by the wallet.\n refund_taken: AmountString;\n}\n\ninterface MerchantOrderRefundResponse {\n /**\n * Amount that was refunded in total.\n */\n refund_amount: AmountString;\n\n /**\n * Successful refunds for this payment, empty array for none.\n */\n refunds: MerchantCoinRefundStatus[];\n\n /**\n * Public key of the merchant.\n */\n merchant_pub: EddsaPublicKeyString;\n}\n\nexport type MerchantCoinRefundStatus =\n | MerchantCoinRefundSuccessStatus\n | MerchantCoinRefundFailureStatus;\n\nexport interface MerchantCoinRefundSuccessStatus {\n type: \"success\";\n\n // HTTP status of the exchange request, 200 (integer) required for refund confirmations.\n exchange_status: 200;\n\n // the EdDSA :ref:signature (binary-only) with purpose\n // TALER_SIGNATURE_EXCHANGE_CONFIRM_REFUND using a current signing key of the\n // exchange affirming the successful refund\n exchange_sig: EddsaSignatureString;\n\n // public EdDSA key of the exchange that was used to generate the signature.\n // Should match one of the exchange's signing keys from /keys. It is given\n // explicitly as the client might otherwise be confused by clock skew as to\n // which signing key was used.\n exchange_pub: EddsaPublicKeyString;\n\n // Refund transaction ID.\n rtransaction_id: number;\n\n // public key of a coin that was refunded\n coin_pub: EddsaPublicKeyString;\n\n // Amount that was refunded, including refund fee charged by the exchange\n // to the customer.\n refund_amount: AmountString;\n\n execution_time: TalerProtocolTimestamp;\n}\n\nexport interface MerchantCoinRefundFailureStatus {\n type: \"failure\";\n\n // HTTP status of the exchange request, must NOT be 200.\n exchange_status: number;\n\n // Taler error code from the exchange reply, if available.\n exchange_code?: number;\n\n // If available, HTTP reply from the exchange.\n exchange_reply?: any;\n\n // Refund transaction ID.\n rtransaction_id: number;\n\n // public key of a coin that was refunded\n coin_pub: EddsaPublicKeyString;\n\n // Amount that was refunded, including refund fee charged by the exchange\n // to the customer.\n refund_amount: AmountString;\n\n execution_time: TalerProtocolTimestamp;\n}\n\nexport interface MerchantOrderStatusUnpaid {\n /**\n * URI that the wallet must process to complete the payment.\n */\n taler_pay_uri: string;\n\n /**\n * Alternative order ID which was paid for already in the same session.\n *\n * Only given if the same product was purchased before in the same session.\n */\n already_paid_order_id?: string;\n}\n\n/**\n * Response body for the following endpoint:\n *\n * POST {talerBankIntegrationApi}/withdrawal-operation/{wopid}\n */\nexport interface BankWithdrawalOperationPostResponse {\n transfer_done: boolean;\n}\n\nexport type DenominationPubKey = RsaDenominationPubKey | CsDenominationPubKey;\n\nexport interface RsaDenominationPubKey {\n readonly cipher: DenomKeyType.Rsa;\n readonly rsa_public_key: string;\n readonly age_mask: number;\n}\n\nexport interface CsDenominationPubKey {\n readonly cipher: DenomKeyType.ClauseSchnorr;\n readonly age_mask: number;\n readonly cs_public_key: string;\n}\n\nexport namespace DenominationPubKey {\n export function cmp(\n p1: DenominationPubKey,\n p2: DenominationPubKey,\n ): -1 | 0 | 1 {\n if (p1.cipher < p2.cipher) {\n return -1;\n } else if (p1.cipher > p2.cipher) {\n return +1;\n } else if (\n p1.cipher === DenomKeyType.Rsa &&\n p2.cipher === DenomKeyType.Rsa\n ) {\n if ((p1.age_mask ?? 0) < (p2.age_mask ?? 0)) {\n return -1;\n } else if ((p1.age_mask ?? 0) > (p2.age_mask ?? 0)) {\n return 1;\n }\n return strcmp(p1.rsa_public_key, p2.rsa_public_key);\n } else if (\n p1.cipher === DenomKeyType.ClauseSchnorr &&\n p2.cipher === DenomKeyType.ClauseSchnorr\n ) {\n if ((p1.age_mask ?? 0) < (p2.age_mask ?? 0)) {\n return -1;\n } else if ((p1.age_mask ?? 0) > (p2.age_mask ?? 0)) {\n return 1;\n }\n return strcmp(p1.cs_public_key, p2.cs_public_key);\n } else {\n throw Error(\"unsupported cipher\");\n }\n }\n}\n\nexport const codecForRsaDenominationPubKey = () =>\n buildCodecForObject<RsaDenominationPubKey>()\n .property(\"cipher\", codecForConstString(DenomKeyType.Rsa))\n .property(\"rsa_public_key\", codecForString())\n .property(\"age_mask\", codecForNumber())\n .build(\"DenominationPubKey\");\n\nexport const codecForCsDenominationPubKey = () =>\n buildCodecForObject<CsDenominationPubKey>()\n .property(\"cipher\", codecForConstString(DenomKeyType.ClauseSchnorr))\n .property(\"cs_public_key\", codecForString())\n .property(\"age_mask\", codecForNumber())\n .build(\"CsDenominationPubKey\");\n\nexport const codecForDenominationPubKey = () =>\n buildCodecForUnion<DenominationPubKey>()\n .discriminateOn(\"cipher\")\n .alternative(DenomKeyType.Rsa, codecForRsaDenominationPubKey())\n .alternative(DenomKeyType.ClauseSchnorr, codecForCsDenominationPubKey())\n .build(\"DenominationPubKey\");\n\nexport const codecForBankWithdrawalOperationPostResponse =\n (): Codec<BankWithdrawalOperationPostResponse> =>\n buildCodecForObject<BankWithdrawalOperationPostResponse>()\n .property(\"transfer_done\", codecForBoolean())\n .build(\"BankWithdrawalOperationPostResponse\");\n\nexport type AmountString = string;\nexport type Base32String = string;\nexport type EddsaSignatureString = string;\nexport type EddsaPublicKeyString = string;\nexport type CoinPublicKeyString = string;\n\nexport const codecForDenomination = (): Codec<ExchangeDenomination> =>\n buildCodecForObject<ExchangeDenomination>()\n .property(\"value\", codecForString())\n .property(\"denom_pub\", codecForDenominationPubKey())\n .property(\"fee_withdraw\", codecForString())\n .property(\"fee_deposit\", codecForString())\n .property(\"fee_refresh\", codecForString())\n .property(\"fee_refund\", codecForString())\n .property(\"stamp_start\", codecForTimestamp)\n .property(\"stamp_expire_withdraw\", codecForTimestamp)\n .property(\"stamp_expire_legal\", codecForTimestamp)\n .property(\"stamp_expire_deposit\", codecForTimestamp)\n .property(\"master_sig\", codecForString())\n .build(\"Denomination\");\n\nexport const codecForAuditorDenomSig = (): Codec<AuditorDenomSig> =>\n buildCodecForObject<AuditorDenomSig>()\n .property(\"denom_pub_h\", codecForString())\n .property(\"auditor_sig\", codecForString())\n .build(\"AuditorDenomSig\");\n\nexport const codecForAuditor = (): Codec<ExchangeAuditor> =>\n buildCodecForObject<ExchangeAuditor>()\n .property(\"auditor_pub\", codecForString())\n .property(\"auditor_url\", codecForString())\n .property(\"denomination_keys\", codecForList(codecForAuditorDenomSig()))\n .build(\"Auditor\");\n\nexport const codecForExchangeHandle = (): Codec<ExchangeHandle> =>\n buildCodecForObject<ExchangeHandle>()\n .property(\"master_pub\", codecForString())\n .property(\"url\", codecForString())\n .build(\"ExchangeHandle\");\n\nexport const codecForAuditorHandle = (): Codec<AuditorHandle> =>\n buildCodecForObject<AuditorHandle>()\n .property(\"name\", codecForString())\n .property(\"auditor_pub\", codecForString())\n .property(\"url\", codecForString())\n .build(\"AuditorHandle\");\n\nexport const codecForLocation = (): Codec<Location> =>\n buildCodecForObject<Location>()\n .property(\"country\", codecOptional(codecForString()))\n .property(\"country_subdivision\", codecOptional(codecForString()))\n .property(\"building_name\", codecOptional(codecForString()))\n .property(\"building_number\", codecOptional(codecForString()))\n .property(\"district\", codecOptional(codecForString()))\n .property(\"street\", codecOptional(codecForString()))\n .property(\"post_code\", codecOptional(codecForString()))\n .property(\"town\", codecOptional(codecForString()))\n .property(\"town_location\", codecOptional(codecForString()))\n .property(\"address_lines\", codecOptional(codecForList(codecForString())))\n .build(\"Location\");\n\nexport const codecForMerchantInfo = (): Codec<MerchantInfo> =>\n buildCodecForObject<MerchantInfo>()\n .property(\"name\", codecForString())\n .property(\"address\", codecOptional(codecForLocation()))\n .property(\"jurisdiction\", codecOptional(codecForLocation()))\n .build(\"MerchantInfo\");\n\nexport const codecForTax = (): Codec<Tax> =>\n buildCodecForObject<Tax>()\n .property(\"name\", codecForString())\n .property(\"tax\", codecForString())\n .build(\"Tax\");\n\nexport const codecForInternationalizedString =\n (): Codec<InternationalizedString> => codecForMap(codecForString());\n\nexport const codecForProduct = (): Codec<Product> =>\n buildCodecForObject<Product>()\n .property(\"product_id\", codecOptional(codecForString()))\n .property(\"description\", codecForString())\n .property(\n \"description_i18n\",\n codecOptional(codecForInternationalizedString()),\n )\n .property(\"quantity\", codecOptional(codecForNumber()))\n .property(\"unit\", codecOptional(codecForString()))\n .property(\"price\", codecOptional(codecForString()))\n .build(\"Tax\");\n\nexport const codecForMerchantContractTerms = (): Codec<MerchantContractTerms> =>\n buildCodecForObject<MerchantContractTerms>()\n .property(\"order_id\", codecForString())\n .property(\"fulfillment_url\", codecOptional(codecForString()))\n .property(\"fulfillment_message\", codecOptional(codecForString()))\n .property(\n \"fulfillment_message_i18n\",\n codecOptional(codecForInternationalizedString()),\n )\n .property(\"merchant_base_url\", codecForString())\n .property(\"h_wire\", codecForString())\n .property(\"auto_refund\", codecOptional(codecForDuration))\n .property(\"wire_method\", codecForString())\n .property(\"summary\", codecForString())\n .property(\"summary_i18n\", codecOptional(codecForInternationalizedString()))\n .property(\"nonce\", codecForString())\n .property(\"amount\", codecForString())\n .property(\"auditors\", codecForList(codecForAuditorHandle()))\n .property(\"pay_deadline\", codecForTimestamp)\n .property(\"refund_deadline\", codecForTimestamp)\n .property(\"wire_transfer_deadline\", codecForTimestamp)\n .property(\"timestamp\", codecForTimestamp)\n .property(\"delivery_location\", codecOptional(codecForLocation()))\n .property(\"delivery_date\", codecOptional(codecForTimestamp))\n .property(\"max_fee\", codecForString())\n .property(\"max_wire_fee\", codecOptional(codecForString()))\n .property(\"merchant\", codecForMerchantInfo())\n .property(\"merchant_pub\", codecForString())\n .property(\"exchanges\", codecForList(codecForExchangeHandle()))\n .property(\"products\", codecOptional(codecForList(codecForProduct())))\n .property(\"extra\", codecForAny())\n .property(\"minimum_age\", codecOptional(codecForNumber()))\n .build(\"MerchantContractTerms\");\n\nexport const codecForPeerContractTerms = (): Codec<PeerContractTerms> =>\n buildCodecForObject<PeerContractTerms>()\n .property(\"summary\", codecForString())\n .property(\"amount\", codecForString())\n .property(\"purse_expiration\", codecForTimestamp)\n .build(\"PeerContractTerms\");\n\nexport const codecForMerchantRefundPermission =\n (): Codec<MerchantAbortPayRefundDetails> =>\n buildCodecForObject<MerchantAbortPayRefundDetails>()\n .property(\"refund_amount\", codecForAmountString())\n .property(\"refund_fee\", codecForAmountString())\n .property(\"coin_pub\", codecForString())\n .property(\"rtransaction_id\", codecForNumber())\n .property(\"exchange_http_status\", codecForNumber())\n .property(\"exchange_code\", codecOptional(codecForNumber()))\n .property(\"exchange_reply\", codecOptional(codecForAny()))\n .property(\"exchange_sig\", codecOptional(codecForString()))\n .property(\"exchange_pub\", codecOptional(codecForString()))\n .build(\"MerchantRefundPermission\");\n\nexport const codecForMerchantRefundResponse =\n (): Codec<MerchantRefundResponse> =>\n buildCodecForObject<MerchantRefundResponse>()\n .property(\"merchant_pub\", codecForString())\n .property(\"h_contract_terms\", codecForString())\n .property(\"refunds\", codecForList(codecForMerchantRefundPermission()))\n .build(\"MerchantRefundResponse\");\n\nexport const codecForBlindSigWrapperV2 = (): Codec<MerchantBlindSigWrapperV2> =>\n buildCodecForObject<MerchantBlindSigWrapperV2>()\n .property(\"blind_sig\", codecForBlindedDenominationSignature())\n .build(\"MerchantBlindSigWrapperV2\");\n\nexport const codecForMerchantTipResponseV2 = (): Codec<MerchantTipResponseV2> =>\n buildCodecForObject<MerchantTipResponseV2>()\n .property(\"blind_sigs\", codecForList(codecForBlindSigWrapperV2()))\n .build(\"MerchantTipResponseV2\");\n\nexport const codecForRecoup = (): Codec<Recoup> =>\n buildCodecForObject<Recoup>()\n .property(\"h_denom_pub\", codecForString())\n .build(\"Recoup\");\n\nexport const codecForExchangeSigningKey = (): Codec<ExchangeSignKeyJson> =>\n buildCodecForObject<ExchangeSignKeyJson>()\n .property(\"key\", codecForString())\n .property(\"master_sig\", codecForString())\n .property(\"stamp_end\", codecForTimestamp)\n .property(\"stamp_start\", codecForTimestamp)\n .property(\"stamp_expire\", codecForTimestamp)\n .build(\"ExchangeSignKeyJson\");\n\nexport const codecForGlobalFees = (): Codec<GlobalFees> =>\n buildCodecForObject<GlobalFees>()\n .property(\"start_date\", codecForTimestamp)\n .property(\"end_date\", codecForTimestamp)\n .property(\"history_fee\", codecForAmountString())\n .property(\"account_fee\", codecForAmountString())\n .property(\"purse_fee\", codecForAmountString())\n .property(\"history_expiration\", codecForDuration)\n .property(\"purse_account_limit\", codecForNumber())\n .property(\"purse_timeout\", codecForDuration)\n .property(\"master_sig\", codecForString())\n .build(\"GlobalFees\");\n\nexport const codecForExchangeKeysJson = (): Codec<ExchangeKeysJson> =>\n buildCodecForObject<ExchangeKeysJson>()\n .property(\"denoms\", codecForList(codecForDenomination()))\n .property(\"master_public_key\", codecForString())\n .property(\"auditors\", codecForList(codecForAuditor()))\n .property(\"list_issue_date\", codecForTimestamp)\n .property(\"recoup\", codecOptional(codecForList(codecForRecoup())))\n .property(\"signkeys\", codecForList(codecForExchangeSigningKey()))\n .property(\"version\", codecForString())\n .property(\"reserve_closing_delay\", codecForDuration)\n .property(\"global_fees\", codecForList(codecForGlobalFees()))\n .build(\"ExchangeKeysJson\");\n\nexport const codecForWireFeesJson = (): Codec<WireFeesJson> =>\n buildCodecForObject<WireFeesJson>()\n .property(\"wire_fee\", codecForString())\n .property(\"closing_fee\", codecForString())\n .property(\"sig\", codecForString())\n .property(\"start_date\", codecForTimestamp)\n .property(\"end_date\", codecForTimestamp)\n .build(\"WireFeesJson\");\n\nexport const codecForAccountInfo = (): Codec<AccountInfo> =>\n buildCodecForObject<AccountInfo>()\n .property(\"payto_uri\", codecForString())\n .property(\"master_sig\", codecForString())\n .build(\"AccountInfo\");\n\nexport const codecForExchangeWireJson = (): Codec<ExchangeWireJson> =>\n buildCodecForObject<ExchangeWireJson>()\n .property(\"accounts\", codecForList(codecForAccountInfo()))\n .property(\"fees\", codecForMap(codecForList(codecForWireFeesJson())))\n .build(\"ExchangeWireJson\");\n\nexport const codecForProposal = (): Codec<Proposal> =>\n buildCodecForObject<Proposal>()\n .property(\"contract_terms\", codecForAny())\n .property(\"sig\", codecForString())\n .build(\"Proposal\");\n\nexport const codecForCheckPaymentResponse = (): Codec<CheckPaymentResponse> =>\n buildCodecForObject<CheckPaymentResponse>()\n .property(\"order_status\", codecForString())\n .property(\"refunded\", codecOptional(codecForBoolean()))\n .property(\"refunded_amount\", codecOptional(codecForString()))\n .property(\"contract_terms\", codecOptional(codecForAny()))\n .property(\"taler_pay_uri\", codecOptional(codecForString()))\n .property(\"contract_url\", codecOptional(codecForString()))\n .build(\"CheckPaymentResponse\");\n\nexport const codecForWithdrawOperationStatusResponse =\n (): Codec<WithdrawOperationStatusResponse> =>\n buildCodecForObject<WithdrawOperationStatusResponse>()\n .property(\"selection_done\", codecForBoolean())\n .property(\"transfer_done\", codecForBoolean())\n .property(\"aborted\", codecForBoolean())\n .property(\"amount\", codecForString())\n .property(\"sender_wire\", codecOptional(codecForString()))\n .property(\"suggested_exchange\", codecOptional(codecForString()))\n .property(\"confirm_transfer_url\", codecOptional(codecForString()))\n .property(\"wire_types\", codecForList(codecForString()))\n .build(\"WithdrawOperationStatusResponse\");\n\nexport const codecForTipPickupGetResponse = (): Codec<TipPickupGetResponse> =>\n buildCodecForObject<TipPickupGetResponse>()\n .property(\"tip_amount\", codecForString())\n .property(\"exchange_url\", codecForString())\n .property(\"next_url\", codecOptional(codecForString()))\n .property(\"expiration\", codecForTimestamp)\n .build(\"TipPickupGetResponse\");\n\nexport const codecForRecoupConfirmation = (): Codec<RecoupConfirmation> =>\n buildCodecForObject<RecoupConfirmation>()\n .property(\"reserve_pub\", codecOptional(codecForString()))\n .property(\"old_coin_pub\", codecOptional(codecForString()))\n .build(\"RecoupConfirmation\");\n\nexport const codecForWithdrawResponse = (): Codec<ExchangeWithdrawResponse> =>\n buildCodecForObject<ExchangeWithdrawResponse>()\n .property(\"ev_sig\", codecForBlindedDenominationSignature())\n .build(\"WithdrawResponse\");\n\nexport const codecForWithdrawBatchResponse =\n (): Codec<ExchangeWithdrawBatchResponse> =>\n buildCodecForObject<ExchangeWithdrawBatchResponse>()\n .property(\"ev_sigs\", codecForList(codecForWithdrawResponse()))\n .build(\"WithdrawBatchResponse\");\n\nexport const codecForMerchantPayResponse = (): Codec<MerchantPayResponse> =>\n buildCodecForObject<MerchantPayResponse>()\n .property(\"sig\", codecForString())\n .build(\"MerchantPayResponse\");\n\nexport const codecForExchangeMeltResponse = (): Codec<ExchangeMeltResponse> =>\n buildCodecForObject<ExchangeMeltResponse>()\n .property(\"exchange_pub\", codecForString())\n .property(\"exchange_sig\", codecForString())\n .property(\"noreveal_index\", codecForNumber())\n .property(\"refresh_base_url\", codecOptional(codecForString()))\n .build(\"ExchangeMeltResponse\");\n\nexport const codecForExchangeRevealItem = (): Codec<ExchangeRevealItem> =>\n buildCodecForObject<ExchangeRevealItem>()\n .property(\"ev_sig\", codecForBlindedDenominationSignature())\n .build(\"ExchangeRevealItem\");\n\nexport const codecForExchangeRevealResponse =\n (): Codec<ExchangeRevealResponse> =>\n buildCodecForObject<ExchangeRevealResponse>()\n .property(\"ev_sigs\", codecForList(codecForExchangeRevealItem()))\n .build(\"ExchangeRevealResponse\");\n\nexport const codecForMerchantCoinRefundSuccessStatus =\n (): Codec<MerchantCoinRefundSuccessStatus> =>\n buildCodecForObject<MerchantCoinRefundSuccessStatus>()\n .property(\"type\", codecForConstString(\"success\"))\n .property(\"coin_pub\", codecForString())\n .property(\"exchange_status\", codecForConstNumber(200))\n .property(\"exchange_sig\", codecForString())\n .property(\"rtransaction_id\", codecForNumber())\n .property(\"refund_amount\", codecForString())\n .property(\"exchange_pub\", codecForString())\n .property(\"execution_time\", codecForTimestamp)\n .build(\"MerchantCoinRefundSuccessStatus\");\n\nexport const codecForMerchantCoinRefundFailureStatus =\n (): Codec<MerchantCoinRefundFailureStatus> =>\n buildCodecForObject<MerchantCoinRefundFailureStatus>()\n .property(\"type\", codecForConstString(\"failure\"))\n .property(\"coin_pub\", codecForString())\n .property(\"exchange_status\", codecForNumber())\n .property(\"rtransaction_id\", codecForNumber())\n .property(\"refund_amount\", codecForString())\n .property(\"exchange_code\", codecOptional(codecForNumber()))\n .property(\"exchange_reply\", codecOptional(codecForAny()))\n .property(\"execution_time\", codecForTimestamp)\n .build(\"MerchantCoinRefundFailureStatus\");\n\nexport const codecForMerchantCoinRefundStatus =\n (): Codec<MerchantCoinRefundStatus> =>\n buildCodecForUnion<MerchantCoinRefundStatus>()\n .discriminateOn(\"type\")\n .alternative(\"success\", codecForMerchantCoinRefundSuccessStatus())\n .alternative(\"failure\", codecForMerchantCoinRefundFailureStatus())\n .build(\"MerchantCoinRefundStatus\");\n\nexport const codecForMerchantOrderStatusPaid =\n (): Codec<MerchantOrderStatusPaid> =>\n buildCodecForObject<MerchantOrderStatusPaid>()\n .property(\"refund_amount\", codecForString())\n .property(\"refund_taken\", codecForString())\n .property(\"refund_pending\", codecForBoolean())\n .property(\"refunded\", codecForBoolean())\n .build(\"MerchantOrderStatusPaid\");\n\nexport const codecForMerchantOrderRefundPickupResponse =\n (): Codec<MerchantOrderRefundResponse> =>\n buildCodecForObject<MerchantOrderRefundResponse>()\n .property(\"merchant_pub\", codecForString())\n .property(\"refund_amount\", codecForString())\n .property(\"refunds\", codecForList(codecForMerchantCoinRefundStatus()))\n .build(\"MerchantOrderRefundPickupResponse\");\n\nexport const codecForMerchantOrderStatusUnpaid =\n (): Codec<MerchantOrderStatusUnpaid> =>\n buildCodecForObject<MerchantOrderStatusUnpaid>()\n .property(\"taler_pay_uri\", codecForString())\n .property(\"already_paid_order_id\", codecOptional(codecForString()))\n .build(\"MerchantOrderStatusUnpaid\");\n\nexport interface AbortRequest {\n // hash of the order's contract terms (this is used to authenticate the\n // wallet/customer in case $ORDER_ID is guessable).\n h_contract: string;\n\n // List of coins the wallet would like to see refunds for.\n // (Should be limited to the coins for which the original\n // payment succeeded, as far as the wallet knows.)\n coins: AbortingCoin[];\n}\n\nexport interface AbortingCoin {\n // Public key of a coin for which the wallet is requesting an abort-related refund.\n coin_pub: EddsaPublicKeyString;\n\n // The amount to be refunded (matches the original contribution)\n contribution: AmountString;\n\n // URL of the exchange this coin was withdrawn from.\n exchange_url: string;\n}\n\nexport interface AbortResponse {\n // List of refund responses about the coins that the wallet\n // requested an abort for. In the same order as the 'coins'\n // from the original request.\n // The rtransaction_id is implied to be 0.\n refunds: MerchantAbortPayRefundStatus[];\n}\n\nexport const codecForMerchantAbortPayRefundSuccessStatus =\n (): Codec<MerchantAbortPayRefundSuccessStatus> =>\n buildCodecForObject<MerchantAbortPayRefundSuccessStatus>()\n .property(\"exchange_pub\", codecForString())\n .property(\"exchange_sig\", codecForString())\n .property(\"exchange_status\", codecForConstNumber(200))\n .property(\"type\", codecForConstString(\"success\"))\n .build(\"MerchantAbortPayRefundSuccessStatus\");\n\nexport const codecForMerchantAbortPayRefundFailureStatus =\n (): Codec<MerchantAbortPayRefundFailureStatus> =>\n buildCodecForObject<MerchantAbortPayRefundFailureStatus>()\n .property(\"exchange_code\", codecForNumber())\n .property(\"exchange_reply\", codecForAny())\n .property(\"exchange_status\", codecForNumber())\n .property(\"type\", codecForConstString(\"failure\"))\n .build(\"MerchantAbortPayRefundFailureStatus\");\n\nexport const codecForMerchantAbortPayRefundStatus =\n (): Codec<MerchantAbortPayRefundStatus> =>\n buildCodecForUnion<MerchantAbortPayRefundStatus>()\n .discriminateOn(\"type\")\n .alternative(\"success\", codecForMerchantAbortPayRefundSuccessStatus())\n .alternative(\"failure\", codecForMerchantAbortPayRefundFailureStatus())\n .build(\"MerchantAbortPayRefundStatus\");\n\nexport const codecForAbortResponse = (): Codec<AbortResponse> =>\n buildCodecForObject<AbortResponse>()\n .property(\"refunds\", codecForList(codecForMerchantAbortPayRefundStatus()))\n .build(\"AbortResponse\");\n\nexport type MerchantAbortPayRefundStatus =\n | MerchantAbortPayRefundSuccessStatus\n | MerchantAbortPayRefundFailureStatus;\n\n// Details about why a refund failed.\nexport interface MerchantAbortPayRefundFailureStatus {\n // Used as tag for the sum type RefundStatus sum type.\n type: \"failure\";\n\n // HTTP status of the exchange request, must NOT be 200.\n exchange_status: number;\n\n // Taler error code from the exchange reply, if available.\n exchange_code?: number;\n\n // If available, HTTP reply from the exchange.\n exchange_reply?: unknown;\n}\n\n// Additional details needed to verify the refund confirmation signature\n// (h_contract_terms and merchant_pub) are already known\n// to the wallet and thus not included.\nexport interface MerchantAbortPayRefundSuccessStatus {\n // Used as tag for the sum type MerchantCoinRefundStatus sum type.\n type: \"success\";\n\n // HTTP status of the exchange request, 200 (integer) required for refund confirmations.\n exchange_status: 200;\n\n // the EdDSA :ref:signature (binary-only) with purpose\n // TALER_SIGNATURE_EXCHANGE_CONFIRM_REFUND using a current signing key of the\n // exchange affirming the successful refund\n exchange_sig: string;\n\n // public EdDSA key of the exchange that was used to generate the signature.\n // Should match one of the exchange's signing keys from /keys. It is given\n // explicitly as the client might otherwise be confused by clock skew as to\n // which signing key was used.\n exchange_pub: string;\n}\n\nexport interface TalerConfigResponse {\n name: string;\n version: string;\n currency?: string;\n}\n\nexport const codecForTalerConfigResponse = (): Codec<TalerConfigResponse> =>\n buildCodecForObject<TalerConfigResponse>()\n .property(\"name\", codecForString())\n .property(\"version\", codecForString())\n .property(\"currency\", codecOptional(codecForString()))\n .build(\"TalerConfigResponse\");\n\nexport interface FutureKeysResponse {\n future_denoms: any[];\n\n future_signkeys: any[];\n\n master_pub: string;\n\n denom_secmod_public_key: string;\n\n // Public key of the signkey security module.\n signkey_secmod_public_key: string;\n}\n\nexport const codecForKeysManagementResponse = (): Codec<FutureKeysResponse> =>\n buildCodecForObject<FutureKeysResponse>()\n .property(\"master_pub\", codecForString())\n .property(\"future_signkeys\", codecForList(codecForAny()))\n .property(\"future_denoms\", codecForList(codecForAny()))\n .property(\"denom_secmod_public_key\", codecForAny())\n .property(\"signkey_secmod_public_key\", codecForAny())\n .build(\"FutureKeysResponse\");\n\nexport interface MerchantConfigResponse {\n currency: string;\n name: string;\n version: string;\n}\n\nexport const codecForMerchantConfigResponse =\n (): Codec<MerchantConfigResponse> =>\n buildCodecForObject<MerchantConfigResponse>()\n .property(\"currency\", codecForString())\n .property(\"name\", codecForString())\n .property(\"version\", codecForString())\n .build(\"MerchantConfigResponse\");\n\nexport enum ExchangeProtocolVersion {\n /**\n * Current version supported by the wallet.\n */\n V12 = 12,\n}\n\nexport enum MerchantProtocolVersion {\n /**\n * Current version supported by the wallet.\n */\n V3 = 3,\n}\n\nexport type CoinEnvelope = CoinEnvelopeRsa | CoinEnvelopeCs;\n\nexport interface CoinEnvelopeRsa {\n cipher: DenomKeyType.Rsa;\n rsa_blinded_planchet: string;\n}\n\nexport interface CoinEnvelopeCs {\n cipher: DenomKeyType.ClauseSchnorr;\n // FIXME: add remaining fields\n}\n\nexport type HashCodeString = string;\n\nexport interface ExchangeWithdrawRequest {\n denom_pub_hash: HashCodeString;\n reserve_sig: EddsaSignatureString;\n coin_ev: CoinEnvelope;\n}\n\nexport interface ExchangeBatchWithdrawRequest {\n planchets: ExchangeWithdrawRequest[];\n}\n\nexport interface ExchangeRefreshRevealRequest {\n new_denoms_h: HashCodeString[];\n coin_evs: CoinEnvelope[];\n /**\n * kappa - 1 transfer private keys (ephemeral ECDHE keys).\n */\n transfer_privs: string[];\n\n transfer_pub: EddsaPublicKeyString;\n\n link_sigs: EddsaSignatureString[];\n\n /**\n * Iff the corresponding denomination has support for age restriction,\n * the client MUST provide the original age commitment, i.e. the vector\n * of public keys.\n */\n old_age_commitment?: Edx25519PublicKeyEnc[];\n}\n\nexport interface DepositSuccess {\n // Optional base URL of the exchange for looking up wire transfers\n // associated with this transaction. If not given,\n // the base URL is the same as the one used for this request.\n // Can be used if the base URL for /transactions/ differs from that\n // for /coins/, i.e. for load balancing. Clients SHOULD\n // respect the transaction_base_url if provided. Any HTTP server\n // belonging to an exchange MUST generate a 307 or 308 redirection\n // to the correct base URL should a client uses the wrong base\n // URL, or if the base URL has changed since the deposit.\n transaction_base_url?: string;\n\n // timestamp when the deposit was received by the exchange.\n exchange_timestamp: TalerProtocolTimestamp;\n\n // the EdDSA signature of TALER_DepositConfirmationPS using a current\n // signing key of the exchange affirming the successful\n // deposit and that the exchange will transfer the funds after the refund\n // deadline, or as soon as possible if the refund deadline is zero.\n exchange_sig: string;\n\n // public EdDSA key of the exchange that was used to\n // generate the signature.\n // Should match one of the exchange's signing keys from /keys. It is given\n // explicitly as the client might otherwise be confused by clock skew as to\n // which signing key was used.\n exchange_pub: string;\n}\n\nexport const codecForDepositSuccess = (): Codec<DepositSuccess> =>\n buildCodecForObject<DepositSuccess>()\n .property(\"exchange_pub\", codecForString())\n .property(\"exchange_sig\", codecForString())\n .property(\"exchange_timestamp\", codecForTimestamp)\n .property(\"transaction_base_url\", codecOptional(codecForString()))\n .build(\"DepositSuccess\");\n\nexport interface TrackTransactionWired {\n // Raw wire transfer identifier of the deposit.\n wtid: Base32String;\n\n // When was the wire transfer given to the bank.\n execution_time: TalerProtocolTimestamp;\n\n // The contribution of this coin to the total (without fees)\n coin_contribution: AmountString;\n\n // Binary-only Signature_ with purpose TALER_SIGNATURE_EXCHANGE_CONFIRM_WIRE\n // over a TALER_ConfirmWirePS\n // whereby the exchange affirms the successful wire transfer.\n exchange_sig: EddsaSignatureString;\n\n // Public EdDSA key of the exchange that was used to generate the signature.\n // Should match one of the exchange's signing keys from /keys. Again given\n // explicitly as the client might otherwise be confused by clock skew as to\n // which signing key was used.\n exchange_pub: EddsaPublicKeyString;\n}\n\nexport const codecForTackTransactionWired = (): Codec<TrackTransactionWired> =>\n buildCodecForObject<TrackTransactionWired>()\n .property(\"wtid\", codecForString())\n .property(\"execution_time\", codecForTimestamp)\n .property(\"coin_contribution\", codecForAmountString())\n .property(\"exchange_sig\", codecForString())\n .property(\"exchange_pub\", codecForString())\n .build(\"TackTransactionWired\");\n\ninterface TrackTransactionAccepted {\n // Legitimization target that the merchant should\n // use to check for its KYC status using\n // the /kyc-check/$REQUIREMENT_ROW/... endpoint.\n // Optional, not present if the deposit has not\n // yet been aggregated to the point that a KYC\n // need has been evaluated.\n requirement_row?: number;\n\n // True if the KYC check for the merchant has been\n // satisfied. False does not mean that KYC\n // is strictly needed, unless also a\n // legitimization_uuid is provided.\n kyc_ok: boolean;\n\n // Time by which the exchange currently thinks the deposit will be executed.\n // Actual execution may be later if the KYC check is not satisfied by then.\n execution_time: TalerProtocolTimestamp;\n}\n\nexport const codecForTackTransactionAccepted =\n (): Codec<TrackTransactionAccepted> =>\n buildCodecForObject<TrackTransactionAccepted>()\n .property(\"requirement_row\", codecOptional(codecForNumber()))\n .property(\"kyc_ok\", codecForBoolean())\n .property(\"execution_time\", codecForTimestamp)\n .build(\"TackTransactionAccepted\");\n\nexport type TrackTransaction =\n | ({ type: \"accepted\" } & TrackTransactionAccepted)\n | ({ type: \"wired\" } & TrackTransactionWired);\n\nexport interface PurseDeposit {\n /**\n * Amount to be deposited, can be a fraction of the\n * coin's total value.\n */\n amount: AmountString;\n\n /**\n * Hash of denomination RSA key with which the coin is signed.\n */\n denom_pub_hash: HashCodeString;\n\n /**\n * Exchange's unblinded RSA signature of the coin.\n */\n ub_sig: UnblindedSignature;\n\n /**\n * Age commitment for the coin, if the denomination is age-restricted.\n */\n age_commitment?: string[];\n\n /**\n * Attestation for the minimum age, if the denomination is age-restricted.\n */\n attest?: string;\n\n /**\n * Signature over TALER_PurseDepositSignaturePS\n * of purpose TALER_SIGNATURE_WALLET_PURSE_DEPOSIT\n * made by the customer with the\n * coin's private key.\n */\n coin_sig: EddsaSignatureString;\n\n /**\n * Public key of the coin being deposited into the purse.\n */\n coin_pub: EddsaPublicKeyString;\n}\n\nexport interface ExchangePurseMergeRequest {\n // payto://-URI of the account the purse is to be merged into.\n // Must be of the form: 'payto://taler/$EXCHANGE_URL/$RESERVE_PUB'.\n payto_uri: string;\n\n // EdDSA signature of the account/reserve affirming the merge\n // over a TALER_AccountMergeSignaturePS.\n // Must be of purpose TALER_SIGNATURE_ACCOUNT_MERGE\n reserve_sig: EddsaSignatureString;\n\n // EdDSA signature of the purse private key affirming the merge\n // over a TALER_PurseMergeSignaturePS.\n // Must be of purpose TALER_SIGNATURE_PURSE_MERGE.\n merge_sig: EddsaSignatureString;\n\n // Client-side timestamp of when the merge request was made.\n merge_timestamp: TalerProtocolTimestamp;\n}\n\nexport interface ExchangeGetContractResponse {\n purse_pub: string;\n econtract_sig: string;\n econtract: string;\n}\n\nexport const codecForExchangeGetContractResponse =\n (): Codec<ExchangeGetContractResponse> =>\n buildCodecForObject<ExchangeGetContractResponse>()\n .property(\"purse_pub\", codecForString())\n .property(\"econtract_sig\", codecForString())\n .property(\"econtract\", codecForString())\n .build(\"ExchangeGetContractResponse\");\n\n/**\n * Contract terms between two wallets (as opposed to a merchant and wallet).\n */\nexport interface PeerContractTerms {\n amount: AmountString;\n summary: string;\n purse_expiration: TalerProtocolTimestamp;\n}\n\nexport interface EncryptedContract {\n // Encrypted contract.\n econtract: string;\n\n // Signature over the (encrypted) contract.\n econtract_sig: string;\n\n // Ephemeral public key for the DH operation to decrypt the encrypted contract.\n contract_pub: string;\n}\n\n/**\n * Payload for /reserves/{reserve_pub}/purse\n * endpoint of the exchange.\n */\nexport interface ExchangeReservePurseRequest {\n /**\n * Minimum amount that must be credited to the reserve, that is\n * the total value of the purse minus the deposit fees.\n * If the deposit fees are lower, the contribution to the\n * reserve can be higher!\n */\n purse_value: AmountString;\n\n // Minimum age required for all coins deposited into the purse.\n min_age: number;\n\n // Purse fee the reserve owner is willing to pay\n // for the purse creation. Optional, if not present\n // the purse is to be created from the purse quota\n // of the reserve.\n purse_fee: AmountString;\n\n // Optional encrypted contract, in case the buyer is\n // proposing the contract and thus establishing the\n // purse with the payment.\n econtract?: EncryptedContract;\n\n // EdDSA public key used to approve merges of this purse.\n merge_pub: EddsaPublicKeyString;\n\n // EdDSA signature of the purse private key affirming the merge\n // over a TALER_PurseMergeSignaturePS.\n // Must be of purpose TALER_SIGNATURE_PURSE_MERGE.\n merge_sig: EddsaSignatureString;\n\n // EdDSA signature of the account/reserve affirming the merge.\n // Must be of purpose TALER_SIGNATURE_WALLET_ACCOUNT_MERGE\n reserve_sig: EddsaSignatureString;\n\n // Purse public key.\n purse_pub: EddsaPublicKeyString;\n\n // EdDSA signature of the purse over\n // TALER_PurseRequestSignaturePS of\n // purpose TALER_SIGNATURE_PURSE_REQUEST\n // confirming that the\n // above details hold for this purse.\n purse_sig: EddsaSignatureString;\n\n // SHA-512 hash of the contact of the purse.\n h_contract_terms: HashCodeString;\n\n // Client-side timestamp of when the merge request was made.\n merge_timestamp: TalerProtocolTimestamp;\n\n // Indicative time by which the purse should expire\n // if it has not been paid.\n purse_expiration: TalerProtocolTimestamp;\n}\n\nexport interface ExchangePurseDeposits {\n // Array of coins to deposit into the purse.\n deposits: PurseDeposit[];\n}\n\nexport interface ExchangeDepositRequest {\n // Amount to be deposited, can be a fraction of the\n // coin's total value.\n contribution: AmountString;\n\n // The merchant's account details.\n // In case of an auction policy, it refers to the seller.\n merchant_payto_uri: string;\n\n // The salt is used to hide the payto_uri from customers\n // when computing the h_wire of the merchant.\n wire_salt: string;\n\n // SHA-512 hash of the contract of the merchant with the customer. Further\n // details are never disclosed to the exchange.\n h_contract_terms: HashCodeString;\n\n // Hash of denomination RSA key with which the coin is signed.\n denom_pub_hash: HashCodeString;\n\n // Exchange's unblinded RSA signature of the coin.\n ub_sig: UnblindedSignature;\n\n // Timestamp when the contract was finalized.\n timestamp: TalerProtocolTimestamp;\n\n // Indicative time by which the exchange undertakes to transfer the funds to\n // the merchant, in case of successful payment. A wire transfer deadline of 'never'\n // is not allowed.\n wire_transfer_deadline: TalerProtocolTimestamp;\n\n // EdDSA public key of the merchant, so that the client can identify the\n // merchant for refund requests.\n //\n // THIS FIELD WILL BE DEPRECATED, once the refund mechanism becomes a\n // policy via extension.\n merchant_pub: EddsaPublicKeyString;\n\n // Date until which the merchant can issue a refund to the customer via the\n // exchange, to be omitted if refunds are not allowed.\n //\n // THIS FIELD WILL BE DEPRECATED, once the refund mechanism becomes a\n // policy via extension.\n refund_deadline?: TalerProtocolTimestamp;\n\n // CAVEAT: THIS IS WORK IN PROGRESS\n // (Optional) policy for the deposit.\n // This might be a refund, auction or escrow policy.\n //\n // Note that support for policies is an optional feature of the exchange.\n // Optional features are so called \"extensions\" in Taler. The exchange\n // provides the list of supported extensions, including policies, in the\n // ExtensionsManifestsResponse response to the /keys endpoint.\n policy?: any;\n\n // Signature over TALER_DepositRequestPS, made by the customer with the\n // coin's private key.\n coin_sig: EddsaSignatureString;\n\n h_age_commitment?: string;\n}\n\nexport interface WalletKycUuid {\n // UUID that the wallet should use when initiating\n // the KYC check.\n requirement_row: number;\n\n // Hash of the payto:// account URI for the wallet.\n h_payto: string;\n}\n\nexport const codecForWalletKycUuid = (): Codec<WalletKycUuid> =>\n buildCodecForObject<WalletKycUuid>()\n .property(\"requirement_row\", codecForNumber())\n .property(\"h_payto\", codecForString())\n .build(\"WalletKycUuid\");\n\nexport interface MerchantUsingTemplateDetails {\n summary?: string;\n amount?: AmountString;\n}\n", "/*\n This file is part of TALER\n (C) 2019 GNUnet e.V.\n\n TALER is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n TALER is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n * Check if we are running under nodejs.\n */\n\nconst isNode =\n typeof process !== \"undefined\" &&\n typeof process.release !== \"undefined\" &&\n process.release.name === \"node\";\n\nexport enum LogLevel {\n Trace = \"trace\",\n Message = \"message\",\n Info = \"info\",\n Warn = \"warn\",\n Error = \"error\",\n None = \"none\",\n}\n\nexport let globalLogLevel = LogLevel.Info;\n\nexport function setGlobalLogLevelFromString(logLevelStr: string): void {\n globalLogLevel = getLevelForString(logLevelStr);\n}\n\nexport const byTagLogLevel: Record<string, LogLevel> = {};\nexport function setLogLevelFromString(tag: string, logLevelStr: string): void {\n byTagLogLevel[tag] = getLevelForString(logLevelStr);\n}\n\nfunction getLevelForString(logLevelStr: string): LogLevel {\n switch (logLevelStr.toLowerCase()) {\n case \"trace\":\n return LogLevel.Trace;\n case \"info\":\n return LogLevel.Info;\n case \"warn\":\n case \"warning\":\n return LogLevel.Warn;\n case \"error\":\n return LogLevel.Error;\n case \"none\":\n return LogLevel.None;\n default:\n if (isNode) {\n process.stderr.write(`Invalid log level, defaulting to WARNING\\n`);\n } else {\n console.warn(`Invalid log level, defaulting to WARNING`);\n }\n return LogLevel.Warn;\n }\n}\n\nfunction writeNodeLog(\n message: any,\n tag: string,\n level: string,\n args: any[],\n): void {\n try {\n let msg = `${new Date().toISOString()} ${tag} ${level} ${message}`;\n if (args.length != 0) {\n msg += ` ${JSON.stringify(args, undefined, 2)}\\n`;\n } else {\n msg += `\\n`;\n }\n process.stderr.write(msg);\n } catch (e) {\n // This can happen when we're trying to log something that doesn't want to be\n // converted to a string.\n let msg = `${new Date().toISOString()} (logger) FATAL `;\n if (e instanceof Error) {\n msg += `failed to write log: ${e.message}\\n`;\n } else {\n msg += \"failed to write log\\n\";\n }\n process.stderr.write(msg);\n }\n}\n\n/**\n * Logger that writes to stderr when running under node,\n * and uses the corresponding console.* method to log in the browser.\n */\nexport class Logger {\n constructor(private tag: string) {}\n\n shouldLogTrace(): boolean {\n const level = byTagLogLevel[this.tag] ?? globalLogLevel;\n switch (level) {\n case LogLevel.Trace:\n return true;\n case LogLevel.Message:\n case LogLevel.Info:\n case LogLevel.Warn:\n case LogLevel.Error:\n case LogLevel.None:\n return false;\n }\n }\n\n shouldLogInfo(): boolean {\n const level = byTagLogLevel[this.tag] ?? globalLogLevel;\n switch (level) {\n case LogLevel.Trace:\n case LogLevel.Message:\n case LogLevel.Info:\n return true;\n case LogLevel.Warn:\n case LogLevel.Error:\n case LogLevel.None:\n return false;\n }\n }\n\n shouldLogWarn(): boolean {\n const level = byTagLogLevel[this.tag] ?? globalLogLevel;\n switch (level) {\n case LogLevel.Trace:\n case LogLevel.Message:\n case LogLevel.Info:\n case LogLevel.Warn:\n return true;\n case LogLevel.Error:\n case LogLevel.None:\n return false;\n }\n }\n\n shouldLogError(): boolean {\n const level = byTagLogLevel[this.tag] ?? globalLogLevel;\n switch (level) {\n case LogLevel.Trace:\n case LogLevel.Message:\n case LogLevel.Info:\n case LogLevel.Warn:\n case LogLevel.Error:\n return true;\n case LogLevel.None:\n return false;\n }\n }\n\n info(message: string, ...args: any[]): void {\n if (!this.shouldLogInfo()) {\n return;\n }\n if (isNode) {\n writeNodeLog(message, this.tag, \"INFO\", args);\n } else {\n console.info(\n `${new Date().toISOString()} ${this.tag} INFO ` + message,\n ...args,\n );\n }\n }\n\n warn(message: string, ...args: any[]): void {\n if (!this.shouldLogWarn()) {\n return;\n }\n if (isNode) {\n writeNodeLog(message, this.tag, \"WARN\", args);\n } else {\n console.warn(\n `${new Date().toISOString()} ${this.tag} INFO ` + message,\n ...args,\n );\n }\n }\n\n error(message: string, ...args: any[]): void {\n if (!this.shouldLogError()) {\n return;\n }\n if (isNode) {\n writeNodeLog(message, this.tag, \"ERROR\", args);\n } else {\n console.info(\n `${new Date().toISOString()} ${this.tag} ERROR ` + message,\n ...args,\n );\n }\n }\n\n trace(message: string, ...args: any[]): void {\n if (!this.shouldLogTrace()) {\n return;\n }\n if (isNode) {\n writeNodeLog(message, this.tag, \"TRACE\", args);\n } else {\n console.info(\n `${new Date().toISOString()} ${this.tag} TRACE ` + message,\n ...args,\n );\n }\n }\n\n reportBreak(): void {\n if (!this.shouldLogError()) {\n return;\n }\n const location = new Error(\"programming error\");\n this.error(`assertion failed: ${location.stack}`);\n }\n}\n", "// Copyright (c) 2017, 2021 Pieter Wuille\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nvar CHARSET = \"qpzry9x8gf2tvdw0s3jn54khce6mua7l\";\nvar GENERATOR = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3];\n\nconst encodings: any = {\n BECH32: \"bech32\",\n BECH32M: \"bech32m\",\n};\n\nexport default {\n decode: decode,\n encode: encode,\n encodings: encodings,\n};\n\nfunction getEncodingConst(enc: any) {\n if (enc == encodings.BECH32) {\n return 1;\n } else if (enc == encodings.BECH32M) {\n return 0x2bc830a3;\n } else {\n throw new Error(\"unknown encoding\");\n }\n}\n\nfunction polymod(values: any) {\n var chk = 1;\n for (var p = 0; p < values.length; ++p) {\n var top = chk >> 25;\n chk = ((chk & 0x1ffffff) << 5) ^ values[p];\n for (var i = 0; i < 5; ++i) {\n if ((top >> i) & 1) {\n chk ^= GENERATOR[i];\n }\n }\n }\n return chk;\n}\n\nfunction hrpExpand(hrp: any) {\n var ret = [];\n var p;\n for (p = 0; p < hrp.length; ++p) {\n ret.push(hrp.charCodeAt(p) >> 5);\n }\n ret.push(0);\n for (p = 0; p < hrp.length; ++p) {\n ret.push(hrp.charCodeAt(p) & 31);\n }\n return ret;\n}\n\nfunction verifyChecksum(hrp: any, data: any, enc: any) {\n return polymod(hrpExpand(hrp).concat(data)) === getEncodingConst(enc);\n}\n\nfunction createChecksum(hrp: any, data: any, enc: any) {\n var values = hrpExpand(hrp).concat(data).concat([0, 0, 0, 0, 0, 0]);\n var mod = polymod(values) ^ getEncodingConst(enc);\n var ret = [];\n for (var p = 0; p < 6; ++p) {\n ret.push((mod >> (5 * (5 - p))) & 31);\n }\n return ret;\n}\n\nfunction encode(hrp: any, data: any, enc: any): string {\n var combined = data.concat(createChecksum(hrp, data, enc));\n var ret = hrp + \"1\";\n for (var p = 0; p < combined.length; ++p) {\n ret += CHARSET.charAt(combined[p]);\n }\n return ret;\n}\n\nfunction decode(bechString: any, enc: any) {\n var p;\n var has_lower = false;\n var has_upper = false;\n for (p = 0; p < bechString.length; ++p) {\n if (bechString.charCodeAt(p) < 33 || bechString.charCodeAt(p) > 126) {\n return null;\n }\n if (bechString.charCodeAt(p) >= 97 && bechString.charCodeAt(p) <= 122) {\n has_lower = true;\n }\n if (bechString.charCodeAt(p) >= 65 && bechString.charCodeAt(p) <= 90) {\n has_upper = true;\n }\n }\n if (has_lower && has_upper) {\n return null;\n }\n bechString = bechString.toLowerCase();\n var pos = bechString.lastIndexOf(\"1\");\n if (pos < 1 || pos + 7 > bechString.length || bechString.length > 90) {\n return null;\n }\n var hrp = bechString.substring(0, pos);\n var data = [];\n for (p = pos + 1; p < bechString.length; ++p) {\n var d = CHARSET.indexOf(bechString.charAt(p));\n if (d === -1) {\n return null;\n }\n data.push(d);\n }\n if (!verifyChecksum(hrp, data, enc)) {\n return null;\n }\n return { hrp: hrp, data: data.slice(0, data.length - 6) };\n}\n", "// Copyright (c) 2017, 2021 Pieter Wuille\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport bech32 from \"./bech32.js\";\n\nexport default {\n encode: encode,\n decode: decode,\n};\n\nfunction convertbits(\n data: any,\n frombits: number,\n tobits: number,\n pad: boolean,\n): any[] {\n var acc = 0;\n var bits = 0;\n var ret = [];\n var maxv = (1 << tobits) - 1;\n for (var p = 0; p < data.length; ++p) {\n var value = data[p];\n if (value < 0 || value >> frombits !== 0) {\n return []; //check this, was returning null\n }\n acc = (acc << frombits) | value;\n bits += frombits;\n while (bits >= tobits) {\n bits -= tobits;\n ret.push((acc >> bits) & maxv);\n }\n }\n if (pad) {\n if (bits > 0) {\n ret.push((acc << (tobits - bits)) & maxv);\n }\n } else if (bits >= frombits || (acc << (tobits - bits)) & maxv) {\n return []; //check this, was returning null\n }\n return ret;\n}\n\nfunction decode(hrp: any, addr: string) {\n var bech32m = false;\n var dec = bech32.decode(addr, bech32.encodings.BECH32);\n if (dec === null) {\n dec = bech32.decode(addr, bech32.encodings.BECH32M);\n bech32m = true;\n }\n if (\n dec === null ||\n dec.hrp !== hrp ||\n dec.data.length < 1 ||\n dec.data[0] > 16\n ) {\n return null;\n }\n var res = convertbits(dec.data.slice(1), 5, 8, false);\n if (res === null || res.length < 2 || res.length > 40) {\n return null;\n }\n if (dec.data[0] === 0 && res.length !== 20 && res.length !== 32) {\n return null;\n }\n if (dec.data[0] === 0 && bech32m) {\n return null;\n }\n if (dec.data[0] !== 0 && !bech32m) {\n return null;\n }\n return { version: dec.data[0], program: res };\n}\n\nfunction encode(hrp: any, version: number, program: any): string {\n var enc = bech32.encodings.BECH32;\n if (version > 0) {\n enc = bech32.encodings.BECH32M;\n }\n var ret = bech32.encode(\n hrp,\n [version].concat(convertbits(program, 8, 5, true)),\n enc,\n );\n if (decode(hrp, ret /*, enc*/) === null) {\n return \"\"; //check this was returning null\n }\n return ret;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2019 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author sebasjm\n */\n\n/**\n * Imports.\n */\nimport { AmountJson, Amounts } from \"./amounts.js\";\nimport { decodeCrock } from \"./taler-crypto.js\";\nimport * as segwit from \"./segwit_addr.js\";\n\nfunction buf2hex(buffer: Uint8Array) {\n // buffer is an ArrayBuffer\n return [...new Uint8Array(buffer)]\n .map((x) => x.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n\nconst hext2buf = (hexString: string) =>\n new Uint8Array(hexString.match(/.{1,2}/g)!.map((byte) => parseInt(byte, 16)));\n\nexport function generateFakeSegwitAddress(\n reservePub: string | undefined,\n addr: string,\n): string[] {\n if (!reservePub) return [];\n let pub;\n try {\n pub = decodeCrock(reservePub);\n } catch {\n // pub = new Uint8Array(0)\n }\n if (!pub || pub.length !== 32) return [];\n\n const first_rnd = new Uint8Array(4);\n first_rnd.set(pub.subarray(0, 4));\n const second_rnd = new Uint8Array(4);\n second_rnd.set(pub.subarray(0, 4));\n\n first_rnd[0] = first_rnd[0] & 0b0111_1111;\n second_rnd[0] = second_rnd[0] | 0b1000_0000;\n\n const first_part = new Uint8Array(first_rnd.length + pub.length / 2);\n first_part.set(first_rnd, 0);\n first_part.set(pub.subarray(0, 16), 4);\n\n const second_part = new Uint8Array(first_rnd.length + pub.length / 2);\n second_part.set(second_rnd, 0);\n second_part.set(pub.subarray(16, 32), 4);\n\n const prefix =\n addr[0] === \"t\" && addr[1] == \"b\"\n ? \"tb\"\n : addr[0] === \"b\" && addr[1] == \"c\" && addr[2] === \"r\" && addr[3] == \"t\"\n ? \"bcrt\"\n : addr[0] === \"b\" && addr[1] == \"c\"\n ? \"bc\"\n : undefined;\n if (prefix === undefined) throw new Error(\"unknown bitcoin net\");\n\n const addr1 = segwit.default.encode(prefix, 0, first_part);\n const addr2 = segwit.default.encode(prefix, 0, second_part);\n\n return [addr1, addr2];\n}\n\n// https://github.com/bitcoin/bitcoin/blob/master/src/policy/policy.cpp\nexport function segwitMinAmount(currency: string): AmountJson {\n return Amounts.parseOrThrow(`${currency}:0.00000294`);\n}\n", "/*\n This file is part of GNU Taler\n (C) 2019 GNUnet e.V.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\nimport { generateFakeSegwitAddress } from \"./bitcoin.js\";\nimport { URLSearchParams } from \"./url.js\";\n\nexport type PaytoUri =\n | PaytoUriUnknown\n | PaytoUriIBAN\n | PaytoUriTalerBank\n | PaytoUriBitcoin;\n\nexport interface PaytoUriGeneric {\n targetType: string;\n targetPath: string;\n params: { [name: string]: string };\n}\n\nexport interface PaytoUriUnknown extends PaytoUriGeneric {\n isKnown: false;\n}\n\nexport interface PaytoUriIBAN extends PaytoUriGeneric {\n isKnown: true;\n targetType: \"iban\";\n iban: string;\n bic?: string;\n}\n\nexport interface PaytoUriTalerBank extends PaytoUriGeneric {\n isKnown: true;\n targetType: \"x-taler-bank\";\n host: string;\n account: string;\n}\n\nexport interface PaytoUriBitcoin extends PaytoUriGeneric {\n isKnown: true;\n targetType: \"bitcoin\";\n segwitAddrs: Array<string>;\n}\n\nconst paytoPfx = \"payto://\";\n\nexport function buildPayto(\n type: \"iban\",\n iban: string,\n bic: string | undefined,\n): PaytoUriIBAN;\nexport function buildPayto(\n type: \"bitcoin\",\n address: string,\n reserve: string | undefined,\n): PaytoUriBitcoin;\nexport function buildPayto(\n type: \"x-taler-bank\",\n host: string,\n account: string,\n): PaytoUriTalerBank;\nexport function buildPayto(\n type: \"iban\" | \"bitcoin\" | \"x-taler-bank\",\n first: string,\n second?: string,\n): PaytoUriGeneric {\n switch (type) {\n case \"bitcoin\": {\n const result: PaytoUriBitcoin = {\n isKnown: true,\n targetType: \"bitcoin\",\n targetPath: first,\n params: {},\n segwitAddrs: !second ? [] : generateFakeSegwitAddress(second, first),\n };\n return result;\n }\n case \"iban\": {\n const result: PaytoUriIBAN = {\n isKnown: true,\n targetType: \"iban\",\n iban: first,\n params: {},\n targetPath: !second ? first : `${second}/${first}`,\n };\n return result;\n }\n case \"x-taler-bank\": {\n if (!second) throw Error(\"missing account for payto://x-taler-bank\");\n const result: PaytoUriTalerBank = {\n isKnown: true,\n targetType: \"x-taler-bank\",\n host: first,\n account: second,\n params: {},\n targetPath: `${first}/${second}`,\n };\n return result;\n }\n default: {\n const unknownType: never = type;\n throw Error(`unknown payto:// type ${unknownType}`);\n }\n }\n}\n\n/**\n * Add query parameters to a payto URI\n */\nexport function addPaytoQueryParams(\n s: string,\n params: { [name: string]: string },\n): string {\n const [acct, search] = s.slice(paytoPfx.length).split(\"?\");\n const searchParams = new URLSearchParams(search || \"\");\n const keys = Object.keys(params);\n if (keys.length === 0) {\n return paytoPfx + acct;\n }\n for (const k of keys) {\n searchParams.set(k, params[k]);\n }\n return paytoPfx + acct + \"?\" + searchParams.toString();\n}\n\n/**\n * Serialize a PaytoURI into a valid payto:// string\n *\n * @param p\n * @returns\n */\nexport function stringifyPaytoUri(p: PaytoUri): string {\n const url = new URL(`${paytoPfx}${p.targetType}/${p.targetPath}`);\n const paramList = !p.params ? [] : Object.entries(p.params);\n paramList.forEach(([key, value]) => {\n url.searchParams.set(key, value);\n });\n return url.href;\n}\n\n/**\n * Parse a valid payto:// uri into a PaytoUri object\n * RFC 8905\n *\n * @param s\n * @returns\n */\nexport function parsePaytoUri(s: string): PaytoUri | undefined {\n if (!s.startsWith(paytoPfx)) {\n return undefined;\n }\n\n const [acct, search] = s.slice(paytoPfx.length).split(\"?\");\n\n const firstSlashPos = acct.indexOf(\"/\");\n\n if (firstSlashPos === -1) {\n return undefined;\n }\n\n const targetType = acct.slice(0, firstSlashPos);\n const targetPath = acct.slice(firstSlashPos + 1);\n\n const params: { [k: string]: string } = {};\n\n const searchParams = new URLSearchParams(search || \"\");\n\n searchParams.forEach((v, k) => {\n params[k] = v;\n });\n\n if (targetType === \"x-taler-bank\") {\n const parts = targetPath.split(\"/\");\n const host = parts[0];\n const account = parts[1];\n return {\n targetPath,\n targetType,\n params,\n isKnown: true,\n host,\n account,\n };\n }\n if (targetType === \"iban\") {\n const parts = targetPath.split(\"/\");\n let iban: string | undefined = undefined;\n let bic: string | undefined = undefined;\n if (parts.length === 1) {\n iban = parts[0];\n }\n if (parts.length === 2) {\n bic = parts[0];\n iban = parts[1];\n } else {\n iban = targetPath;\n }\n return {\n isKnown: true,\n targetPath,\n targetType,\n params,\n iban,\n bic,\n };\n }\n if (targetType === \"bitcoin\") {\n const msg = /\\b([A-Z0-9]{52})\\b/.exec(params[\"message\"]);\n const reserve = !msg ? params[\"subject\"] : msg[0];\n const segwitAddrs = !reserve\n ? []\n : generateFakeSegwitAddress(reserve, targetPath);\n\n const result: PaytoUriBitcoin = {\n isKnown: true,\n targetPath,\n targetType,\n params,\n segwitAddrs,\n };\n\n return result;\n }\n return {\n targetPath,\n targetType,\n params,\n isKnown: false,\n };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2019 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n * Type declarations for the exchange's reserve transaction information.\n *\n * @author Florian Dold <dold@taler.net>\n */\n\n/**\n * Imports.\n */\nimport {\n codecForString,\n buildCodecForObject,\n codecForConstString,\n buildCodecForUnion,\n Codec,\n codecForNumber,\n} from \"./codec.js\";\nimport {\n AmountString,\n Base32String,\n EddsaSignatureString,\n EddsaPublicKeyString,\n CoinPublicKeyString,\n} from \"./taler-types.js\";\nimport {\n AbsoluteTime,\n codecForTimestamp,\n TalerProtocolTimestamp,\n} from \"./time.js\";\n\nexport enum ReserveTransactionType {\n Withdraw = \"WITHDRAW\",\n Credit = \"CREDIT\",\n Recoup = \"RECOUP\",\n Closing = \"CLOSING\",\n}\n\nexport interface ReserveWithdrawTransaction {\n type: ReserveTransactionType.Withdraw;\n\n /**\n * Amount withdrawn.\n */\n amount: AmountString;\n\n /**\n * Hash of the denomination public key of the coin.\n */\n h_denom_pub: Base32String;\n\n /**\n * Hash of the blinded coin to be signed\n */\n h_coin_envelope: Base32String;\n\n /**\n * Signature of 'TALER_WithdrawRequestPS' created with the reserves's\n * private key.\n */\n reserve_sig: EddsaSignatureString;\n\n /**\n * Fee that is charged for withdraw.\n */\n withdraw_fee: AmountString;\n}\n\nexport interface ReserveCreditTransaction {\n type: ReserveTransactionType.Credit;\n\n /**\n * Amount withdrawn.\n */\n amount: AmountString;\n\n /**\n * Sender account payto://-URL\n */\n sender_account_url: string;\n\n /**\n * Transfer details uniquely identifying the transfer.\n */\n wire_reference: number;\n\n /**\n * Timestamp of the incoming wire transfer.\n */\n timestamp: TalerProtocolTimestamp;\n}\n\nexport interface ReserveClosingTransaction {\n type: ReserveTransactionType.Closing;\n\n /**\n * Closing balance.\n */\n amount: AmountString;\n\n /**\n * Closing fee charged by the exchange.\n */\n closing_fee: AmountString;\n\n /**\n * Wire transfer subject.\n */\n wtid: string;\n\n /**\n * Hash of the wire account into which the funds were returned to.\n */\n h_wire: string;\n\n /**\n * This is a signature over a\n * struct TALER_ReserveCloseConfirmationPS with purpose\n * TALER_SIGNATURE_EXCHANGE_RESERVE_CLOSED.\n */\n exchange_sig: EddsaSignatureString;\n\n /**\n * Public key used to create exchange_sig.\n */\n exchange_pub: EddsaPublicKeyString;\n\n /**\n * Time when the reserve was closed.\n */\n timestamp: TalerProtocolTimestamp;\n}\n\nexport interface ReserveRecoupTransaction {\n type: ReserveTransactionType.Recoup;\n\n /**\n * Amount paid back.\n */\n amount: AmountString;\n\n /**\n * This is a signature over\n * a struct TALER_PaybackConfirmationPS with purpose\n * TALER_SIGNATURE_EXCHANGE_CONFIRM_PAYBACK.\n */\n exchange_sig: EddsaSignatureString;\n\n /**\n * Public key used to create exchange_sig.\n */\n exchange_pub: EddsaPublicKeyString;\n\n /**\n * Time when the funds were paid back into the reserve.\n */\n timestamp: TalerProtocolTimestamp;\n\n /**\n * Public key of the coin that was paid back.\n */\n coin_pub: CoinPublicKeyString;\n}\n\n/**\n * Format of the exchange's transaction history for a reserve.\n */\nexport type ReserveTransaction =\n | ReserveWithdrawTransaction\n | ReserveCreditTransaction\n | ReserveClosingTransaction\n | ReserveRecoupTransaction;\n\nexport const codecForReserveWithdrawTransaction =\n (): Codec<ReserveWithdrawTransaction> =>\n buildCodecForObject<ReserveWithdrawTransaction>()\n .property(\"amount\", codecForString())\n .property(\"h_coin_envelope\", codecForString())\n .property(\"h_denom_pub\", codecForString())\n .property(\"reserve_sig\", codecForString())\n .property(\"type\", codecForConstString(ReserveTransactionType.Withdraw))\n .property(\"withdraw_fee\", codecForString())\n .build(\"ReserveWithdrawTransaction\");\n\nexport const codecForReserveCreditTransaction =\n (): Codec<ReserveCreditTransaction> =>\n buildCodecForObject<ReserveCreditTransaction>()\n .property(\"amount\", codecForString())\n .property(\"sender_account_url\", codecForString())\n .property(\"timestamp\", codecForTimestamp)\n .property(\"wire_reference\", codecForNumber())\n .property(\"type\", codecForConstString(ReserveTransactionType.Credit))\n .build(\"ReserveCreditTransaction\");\n\nexport const codecForReserveClosingTransaction =\n (): Codec<ReserveClosingTransaction> =>\n buildCodecForObject<ReserveClosingTransaction>()\n .property(\"amount\", codecForString())\n .property(\"closing_fee\", codecForString())\n .property(\"exchange_pub\", codecForString())\n .property(\"exchange_sig\", codecForString())\n .property(\"h_wire\", codecForString())\n .property(\"timestamp\", codecForTimestamp)\n .property(\"type\", codecForConstString(ReserveTransactionType.Closing))\n .property(\"wtid\", codecForString())\n .build(\"ReserveClosingTransaction\");\n\nexport const codecForReserveRecoupTransaction =\n (): Codec<ReserveRecoupTransaction> =>\n buildCodecForObject<ReserveRecoupTransaction>()\n .property(\"amount\", codecForString())\n .property(\"coin_pub\", codecForString())\n .property(\"exchange_pub\", codecForString())\n .property(\"exchange_sig\", codecForString())\n .property(\"timestamp\", codecForTimestamp)\n .property(\"type\", codecForConstString(ReserveTransactionType.Recoup))\n .build(\"ReserveRecoupTransaction\");\n\nexport const codecForReserveTransaction = (): Codec<ReserveTransaction> =>\n buildCodecForUnion<ReserveTransaction>()\n .discriminateOn(\"type\")\n .alternative(\n ReserveTransactionType.Withdraw,\n codecForReserveWithdrawTransaction(),\n )\n .alternative(\n ReserveTransactionType.Closing,\n codecForReserveClosingTransaction(),\n )\n .alternative(\n ReserveTransactionType.Recoup,\n codecForReserveRecoupTransaction(),\n )\n .alternative(\n ReserveTransactionType.Credit,\n codecForReserveCreditTransaction(),\n )\n .build<ReserveTransaction>(\"ReserveTransaction\");\n", "/*\n This file is part of GNU Taler\n (C) 2019-2020 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\nimport { BackupRecovery } from \"./backup-types.js\";\nimport { canonicalizeBaseUrl } from \"./helpers.js\";\nimport { URLSearchParams, URL } from \"./url.js\";\n\nexport interface PayUriResult {\n merchantBaseUrl: string;\n orderId: string;\n sessionId: string;\n claimToken: string | undefined;\n noncePriv: string | undefined;\n}\n\nexport interface PayTemplateUriResult {\n merchantBaseUrl: string;\n templateId: string;\n templateParams: Record<string, string>;\n}\n\nexport interface WithdrawUriResult {\n bankIntegrationApiBaseUrl: string;\n withdrawalOperationId: string;\n}\n\nexport interface RefundUriResult {\n merchantBaseUrl: string;\n orderId: string;\n}\n\nexport interface TipUriResult {\n merchantTipId: string;\n merchantBaseUrl: string;\n}\n\nexport interface PayPushUriResult {\n exchangeBaseUrl: string;\n contractPriv: string;\n}\n\nexport interface PayPullUriResult {\n exchangeBaseUrl: string;\n contractPriv: string;\n}\n\nexport interface DevExperimentUri {\n devExperimentId: string;\n}\n\n/**\n * Parse a taler[+http]://withdraw URI.\n * Return undefined if not passed a valid URI.\n */\nexport function parseWithdrawUri(s: string): WithdrawUriResult | undefined {\n const pi = parseProtoInfo(s, \"withdraw\");\n if (!pi) {\n return undefined;\n }\n const parts = pi.rest.split(\"/\");\n\n if (parts.length < 2) {\n return undefined;\n }\n\n const host = parts[0].toLowerCase();\n const pathSegments = parts.slice(1, parts.length - 1);\n /**\n * The statement below does not tolerate a slash-ended URI.\n * This results in (1) the withdrawalId being passed as the\n * empty string, and (2) the bankIntegrationApi ending with the\n * actual withdrawal operation ID. That can be fixed by\n * trimming the parts-list. FIXME\n */\n const withdrawId = parts[parts.length - 1];\n const p = [host, ...pathSegments].join(\"/\");\n\n return {\n bankIntegrationApiBaseUrl: canonicalizeBaseUrl(`${pi.innerProto}://${p}/`),\n withdrawalOperationId: withdrawId,\n };\n}\n\nexport enum TalerUriType {\n TalerPay = \"taler-pay\",\n TalerTemplate = \"taler-template\",\n TalerPayTemplate = \"taler-pay-template\",\n TalerWithdraw = \"taler-withdraw\",\n TalerTip = \"taler-tip\",\n TalerRefund = \"taler-refund\",\n TalerPayPush = \"taler-pay-push\",\n TalerPayPull = \"taler-pay-pull\",\n TalerRecovery = \"taler-recovery\",\n TalerDevExperiment = \"taler-dev-experiment\",\n Unknown = \"unknown\",\n}\n\nconst talerActionPayPull = \"pay-pull\";\nconst talerActionPayPush = \"pay-push\";\nconst talerActionPayTemplate = \"pay-template\";\n\n/**\n * Classify a taler:// URI.\n */\nexport function classifyTalerUri(s: string): TalerUriType {\n const sl = s.toLowerCase();\n if (sl.startsWith(\"taler://recovery/\")) {\n return TalerUriType.TalerRecovery;\n }\n if (sl.startsWith(\"taler+http://recovery/\")) {\n return TalerUriType.TalerRecovery;\n }\n if (sl.startsWith(\"taler://pay/\")) {\n return TalerUriType.TalerPay;\n }\n if (sl.startsWith(\"taler+http://pay/\")) {\n return TalerUriType.TalerPay;\n }\n if (sl.startsWith(\"taler://pay-template/\")) {\n return TalerUriType.TalerPayTemplate;\n }\n if (sl.startsWith(\"taler+http://pay-template/\")) {\n return TalerUriType.TalerPayTemplate;\n }\n if (sl.startsWith(\"taler://tip/\")) {\n return TalerUriType.TalerTip;\n }\n if (sl.startsWith(\"taler+http://tip/\")) {\n return TalerUriType.TalerTip;\n }\n if (sl.startsWith(\"taler://refund/\")) {\n return TalerUriType.TalerRefund;\n }\n if (sl.startsWith(\"taler+http://refund/\")) {\n return TalerUriType.TalerRefund;\n }\n if (sl.startsWith(\"taler://withdraw/\")) {\n return TalerUriType.TalerWithdraw;\n }\n if (sl.startsWith(\"taler+http://withdraw/\")) {\n return TalerUriType.TalerWithdraw;\n }\n if (sl.startsWith(`taler://${talerActionPayPush}/`)) {\n return TalerUriType.TalerPayPush;\n }\n if (sl.startsWith(`taler+http://${talerActionPayPush}/`)) {\n return TalerUriType.TalerPayPush;\n }\n if (sl.startsWith(`taler://${talerActionPayPull}/`)) {\n return TalerUriType.TalerPayPull;\n }\n if (sl.startsWith(`taler+http://${talerActionPayPull}/`)) {\n return TalerUriType.TalerPayPull;\n }\n if (sl.startsWith(\"taler://dev-experiment/\")) {\n return TalerUriType.TalerDevExperiment;\n }\n return TalerUriType.Unknown;\n}\n\ninterface TalerUriProtoInfo {\n innerProto: \"http\" | \"https\";\n rest: string;\n}\n\nfunction parseProtoInfo(\n s: string,\n action: string,\n): TalerUriProtoInfo | undefined {\n const pfxPlain = `taler://${action}/`;\n const pfxHttp = `taler+http://${action}/`;\n if (s.toLowerCase().startsWith(pfxPlain)) {\n return {\n innerProto: \"https\",\n rest: s.substring(pfxPlain.length),\n };\n } else if (s.toLowerCase().startsWith(pfxHttp)) {\n return {\n innerProto: \"http\",\n rest: s.substring(pfxHttp.length),\n };\n } else {\n return undefined;\n }\n}\n\n/**\n * Parse a taler[+http]://pay URI.\n * Return undefined if not passed a valid URI.\n */\nexport function parsePayUri(s: string): PayUriResult | undefined {\n const pi = parseProtoInfo(s, \"pay\");\n if (!pi) {\n return undefined;\n }\n const c = pi?.rest.split(\"?\");\n const q = new URLSearchParams(c[1] ?? \"\");\n const claimToken = q.get(\"c\") ?? undefined;\n const noncePriv = q.get(\"n\") ?? undefined;\n const parts = c[0].split(\"/\");\n if (parts.length < 3) {\n return undefined;\n }\n const host = parts[0].toLowerCase();\n const sessionId = parts[parts.length - 1];\n const orderId = parts[parts.length - 2];\n const pathSegments = parts.slice(1, parts.length - 2);\n const p = [host, ...pathSegments].join(\"/\");\n const merchantBaseUrl = canonicalizeBaseUrl(`${pi.innerProto}://${p}/`);\n\n return {\n merchantBaseUrl,\n orderId,\n sessionId: sessionId,\n claimToken,\n noncePriv,\n };\n}\n\nexport function parsePayTemplateUri(\n s: string,\n): PayTemplateUriResult | undefined {\n const pi = parseProtoInfo(s, talerActionPayTemplate);\n if (!pi) {\n return undefined;\n }\n const c = pi?.rest.split(\"?\");\n const q = new URLSearchParams(c[1] ?? \"\");\n const parts = c[0].split(\"/\");\n if (parts.length < 2) {\n return undefined;\n }\n const host = parts[0].toLowerCase();\n const templateId = parts[parts.length - 1];\n const pathSegments = parts.slice(1, parts.length - 1);\n const p = [host, ...pathSegments].join(\"/\");\n const merchantBaseUrl = canonicalizeBaseUrl(`${pi.innerProto}://${p}/`);\n\n const params: Record<string, string> = {};\n\n q.forEach((v, k) => {\n params[k] = v;\n });\n\n return {\n merchantBaseUrl,\n templateId,\n templateParams: params,\n };\n}\n\nexport function constructPayUri(\n merchantBaseUrl: string,\n orderId: string,\n sessionId: string,\n claimToken?: string,\n noncePriv?: string,\n): string {\n const base = canonicalizeBaseUrl(merchantBaseUrl);\n const url = new URL(base);\n const isHttp = base.startsWith(\"http://\");\n let result = isHttp ? `taler+http://pay/` : `taler://pay/`;\n result += url.hostname;\n if (url.port != \"\") {\n result += `:${url.port}`;\n }\n result += `${url.pathname}${orderId}/${sessionId}`;\n const qp = new URLSearchParams();\n if (claimToken) {\n qp.append(\"c\", claimToken);\n }\n if (noncePriv) {\n qp.append(\"n\", noncePriv);\n }\n const queryPart = qp.toString();\n if (queryPart) {\n result += \"?\" + queryPart;\n }\n return result;\n}\n\nexport function parsePayPushUri(s: string): PayPushUriResult | undefined {\n const pi = parseProtoInfo(s, talerActionPayPush);\n if (!pi) {\n return undefined;\n }\n const c = pi?.rest.split(\"?\");\n const parts = c[0].split(\"/\");\n if (parts.length < 2) {\n return undefined;\n }\n const host = parts[0].toLowerCase();\n const contractPriv = parts[parts.length - 1];\n const pathSegments = parts.slice(1, parts.length - 1);\n const p = [host, ...pathSegments].join(\"/\");\n const exchangeBaseUrl = canonicalizeBaseUrl(`${pi.innerProto}://${p}/`);\n\n return {\n exchangeBaseUrl,\n contractPriv,\n };\n}\n\nexport function parsePayPullUri(s: string): PayPullUriResult | undefined {\n const pi = parseProtoInfo(s, talerActionPayPull);\n if (!pi) {\n return undefined;\n }\n const c = pi?.rest.split(\"?\");\n const parts = c[0].split(\"/\");\n if (parts.length < 2) {\n return undefined;\n }\n const host = parts[0].toLowerCase();\n const contractPriv = parts[parts.length - 1];\n const pathSegments = parts.slice(1, parts.length - 1);\n const p = [host, ...pathSegments].join(\"/\");\n const exchangeBaseUrl = canonicalizeBaseUrl(`${pi.innerProto}://${p}/`);\n\n return {\n exchangeBaseUrl,\n contractPriv,\n };\n}\n\n/**\n * Parse a taler[+http]://tip URI.\n * Return undefined if not passed a valid URI.\n */\nexport function parseTipUri(s: string): TipUriResult | undefined {\n const pi = parseProtoInfo(s, \"tip\");\n if (!pi) {\n return undefined;\n }\n const c = pi?.rest.split(\"?\");\n const parts = c[0].split(\"/\");\n if (parts.length < 2) {\n return undefined;\n }\n const host = parts[0].toLowerCase();\n const tipId = parts[parts.length - 1];\n const pathSegments = parts.slice(1, parts.length - 1);\n const p = [host, ...pathSegments].join(\"/\");\n const merchantBaseUrl = canonicalizeBaseUrl(`${pi.innerProto}://${p}/`);\n\n return {\n merchantBaseUrl,\n merchantTipId: tipId,\n };\n}\n\n/**\n * Parse a taler[+http]://refund URI.\n * Return undefined if not passed a valid URI.\n */\nexport function parseRefundUri(s: string): RefundUriResult | undefined {\n const pi = parseProtoInfo(s, \"refund\");\n if (!pi) {\n return undefined;\n }\n const c = pi?.rest.split(\"?\");\n const parts = c[0].split(\"/\");\n if (parts.length < 3) {\n return undefined;\n }\n const host = parts[0].toLowerCase();\n const sessionId = parts[parts.length - 1];\n const orderId = parts[parts.length - 2];\n const pathSegments = parts.slice(1, parts.length - 2);\n const p = [host, ...pathSegments].join(\"/\");\n const merchantBaseUrl = canonicalizeBaseUrl(`${pi.innerProto}://${p}/`);\n\n return {\n merchantBaseUrl,\n orderId,\n };\n}\n\nexport function parseDevExperimentUri(s: string): DevExperimentUri | undefined {\n const pi = parseProtoInfo(s, \"dev-experiment\");\n const c = pi?.rest.split(\"?\");\n if (!c) {\n return undefined;\n }\n // const q = new URLSearchParams(c[1] ?? \"\");\n const parts = c[0].split(\"/\");\n return {\n devExperimentId: parts[0],\n };\n}\n\nexport function constructPayPushUri(args: {\n exchangeBaseUrl: string;\n contractPriv: string;\n}): string {\n const url = new URL(args.exchangeBaseUrl);\n let proto: string;\n if (url.protocol === \"https:\") {\n proto = \"taler\";\n } else if (url.protocol === \"http:\") {\n proto = \"taler+http\";\n } else {\n throw Error(`Unsupported exchange URL protocol ${args.exchangeBaseUrl}`);\n }\n if (!url.pathname.endsWith(\"/\")) {\n throw Error(\n `exchange base URL must end with a slash (got ${args.exchangeBaseUrl}instead)`,\n );\n }\n return `${proto}://pay-push/${url.host}${url.pathname}${args.contractPriv}`;\n}\n\nexport function constructPayPullUri(args: {\n exchangeBaseUrl: string;\n contractPriv: string;\n}): string {\n const url = new URL(args.exchangeBaseUrl);\n let proto: string;\n if (url.protocol === \"https:\") {\n proto = \"taler\";\n } else if (url.protocol === \"http:\") {\n proto = \"taler+http\";\n } else {\n throw Error(`Unsupported exchange URL protocol ${args.exchangeBaseUrl}`);\n }\n if (!url.pathname.endsWith(\"/\")) {\n throw Error(\n `exchange base URL must end with a slash (got ${args.exchangeBaseUrl}instead)`,\n );\n }\n return `${proto}://pay-pull/${url.host}${url.pathname}${args.contractPriv}`;\n}\n\nexport function constructRecoveryUri(args: BackupRecovery): string {\n const key = args.walletRootPriv;\n //FIXME: name may contain non valid characters\n const urls = args.providers\n .map((p) => `${p.name}=${canonicalizeBaseUrl(p.url)}`)\n .join(\"&\");\n\n return `taler://recovery/${key}?${urls}`;\n}\nexport function parseRecoveryUri(uri: string): BackupRecovery | undefined {\n const pi = parseProtoInfo(uri, \"recovery\");\n if (!pi) {\n return undefined;\n }\n const idx = pi.rest.indexOf(\"?\");\n if (idx === -1) {\n return undefined;\n }\n const path = pi.rest.slice(0, idx);\n const params = pi.rest.slice(idx + 1);\n if (!path || !params) {\n return undefined;\n }\n const parts = path.split(\"/\");\n const walletRootPriv = parts[0];\n if (!walletRootPriv) return undefined;\n const providers = new Array<{ name: string; url: string }>();\n const args = params.split(\"&\");\n for (const param in args) {\n const eq = args[param].indexOf(\"=\");\n if (eq === -1) return undefined;\n const name = args[param].slice(0, eq);\n const url = args[param].slice(eq + 1);\n providers.push({ name, url });\n }\n return { walletRootPriv, providers };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2019 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n * Type and schema definitions for the wallet's transaction list.\n *\n * @author Florian Dold\n * @author Torsten Grote\n */\n\n/**\n * Imports.\n */\nimport { TalerProtocolTimestamp } from \"./time.js\";\nimport {\n AmountString,\n Product,\n InternationalizedString,\n MerchantInfo,\n codecForInternationalizedString,\n codecForMerchantInfo,\n codecForProduct,\n Location,\n} from \"./taler-types.js\";\nimport {\n Codec,\n buildCodecForObject,\n codecOptional,\n codecForString,\n codecForList,\n codecForAny,\n codecForBoolean,\n} from \"./codec.js\";\nimport {\n RefreshReason,\n TalerErrorDetail,\n TransactionIdStr,\n} from \"./wallet-types.js\";\n\nexport enum ExtendedStatus {\n Pending = \"pending\",\n Done = \"done\",\n Aborting = \"aborting\",\n Aborted = \"aborted\",\n Failed = \"failed\",\n KycRequired = \"kyc-required\",\n}\n\nexport interface TransactionsRequest {\n /**\n * return only transactions in the given currency\n */\n currency?: string;\n\n /**\n * if present, results will be limited to transactions related to the given search string\n */\n search?: string;\n\n /**\n * If true, include all refreshes in the transactions list.\n */\n includeRefreshes?: boolean;\n}\n\nexport interface TransactionsResponse {\n // a list of past and pending transactions sorted by pending, timestamp and transactionId.\n // In case two events are both pending and have the same timestamp,\n // they are sorted by the transactionId\n // (lexically ascending and locale-independent comparison).\n transactions: Transaction[];\n}\n\nexport interface TransactionCommon {\n // opaque unique ID for the transaction, used as a starting point for paginating queries\n // and for invoking actions on the transaction (e.g. deleting/hiding it from the history)\n transactionId: TransactionIdStr;\n\n // the type of the transaction; different types might provide additional information\n type: TransactionType;\n\n // main timestamp of the transaction\n timestamp: TalerProtocolTimestamp;\n\n extendedStatus: ExtendedStatus;\n\n /**\n * true if the transaction is still pending, false otherwise\n * If a transaction is not longer pending, its timestamp will be updated,\n * but its transactionId will remain unchanged\n *\n * @deprecated show extendedStatus\n */\n pending: boolean;\n\n /**\n * True if the transaction encountered a problem that might be\n * permanent. A frozen transaction won't be automatically retried.\n *\n * @deprecated show extendedStatus\n */\n frozen: boolean;\n\n /**\n * Raw amount of the transaction (exclusive of fees or other extra costs).\n */\n amountRaw: AmountString;\n\n /**\n * Amount added or removed from the wallet's balance (including all fees and other costs).\n */\n amountEffective: AmountString;\n\n error?: TalerErrorDetail;\n}\n\nexport type Transaction =\n | TransactionWithdrawal\n | TransactionPayment\n | TransactionRefund\n | TransactionTip\n | TransactionRefresh\n | TransactionDeposit\n | TransactionPeerPullCredit\n | TransactionPeerPullDebit\n | TransactionPeerPushCredit\n | TransactionPeerPushDebit;\n\nexport enum TransactionType {\n Withdrawal = \"withdrawal\",\n Payment = \"payment\",\n Refund = \"refund\",\n Refresh = \"refresh\",\n Tip = \"tip\",\n Deposit = \"deposit\",\n PeerPushDebit = \"peer-push-debit\",\n PeerPushCredit = \"peer-push-credit\",\n PeerPullDebit = \"peer-pull-debit\",\n PeerPullCredit = \"peer-pull-credit\",\n}\n\nexport enum WithdrawalType {\n TalerBankIntegrationApi = \"taler-bank-integration-api\",\n ManualTransfer = \"manual-transfer\",\n}\n\nexport type WithdrawalDetails =\n | WithdrawalDetailsForManualTransfer\n | WithdrawalDetailsForTalerBankIntegrationApi;\n\ninterface WithdrawalDetailsForManualTransfer {\n type: WithdrawalType.ManualTransfer;\n\n /**\n * Payto URIs that the exchange supports.\n *\n * Already contains the amount and message.\n */\n exchangePaytoUris: string[];\n\n // Public key of the reserve\n reservePub: string;\n\n /**\n * Is the reserve ready for withdrawal?\n */\n reserveIsReady: boolean;\n}\n\ninterface WithdrawalDetailsForTalerBankIntegrationApi {\n type: WithdrawalType.TalerBankIntegrationApi;\n\n /**\n * Set to true if the bank has confirmed the withdrawal, false if not.\n * An unconfirmed withdrawal usually requires user-input and should be highlighted in the UI.\n * See also bankConfirmationUrl below.\n */\n confirmed: boolean;\n\n /**\n * If the withdrawal is unconfirmed, this can include a URL for user\n * initiated confirmation.\n */\n bankConfirmationUrl?: string;\n\n // Public key of the reserve\n reservePub: string;\n\n /**\n * Is the reserve ready for withdrawal?\n */\n reserveIsReady: boolean;\n}\n\n// This should only be used for actual withdrawals\n// and not for tips that have their own transactions type.\nexport interface TransactionWithdrawal extends TransactionCommon {\n type: TransactionType.Withdrawal;\n\n /**\n * Exchange of the withdrawal.\n */\n exchangeBaseUrl: string;\n\n /**\n * Amount that got subtracted from the reserve balance.\n */\n amountRaw: AmountString;\n\n /**\n * Amount that actually was (or will be) added to the wallet's balance.\n */\n amountEffective: AmountString;\n\n withdrawalDetails: WithdrawalDetails;\n}\n\nexport interface PeerInfoShort {\n expiration: TalerProtocolTimestamp | undefined;\n summary: string | undefined;\n}\n\n/**\n * Credit because we were paid for a P2P invoice we created.\n */\nexport interface TransactionPeerPullCredit extends TransactionCommon {\n type: TransactionType.PeerPullCredit;\n\n info: PeerInfoShort;\n /**\n * Exchange used.\n */\n exchangeBaseUrl: string;\n\n /**\n * Amount that got subtracted from the reserve balance.\n */\n amountRaw: AmountString;\n\n /**\n * Amount that actually was (or will be) added to the wallet's balance.\n */\n amountEffective: AmountString;\n\n /**\n * URI to send to the other party.\n */\n talerUri: string;\n}\n\n/**\n * Debit because we paid someone's invoice.\n */\nexport interface TransactionPeerPullDebit extends TransactionCommon {\n type: TransactionType.PeerPullDebit;\n\n info: PeerInfoShort;\n /**\n * Exchange used.\n */\n exchangeBaseUrl: string;\n\n amountRaw: AmountString;\n\n amountEffective: AmountString;\n}\n\n/**\n * We sent money via a P2P payment.\n */\nexport interface TransactionPeerPushDebit extends TransactionCommon {\n type: TransactionType.PeerPushDebit;\n\n info: PeerInfoShort;\n /**\n * Exchange used.\n */\n exchangeBaseUrl: string;\n\n /**\n * Amount that got subtracted from the reserve balance.\n */\n amountRaw: AmountString;\n\n /**\n * Amount that actually was (or will be) added to the wallet's balance.\n */\n amountEffective: AmountString;\n\n /**\n * URI to accept the payment.\n */\n talerUri: string;\n}\n\n/**\n * We received money via a P2P payment.\n */\nexport interface TransactionPeerPushCredit extends TransactionCommon {\n type: TransactionType.PeerPushCredit;\n\n info: PeerInfoShort;\n /**\n * Exchange used.\n */\n exchangeBaseUrl: string;\n\n /**\n * Amount that got subtracted from the reserve balance.\n */\n amountRaw: AmountString;\n\n /**\n * Amount that actually was (or will be) added to the wallet's balance.\n */\n amountEffective: AmountString;\n}\n\nexport enum PaymentStatus {\n /**\n * Explicitly aborted after timeout / failure\n */\n Aborted = \"aborted\",\n\n /**\n * Payment failed, wallet will auto-retry.\n * User should be given the option to retry now / abort.\n */\n Failed = \"failed\",\n\n /**\n * Paid successfully\n */\n Paid = \"paid\",\n\n /**\n * User accepted, payment is processing.\n */\n Accepted = \"accepted\",\n}\n\nexport interface TransactionPayment extends TransactionCommon {\n type: TransactionType.Payment;\n\n /**\n * Additional information about the payment.\n */\n info: OrderShortInfo;\n\n /**\n * Wallet-internal end-to-end identifier for the payment.\n */\n proposalId: string;\n\n /**\n * How far did the wallet get with processing the payment?\n *\n * @deprecated use extendedStatus\n */\n status: PaymentStatus;\n\n /**\n * Amount that must be paid for the contract\n */\n amountRaw: AmountString;\n\n /**\n * Amount that was paid, including deposit, wire and refresh fees.\n */\n amountEffective: AmountString;\n\n /**\n * Amount that has been refunded by the merchant\n */\n totalRefundRaw: AmountString;\n\n /**\n * Amount will be added to the wallet's balance after fees and refreshing\n */\n totalRefundEffective: AmountString;\n\n /**\n * Amount pending to be picked up\n */\n refundPending: AmountString | undefined;\n\n /**\n * Reference to applied refunds\n */\n refunds: RefundInfoShort[];\n\n /**\n * Is the wallet currently checking for a refund?\n */\n refundQueryActive: boolean;\n}\n\nexport interface OrderShortInfo {\n /**\n * Order ID, uniquely identifies the order within a merchant instance\n */\n orderId: string;\n\n /**\n * Hash of the contract terms.\n */\n contractTermsHash: string;\n\n /**\n * More information about the merchant\n */\n merchant: MerchantInfo;\n\n /**\n * Summary of the order, given by the merchant\n */\n summary: string;\n\n /**\n * Map from IETF BCP 47 language tags to localized summaries\n */\n summary_i18n?: InternationalizedString;\n\n /**\n * List of products that are part of the order\n */\n products: Product[] | undefined;\n\n /**\n * Time indicating when the order should be delivered.\n * May be overwritten by individual products.\n */\n delivery_date?: TalerProtocolTimestamp;\n\n /**\n * Delivery location for (all!) products.\n */\n delivery_location?: Location;\n\n /**\n * URL of the fulfillment, given by the merchant\n */\n fulfillmentUrl?: string;\n\n /**\n * Plain text message that should be shown to the user\n * when the payment is complete.\n */\n fulfillmentMessage?: string;\n\n /**\n * Translations of fulfillmentMessage.\n */\n fulfillmentMessage_i18n?: InternationalizedString;\n}\n\nexport interface RefundInfoShort {\n transactionId: string;\n timestamp: TalerProtocolTimestamp;\n amountEffective: AmountString;\n amountRaw: AmountString;\n}\n\nexport interface TransactionRefund extends TransactionCommon {\n type: TransactionType.Refund;\n\n // ID for the transaction that is refunded\n refundedTransactionId: string;\n\n // Additional information about the refunded payment\n info: OrderShortInfo;\n\n /**\n * Amount pending to be picked up\n */\n refundPending: AmountString | undefined;\n\n // Amount that has been refunded by the merchant\n amountRaw: AmountString;\n\n // Amount will be added to the wallet's balance after fees and refreshing\n amountEffective: AmountString;\n}\n\nexport interface TransactionTip extends TransactionCommon {\n type: TransactionType.Tip;\n\n // Raw amount of the tip, without extra fees that apply\n amountRaw: AmountString;\n\n /**\n * More information about the merchant\n */\n // merchant: MerchantInfo;\n\n // Amount will be (or was) added to the wallet's balance after fees and refreshing\n amountEffective: AmountString;\n\n merchantBaseUrl: string;\n}\n\n/**\n * A transaction shown for refreshes.\n * Only shown for (1) refreshes not associated with other transactions\n * and (2) refreshes in an error state.\n */\nexport interface TransactionRefresh extends TransactionCommon {\n type: TransactionType.Refresh;\n\n refreshReason: RefreshReason;\n\n /**\n * Transaction ID that caused this refresh.\n */\n originatingTransactionId?: string;\n\n /**\n * Always zero for refreshes\n */\n amountRaw: AmountString;\n\n /**\n * Fees, i.e. the effective, negative effect of the refresh\n * on the balance.\n * \n * Only applicable for stand-alone refreshes, and zero for\n * other refreshes where the transaction itself accounts for the\n * refresh fee.\n */\n amountEffective: AmountString;\n\n refreshInputAmount: AmountString;\n refreshOutputAmount: AmountString;\n}\n\n/**\n * Deposit transaction, which effectively sends\n * money from this wallet somewhere else.\n */\nexport interface TransactionDeposit extends TransactionCommon {\n type: TransactionType.Deposit;\n\n depositGroupId: string;\n\n /**\n * Target for the deposit.\n */\n targetPaytoUri: string;\n\n /**\n * Raw amount that is being deposited\n */\n amountRaw: AmountString;\n\n /**\n * Effective amount that is being deposited\n */\n amountEffective: AmountString;\n\n wireTransferDeadline: TalerProtocolTimestamp;\n\n wireTransferProgress: number;\n\n /**\n * Did all the deposit requests succeed?\n */\n deposited: boolean;\n}\n\nexport interface TransactionByIdRequest {\n transactionId: string;\n}\n\nexport const codecForTransactionByIdRequest =\n (): Codec<TransactionByIdRequest> =>\n buildCodecForObject<TransactionByIdRequest>()\n .property(\"transactionId\", codecForString())\n .build(\"TransactionByIdRequest\");\n\nexport const codecForTransactionsRequest = (): Codec<TransactionsRequest> =>\n buildCodecForObject<TransactionsRequest>()\n .property(\"currency\", codecOptional(codecForString()))\n .property(\"search\", codecOptional(codecForString()))\n .property(\"includeRefreshes\", codecOptional(codecForBoolean()))\n .build(\"TransactionsRequest\");\n\n// FIXME: do full validation here!\nexport const codecForTransactionsResponse = (): Codec<TransactionsResponse> =>\n buildCodecForObject<TransactionsResponse>()\n .property(\"transactions\", codecForList(codecForAny()))\n .build(\"TransactionsResponse\");\n\nexport const codecForOrderShortInfo = (): Codec<OrderShortInfo> =>\n buildCodecForObject<OrderShortInfo>()\n .property(\"contractTermsHash\", codecForString())\n .property(\"fulfillmentMessage\", codecOptional(codecForString()))\n .property(\n \"fulfillmentMessage_i18n\",\n codecOptional(codecForInternationalizedString()),\n )\n .property(\"fulfillmentUrl\", codecOptional(codecForString()))\n .property(\"merchant\", codecForMerchantInfo())\n .property(\"orderId\", codecForString())\n .property(\"products\", codecOptional(codecForList(codecForProduct())))\n .property(\"summary\", codecForString())\n .property(\"summary_i18n\", codecOptional(codecForInternationalizedString()))\n .build(\"OrderShortInfo\");\n", "/*\n This file is part of GNU Taler\n (C) 2015-2020 Taler Systems SA\n\n TALER is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n TALER is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n * Types used by clients of the wallet.\n *\n * These types are defined in a separate file make tree shaking easier, since\n * some components use these types (via RPC) but do not depend on the wallet\n * code directly.\n *\n * @author Florian Dold <dold@taler.net>\n */\n\n/**\n * Imports.\n */\nimport { AmountJson, codecForAmountString } from \"./amounts.js\";\nimport { BackupRecovery } from \"./backup-types.js\";\nimport {\n buildCodecForObject,\n buildCodecForUnion,\n Codec,\n codecForAny,\n codecForBoolean,\n codecForConstString,\n codecForEither,\n codecForList,\n codecForMap,\n codecForNumber,\n codecForString,\n codecOptional,\n} from \"./codec.js\";\nimport { VersionMatchResult } from \"./libtool-version.js\";\nimport { PaytoUri } from \"./payto.js\";\nimport { AgeCommitmentProof } from \"./taler-crypto.js\";\nimport { TalerErrorCode } from \"./taler-error-codes.js\";\nimport {\n AmountString,\n AuditorDenomSig,\n codecForMerchantContractTerms,\n CoinEnvelope,\n MerchantContractTerms,\n PeerContractTerms,\n DenominationPubKey,\n DenomKeyType,\n ExchangeAuditor,\n UnblindedSignature,\n codecForPeerContractTerms,\n TrackTransaction,\n} from \"./taler-types.js\";\nimport {\n AbsoluteTime,\n codecForAbsoluteTime,\n codecForTimestamp,\n TalerProtocolDuration,\n TalerProtocolTimestamp,\n} from \"./time.js\";\nimport {\n codecForOrderShortInfo,\n OrderShortInfo,\n} from \"./transactions-types.js\";\n\n/**\n * Identifier for a transaction in the wallet.\n */\nexport type TransactionIdStr = `txn:${string}:${string}`;\n\n/**\n * Identifier for a pending task in the wallet.\n */\nexport type PendingIdStr = `pnd:${string}:${string}`;\n\nexport type TombstoneIdStr = `tmb:${string}:${string}`;\n\n/**\n * Response for the create reserve request to the wallet.\n */\nexport class CreateReserveResponse {\n /**\n * Exchange URL where the bank should create the reserve.\n * The URL is canonicalized in the response.\n */\n exchange: string;\n\n /**\n * Reserve public key of the newly created reserve.\n */\n reservePub: string;\n}\n\nexport interface GetBalanceDetailRequest {\n currency: string;\n}\n\nexport const codecForGetBalanceDetailRequest =\n (): Codec<GetBalanceDetailRequest> =>\n buildCodecForObject<GetBalanceDetailRequest>()\n .property(\"currency\", codecForString())\n .build(\"GetBalanceDetailRequest\");\n\nexport interface Balance {\n scopeInfo: ScopeInfo;\n available: AmountString;\n pendingIncoming: AmountString;\n pendingOutgoing: AmountString;\n\n // Does the balance for this currency have a pending\n // transaction?\n hasPendingTransactions: boolean;\n\n // Is there a pending transaction that would affect the balance\n // and requires user input?\n requiresUserInput: boolean;\n}\n\nexport interface InitRequest {\n skipDefaults?: boolean;\n}\n\nexport interface InitResponse {\n versionInfo: WalletCoreVersion;\n}\n\nexport enum ScopeType {\n Global = \"global\",\n Exchange = \"exchange\",\n Auditor = \"auditor\",\n}\n\nexport type ScopeInfo =\n | { type: ScopeType.Global; currency: string }\n | { type: ScopeType.Exchange; currency: string; url: string }\n | { type: ScopeType.Auditor; currency: string; url: string };\n\nexport interface BalancesResponse {\n balances: Balance[];\n}\n\nexport const codecForBalance = (): Codec<Balance> =>\n buildCodecForObject<Balance>()\n .property(\"scopeInfo\", codecForAny()) // FIXME\n .property(\"available\", codecForString())\n .property(\"hasPendingTransactions\", codecForBoolean())\n .property(\"pendingIncoming\", codecForString())\n .property(\"pendingOutgoing\", codecForString())\n .property(\"requiresUserInput\", codecForBoolean())\n .build(\"Balance\");\n\nexport const codecForBalancesResponse = (): Codec<BalancesResponse> =>\n buildCodecForObject<BalancesResponse>()\n .property(\"balances\", codecForList(codecForBalance()))\n .build(\"BalancesResponse\");\n\n/**\n * For terseness.\n */\nexport function mkAmount(\n value: number,\n fraction: number,\n currency: string,\n): AmountJson {\n return { value, fraction, currency };\n}\n\n/**\n * Status of a coin.\n */\nexport enum CoinStatus {\n /**\n * Withdrawn and never shown to anybody.\n */\n Fresh = \"fresh\",\n\n /**\n * Fresh, but currently marked as \"suspended\", thus won't be used\n * for spending. Used for testing.\n */\n FreshSuspended = \"fresh-suspended\",\n\n /**\n * A coin that has been spent and refreshed.\n */\n Dormant = \"dormant\",\n}\n\n/**\n * Easy to process format for the public data of coins\n * managed by the wallet.\n */\nexport interface CoinDumpJson {\n coins: Array<{\n /**\n * The coin's denomination's public key.\n */\n denom_pub: DenominationPubKey;\n /**\n * Hash of denom_pub.\n */\n denom_pub_hash: string;\n /**\n * Value of the denomination (without any fees).\n */\n denom_value: string;\n /**\n * Public key of the coin.\n */\n coin_pub: string;\n /**\n * Base URL of the exchange for the coin.\n */\n exchange_base_url: string;\n /**\n * Public key of the parent coin.\n * Only present if this coin was obtained via refreshing.\n */\n refresh_parent_coin_pub: string | undefined;\n /**\n * Public key of the reserve for this coin.\n * Only present if this coin was obtained via refreshing.\n */\n withdrawal_reserve_pub: string | undefined;\n coin_status: CoinStatus;\n spend_allocation:\n | {\n id: string;\n amount: string;\n }\n | undefined;\n /**\n * Information about the age restriction\n */\n ageCommitmentProof: AgeCommitmentProof | undefined;\n }>;\n}\n\nexport enum ConfirmPayResultType {\n Done = \"done\",\n Pending = \"pending\",\n}\n\n/**\n * Result for confirmPay\n */\nexport interface ConfirmPayResultDone {\n type: ConfirmPayResultType.Done;\n contractTerms: MerchantContractTerms;\n transactionId: string;\n}\n\nexport interface ConfirmPayResultPending {\n type: ConfirmPayResultType.Pending;\n transactionId: string;\n lastError: TalerErrorDetail | undefined;\n}\n\nexport const codecForTalerErrorDetail = (): Codec<TalerErrorDetail> =>\n buildCodecForObject<TalerErrorDetail>()\n .property(\"code\", codecForNumber())\n .property(\"when\", codecForAbsoluteTime)\n .property(\"hint\", codecOptional(codecForString()))\n .build(\"TalerErrorDetail\");\n\nexport type ConfirmPayResult = ConfirmPayResultDone | ConfirmPayResultPending;\n\nexport const codecForConfirmPayResultPending =\n (): Codec<ConfirmPayResultPending> =>\n buildCodecForObject<ConfirmPayResultPending>()\n .property(\"lastError\", codecOptional(codecForTalerErrorDetail()))\n .property(\"transactionId\", codecForString())\n .property(\"type\", codecForConstString(ConfirmPayResultType.Pending))\n .build(\"ConfirmPayResultPending\");\n\nexport const codecForConfirmPayResultDone = (): Codec<ConfirmPayResultDone> =>\n buildCodecForObject<ConfirmPayResultDone>()\n .property(\"type\", codecForConstString(ConfirmPayResultType.Done))\n .property(\"transactionId\", codecForString())\n .property(\"contractTerms\", codecForMerchantContractTerms())\n .build(\"ConfirmPayResultDone\");\n\nexport const codecForConfirmPayResult = (): Codec<ConfirmPayResult> =>\n buildCodecForUnion<ConfirmPayResult>()\n .discriminateOn(\"type\")\n .alternative(\n ConfirmPayResultType.Pending,\n codecForConfirmPayResultPending(),\n )\n .alternative(ConfirmPayResultType.Done, codecForConfirmPayResultDone())\n .build(\"ConfirmPayResult\");\n\n/**\n * Information about all sender wire details known to the wallet,\n * as well as exchanges that accept these wire types.\n */\nexport interface SenderWireInfos {\n /**\n * Mapping from exchange base url to list of accepted\n * wire types.\n */\n exchangeWireTypes: { [exchangeBaseUrl: string]: string[] };\n\n /**\n * Sender wire information stored in the wallet.\n */\n senderWires: string[];\n}\n\n/**\n * Request to mark a reserve as confirmed.\n */\nexport interface ConfirmReserveRequest {\n /**\n * Public key of then reserve that should be marked\n * as confirmed.\n */\n reservePub: string;\n}\n\nexport const codecForConfirmReserveRequest = (): Codec<ConfirmReserveRequest> =>\n buildCodecForObject<ConfirmReserveRequest>()\n .property(\"reservePub\", codecForString())\n .build(\"ConfirmReserveRequest\");\n\nexport interface PrepareRefundResult {\n proposalId: string;\n\n effectivePaid: AmountString;\n gone: AmountString;\n granted: AmountString;\n pending: boolean;\n awaiting: AmountString;\n\n info: OrderShortInfo;\n}\n\nexport interface PrepareTipResult {\n /**\n * Unique ID for the tip assigned by the wallet.\n * Typically different from the merchant-generated tip ID.\n */\n walletTipId: string;\n\n /**\n * Has the tip already been accepted?\n */\n accepted: boolean;\n\n /**\n * Amount that the merchant gave.\n */\n tipAmountRaw: AmountString;\n\n /**\n * Amount that arrived at the wallet.\n * Might be lower than the raw amount due to fees.\n */\n tipAmountEffective: AmountString;\n\n /**\n * Base URL of the merchant backend giving then tip.\n */\n merchantBaseUrl: string;\n\n /**\n * Base URL of the exchange that is used to withdraw the tip.\n * Determined by the merchant, the wallet/user has no choice here.\n */\n exchangeBaseUrl: string;\n\n /**\n * Time when the tip will expire. After it expired, it can't be picked\n * up anymore.\n */\n expirationTimestamp: TalerProtocolTimestamp;\n}\n\nexport interface AcceptTipResponse {\n transactionId: string;\n next_url?: string;\n}\n\nexport const codecForPrepareTipResult = (): Codec<PrepareTipResult> =>\n buildCodecForObject<PrepareTipResult>()\n .property(\"accepted\", codecForBoolean())\n .property(\"tipAmountRaw\", codecForAmountString())\n .property(\"tipAmountEffective\", codecForAmountString())\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"merchantBaseUrl\", codecForString())\n .property(\"expirationTimestamp\", codecForTimestamp)\n .property(\"walletTipId\", codecForString())\n .build(\"PrepareTipResult\");\n\nexport interface BenchmarkResult {\n time: { [s: string]: number };\n repetitions: number;\n}\n\nexport enum PreparePayResultType {\n PaymentPossible = \"payment-possible\",\n InsufficientBalance = \"insufficient-balance\",\n AlreadyConfirmed = \"already-confirmed\",\n}\n\nexport const codecForPreparePayResultPaymentPossible =\n (): Codec<PreparePayResultPaymentPossible> =>\n buildCodecForObject<PreparePayResultPaymentPossible>()\n .property(\"amountEffective\", codecForAmountString())\n .property(\"amountRaw\", codecForAmountString())\n .property(\"contractTerms\", codecForMerchantContractTerms())\n .property(\"proposalId\", codecForString())\n .property(\"contractTermsHash\", codecForString())\n .property(\"talerUri\", codecForString())\n .property(\"noncePriv\", codecForString())\n .property(\n \"status\",\n codecForConstString(PreparePayResultType.PaymentPossible),\n )\n .build(\"PreparePayResultPaymentPossible\");\n\n/**\n * Detailed reason for why the wallet's balance is insufficient.\n */\nexport interface PayMerchantInsufficientBalanceDetails {\n /**\n * Amount requested by the merchant.\n */\n amountRequested: AmountString;\n\n /**\n * Balance of type \"available\" (see balance.ts for definition).\n */\n balanceAvailable: AmountString;\n\n /**\n * Balance of type \"material\" (see balance.ts for definition).\n */\n balanceMaterial: AmountString;\n\n /**\n * Balance of type \"age-acceptable\" (see balance.ts for definition).\n */\n balanceAgeAcceptable: AmountString;\n\n /**\n * Balance of type \"merchant-acceptable\" (see balance.ts for definition).\n */\n balanceMerchantAcceptable: AmountString;\n\n /**\n * Balance of type \"merchant-depositable\" (see balance.ts for definition).\n */\n balanceMerchantDepositable: AmountString;\n\n /**\n * If the payment would succeed without fees\n * (i.e. balanceMechantWireable >= amountRequested),\n * this field contains an estimate of the amount that would additionally\n * be required to cover the fees.\n *\n * It is not possible to give an exact value here, since it depends\n * on the coin selection for the amount that would be additionally withdrawn.\n */\n feeGapEstimate: AmountString;\n}\n\nexport const codecForPayMerchantInsufficientBalanceDetails =\n (): Codec<PayMerchantInsufficientBalanceDetails> =>\n buildCodecForObject<PayMerchantInsufficientBalanceDetails>()\n .property(\"amountRequested\", codecForAmountString())\n .property(\"balanceAgeAcceptable\", codecForAmountString())\n .property(\"balanceAvailable\", codecForAmountString())\n .property(\"balanceMaterial\", codecForAmountString())\n .property(\"balanceMerchantAcceptable\", codecForAmountString())\n .property(\"balanceMerchantDepositable\", codecForAmountString())\n .property(\"feeGapEstimate\", codecForAmountString())\n .build(\"PayMerchantInsufficientBalanceDetails\");\n\nexport const codecForPreparePayResultInsufficientBalance =\n (): Codec<PreparePayResultInsufficientBalance> =>\n buildCodecForObject<PreparePayResultInsufficientBalance>()\n .property(\"amountRaw\", codecForAmountString())\n .property(\"contractTerms\", codecForAny())\n .property(\"talerUri\", codecForString())\n .property(\"proposalId\", codecForString())\n .property(\"noncePriv\", codecForString())\n .property(\n \"status\",\n codecForConstString(PreparePayResultType.InsufficientBalance),\n )\n .property(\n \"balanceDetails\",\n codecForPayMerchantInsufficientBalanceDetails(),\n )\n .build(\"PreparePayResultInsufficientBalance\");\n\nexport const codecForPreparePayResultAlreadyConfirmed =\n (): Codec<PreparePayResultAlreadyConfirmed> =>\n buildCodecForObject<PreparePayResultAlreadyConfirmed>()\n .property(\n \"status\",\n codecForConstString(PreparePayResultType.AlreadyConfirmed),\n )\n .property(\"amountEffective\", codecForAmountString())\n .property(\"amountRaw\", codecForAmountString())\n .property(\"paid\", codecForBoolean())\n .property(\"talerUri\", codecOptional(codecForString()))\n .property(\"contractTerms\", codecForAny())\n .property(\"contractTermsHash\", codecForString())\n .property(\"proposalId\", codecForString())\n .build(\"PreparePayResultAlreadyConfirmed\");\n\nexport const codecForPreparePayResult = (): Codec<PreparePayResult> =>\n buildCodecForUnion<PreparePayResult>()\n .discriminateOn(\"status\")\n .alternative(\n PreparePayResultType.AlreadyConfirmed,\n codecForPreparePayResultAlreadyConfirmed(),\n )\n .alternative(\n PreparePayResultType.InsufficientBalance,\n codecForPreparePayResultInsufficientBalance(),\n )\n .alternative(\n PreparePayResultType.PaymentPossible,\n codecForPreparePayResultPaymentPossible(),\n )\n .build(\"PreparePayResult\");\n\n/**\n * Result of a prepare pay operation.\n */\nexport type PreparePayResult =\n | PreparePayResultInsufficientBalance\n | PreparePayResultAlreadyConfirmed\n | PreparePayResultPaymentPossible;\n\n/**\n * Payment is possible.\n */\nexport interface PreparePayResultPaymentPossible {\n status: PreparePayResultType.PaymentPossible;\n proposalId: string;\n contractTerms: MerchantContractTerms;\n contractTermsHash: string;\n amountRaw: string;\n amountEffective: string;\n noncePriv: string;\n talerUri: string;\n}\n\nexport interface PreparePayResultInsufficientBalance {\n status: PreparePayResultType.InsufficientBalance;\n proposalId: string;\n contractTerms: MerchantContractTerms;\n amountRaw: string;\n noncePriv: string;\n talerUri: string;\n balanceDetails: PayMerchantInsufficientBalanceDetails;\n}\n\nexport interface PreparePayResultAlreadyConfirmed {\n status: PreparePayResultType.AlreadyConfirmed;\n contractTerms: MerchantContractTerms;\n paid: boolean;\n amountRaw: string;\n amountEffective: string;\n contractTermsHash: string;\n proposalId: string;\n talerUri?: string;\n}\n\nexport interface BankWithdrawDetails {\n selectionDone: boolean;\n transferDone: boolean;\n amount: AmountJson;\n senderWire?: string;\n suggestedExchange?: string;\n confirmTransferUrl?: string;\n wireTypes: string[];\n}\n\nexport interface AcceptWithdrawalResponse {\n reservePub: string;\n confirmTransferUrl?: string;\n transactionId: string;\n}\n\n/**\n * Details about a purchase, including refund status.\n */\nexport interface PurchaseDetails {\n contractTerms: Record<string, undefined>;\n hasRefund: boolean;\n totalRefundAmount: AmountJson;\n totalRefundAndRefreshFees: AmountJson;\n}\n\nexport interface WalletDiagnostics {\n walletManifestVersion: string;\n walletManifestDisplayVersion: string;\n errors: string[];\n firefoxIdbProblem: boolean;\n dbOutdated: boolean;\n}\n\nexport interface TalerErrorDetail {\n code: TalerErrorCode;\n when?: AbsoluteTime;\n hint?: string;\n [x: string]: unknown;\n}\n\n/**\n * Minimal information needed about a planchet for unblinding a signature.\n *\n * Can be a withdrawal/tipping/refresh planchet.\n */\nexport interface PlanchetUnblindInfo {\n denomPub: DenominationPubKey;\n blindingKey: string;\n}\n\nexport interface WithdrawalPlanchet {\n coinPub: string;\n coinPriv: string;\n reservePub: string;\n denomPubHash: string;\n denomPub: DenominationPubKey;\n blindingKey: string;\n withdrawSig: string;\n coinEv: CoinEnvelope;\n coinValue: AmountJson;\n coinEvHash: string;\n ageCommitmentProof?: AgeCommitmentProof;\n}\n\nexport interface PlanchetCreationRequest {\n secretSeed: string;\n coinIndex: number;\n value: AmountJson;\n feeWithdraw: AmountJson;\n denomPub: DenominationPubKey;\n reservePub: string;\n reservePriv: string;\n restrictAge?: number;\n}\n\n/**\n * Reasons for why a coin is being refreshed.\n */\nexport enum RefreshReason {\n Manual = \"manual\",\n PayMerchant = \"pay-merchant\",\n PayDeposit = \"pay-deposit\",\n PayPeerPush = \"pay-peer-push\",\n PayPeerPull = \"pay-peer-pull\",\n Refund = \"refund\",\n AbortPay = \"abort-pay\",\n Recoup = \"recoup\",\n BackupRestored = \"backup-restored\",\n Scheduled = \"scheduled\",\n}\n\n/**\n * Request to refresh a single coin.\n */\nexport interface CoinRefreshRequest {\n readonly coinPub: string;\n readonly amount: AmountString;\n}\n\n/**\n * Wrapper for refresh group IDs.\n */\nexport interface RefreshGroupId {\n readonly refreshGroupId: string;\n}\n\n/**\n * Private data required to make a deposit permission.\n */\nexport interface DepositInfo {\n exchangeBaseUrl: string;\n contractTermsHash: string;\n coinPub: string;\n coinPriv: string;\n spendAmount: AmountJson;\n timestamp: TalerProtocolTimestamp;\n refundDeadline: TalerProtocolTimestamp;\n merchantPub: string;\n feeDeposit: AmountJson;\n wireInfoHash: string;\n denomKeyType: DenomKeyType;\n denomPubHash: string;\n denomSig: UnblindedSignature;\n\n requiredMinimumAge?: number;\n\n ageCommitmentProof?: AgeCommitmentProof;\n}\n\nexport interface ExchangesListResponse {\n exchanges: ExchangeListItem[];\n}\n\nexport interface ExchangeDetailedResponse {\n exchange: ExchangeFullDetails;\n}\n\nexport interface WalletCoreVersion {\n hash: string | undefined;\n version: string;\n exchange: string;\n merchant: string;\n bank: string;\n devMode: boolean;\n}\n\nexport interface KnownBankAccountsInfo {\n uri: PaytoUri;\n kyc_completed: boolean;\n currency: string;\n alias: string;\n}\n\nexport interface KnownBankAccounts {\n accounts: KnownBankAccountsInfo[];\n}\n\nexport interface ExchangeTosStatusDetails {\n acceptedVersion?: string;\n currentVersion?: string;\n contentType?: string;\n content?: string;\n}\n\n/**\n * Wire fee for one wire method\n */\nexport interface WireFee {\n /**\n * Fee for wire transfers.\n */\n wireFee: AmountString;\n\n /**\n * Fees to close and refund a reserve.\n */\n closingFee: AmountString;\n\n /**\n * Start date of the fee.\n */\n startStamp: TalerProtocolTimestamp;\n\n /**\n * End date of the fee.\n */\n endStamp: TalerProtocolTimestamp;\n\n /**\n * Signature made by the exchange master key.\n */\n sig: string;\n}\n\n/**\n * Information about one of the exchange's bank accounts.\n */\nexport interface ExchangeAccount {\n payto_uri: string;\n master_sig: string;\n}\n\nexport type WireFeeMap = { [wireMethod: string]: WireFee[] };\n\nexport interface WireInfo {\n feesForType: WireFeeMap;\n accounts: ExchangeAccount[];\n}\n\nexport interface ExchangeGlobalFees {\n startDate: TalerProtocolTimestamp;\n endDate: TalerProtocolTimestamp;\n\n historyFee: AmountString;\n accountFee: AmountString;\n purseFee: AmountString;\n\n historyTimeout: TalerProtocolDuration;\n purseTimeout: TalerProtocolDuration;\n\n purseLimit: number;\n\n signature: string;\n}\n\nconst codecForExchangeAccount = (): Codec<ExchangeAccount> =>\n buildCodecForObject<ExchangeAccount>()\n .property(\"payto_uri\", codecForString())\n .property(\"master_sig\", codecForString())\n .build(\"codecForExchangeAccount\");\n\nconst codecForWireFee = (): Codec<WireFee> =>\n buildCodecForObject<WireFee>()\n .property(\"sig\", codecForString())\n .property(\"wireFee\", codecForAmountString())\n .property(\"closingFee\", codecForAmountString())\n .property(\"startStamp\", codecForTimestamp)\n .property(\"endStamp\", codecForTimestamp)\n .build(\"codecForWireFee\");\n\nconst codecForWireInfo = (): Codec<WireInfo> =>\n buildCodecForObject<WireInfo>()\n .property(\"feesForType\", codecForMap(codecForList(codecForWireFee())))\n .property(\"accounts\", codecForList(codecForExchangeAccount()))\n .build(\"codecForWireInfo\");\n\nexport interface DenominationInfo {\n /**\n * Value of one coin of the denomination.\n */\n value: AmountString;\n\n /**\n * Hash of the denomination public key.\n * Stored in the database for faster lookups.\n */\n denomPubHash: string;\n\n denomPub: DenominationPubKey;\n\n /**\n * Fee for withdrawing.\n */\n feeWithdraw: AmountString;\n\n /**\n * Fee for depositing.\n */\n feeDeposit: AmountString;\n\n /**\n * Fee for refreshing.\n */\n feeRefresh: AmountString;\n\n /**\n * Fee for refunding.\n */\n feeRefund: AmountString;\n\n /**\n * Validity start date of the denomination.\n */\n stampStart: TalerProtocolTimestamp;\n\n /**\n * Date after which the currency can't be withdrawn anymore.\n */\n stampExpireWithdraw: TalerProtocolTimestamp;\n\n /**\n * Date after the denomination officially doesn't exist anymore.\n */\n stampExpireLegal: TalerProtocolTimestamp;\n\n /**\n * Data after which coins of this denomination can't be deposited anymore.\n */\n stampExpireDeposit: TalerProtocolTimestamp;\n\n exchangeBaseUrl: string;\n}\n\nexport type DenomOperation = \"deposit\" | \"withdraw\" | \"refresh\" | \"refund\";\nexport type DenomOperationMap<T> = { [op in DenomOperation]: T };\n\nexport interface FeeDescription {\n group: string;\n from: AbsoluteTime;\n until: AbsoluteTime;\n fee?: AmountString;\n}\n\nexport interface FeeDescriptionPair {\n group: string;\n from: AbsoluteTime;\n until: AbsoluteTime;\n left?: AmountString;\n right?: AmountString;\n}\n\nexport interface TimePoint<T> {\n id: string;\n group: string;\n fee: AmountString;\n type: \"start\" | \"end\";\n moment: AbsoluteTime;\n denom: T;\n}\n\nexport interface ExchangeFullDetails {\n exchangeBaseUrl: string;\n currency: string;\n paytoUris: string[];\n tos: ExchangeTosStatusDetails;\n auditors: ExchangeAuditor[];\n wireInfo: WireInfo;\n denomFees: DenomOperationMap<FeeDescription[]>;\n transferFees: Record<string, FeeDescription[]>;\n globalFees: FeeDescription[];\n}\n\nexport enum ExchangeTosStatus {\n New = \"new\",\n Accepted = \"accepted\",\n Changed = \"changed\",\n NotFound = \"not-found\",\n Unknown = \"unknown\",\n}\n\nexport enum ExchangeEntryStatus {\n Unknown = \"unknown\",\n Outdated = \"outdated\",\n Ok = \"ok\",\n}\n\nexport interface OperationErrorInfo {\n error: TalerErrorDetail;\n}\n\n// FIXME: This should probably include some error status.\nexport interface ExchangeListItem {\n exchangeBaseUrl: string;\n currency: string | undefined;\n paytoUris: string[];\n tosStatus: ExchangeTosStatus;\n exchangeStatus: ExchangeEntryStatus;\n ageRestrictionOptions: number[];\n /**\n * Permanently added to the wallet, as opposed to just\n * temporarily queried.\n */\n permanent: boolean;\n\n /**\n * Information about the last error that occurred when trying\n * to update the exchange info.\n */\n lastUpdateErrorInfo?: OperationErrorInfo;\n}\n\nconst codecForAuditorDenomSig = (): Codec<AuditorDenomSig> =>\n buildCodecForObject<AuditorDenomSig>()\n .property(\"denom_pub_h\", codecForString())\n .property(\"auditor_sig\", codecForString())\n .build(\"AuditorDenomSig\");\n\nconst codecForExchangeAuditor = (): Codec<ExchangeAuditor> =>\n buildCodecForObject<ExchangeAuditor>()\n .property(\"auditor_pub\", codecForString())\n .property(\"auditor_url\", codecForString())\n .property(\"denomination_keys\", codecForList(codecForAuditorDenomSig()))\n .build(\"codecForExchangeAuditor\");\n\nconst codecForExchangeTos = (): Codec<ExchangeTosStatusDetails> =>\n buildCodecForObject<ExchangeTosStatusDetails>()\n .property(\"acceptedVersion\", codecOptional(codecForString()))\n .property(\"currentVersion\", codecOptional(codecForString()))\n .property(\"contentType\", codecOptional(codecForString()))\n .property(\"content\", codecOptional(codecForString()))\n .build(\"ExchangeTos\");\n\nexport const codecForFeeDescriptionPair = (): Codec<FeeDescriptionPair> =>\n buildCodecForObject<FeeDescriptionPair>()\n .property(\"group\", codecForString())\n .property(\"from\", codecForAbsoluteTime)\n .property(\"until\", codecForAbsoluteTime)\n .property(\"left\", codecOptional(codecForAmountString()))\n .property(\"right\", codecOptional(codecForAmountString()))\n .build(\"FeeDescriptionPair\");\n\nexport const codecForFeeDescription = (): Codec<FeeDescription> =>\n buildCodecForObject<FeeDescription>()\n .property(\"group\", codecForString())\n .property(\"from\", codecForAbsoluteTime)\n .property(\"until\", codecForAbsoluteTime)\n .property(\"fee\", codecOptional(codecForAmountString()))\n .build(\"FeeDescription\");\n\nexport const codecForFeesByOperations = (): Codec<\n DenomOperationMap<FeeDescription[]>\n> =>\n buildCodecForObject<DenomOperationMap<FeeDescription[]>>()\n .property(\"deposit\", codecForList(codecForFeeDescription()))\n .property(\"withdraw\", codecForList(codecForFeeDescription()))\n .property(\"refresh\", codecForList(codecForFeeDescription()))\n .property(\"refund\", codecForList(codecForFeeDescription()))\n .build(\"DenomOperationMap\");\n\nexport const codecForExchangeFullDetails = (): Codec<ExchangeFullDetails> =>\n buildCodecForObject<ExchangeFullDetails>()\n .property(\"currency\", codecForString())\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"paytoUris\", codecForList(codecForString()))\n .property(\"tos\", codecForExchangeTos())\n .property(\"auditors\", codecForList(codecForExchangeAuditor()))\n .property(\"wireInfo\", codecForWireInfo())\n .property(\"denomFees\", codecForFeesByOperations())\n .property(\n \"transferFees\",\n codecForMap(codecForList(codecForFeeDescription())),\n )\n .property(\"globalFees\", codecForList(codecForFeeDescription()))\n .build(\"ExchangeFullDetails\");\n\nexport const codecForExchangeListItem = (): Codec<ExchangeListItem> =>\n buildCodecForObject<ExchangeListItem>()\n .property(\"currency\", codecForString())\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"paytoUris\", codecForList(codecForString()))\n .property(\"tosStatus\", codecForAny())\n .property(\"exchangeStatus\", codecForAny())\n .property(\"permanent\", codecForBoolean())\n .property(\"ageRestrictionOptions\", codecForList(codecForNumber()))\n .build(\"ExchangeListItem\");\n\nexport const codecForExchangesListResponse = (): Codec<ExchangesListResponse> =>\n buildCodecForObject<ExchangesListResponse>()\n .property(\"exchanges\", codecForList(codecForExchangeListItem()))\n .build(\"ExchangesListResponse\");\n\nexport interface AcceptManualWithdrawalResult {\n /**\n * Payto URIs that can be used to fund the withdrawal.\n */\n exchangePaytoUris: string[];\n\n /**\n * Public key of the newly created reserve.\n */\n reservePub: string;\n\n transactionId: string;\n}\n\nexport interface ManualWithdrawalDetails {\n /**\n * Did the user accept the current version of the exchange's\n * terms of service?\n */\n tosAccepted: boolean;\n\n /**\n * Amount that the user will transfer to the exchange.\n */\n amountRaw: AmountString;\n\n /**\n * Amount that will be added to the user's wallet balance.\n */\n amountEffective: AmountString;\n\n /**\n * Ways to pay the exchange.\n */\n paytoUris: string[];\n\n /**\n * If the exchange supports age-restricted coins it will return\n * the array of ages.\n */\n ageRestrictionOptions?: number[];\n}\n\n/**\n * Selected denominations withn some extra info.\n */\nexport interface DenomSelectionState {\n totalCoinValue: AmountString;\n totalWithdrawCost: AmountString;\n selectedDenoms: {\n denomPubHash: string;\n count: number;\n }[];\n}\n\n/**\n * Information about what will happen doing a withdrawal.\n *\n * Sent to the wallet frontend to be rendered and shown to the user.\n */\nexport interface ExchangeWithdrawalDetails {\n exchangePaytoUris: string[];\n\n /**\n * Filtered wire info to send to the bank.\n */\n exchangeWireAccounts: string[];\n\n /**\n * Selected denominations for withdraw.\n */\n selectedDenoms: DenomSelectionState;\n\n /**\n * Does the wallet know about an auditor for\n * the exchange that the reserve.\n */\n isAudited: boolean;\n\n /**\n * Did the user already accept the current terms of service for the exchange?\n */\n termsOfServiceAccepted: boolean;\n\n /**\n * The exchange is trusted directly.\n */\n isTrusted: boolean;\n\n /**\n * The earliest deposit expiration of the selected coins.\n */\n earliestDepositExpiration: TalerProtocolTimestamp;\n\n /**\n * Number of currently offered denominations.\n */\n numOfferedDenoms: number;\n\n /**\n * Public keys of trusted auditors for the currency we're withdrawing.\n */\n trustedAuditorPubs: string[];\n\n /**\n * Result of checking the wallet's version\n * against the exchange's version.\n *\n * Older exchanges don't return version information.\n */\n versionMatch: VersionMatchResult | undefined;\n\n /**\n * Libtool-style version string for the exchange or \"unknown\"\n * for older exchanges.\n */\n exchangeVersion: string;\n\n /**\n * Libtool-style version string for the wallet.\n */\n walletVersion: string;\n\n /**\n * Amount that will be subtracted from the reserve's balance.\n */\n withdrawalAmountRaw: AmountString;\n\n /**\n * Amount that will actually be added to the wallet's balance.\n */\n withdrawalAmountEffective: AmountString;\n\n /**\n * If the exchange supports age-restricted coins it will return\n * the array of ages.\n *\n */\n ageRestrictionOptions?: number[];\n}\n\nexport interface GetExchangeTosResult {\n /**\n * Markdown version of the current ToS.\n */\n content: string;\n\n /**\n * Version tag of the current ToS.\n */\n currentEtag: string;\n\n /**\n * Version tag of the last ToS that the user has accepted,\n * if any.\n */\n acceptedEtag: string | undefined;\n\n /**\n * Accepted content type\n */\n contentType: string;\n\n tosStatus: ExchangeTosStatus;\n}\n\nexport interface TestPayArgs {\n merchantBaseUrl: string;\n merchantAuthToken?: string;\n amount: string;\n summary: string;\n forcedCoinSel?: ForcedCoinSel;\n}\n\nexport const codecForTestPayArgs = (): Codec<TestPayArgs> =>\n buildCodecForObject<TestPayArgs>()\n .property(\"merchantBaseUrl\", codecForString())\n .property(\"merchantAuthToken\", codecOptional(codecForString()))\n .property(\"amount\", codecForString())\n .property(\"summary\", codecForString())\n .property(\"forcedCoinSel\", codecForAny())\n .build(\"TestPayArgs\");\n\nexport interface IntegrationTestArgs {\n exchangeBaseUrl: string;\n bankBaseUrl: string;\n bankAccessApiBaseUrl?: string;\n merchantBaseUrl: string;\n merchantAuthToken?: string;\n amountToWithdraw: string;\n amountToSpend: string;\n}\n\nexport const codecForIntegrationTestArgs = (): Codec<IntegrationTestArgs> =>\n buildCodecForObject<IntegrationTestArgs>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"bankBaseUrl\", codecForString())\n .property(\"merchantBaseUrl\", codecForString())\n .property(\"merchantAuthToken\", codecOptional(codecForString()))\n .property(\"amountToSpend\", codecForAmountString())\n .property(\"amountToWithdraw\", codecForAmountString())\n .property(\"bankAccessApiBaseUrl\", codecOptional(codecForAmountString()))\n .build(\"IntegrationTestArgs\");\n\nexport interface AddExchangeRequest {\n exchangeBaseUrl: string;\n forceUpdate?: boolean;\n}\n\nexport const codecForAddExchangeRequest = (): Codec<AddExchangeRequest> =>\n buildCodecForObject<AddExchangeRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"forceUpdate\", codecOptional(codecForBoolean()))\n .build(\"AddExchangeRequest\");\n\nexport interface ForceExchangeUpdateRequest {\n exchangeBaseUrl: string;\n}\n\nexport const codecForForceExchangeUpdateRequest =\n (): Codec<AddExchangeRequest> =>\n buildCodecForObject<AddExchangeRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .build(\"AddExchangeRequest\");\n\nexport interface GetExchangeTosRequest {\n exchangeBaseUrl: string;\n acceptedFormat?: string[];\n}\n\nexport const codecForGetExchangeTosRequest = (): Codec<GetExchangeTosRequest> =>\n buildCodecForObject<GetExchangeTosRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"acceptedFormat\", codecOptional(codecForList(codecForString())))\n .build(\"GetExchangeTosRequest\");\n\nexport interface AcceptManualWithdrawalRequest {\n exchangeBaseUrl: string;\n amount: string;\n restrictAge?: number;\n}\n\nexport const codecForAcceptManualWithdrawalRequet =\n (): Codec<AcceptManualWithdrawalRequest> =>\n buildCodecForObject<AcceptManualWithdrawalRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"amount\", codecForString())\n .property(\"restrictAge\", codecOptional(codecForNumber()))\n .build(\"AcceptManualWithdrawalRequest\");\n\nexport interface GetWithdrawalDetailsForAmountRequest {\n exchangeBaseUrl: string;\n amount: string;\n restrictAge?: number;\n}\n\nexport interface AcceptBankIntegratedWithdrawalRequest {\n talerWithdrawUri: string;\n exchangeBaseUrl: string;\n forcedDenomSel?: ForcedDenomSel;\n restrictAge?: number;\n}\n\nexport const codecForAcceptBankIntegratedWithdrawalRequest =\n (): Codec<AcceptBankIntegratedWithdrawalRequest> =>\n buildCodecForObject<AcceptBankIntegratedWithdrawalRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"talerWithdrawUri\", codecForString())\n .property(\"forcedDenomSel\", codecForAny())\n .property(\"restrictAge\", codecOptional(codecForNumber()))\n .build(\"AcceptBankIntegratedWithdrawalRequest\");\n\nexport const codecForGetWithdrawalDetailsForAmountRequest =\n (): Codec<GetWithdrawalDetailsForAmountRequest> =>\n buildCodecForObject<GetWithdrawalDetailsForAmountRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"amount\", codecForString())\n .property(\"restrictAge\", codecOptional(codecForNumber()))\n .build(\"GetWithdrawalDetailsForAmountRequest\");\n\nexport interface AcceptExchangeTosRequest {\n exchangeBaseUrl: string;\n etag: string | undefined;\n}\n\nexport const codecForAcceptExchangeTosRequest =\n (): Codec<AcceptExchangeTosRequest> =>\n buildCodecForObject<AcceptExchangeTosRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"etag\", codecOptional(codecForString()))\n .build(\"AcceptExchangeTosRequest\");\n\nexport interface ApplyRefundRequest {\n talerRefundUri: string;\n}\n\nexport const codecForApplyRefundRequest = (): Codec<ApplyRefundRequest> =>\n buildCodecForObject<ApplyRefundRequest>()\n .property(\"talerRefundUri\", codecForString())\n .build(\"ApplyRefundRequest\");\n\nexport interface ApplyRefundFromPurchaseIdRequest {\n purchaseId: string;\n}\n\nexport const codecForApplyRefundFromPurchaseIdRequest =\n (): Codec<ApplyRefundFromPurchaseIdRequest> =>\n buildCodecForObject<ApplyRefundFromPurchaseIdRequest>()\n .property(\"purchaseId\", codecForString())\n .build(\"ApplyRefundFromPurchaseIdRequest\");\n\nexport interface GetWithdrawalDetailsForUriRequest {\n talerWithdrawUri: string;\n restrictAge?: number;\n}\n\nexport const codecForGetWithdrawalDetailsForUri =\n (): Codec<GetWithdrawalDetailsForUriRequest> =>\n buildCodecForObject<GetWithdrawalDetailsForUriRequest>()\n .property(\"talerWithdrawUri\", codecForString())\n .property(\"restrictAge\", codecOptional(codecForNumber()))\n .build(\"GetWithdrawalDetailsForUriRequest\");\n\nexport interface ListKnownBankAccountsRequest {\n currency?: string;\n}\n\nexport const codecForListKnownBankAccounts =\n (): Codec<ListKnownBankAccountsRequest> =>\n buildCodecForObject<ListKnownBankAccountsRequest>()\n .property(\"currency\", codecOptional(codecForString()))\n .build(\"ListKnownBankAccountsRequest\");\n\nexport interface AddKnownBankAccountsRequest {\n payto: string;\n alias: string;\n currency: string;\n}\nexport const codecForAddKnownBankAccounts =\n (): Codec<AddKnownBankAccountsRequest> =>\n buildCodecForObject<AddKnownBankAccountsRequest>()\n .property(\"payto\", codecForString())\n .property(\"alias\", codecForString())\n .property(\"currency\", codecForString())\n .build(\"AddKnownBankAccountsRequest\");\n\nexport interface ForgetKnownBankAccountsRequest {\n payto: string;\n}\n\nexport const codecForForgetKnownBankAccounts =\n (): Codec<ForgetKnownBankAccountsRequest> =>\n buildCodecForObject<ForgetKnownBankAccountsRequest>()\n .property(\"payto\", codecForString())\n .build(\"ForgetKnownBankAccountsRequest\");\n\nexport interface AbortProposalRequest {\n proposalId: string;\n}\n\nexport const codecForAbortProposalRequest = (): Codec<AbortProposalRequest> =>\n buildCodecForObject<AbortProposalRequest>()\n .property(\"proposalId\", codecForString())\n .build(\"AbortProposalRequest\");\n\nexport interface GetContractTermsDetailsRequest {\n proposalId: string;\n}\n\nexport const codecForGetContractTermsDetails =\n (): Codec<GetContractTermsDetailsRequest> =>\n buildCodecForObject<GetContractTermsDetailsRequest>()\n .property(\"proposalId\", codecForString())\n .build(\"GetContractTermsDetails\");\n\nexport interface PreparePayRequest {\n talerPayUri: string;\n}\n\nexport const codecForPreparePayRequest = (): Codec<PreparePayRequest> =>\n buildCodecForObject<PreparePayRequest>()\n .property(\"talerPayUri\", codecForString())\n .build(\"PreparePay\");\n\nexport interface PreparePayTemplateRequest {\n talerPayTemplateUri: string;\n templateParams: Record<string, string>;\n}\n\nexport const codecForPreparePayTemplateRequest =\n (): Codec<PreparePayTemplateRequest> =>\n buildCodecForObject<PreparePayTemplateRequest>()\n .property(\"talerPayTemplateUri\", codecForString())\n .property(\"templateParams\", codecForAny())\n .build(\"PreparePayTemplate\");\n\nexport interface ConfirmPayRequest {\n proposalId: string;\n sessionId?: string;\n forcedCoinSel?: ForcedCoinSel;\n}\n\nexport const codecForConfirmPayRequest = (): Codec<ConfirmPayRequest> =>\n buildCodecForObject<ConfirmPayRequest>()\n .property(\"proposalId\", codecForString())\n .property(\"sessionId\", codecOptional(codecForString()))\n .property(\"forcedCoinSel\", codecForAny())\n .build(\"ConfirmPay\");\n\nexport interface CoreApiRequestEnvelope {\n id: string;\n operation: string;\n args: unknown;\n}\nexport type CoreApiResponse = CoreApiResponseSuccess | CoreApiResponseError;\n\nexport type CoreApiMessageEnvelope = CoreApiResponse | CoreApiNotification;\n\nexport interface CoreApiNotification {\n type: \"notification\";\n payload: unknown;\n}\n\nexport interface CoreApiResponseSuccess {\n // To distinguish the message from notifications\n type: \"response\";\n operation: string;\n id: string;\n result: unknown;\n}\n\nexport interface CoreApiResponseError {\n // To distinguish the message from notifications\n type: \"error\";\n operation: string;\n id: string;\n error: TalerErrorDetail;\n}\n\nexport interface WithdrawTestBalanceRequest {\n amount: string;\n bankBaseUrl: string;\n /**\n * Bank access API base URL. Defaults to the bankBaseUrl.\n */\n bankAccessApiBaseUrl?: string;\n exchangeBaseUrl: string;\n forcedDenomSel?: ForcedDenomSel;\n}\n\nexport const withdrawTestBalanceDefaults = {\n amount: \"TESTKUDOS:10\",\n bankBaseUrl: \"https://bank.test.taler.net/\",\n exchangeBaseUrl: \"https://exchange.test.taler.net/\",\n};\n\n/**\n * Request to the crypto worker to make a sync signature.\n */\nexport interface MakeSyncSignatureRequest {\n accountPriv: string;\n oldHash: string | undefined;\n newHash: string;\n}\n\n/**\n * Planchet for a coin during refresh.\n */\nexport interface RefreshPlanchetInfo {\n /**\n * Public key for the coin.\n */\n coinPub: string;\n\n /**\n * Private key for the coin.\n */\n coinPriv: string;\n\n /**\n * Blinded public key.\n */\n coinEv: CoinEnvelope;\n\n coinEvHash: string;\n\n /**\n * Blinding key used.\n */\n blindingKey: string;\n\n maxAge: number;\n ageCommitmentProof?: AgeCommitmentProof;\n}\n\n/**\n * Strategy for loading recovery information.\n */\nexport enum RecoveryMergeStrategy {\n /**\n * Keep the local wallet root key, import and take over providers.\n */\n Ours = \"ours\",\n\n /**\n * Migrate to the wallet root key from the recovery information.\n */\n Theirs = \"theirs\",\n}\n\n/**\n * Load recovery information into the wallet.\n */\nexport interface RecoveryLoadRequest {\n recovery: BackupRecovery;\n strategy?: RecoveryMergeStrategy;\n}\n\nexport const codecForWithdrawTestBalance =\n (): Codec<WithdrawTestBalanceRequest> =>\n buildCodecForObject<WithdrawTestBalanceRequest>()\n .property(\"amount\", codecForString())\n .property(\"bankBaseUrl\", codecForString())\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"forcedDenomSel\", codecForAny())\n .property(\"bankAccessApiBaseUrl\", codecOptional(codecForString()))\n .build(\"WithdrawTestBalanceRequest\");\n\nexport interface ApplyRefundResponse {\n contractTermsHash: string;\n\n transactionId: string;\n\n proposalId: string;\n\n amountEffectivePaid: AmountString;\n\n amountRefundGranted: AmountString;\n\n amountRefundGone: AmountString;\n\n pendingAtExchange: boolean;\n\n info: OrderShortInfo;\n}\n\nexport const codecForApplyRefundResponse = (): Codec<ApplyRefundResponse> =>\n buildCodecForObject<ApplyRefundResponse>()\n .property(\"amountEffectivePaid\", codecForAmountString())\n .property(\"amountRefundGone\", codecForAmountString())\n .property(\"amountRefundGranted\", codecForAmountString())\n .property(\"contractTermsHash\", codecForString())\n .property(\"pendingAtExchange\", codecForBoolean())\n .property(\"proposalId\", codecForString())\n .property(\"transactionId\", codecForString())\n .property(\"info\", codecForOrderShortInfo())\n .build(\"ApplyRefundResponse\");\n\nexport interface SetCoinSuspendedRequest {\n coinPub: string;\n suspended: boolean;\n}\n\nexport const codecForSetCoinSuspendedRequest =\n (): Codec<SetCoinSuspendedRequest> =>\n buildCodecForObject<SetCoinSuspendedRequest>()\n .property(\"coinPub\", codecForString())\n .property(\"suspended\", codecForBoolean())\n .build(\"SetCoinSuspendedRequest\");\n\nexport interface ForceRefreshRequest {\n coinPubList: string[];\n}\n\nexport const codecForForceRefreshRequest = (): Codec<ForceRefreshRequest> =>\n buildCodecForObject<ForceRefreshRequest>()\n .property(\"coinPubList\", codecForList(codecForString()))\n .build(\"ForceRefreshRequest\");\n\nexport interface PrepareRefundRequest {\n talerRefundUri: string;\n}\n\nexport const codecForPrepareRefundRequest = (): Codec<PrepareRefundRequest> =>\n buildCodecForObject<PrepareRefundRequest>()\n .property(\"talerRefundUri\", codecForString())\n .build(\"PrepareRefundRequest\");\n\nexport interface PrepareTipRequest {\n talerTipUri: string;\n}\n\nexport const codecForPrepareTipRequest = (): Codec<PrepareTipRequest> =>\n buildCodecForObject<PrepareTipRequest>()\n .property(\"talerTipUri\", codecForString())\n .build(\"PrepareTipRequest\");\n\nexport interface AcceptTipRequest {\n walletTipId: string;\n}\n\nexport const codecForAcceptTipRequest = (): Codec<AcceptTipRequest> =>\n buildCodecForObject<AcceptTipRequest>()\n .property(\"walletTipId\", codecForString())\n .build(\"AcceptTipRequest\");\n\nexport interface SuspendTransactionRequest {\n transactionId: string;\n}\n\nexport const codecForSuspendTransaction =\n (): Codec<SuspendTransactionRequest> =>\n buildCodecForObject<AbortTransactionRequest>()\n .property(\"transactionId\", codecForString())\n .build(\"SuspendTransactionRequest\");\n\nexport interface ResumeTransactionRequest {\n transactionId: string;\n}\n\nexport const codecForResumeTransaction =\n (): Codec<ResumeTransactionRequest> =>\n buildCodecForObject<ResumeTransactionRequest>()\n .property(\"transactionId\", codecForString())\n .build(\"ResumeTransactionRequest\");\n\nexport interface AbortTransactionRequest {\n transactionId: string;\n\n /**\n * Move the payment immediately into an aborted state.\n * The UI should warn the user that this might lead\n * to money being lost.\n *\n * Defaults to false.\n */\n forceImmediateAbort?: boolean;\n}\n\nexport const codecForAbortTransaction = (): Codec<AbortTransactionRequest> =>\n buildCodecForObject<AbortTransactionRequest>()\n .property(\"transactionId\", codecForString())\n .property(\"forceImmediateAbort\", codecOptional(codecForBoolean()))\n .build(\"AbortTransactionRequest\");\n\nexport interface GetFeeForDepositRequest {\n depositPaytoUri: string;\n amount: AmountString;\n}\n\nexport interface DepositGroupFees {\n coin: AmountString;\n wire: AmountString;\n refresh: AmountString;\n}\n\nexport interface CreateDepositGroupRequest {\n depositPaytoUri: string;\n amount: AmountString;\n}\n\nexport const codecForGetFeeForDeposit = (): Codec<GetFeeForDepositRequest> =>\n buildCodecForObject<GetFeeForDepositRequest>()\n .property(\"amount\", codecForAmountString())\n .property(\"depositPaytoUri\", codecForString())\n .build(\"GetFeeForDepositRequest\");\n\nexport interface PrepareDepositRequest {\n depositPaytoUri: string;\n amount: AmountString;\n}\nexport const codecForPrepareDepositRequest = (): Codec<PrepareDepositRequest> =>\n buildCodecForObject<PrepareDepositRequest>()\n .property(\"amount\", codecForAmountString())\n .property(\"depositPaytoUri\", codecForString())\n .build(\"PrepareDepositRequest\");\n\nexport interface PrepareDepositResponse {\n totalDepositCost: AmountString;\n effectiveDepositAmount: AmountString;\n}\n\nexport const codecForCreateDepositGroupRequest =\n (): Codec<CreateDepositGroupRequest> =>\n buildCodecForObject<CreateDepositGroupRequest>()\n .property(\"amount\", codecForAmountString())\n .property(\"depositPaytoUri\", codecForString())\n .build(\"CreateDepositGroupRequest\");\n\nexport interface CreateDepositGroupResponse {\n depositGroupId: string;\n transactionId: string;\n}\n\nexport interface TrackDepositGroupRequest {\n depositGroupId: string;\n}\n\nexport interface TrackDepositGroupResponse {\n responses: TrackTransaction[];\n}\n\nexport const codecForTrackDepositGroupRequest =\n (): Codec<TrackDepositGroupRequest> =>\n buildCodecForObject<TrackDepositGroupRequest>()\n .property(\"depositGroupId\", codecForAmountString())\n .build(\"TrackDepositGroupRequest\");\n\nexport interface WithdrawUriInfoResponse {\n amount: AmountString;\n defaultExchangeBaseUrl?: string;\n possibleExchanges: ExchangeListItem[];\n}\n\nexport const codecForWithdrawUriInfoResponse =\n (): Codec<WithdrawUriInfoResponse> =>\n buildCodecForObject<WithdrawUriInfoResponse>()\n .property(\"amount\", codecForAmountString())\n .property(\"defaultExchangeBaseUrl\", codecOptional(codecForString()))\n .property(\"possibleExchanges\", codecForList(codecForExchangeListItem()))\n .build(\"WithdrawUriInfoResponse\");\n\nexport interface WalletCurrencyInfo {\n trustedAuditors: {\n currency: string;\n auditorPub: string;\n auditorBaseUrl: string;\n }[];\n trustedExchanges: {\n currency: string;\n exchangeMasterPub: string;\n exchangeBaseUrl: string;\n }[];\n}\n\nexport interface DeleteTransactionRequest {\n transactionId: string;\n}\n\nexport interface RetryTransactionRequest {\n transactionId: string;\n}\n\nexport const codecForDeleteTransactionRequest =\n (): Codec<DeleteTransactionRequest> =>\n buildCodecForObject<DeleteTransactionRequest>()\n .property(\"transactionId\", codecForString())\n .build(\"DeleteTransactionRequest\");\n\nexport const codecForRetryTransactionRequest =\n (): Codec<RetryTransactionRequest> =>\n buildCodecForObject<RetryTransactionRequest>()\n .property(\"transactionId\", codecForString())\n .build(\"RetryTransactionRequest\");\n\nexport interface SetWalletDeviceIdRequest {\n /**\n * New wallet device ID to set.\n */\n walletDeviceId: string;\n}\n\nexport const codecForSetWalletDeviceIdRequest =\n (): Codec<SetWalletDeviceIdRequest> =>\n buildCodecForObject<SetWalletDeviceIdRequest>()\n .property(\"walletDeviceId\", codecForString())\n .build(\"SetWalletDeviceIdRequest\");\n\nexport interface WithdrawFakebankRequest {\n amount: AmountString;\n exchange: string;\n bank: string;\n}\n\nexport enum AttentionPriority {\n High = \"high\",\n Medium = \"medium\",\n Low = \"low\",\n}\n\nexport interface UserAttentionByIdRequest {\n entityId: string;\n type: AttentionType;\n}\n\nexport const codecForUserAttentionByIdRequest =\n (): Codec<UserAttentionByIdRequest> =>\n buildCodecForObject<UserAttentionByIdRequest>()\n .property(\"type\", codecForAny())\n .property(\"entityId\", codecForString())\n .build(\"UserAttentionByIdRequest\");\n\nexport const codecForUserAttentionsRequest = (): Codec<UserAttentionsRequest> =>\n buildCodecForObject<UserAttentionsRequest>()\n .property(\n \"priority\",\n codecOptional(\n codecForEither(\n codecForConstString(AttentionPriority.Low),\n codecForConstString(AttentionPriority.Medium),\n codecForConstString(AttentionPriority.High),\n ),\n ),\n )\n .build(\"UserAttentionsRequest\");\n\nexport interface UserAttentionsRequest {\n priority?: AttentionPriority;\n}\n\nexport type AttentionInfo =\n | AttentionKycWithdrawal\n | AttentionBackupUnpaid\n | AttentionBackupExpiresSoon\n | AttentionMerchantRefund\n | AttentionExchangeTosChanged\n | AttentionExchangeKeyExpired\n | AttentionExchangeDenominationExpired\n | AttentionAuditorTosChanged\n | AttentionAuditorKeyExpires\n | AttentionAuditorDenominationExpires\n | AttentionPullPaymentPaid\n | AttentionPushPaymentReceived;\n\nexport enum AttentionType {\n KycWithdrawal = \"kyc-withdrawal\",\n\n BackupUnpaid = \"backup-unpaid\",\n BackupExpiresSoon = \"backup-expires-soon\",\n MerchantRefund = \"merchant-refund\",\n\n ExchangeTosChanged = \"exchange-tos-changed\",\n ExchangeKeyExpired = \"exchange-key-expired\",\n ExchangeKeyExpiresSoon = \"exchange-key-expires-soon\",\n ExchangeDenominationsExpired = \"exchange-denominations-expired\",\n ExchangeDenominationsExpiresSoon = \"exchange-denominations-expires-soon\",\n\n AuditorTosChanged = \"auditor-tos-changed\",\n AuditorKeyExpires = \"auditor-key-expires\",\n AuditorDenominationsExpires = \"auditor-denominations-expires\",\n\n PullPaymentPaid = \"pull-payment-paid\",\n PushPaymentReceived = \"push-payment-withdrawn\",\n}\n\nexport const UserAttentionPriority: {\n [type in AttentionType]: AttentionPriority;\n} = {\n \"kyc-withdrawal\": AttentionPriority.Medium,\n\n \"backup-unpaid\": AttentionPriority.High,\n \"backup-expires-soon\": AttentionPriority.Medium,\n \"merchant-refund\": AttentionPriority.Medium,\n\n \"exchange-tos-changed\": AttentionPriority.Medium,\n\n \"exchange-key-expired\": AttentionPriority.High,\n \"exchange-key-expires-soon\": AttentionPriority.Medium,\n \"exchange-denominations-expired\": AttentionPriority.High,\n \"exchange-denominations-expires-soon\": AttentionPriority.Medium,\n\n \"auditor-tos-changed\": AttentionPriority.Medium,\n \"auditor-key-expires\": AttentionPriority.Medium,\n \"auditor-denominations-expires\": AttentionPriority.Medium,\n\n \"pull-payment-paid\": AttentionPriority.High,\n \"push-payment-withdrawn\": AttentionPriority.High,\n};\n\ninterface AttentionBackupExpiresSoon {\n type: AttentionType.BackupExpiresSoon;\n provider_base_url: string;\n}\ninterface AttentionBackupUnpaid {\n type: AttentionType.BackupUnpaid;\n provider_base_url: string;\n talerUri: string;\n}\n\ninterface AttentionMerchantRefund {\n type: AttentionType.MerchantRefund;\n transactionId: string;\n}\n\ninterface AttentionKycWithdrawal {\n type: AttentionType.KycWithdrawal;\n transactionId: string;\n}\n\ninterface AttentionExchangeTosChanged {\n type: AttentionType.ExchangeTosChanged;\n exchange_base_url: string;\n}\ninterface AttentionExchangeKeyExpired {\n type: AttentionType.ExchangeKeyExpired;\n exchange_base_url: string;\n}\ninterface AttentionExchangeDenominationExpired {\n type: AttentionType.ExchangeDenominationsExpired;\n exchange_base_url: string;\n}\ninterface AttentionAuditorTosChanged {\n type: AttentionType.AuditorTosChanged;\n auditor_base_url: string;\n}\n\ninterface AttentionAuditorKeyExpires {\n type: AttentionType.AuditorKeyExpires;\n auditor_base_url: string;\n}\ninterface AttentionAuditorDenominationExpires {\n type: AttentionType.AuditorDenominationsExpires;\n auditor_base_url: string;\n}\ninterface AttentionPullPaymentPaid {\n type: AttentionType.PullPaymentPaid;\n transactionId: string;\n}\n\ninterface AttentionPushPaymentReceived {\n type: AttentionType.PushPaymentReceived;\n transactionId: string;\n}\n\nexport type UserAttentionUnreadList = Array<{\n info: AttentionInfo;\n when: AbsoluteTime;\n read: boolean;\n}>;\n\nexport interface UserAttentionsResponse {\n pending: UserAttentionUnreadList;\n}\n\nexport interface UserAttentionsCountResponse {\n total: number;\n}\n\nexport const codecForWithdrawFakebankRequest =\n (): Codec<WithdrawFakebankRequest> =>\n buildCodecForObject<WithdrawFakebankRequest>()\n .property(\"amount\", codecForAmountString())\n .property(\"bank\", codecForString())\n .property(\"exchange\", codecForString())\n .build(\"WithdrawFakebankRequest\");\n\nexport interface ImportDb {\n dump: any;\n}\n\nexport const codecForImportDbRequest = (): Codec<ImportDb> =>\n buildCodecForObject<ImportDb>()\n .property(\"dump\", codecForAny())\n .build(\"ImportDbRequest\");\n\nexport interface ForcedDenomSel {\n denoms: {\n value: AmountString;\n count: number;\n }[];\n}\n\n/**\n * Forced coin selection for deposits/payments.\n */\nexport interface ForcedCoinSel {\n coins: {\n value: AmountString;\n contribution: AmountString;\n }[];\n}\n\nexport interface TestPayResult {\n payCoinSelection: PayCoinSelection;\n}\n\n/**\n * Result of selecting coins, contains the exchange, and selected\n * coins with their denomination.\n */\nexport interface PayCoinSelection {\n /**\n * Amount requested by the merchant.\n */\n paymentAmount: AmountString;\n\n /**\n * Public keys of the coins that were selected.\n */\n coinPubs: string[];\n\n /**\n * Amount that each coin contributes.\n */\n coinContributions: AmountString[];\n\n /**\n * How much of the wire fees is the customer paying?\n */\n customerWireFees: AmountString;\n\n /**\n * How much of the deposit fees is the customer paying?\n */\n customerDepositFees: AmountString;\n}\n\nexport interface CheckPeerPushDebitRequest {\n /**\n * Preferred exchange to use for the p2p payment.\n */\n exchangeBaseUrl?: string;\n\n /**\n * Instructed amount.\n *\n * FIXME: Allow specifying the instructed amount type.\n */\n amount: AmountString;\n}\n\nexport const codecForCheckPeerPushDebitRequest =\n (): Codec<CheckPeerPushDebitRequest> =>\n buildCodecForObject<CheckPeerPushDebitRequest>()\n .property(\"exchangeBaseUrl\", codecOptional(codecForString()))\n .property(\"amount\", codecForAmountString())\n .build(\"CheckPeerPushDebitRequest\");\n\nexport interface CheckPeerPushDebitResponse {\n amountRaw: AmountString;\n amountEffective: AmountString;\n}\n\nexport interface InitiatePeerPushPaymentRequest {\n exchangeBaseUrl?: string;\n partialContractTerms: PeerContractTerms;\n}\n\nexport interface InitiatePeerPushPaymentResponse {\n exchangeBaseUrl: string;\n pursePub: string;\n mergePriv: string;\n contractPriv: string;\n talerUri: string;\n transactionId: string;\n}\n\nexport const codecForInitiatePeerPushPaymentRequest =\n (): Codec<InitiatePeerPushPaymentRequest> =>\n buildCodecForObject<InitiatePeerPushPaymentRequest>()\n .property(\"partialContractTerms\", codecForPeerContractTerms())\n .build(\"InitiatePeerPushPaymentRequest\");\n\nexport interface PreparePeerPushCredit {\n talerUri: string;\n}\n\nexport interface PreparePeerPullDebitRequest {\n talerUri: string;\n}\n\nexport interface PreparePeerPushCreditResponse {\n contractTerms: PeerContractTerms;\n /**\n * @deprecated\n */\n amount: AmountString;\n amountRaw: AmountString;\n amountEffective: AmountString;\n peerPushPaymentIncomingId: string;\n}\n\nexport interface PreparePeerPullDebitResponse {\n contractTerms: PeerContractTerms;\n /**\n * @deprecated Redundant field with bad name, will be removed soon.\n */\n amount: AmountString;\n\n amountRaw: AmountString;\n amountEffective: AmountString;\n\n peerPullPaymentIncomingId: string;\n}\n\nexport const codecForPreparePeerPushCreditRequest =\n (): Codec<PreparePeerPushCredit> =>\n buildCodecForObject<PreparePeerPushCredit>()\n .property(\"talerUri\", codecForString())\n .build(\"CheckPeerPushPaymentRequest\");\n\nexport const codecForCheckPeerPullPaymentRequest =\n (): Codec<PreparePeerPullDebitRequest> =>\n buildCodecForObject<PreparePeerPullDebitRequest>()\n .property(\"talerUri\", codecForString())\n .build(\"PreparePeerPullDebitRequest\");\n\nexport interface ConfirmPeerPushCreditRequest {\n /**\n * Transparent identifier of the incoming peer push payment.\n */\n peerPushPaymentIncomingId: string;\n}\nexport interface AcceptPeerPushPaymentResponse {\n transactionId: string;\n}\n\nexport interface AcceptPeerPullPaymentResponse {\n transactionId: string;\n}\n\nexport const codecForConfirmPeerPushPaymentRequest =\n (): Codec<ConfirmPeerPushCreditRequest> =>\n buildCodecForObject<ConfirmPeerPushCreditRequest>()\n .property(\"peerPushPaymentIncomingId\", codecForString())\n .build(\"ConfirmPeerPushCreditRequest\");\n\nexport interface ConfirmPeerPullDebitRequest {\n /**\n * Transparent identifier of the incoming peer pull payment.\n */\n peerPullPaymentIncomingId: string;\n}\n\nexport interface SetDevModeRequest {\n devModeEnabled: boolean;\n}\n\nexport const codecForSetDevModeRequest = (): Codec<SetDevModeRequest> =>\n buildCodecForObject<SetDevModeRequest>()\n .property(\"devModeEnabled\", codecForBoolean())\n .build(\"SetDevModeRequest\");\n\nexport interface ApplyDevExperimentRequest {\n devExperimentUri: string;\n}\n\nexport const codecForApplyDevExperiment =\n (): Codec<ApplyDevExperimentRequest> =>\n buildCodecForObject<ApplyDevExperimentRequest>()\n .property(\"devExperimentUri\", codecForString())\n .build(\"ApplyDevExperimentRequest\");\n\nexport const codecForAcceptPeerPullPaymentRequest =\n (): Codec<ConfirmPeerPullDebitRequest> =>\n buildCodecForObject<ConfirmPeerPullDebitRequest>()\n .property(\"peerPullPaymentIncomingId\", codecForString())\n .build(\"ConfirmPeerPullDebitRequest\");\n\nexport interface CheckPeerPullCreditRequest {\n exchangeBaseUrl?: string;\n amount: AmountString;\n}\nexport const codecForPreparePeerPullPaymentRequest =\n (): Codec<CheckPeerPullCreditRequest> =>\n buildCodecForObject<CheckPeerPullCreditRequest>()\n .property(\"amount\", codecForAmountString())\n .property(\"exchangeBaseUrl\", codecOptional(codecForString()))\n .build(\"CheckPeerPullCreditRequest\");\n\nexport interface CheckPeerPullCreditResponse {\n exchangeBaseUrl: string;\n amountRaw: AmountString;\n amountEffective: AmountString;\n}\nexport interface InitiatePeerPullCreditRequest {\n exchangeBaseUrl?: string;\n partialContractTerms: PeerContractTerms;\n}\n\nexport const codecForInitiatePeerPullPaymentRequest =\n (): Codec<InitiatePeerPullCreditRequest> =>\n buildCodecForObject<InitiatePeerPullCreditRequest>()\n .property(\"partialContractTerms\", codecForPeerContractTerms())\n .property(\"exchangeBaseUrl\", codecOptional(codecForString()))\n .build(\"InitiatePeerPullCreditRequest\");\n\nexport interface InitiatePeerPullCreditResponse {\n /**\n * Taler URI for the other party to make the payment\n * that was requested.\n */\n talerUri: string;\n\n transactionId: string;\n}\n\n/**\n * Detailed reason for why the wallet's balance is insufficient.\n */\nexport interface PayPeerInsufficientBalanceDetails {\n /**\n * Amount requested by the merchant.\n */\n amountRequested: AmountString;\n\n /**\n * Balance of type \"available\" (see balance.ts for definition).\n */\n balanceAvailable: AmountString;\n\n /**\n * Balance of type \"material\" (see balance.ts for definition).\n */\n balanceMaterial: AmountString;\n\n perExchange: {\n [url: string]: {\n balanceAvailable: AmountString;\n balanceMaterial: AmountString;\n feeGapEstimate: AmountString;\n };\n };\n}\n", "// @ts-ignore: no type decl for this library\nimport * as jedLib from \"jed\";\nimport { Logger } from \"./logging.js\";\n\nconst logger = new Logger(\"i18n/index.ts\");\n\nexport let jed: any = undefined;\n\n/**\n * Set up jed library for internationalization,\n * based on browser language settings.\n */\nexport function setupI18n(lang: string, strings: { [s: string]: any }): void {\n lang = lang.replace(\"_\", \"-\");\n\n if (!strings[lang]) {\n strings[lang] = {};\n // logger.warn(`language ${lang} not found, defaulting to source strings`);\n }\n jed = new jedLib.Jed(strings[lang]);\n}\n\n/**\n * Use different translations for testing. Should not be used outside\n * of test cases.\n */\nexport function internalSetStrings(langStrings: any): void {\n jed = new jedLib.Jed(langStrings);\n}\n\ndeclare const __translated: unique symbol;\nexport type TranslatedString = string & { [__translated]: true };\n\n/**\n * Convert template strings to a msgid\n */\nfunction toI18nString(stringSeq: ReadonlyArray<string>): TranslatedString {\n let s = \"\";\n for (let i = 0; i < stringSeq.length; i++) {\n s += stringSeq[i];\n if (i < stringSeq.length - 1) {\n s += `%${i + 1}$s`;\n }\n }\n return s as TranslatedString;\n}\n\n/**\n * Internationalize a string template with arbitrary serialized values.\n */\nexport function singular(\n stringSeq: TemplateStringsArray,\n ...values: any[]\n): TranslatedString {\n const s = toI18nString(stringSeq);\n const tr = jed\n .translate(s)\n .ifPlural(1, s)\n .fetch(...values);\n return tr;\n}\n\n/**\n * Internationalize a string template without serializing\n */\nexport function translate(\n stringSeq: TemplateStringsArray,\n ...values: any[]\n): TranslatedString[] {\n const s = toI18nString(stringSeq);\n if (!s) return [];\n const translation: TranslatedString = jed.ngettext(s, s, 1);\n return replacePlaceholderWithValues(translation, values);\n}\n\n/**\n * Internationalize a string template without serializing\n */\nexport function Translate({\n children,\n debug,\n}: {\n children: any;\n debug?: boolean;\n}): any {\n const c = [].concat(children);\n const s = stringifyArray(c);\n if (!s) return [];\n const translation: TranslatedString = jed.ngettext(s, s, 1);\n if (debug) {\n console.log(\"looking for \", s, \"got\", translation);\n }\n return replacePlaceholderWithValues(translation, c);\n}\n\n/**\n * Get an internationalized string (based on the globally set, current language)\n * from a JSON object. Fall back to the default language of the JSON object\n * if no match exists.\n */\nexport function getJsonI18n<K extends string>(\n obj: Record<K, string>,\n key: K,\n): string {\n return obj[key];\n}\n\nexport function getTranslatedArray(array: Array<any>) {\n const s = stringifyArray(array);\n const translation: TranslatedString = jed.ngettext(s, s, 1);\n return replacePlaceholderWithValues(translation, array);\n}\n\nfunction replacePlaceholderWithValues(\n translation: TranslatedString,\n childArray: Array<any>,\n): Array<any> {\n const tr = translation.split(/%(\\d+)\\$s/);\n // const childArray = toChildArray(children);\n // Merge consecutive string children.\n const placeholderChildren = [];\n for (let i = 0; i < childArray.length; i++) {\n const x = childArray[i];\n if (x === undefined) {\n continue;\n } else if (typeof x === \"string\") {\n continue;\n } else {\n placeholderChildren.push(x);\n }\n }\n const result = [];\n for (let i = 0; i < tr.length; i++) {\n if (i % 2 == 0) {\n // Text\n result.push(tr[i]);\n } else {\n const childIdx = Number.parseInt(tr[i]) - 1;\n result.push(placeholderChildren[childIdx]);\n }\n }\n return result;\n}\n\nfunction stringifyArray(children: Array<any>): string {\n let n = 1;\n const ss = children.map((c) => {\n if (typeof c === \"string\") {\n return c;\n }\n return `%${n++}$s`;\n });\n const s = ss.join(\"\").replace(/ +/g, \" \").trim();\n return s;\n}\n\nexport const i18n = {\n str: singular,\n singular,\n Translate,\n translate,\n};\n", "/*\n This file is part of GNU Taler\n (C) 2021 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n * Functional programming utilities.\n */\nexport namespace fnutil {\n export function all<T>(arr: T[], f: (x: T) => boolean): boolean {\n for (const x of arr) {\n if (!f(x)) {\n return false;\n }\n }\n return true;\n }\n\n export function any<T>(arr: T[], f: (x: T) => boolean): boolean {\n for (const x of arr) {\n if (f(x)) {\n return true;\n }\n }\n return false;\n }\n}\n", "/**\n * Hypertext Transfer Protocol (HTTP) response status codes.\n *\n * @see {@link https://en.wikipedia.org/wiki/List_of_HTTP_status_codes}\n */\nexport enum HttpStatusCode {\n /**\n * The server has received the request headers and the client should proceed to send the request body\n * (in the case of a request for which a body needs to be sent; for example, a POST request).\n * Sending a large request body to a server after a request has been rejected for inappropriate headers would be inefficient.\n * To have a server check the request's headers, a client must send Expect: 100-continue as a header in its initial request\n * and receive a 100 Continue status code in response before sending the body. The response 417 Expectation Failed indicates the request should not be continued.\n */\n Continue = 100,\n\n /**\n * The requester has asked the server to switch protocols and the server has agreed to do so.\n */\n SwitchingProtocols = 101,\n\n /**\n * A WebDAV request may contain many sub-requests involving file operations, requiring a long time to complete the request.\n * This code indicates that the server has received and is processing the request, but no response is available yet.\n * This prevents the client from timing out and assuming the request was lost.\n */\n Processing = 102,\n\n /**\n * Standard response for successful HTTP requests.\n * The actual response will depend on the request method used.\n * In a GET request, the response will contain an entity corresponding to the requested resource.\n * In a POST request, the response will contain an entity describing or containing the result of the action.\n */\n Ok = 200,\n\n /**\n * The request has been fulfilled, resulting in the creation of a new resource.\n */\n Created = 201,\n\n /**\n * The request has been accepted for processing, but the processing has not been completed.\n * The request might or might not be eventually acted upon, and may be disallowed when processing occurs.\n */\n Accepted = 202,\n\n /**\n * SINCE HTTP/1.1\n * The server is a transforming proxy that received a 200 OK from its origin,\n * but is returning a modified version of the origin's response.\n */\n NonAuthoritativeInformation = 203,\n\n /**\n * The server successfully processed the request and is not returning any content.\n */\n NoContent = 204,\n\n /**\n * The server successfully processed the request, but is not returning any content.\n * Unlike a 204 response, this response requires that the requester reset the document view.\n */\n ResetContent = 205,\n\n /**\n * The server is delivering only part of the resource (byte serving) due to a range header sent by the client.\n * The range header is used by HTTP clients to enable resuming of interrupted downloads,\n * or split a download into multiple simultaneous streams.\n */\n PartialContent = 206,\n\n /**\n * The message body that follows is an XML message and can contain a number of separate response codes,\n * depending on how many sub-requests were made.\n */\n MultiStatus = 207,\n\n /**\n * The members of a DAV binding have already been enumerated in a preceding part of the (multistatus) response,\n * and are not being included again.\n */\n AlreadyReported = 208,\n\n /**\n * The server has fulfilled a request for the resource,\n * and the response is a representation of the result of one or more instance-manipulations applied to the current instance.\n */\n ImUsed = 226,\n\n /**\n * Indicates multiple options for the resource from which the client may choose (via agent-driven content negotiation).\n * For example, this code could be used to present multiple video format options,\n * to list files with different filename extensions, or to suggest word-sense disambiguation.\n */\n MultipleChoices = 300,\n\n /**\n * This and all future requests should be directed to the given URI.\n */\n MovedPermanently = 301,\n\n /**\n * This is an example of industry practice contradicting the standard.\n * The HTTP/1.0 specification (RFC 1945) required the client to perform a temporary redirect\n * (the original describing phrase was \"Moved Temporarily\"), but popular browsers implemented 302\n * with the functionality of a 303 See Other. Therefore, HTTP/1.1 added status codes 303 and 307\n * to distinguish between the two behaviours. However, some Web applications and frameworks\n * use the 302 status code as if it were the 303.\n */\n Found = 302,\n\n /**\n * SINCE HTTP/1.1\n * The response to the request can be found under another URI using a GET method.\n * When received in response to a POST (or PUT/DELETE), the client should presume that\n * the server has received the data and should issue a redirect with a separate GET message.\n */\n SeeOther = 303,\n\n /**\n * Indicates that the resource has not been modified since the version specified by the request headers If-Modified-Since or If-None-Match.\n * In such case, there is no need to retransmit the resource since the client still has a previously-downloaded copy.\n */\n NotModified = 304,\n\n /**\n * SINCE HTTP/1.1\n * The requested resource is available only through a proxy, the address for which is provided in the response.\n * Many HTTP clients (such as Mozilla and Internet Explorer) do not correctly handle responses with this status code, primarily for security reasons.\n */\n UseProxy = 305,\n\n /**\n * No longer used. Originally meant \"Subsequent requests should use the specified proxy.\"\n */\n SwitchProxy = 306,\n\n /**\n * SINCE HTTP/1.1\n * In this case, the request should be repeated with another URI; however, future requests should still use the original URI.\n * In contrast to how 302 was historically implemented, the request method is not allowed to be changed when reissuing the original request.\n * For example, a POST request should be repeated using another POST request.\n */\n TemporaryRedirect = 307,\n\n /**\n * The request and all future requests should be repeated using another URI.\n * 307 and 308 parallel the behaviors of 302 and 301, but do not allow the HTTP method to change.\n * So, for example, submitting a form to a permanently redirected resource may continue smoothly.\n */\n PermanentRedirect = 308,\n\n /**\n * The server cannot or will not process the request due to an apparent client error\n * (e.g., malformed request syntax, too large size, invalid request message framing, or deceptive request routing).\n */\n BadRequest = 400,\n\n /**\n * Similar to 403 Forbidden, but specifically for use when authentication is required and has failed or has not yet\n * been provided. The response must include a WWW-Authenticate header field containing a challenge applicable to the\n * requested resource. See Basic access authentication and Digest access authentication. 401 semantically means\n * \"unauthenticated\",i.e. the user does not have the necessary credentials.\n */\n Unauthorized = 401,\n\n /**\n * Reserved for future use. The original intention was that this code might be used as part of some form of digital\n * cash or micro payment scheme, but that has not happened, and this code is not usually used.\n * Google Developers API uses this status if a particular developer has exceeded the daily limit on requests.\n */\n PaymentRequired = 402,\n\n /**\n * The request was valid, but the server is refusing action.\n * The user might not have the necessary permissions for a resource.\n */\n Forbidden = 403,\n\n /**\n * The requested resource could not be found but may be available in the future.\n * Subsequent requests by the client are permissible.\n */\n NotFound = 404,\n\n /**\n * A request method is not supported for the requested resource;\n * for example, a GET request on a form that requires data to be presented via POST, or a PUT request on a read-only resource.\n */\n MethodNotAllowed = 405,\n\n /**\n * The requested resource is capable of generating only content not acceptable according to the Accept headers sent in the request.\n */\n NotAcceptable = 406,\n\n /**\n * The client must first authenticate itself with the proxy.\n */\n ProxyAuthenticationRequired = 407,\n\n /**\n * The server timed out waiting for the request.\n * According to HTTP specifications:\n * \"The client did not produce a request within the time that the server was prepared to wait. The client MAY repeat the request without modifications at any later time.\"\n */\n RequestTimeout = 408,\n\n /**\n * Indicates that the request could not be processed because of conflict in the request,\n * such as an edit conflict between multiple simultaneous updates.\n */\n Conflict = 409,\n\n /**\n * Indicates that the resource requested is no longer available and will not be available again.\n * This should be used when a resource has been intentionally removed and the resource should be purged.\n * Upon receiving a 410 status code, the client should not request the resource in the future.\n * Clients such as search engines should remove the resource from their indices.\n * Most use cases do not require clients and search engines to purge the resource, and a \"404 Not Found\" may be used instead.\n */\n Gone = 410,\n\n /**\n * The request did not specify the length of its content, which is required by the requested resource.\n */\n LengthRequired = 411,\n\n /**\n * The server does not meet one of the preconditions that the requester put on the request.\n */\n PreconditionFailed = 412,\n\n /**\n * The request is larger than the server is willing or able to process. Previously called \"Request Entity Too Large\".\n */\n PayloadTooLarge = 413,\n\n /**\n * The URI provided was too long for the server to process. Often the result of too much data being encoded as a query-string of a GET request,\n * in which case it should be converted to a POST request.\n * Called \"Request-URI Too Long\" previously.\n */\n UriTooLong = 414,\n\n /**\n * The request entity has a media type which the server or resource does not support.\n * For example, the client uploads an image as image/svg+xml, but the server requires that images use a different format.\n */\n UnsupportedMediaType = 415,\n\n /**\n * The client has asked for a portion of the file (byte serving), but the server cannot supply that portion.\n * For example, if the client asked for a part of the file that lies beyond the end of the file.\n * Called \"Requested Range Not Satisfiable\" previously.\n */\n RangeNotSatisfiable = 416,\n\n /**\n * The server cannot meet the requirements of the Expect request-header field.\n */\n ExpectationFailed = 417,\n\n /**\n * This code was defined in 1998 as one of the traditional IETF April Fools' jokes, in RFC 2324, Hyper Text Coffee Pot Control Protocol,\n * and is not expected to be implemented by actual HTTP servers. The RFC specifies this code should be returned by\n * teapots requested to brew coffee. This HTTP status is used as an Easter egg in some websites, including Google.com.\n */\n IAmATeapot = 418,\n\n /**\n * The request was directed at a server that is not able to produce a response (for example because a connection reuse).\n */\n MisdirectedRequest = 421,\n\n /**\n * The request was well-formed but was unable to be followed due to semantic errors.\n */\n UnprocessableEntity = 422,\n\n /**\n * The resource that is being accessed is locked.\n */\n Locked = 423,\n\n /**\n * The request failed due to failure of a previous request (e.g., a PROPPATCH).\n */\n FailedDependency = 424,\n\n /**\n * The client should switch to a different protocol such as TLS/1.0, given in the Upgrade header field.\n */\n UpgradeRequired = 426,\n\n /**\n * The origin server requires the request to be conditional.\n * Intended to prevent \"the 'lost update' problem, where a client\n * GETs a resource's state, modifies it, and PUTs it back to the server,\n * when meanwhile a third party has modified the state on the server, leading to a conflict.\"\n */\n PreconditionRequired = 428,\n\n /**\n * The user has sent too many requests in a given amount of time. Intended for use with rate-limiting schemes.\n */\n TooManyRequests = 429,\n\n /**\n * The server is unwilling to process the request because either an individual header field,\n * or all the header fields collectively, are too large.\n */\n RequestHeaderFieldsTooLarge = 431,\n\n /**\n * A server operator has received a legal demand to deny access to a resource or to a set of resources\n * that includes the requested resource. The code 451 was chosen as a reference to the novel Fahrenheit 451.\n */\n UnavailableForLegalReasons = 451,\n\n /**\n * A generic error message, given when an unexpected condition was encountered and no more specific message is suitable.\n */\n InternalServerError = 500,\n\n /**\n * The server either does not recognize the request method, or it lacks the ability to fulfill the request.\n * Usually this implies future availability (e.g., a new feature of a web-service API).\n */\n NotImplemented = 501,\n\n /**\n * The server was acting as a gateway or proxy and received an invalid response from the upstream server.\n */\n BadGateway = 502,\n\n /**\n * The server is currently unavailable (because it is overloaded or down for maintenance).\n * Generally, this is a temporary state.\n */\n ServiceUnavailable = 503,\n\n /**\n * The server was acting as a gateway or proxy and did not receive a timely response from the upstream server.\n */\n GatewayTimeout = 504,\n\n /**\n * The server does not support the HTTP protocol version used in the request\n */\n HttpVersionNotSupported = 505,\n\n /**\n * Transparent content negotiation for the request results in a circular reference.\n */\n VariantAlsoNegotiates = 506,\n\n /**\n * The server is unable to store the representation needed to complete the request.\n */\n InsufficientStorage = 507,\n\n /**\n * The server detected an infinite loop while processing the request.\n */\n LoopDetected = 508,\n\n /**\n * Further extensions to the request are required for the server to fulfill it.\n */\n NotExtended = 510,\n\n /**\n * The client needs to authenticate to gain network access.\n * Intended for use by intercepting proxies used to control access to the network (e.g., \"captive portals\" used\n * to require agreement to Terms of Service before granting full Internet access via a Wi-Fi hotspot).\n */\n NetworkAuthenticationRequired = 511,\n}\n", "/*\n This file is part of GNU Taler\n (C) 2019 GNUnet e.V.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n TALER is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\nimport { Logger } from \"./logging.js\";\nimport { AbsoluteTime } from \"./time.js\";\n\n/**\n * Implementation of token bucket throttling.\n */\n\nconst logger = new Logger(\"RequestThrottler.ts\");\n\n/**\n * Maximum request per second, per origin.\n */\nconst MAX_PER_SECOND = 100;\n\n/**\n * Maximum request per minute, per origin.\n */\nconst MAX_PER_MINUTE = 500;\n\n/**\n * Maximum request per hour, per origin.\n */\nconst MAX_PER_HOUR = 2000;\n\n/**\n * Throttling state for one origin.\n */\nclass OriginState {\n tokensSecond: number = MAX_PER_SECOND;\n tokensMinute: number = MAX_PER_MINUTE;\n tokensHour: number = MAX_PER_HOUR;\n private lastUpdate = AbsoluteTime.now();\n\n private refill(): void {\n const now = AbsoluteTime.now();\n if (AbsoluteTime.cmp(now, this.lastUpdate) < 0) {\n // Did the system time change?\n this.lastUpdate = now;\n return;\n }\n const d = AbsoluteTime.difference(now, this.lastUpdate);\n if (d.d_ms === \"forever\") {\n throw Error(\"assertion failed\");\n }\n this.tokensSecond = Math.min(\n MAX_PER_SECOND,\n this.tokensSecond + d.d_ms / 1000,\n );\n this.tokensMinute = Math.min(\n MAX_PER_MINUTE,\n this.tokensMinute + d.d_ms / 1000 / 60,\n );\n this.tokensHour = Math.min(\n MAX_PER_HOUR,\n this.tokensHour + d.d_ms / 1000 / 60 / 60,\n );\n this.lastUpdate = now;\n }\n\n /**\n * Return true if the request for this origin should be throttled.\n * Otherwise, take a token out of the respective buckets.\n */\n applyThrottle(): boolean {\n this.refill();\n if (this.tokensSecond < 1) {\n logger.warn(\"request throttled (per second limit exceeded)\");\n return true;\n }\n if (this.tokensMinute < 1) {\n logger.warn(\"request throttled (per minute limit exceeded)\");\n return true;\n }\n if (this.tokensHour < 1) {\n logger.warn(\"request throttled (per hour limit exceeded)\");\n return true;\n }\n this.tokensSecond--;\n this.tokensMinute--;\n this.tokensHour--;\n return false;\n }\n}\n\n/**\n * Request throttler, used as a \"last layer of defense\" when some\n * other part of the re-try logic is broken and we're sending too\n * many requests to the same exchange/bank/merchant.\n */\nexport class RequestThrottler {\n private perOriginInfo: { [origin: string]: OriginState } = {};\n\n /**\n * Get the throttling state for an origin, or\n * initialize if no state is associated with the\n * origin yet.\n */\n private getState(origin: string): OriginState {\n const s = this.perOriginInfo[origin];\n if (s) {\n return s;\n }\n const ns = (this.perOriginInfo[origin] = new OriginState());\n return ns;\n }\n\n /**\n * Apply throttling to a request.\n *\n * @returns whether the request should be throttled.\n */\n applyThrottle(requestUrl: string): boolean {\n const origin = new URL(requestUrl).origin;\n return this.getState(origin).applyThrottle();\n }\n\n /**\n * Get the throttle statistics for a particular URL.\n */\n getThrottleStats(requestUrl: string): Record<string, unknown> {\n const origin = new URL(requestUrl).origin;\n const state = this.getState(origin);\n return {\n tokensHour: state.tokensHour,\n tokensMinute: state.tokensMinute,\n tokensSecond: state.tokensSecond,\n maxTokensHour: MAX_PER_HOUR,\n maxTokensMinute: MAX_PER_MINUTE,\n maxTokensSecond: MAX_PER_SECOND,\n };\n }\n}\n", "/*\nMIT License\n\nCopyright (c) 2017 Conrad Reuter\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/\n\nconst NOOP = () => {};\n\n/**\n * A token that can be passed around to inform consumers of the token that a\n * certain operation has been cancelled.\n */\nclass CancellationToken {\n private _reason: any;\n private _callbacks?: Set<(reason?: any) => void> = new Set();\n\n /**\n * A cancellation token that is already cancelled.\n */\n public static readonly CANCELLED: CancellationToken = new CancellationToken(\n true,\n true,\n );\n\n /**\n * A cancellation token that is never cancelled.\n */\n public static readonly CONTINUE: CancellationToken = new CancellationToken(\n false,\n false,\n );\n\n /**\n * Whether the token has been cancelled.\n */\n public get isCancelled(): boolean {\n return this._isCancelled;\n }\n\n /**\n * Whether the token can be cancelled.\n */\n public get canBeCancelled(): boolean {\n return this._canBeCancelled;\n }\n\n /**\n * Why this token has been cancelled.\n */\n public get reason(): any {\n if (this.isCancelled) {\n return this._reason;\n } else {\n throw new Error(\"This token is not cancelled.\");\n }\n }\n\n /**\n * Make a promise that resolves when the async operation resolves,\n * or rejects when the operation is rejected or this token is cancelled.\n */\n public racePromise<T>(asyncOperation: Promise<T>): Promise<T> {\n if (!this.canBeCancelled) {\n return asyncOperation;\n }\n return new Promise<T>((resolve, reject) => {\n // we could use Promise.finally here as soon as it's implemented in the major browsers\n const unregister = this.onCancelled((reason) =>\n reject(new CancellationToken.CancellationError(reason)),\n );\n asyncOperation.then(\n (value) => {\n resolve(value);\n unregister();\n },\n (err) => {\n reject(err);\n unregister();\n },\n );\n });\n }\n\n /**\n * Throw a {CancellationToken.CancellationError} if this token is cancelled.\n */\n public throwIfCancelled(): void {\n if (this._isCancelled) {\n throw new CancellationToken.CancellationError(this._reason);\n }\n }\n\n /**\n * Invoke the callback when this token is cancelled.\n * If this token is already cancelled, the callback is invoked immediately.\n * Returns a function that unregisters the cancellation callback.\n */\n public onCancelled(cb: (reason?: any) => void): () => void {\n if (!this.canBeCancelled) {\n return NOOP;\n }\n if (this.isCancelled) {\n cb(this.reason);\n return NOOP;\n }\n\n /* istanbul ignore next */\n this._callbacks?.add(cb);\n return () => this._callbacks?.delete(cb);\n }\n\n private constructor(\n /**\n * Whether the token is already cancelled.\n */\n private _isCancelled: boolean,\n /**\n * Whether the token can be cancelled.\n */\n private _canBeCancelled: boolean,\n ) {}\n\n /**\n * Create a {CancellationTokenSource}.\n */\n public static create(): CancellationToken.Source {\n const token = new CancellationToken(false, true);\n\n const cancel = (reason?: any) => {\n if (token._isCancelled) return;\n token._isCancelled = true;\n token._reason = reason;\n token._callbacks?.forEach((cb) => cb(reason));\n dispose();\n };\n\n const dispose = () => {\n token._canBeCancelled = token.isCancelled;\n delete token._callbacks; // release memory\n };\n\n return { token, cancel, dispose };\n }\n\n /**\n * Create a {CancellationTokenSource}.\n * The token will be cancelled automatically after the specified timeout in milliseconds.\n */\n public static timeout(ms: number): CancellationToken.Source {\n const {\n token,\n cancel: originalCancel,\n dispose: originalDispose,\n } = CancellationToken.create();\n\n let timer: NodeJS.Timeout | null;\n timer = setTimeout(() => originalCancel(CancellationToken.timeout), ms);\n const disposeTimer = () => {\n if (timer == null) return;\n clearTimeout(timer);\n timer = null;\n };\n\n const cancel = (reason?: any) => {\n disposeTimer();\n originalCancel(reason);\n };\n\n /* istanbul ignore next */\n const dispose = () => {\n disposeTimer();\n originalDispose();\n };\n\n return { token, cancel, dispose };\n }\n\n /**\n * Create a {CancellationToken} that is cancelled when all of the given tokens are cancelled.\n *\n * This is like {Promise<T>.all} for {CancellationToken}s.\n */\n public static all(...tokens: CancellationToken[]): CancellationToken {\n // If *any* of the tokens cannot be cancelled, then the token we return can never be.\n if (tokens.some((token) => !token.canBeCancelled)) {\n return CancellationToken.CONTINUE;\n }\n\n const combined = CancellationToken.create();\n let countdown = tokens.length;\n const handleNextTokenCancelled = () => {\n if (--countdown === 0) {\n const reasons = tokens.map((token) => token._reason);\n combined.cancel(reasons);\n }\n };\n tokens.forEach((token) => token.onCancelled(handleNextTokenCancelled));\n return combined.token;\n }\n\n /**\n * Create a {CancellationToken} that is cancelled when at least one of the given tokens is cancelled.\n *\n * This is like {Promise<T>.race} for {CancellationToken}s.\n */\n public static race(...tokens: CancellationToken[]): CancellationToken {\n // If *any* of the tokens is already cancelled, immediately return that token.\n for (const token of tokens) {\n if (token._isCancelled) {\n return token;\n }\n }\n\n const combined = CancellationToken.create();\n let unregistrations: (() => void)[];\n const handleAnyTokenCancelled = (reason?: any) => {\n unregistrations.forEach((unregister) => unregister()); // release memory\n combined.cancel(reason);\n };\n unregistrations = tokens.map((token) =>\n token.onCancelled(handleAnyTokenCancelled),\n );\n return combined.token;\n }\n}\n\n/* istanbul ignore next */\nnamespace CancellationToken {\n /**\n * Provides a {CancellationToken}, along with some methods to operate on it.\n */\n export interface Source {\n /**\n * The token provided by this source.\n */\n token: CancellationToken;\n\n /**\n * Cancel the provided token with the given reason.\n * Do nothing if the provided token cannot be cancelled or is already cancelled.\n */\n cancel(reason?: any): void;\n\n /**\n * Dispose of the token and this source and release memory.\n */\n dispose(): void;\n }\n\n /**\n * The error that is thrown when a {CancellationToken} has been cancelled and a\n * consumer of the token calls {CancellationToken.throwIfCancelled} on it.\n */\n export class CancellationError extends Error {\n public constructor(\n /**\n * The reason why the token was cancelled.\n */\n public readonly reason: any,\n ) {\n super(\"Operation cancelled\");\n Object.setPrototypeOf(this, CancellationError.prototype);\n }\n }\n}\n\nexport { CancellationToken };\n", "/*\n This file is part of GNU Taler\n (C) 2021 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\nimport { canonicalJson } from \"./helpers.js\";\nimport { Logger } from \"./logging.js\";\nimport {\n decodeCrock,\n encodeCrock,\n getRandomBytes,\n hash,\n kdf,\n stringToBytes,\n} from \"./taler-crypto.js\";\n\nconst logger = new Logger(\"contractTerms.ts\");\n\nexport namespace ContractTermsUtil {\n export function forgetAllImpl(\n anyJson: any,\n path: string[],\n pred: PathPredicate,\n ): any {\n const dup = JSON.parse(JSON.stringify(anyJson));\n if (Array.isArray(dup)) {\n for (let i = 0; i < dup.length; i++) {\n dup[i] = forgetAllImpl(dup[i], [...path, `${i}`], pred);\n }\n } else if (typeof dup === \"object\" && dup != null) {\n if (typeof dup.$forgettable === \"object\") {\n for (const x of Object.keys(dup.$forgettable)) {\n if (!pred([...path, x])) {\n continue;\n }\n if (!dup.$forgotten) {\n dup.$forgotten = {};\n }\n if (!dup.$forgotten[x]) {\n const membValCanon = stringToBytes(\n canonicalJson(scrub(dup[x])) + \"\\0\",\n );\n const membSalt = stringToBytes(dup.$forgettable[x] + \"\\0\");\n const h = kdf(64, membValCanon, membSalt, new Uint8Array([]));\n dup.$forgotten[x] = encodeCrock(h);\n }\n delete dup[x];\n delete dup.$forgettable[x];\n }\n if (Object.keys(dup.$forgettable).length === 0) {\n delete dup.$forgettable;\n }\n }\n for (const x of Object.keys(dup)) {\n if (x.startsWith(\"$\")) {\n continue;\n }\n dup[x] = forgetAllImpl(dup[x], [...path, x], pred);\n }\n }\n return dup;\n }\n\n export type PathPredicate = (path: string[]) => boolean;\n\n /**\n * Scrub all forgettable members from an object.\n */\n export function scrub(anyJson: any): any {\n return forgetAllImpl(anyJson, [], () => true);\n }\n\n /**\n * Recursively forget all forgettable members of an object,\n * where the path matches a predicate.\n */\n export function forgetAll(anyJson: any, pred: PathPredicate): any {\n return forgetAllImpl(anyJson, [], pred);\n }\n\n /**\n * Generate a salt for all members marked as forgettable,\n * but which don't have an actual salt yet.\n */\n export function saltForgettable(anyJson: any): any {\n const dup = JSON.parse(JSON.stringify(anyJson));\n if (Array.isArray(dup)) {\n for (let i = 0; i < dup.length; i++) {\n dup[i] = saltForgettable(dup[i]);\n }\n } else if (typeof dup === \"object\" && dup !== null) {\n if (typeof dup.$forgettable === \"object\") {\n for (const k of Object.keys(dup.$forgettable)) {\n if (dup.$forgettable[k] === true) {\n dup.$forgettable[k] = encodeCrock(getRandomBytes(32));\n }\n }\n }\n for (const x of Object.keys(dup)) {\n if (x.startsWith(\"$\")) {\n continue;\n }\n dup[x] = saltForgettable(dup[x]);\n }\n }\n return dup;\n }\n\n const nameRegex = /^[0-9A-Za-z_]+$/;\n\n /**\n * Check that the given JSON object is well-formed with regards\n * to forgettable fields and other restrictions for forgettable JSON.\n */\n export function validateForgettable(anyJson: any): boolean {\n if (typeof anyJson === \"string\") {\n return true;\n }\n if (typeof anyJson === \"number\") {\n return (\n Number.isInteger(anyJson) &&\n anyJson >= Number.MIN_SAFE_INTEGER &&\n anyJson <= Number.MAX_SAFE_INTEGER\n );\n }\n if (typeof anyJson === \"boolean\") {\n return true;\n }\n if (anyJson === null) {\n return true;\n }\n if (Array.isArray(anyJson)) {\n return anyJson.every((x) => validateForgettable(x));\n }\n if (typeof anyJson === \"object\") {\n for (const k of Object.keys(anyJson)) {\n if (k.match(nameRegex)) {\n if (validateForgettable(anyJson[k])) {\n continue;\n } else {\n return false;\n }\n }\n if (k === \"$forgettable\") {\n const fga = anyJson.$forgettable;\n if (!fga || typeof fga !== \"object\") {\n return false;\n }\n for (const fk of Object.keys(fga)) {\n if (!fk.match(nameRegex)) {\n return false;\n }\n if (!(fk in anyJson)) {\n return false;\n }\n const fv = anyJson.$forgettable[fk];\n if (typeof fv !== \"string\") {\n return false;\n }\n }\n } else if (k === \"$forgotten\") {\n const fgo = anyJson.$forgotten;\n if (!fgo || typeof fgo !== \"object\") {\n return false;\n }\n for (const fk of Object.keys(fgo)) {\n if (!fk.match(nameRegex)) {\n return false;\n }\n // Check that the value has actually been forgotten.\n if (fk in anyJson) {\n return false;\n }\n const fv = anyJson.$forgotten[fk];\n if (typeof fv !== \"string\") {\n return false;\n }\n try {\n const decFv = decodeCrock(fv);\n if (decFv.length != 64) {\n return false;\n }\n } catch (e) {\n return false;\n }\n // Check that salt has been deleted after forgetting.\n if (anyJson.$forgettable?.[k] !== undefined) {\n return false;\n }\n }\n } else {\n return false;\n }\n }\n return true;\n }\n return false;\n }\n\n /**\n * Check that no forgettable information has been forgotten.\n *\n * Must only be called on an object already validated with validateForgettable.\n */\n export function validateNothingForgotten(contractTerms: any): boolean {\n throw Error(\"not implemented yet\");\n }\n\n /**\n * Hash a contract terms object. Forgettable fields\n * are scrubbed and JSON canonicalization is applied\n * before hashing.\n */\n export function hashContractTerms(contractTerms: unknown): string {\n const cleaned = scrub(contractTerms);\n const canon = canonicalJson(cleaned) + \"\\0\";\n const bytes = stringToBytes(canon);\n return encodeCrock(hash(bytes));\n }\n}\n", "/*\n This file is part of GNU Taler\n (C) 2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n\n SPDX-License-Identifier: AGPL3.0-or-later\n*/\n\nimport { CancellationToken } from \"./CancellationToken.js\";\nimport { Codec } from \"./codec.js\";\nimport { j2s } from \"./helpers.js\";\nimport { TalerError, makeErrorDetail } from \"./index.js\";\nimport { Logger } from \"./logging.js\";\nimport { TalerErrorCode } from \"./taler-error-codes.js\";\nimport { Duration, AbsoluteTime } from \"./time.js\";\nimport { TalerErrorDetail } from \"./wallet-types.js\";\n\nconst textEncoder = new TextEncoder();\n\nconst logger = new Logger(\"http.ts\");\n\n/**\n * An HTTP response that is returned by all request methods of this library.\n */\nexport interface HttpResponse {\n requestUrl: string;\n requestMethod: string;\n status: number;\n headers: Headers;\n json(): Promise<any>;\n text(): Promise<string>;\n bytes(): Promise<ArrayBuffer>;\n}\n\nexport const DEFAULT_REQUEST_TIMEOUT_MS = 60000;\n\nexport interface HttpRequestOptions {\n method?: \"POST\" | \"PUT\" | \"GET\";\n headers?: { [name: string]: string };\n\n /**\n * Timeout after which the request should be aborted.\n */\n timeout?: Duration;\n\n /**\n * Cancellation token that should abort the request when\n * cancelled.\n */\n cancellationToken?: CancellationToken;\n\n body?: string | ArrayBuffer | object;\n}\n\n/**\n * Headers, roughly modeled after the fetch API's headers object.\n */\nexport class Headers {\n private headerMap = new Map<string, string>();\n\n get(name: string): string | null {\n const r = this.headerMap.get(name.toLowerCase());\n if (r) {\n return r;\n }\n return null;\n }\n\n set(name: string, value: string): void {\n const normalizedName = name.toLowerCase();\n const existing = this.headerMap.get(normalizedName);\n if (existing !== undefined) {\n this.headerMap.set(normalizedName, existing + \",\" + value);\n } else {\n this.headerMap.set(normalizedName, value);\n }\n }\n\n toJSON(): any {\n const m: Record<string, string> = {};\n this.headerMap.forEach((v, k) => (m[k] = v));\n return m;\n }\n}\n\n/**\n * Interface for the HTTP request library used by the wallet.\n *\n * The request library is bundled into an interface to make mocking and\n * request tunneling easy.\n */\nexport interface HttpRequestLibrary {\n /**\n * Make an HTTP GET request.\n *\n * FIXME: Get rid of this, we want the API surface to be minimal.\n */\n get(url: string, opt?: HttpRequestOptions): Promise<HttpResponse>;\n\n /**\n * Make an HTTP POST request with a JSON body.\n *\n * FIXME: Get rid of this, we want the API surface to be minimal.\n */\n postJson(\n url: string,\n body: any,\n opt?: HttpRequestOptions,\n ): Promise<HttpResponse>;\n\n /**\n * Make an HTTP POST request with a JSON body.\n */\n fetch(url: string, opt?: HttpRequestOptions): Promise<HttpResponse>;\n}\n\ntype TalerErrorResponse = {\n code: number;\n} & unknown;\n\ntype ResponseOrError<T> =\n | { isError: false; response: T }\n | { isError: true; talerErrorResponse: TalerErrorResponse };\n\nexport async function readTalerErrorResponse(\n httpResponse: HttpResponse,\n): Promise<TalerErrorDetail> {\n const errJson = await httpResponse.json();\n const talerErrorCode = errJson.code;\n if (typeof talerErrorCode !== \"number\") {\n logger.warn(\n `malformed error response (status ${httpResponse.status}): ${j2s(\n errJson,\n )}`,\n );\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl: httpResponse.requestUrl,\n requestMethod: httpResponse.requestMethod,\n httpStatusCode: httpResponse.status,\n },\n \"Error response did not contain error code\",\n );\n }\n return errJson;\n}\n\nexport async function readUnexpectedResponseDetails(\n httpResponse: HttpResponse,\n): Promise<TalerErrorDetail> {\n const errJson = await httpResponse.json();\n const talerErrorCode = errJson.code;\n if (typeof talerErrorCode !== \"number\") {\n return makeErrorDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl: httpResponse.requestUrl,\n requestMethod: httpResponse.requestMethod,\n httpStatusCode: httpResponse.status,\n },\n \"Error response did not contain error code\",\n );\n }\n return makeErrorDetail(\n TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR,\n {\n requestUrl: httpResponse.requestUrl,\n requestMethod: httpResponse.requestMethod,\n httpStatusCode: httpResponse.status,\n errorResponse: errJson,\n },\n `Unexpected HTTP status (${httpResponse.status}) in response`,\n );\n}\n\nexport async function readSuccessResponseJsonOrErrorCode<T>(\n httpResponse: HttpResponse,\n codec: Codec<T>,\n): Promise<ResponseOrError<T>> {\n if (!(httpResponse.status >= 200 && httpResponse.status < 300)) {\n return {\n isError: true,\n talerErrorResponse: await readTalerErrorResponse(httpResponse),\n };\n }\n const respJson = await httpResponse.json();\n let parsedResponse: T;\n try {\n parsedResponse = codec.decode(respJson);\n } catch (e: any) {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl: httpResponse.requestUrl,\n requestMethod: httpResponse.requestMethod,\n httpStatusCode: httpResponse.status,\n validationError: e.toString(),\n },\n \"Response invalid\",\n );\n }\n return {\n isError: false,\n response: parsedResponse,\n };\n}\n\ntype HttpErrorDetails = {\n requestUrl: string;\n requestMethod: string;\n httpStatusCode: number;\n};\n\nexport function getHttpResponseErrorDetails(\n httpResponse: HttpResponse,\n): HttpErrorDetails {\n return {\n requestUrl: httpResponse.requestUrl,\n requestMethod: httpResponse.requestMethod,\n httpStatusCode: httpResponse.status,\n };\n}\n\nexport function throwUnexpectedRequestError(\n httpResponse: HttpResponse,\n talerErrorResponse: TalerErrorResponse,\n): never {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR,\n {\n requestUrl: httpResponse.requestUrl,\n requestMethod: httpResponse.requestMethod,\n httpStatusCode: httpResponse.status,\n errorResponse: talerErrorResponse,\n },\n `Unexpected HTTP status ${httpResponse.status} in response`,\n );\n}\n\nexport async function readSuccessResponseJsonOrThrow<T>(\n httpResponse: HttpResponse,\n codec: Codec<T>,\n): Promise<T> {\n const r = await readSuccessResponseJsonOrErrorCode(httpResponse, codec);\n if (!r.isError) {\n return r.response;\n }\n throwUnexpectedRequestError(httpResponse, r.talerErrorResponse);\n}\n\nexport async function readSuccessResponseTextOrErrorCode<T>(\n httpResponse: HttpResponse,\n): Promise<ResponseOrError<string>> {\n if (!(httpResponse.status >= 200 && httpResponse.status < 300)) {\n const errJson = await httpResponse.json();\n const talerErrorCode = errJson.code;\n if (typeof talerErrorCode !== \"number\") {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n httpStatusCode: httpResponse.status,\n requestUrl: httpResponse.requestUrl,\n requestMethod: httpResponse.requestMethod,\n },\n \"Error response did not contain error code\",\n );\n }\n return {\n isError: true,\n talerErrorResponse: errJson,\n };\n }\n const respJson = await httpResponse.text();\n return {\n isError: false,\n response: respJson,\n };\n}\n\nexport async function checkSuccessResponseOrThrow(\n httpResponse: HttpResponse,\n): Promise<void> {\n if (!(httpResponse.status >= 200 && httpResponse.status < 300)) {\n const errJson = await httpResponse.json();\n const talerErrorCode = errJson.code;\n if (typeof talerErrorCode !== \"number\") {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n httpStatusCode: httpResponse.status,\n requestUrl: httpResponse.requestUrl,\n requestMethod: httpResponse.requestMethod,\n },\n \"Error response did not contain error code\",\n );\n }\n throwUnexpectedRequestError(httpResponse, errJson);\n }\n}\n\nexport async function readSuccessResponseTextOrThrow<T>(\n httpResponse: HttpResponse,\n): Promise<string> {\n const r = await readSuccessResponseTextOrErrorCode(httpResponse);\n if (!r.isError) {\n return r.response;\n }\n throwUnexpectedRequestError(httpResponse, r.talerErrorResponse);\n}\n\n/**\n * Get the timestamp at which the response's content is considered expired.\n */\nexport function getExpiry(\n httpResponse: HttpResponse,\n opt: { minDuration?: Duration },\n): AbsoluteTime {\n const expiryDateMs = new Date(\n httpResponse.headers.get(\"expiry\") ?? \"\",\n ).getTime();\n let t: AbsoluteTime;\n if (Number.isNaN(expiryDateMs)) {\n t = AbsoluteTime.now();\n } else {\n t = {\n t_ms: expiryDateMs,\n };\n }\n if (opt.minDuration) {\n const t2 = AbsoluteTime.addDuration(AbsoluteTime.now(), opt.minDuration);\n return AbsoluteTime.max(t, t2);\n }\n return t;\n}\n\nexport interface HttpLibArgs {\n enableThrottling?: boolean;\n}\n\nexport function encodeBody(body: any): ArrayBuffer {\n if (body == null) {\n return new ArrayBuffer(0);\n }\n if (typeof body === \"string\") {\n return textEncoder.encode(body).buffer;\n } else if (ArrayBuffer.isView(body)) {\n return body.buffer;\n } else if (body instanceof ArrayBuffer) {\n return body;\n } else if (typeof body === \"object\") {\n return textEncoder.encode(JSON.stringify(body)).buffer;\n }\n throw new TypeError(\"unsupported request body type\");\n}\n\nexport function getDefaultHeaders(method: string): Record<string, string> {\n const headers: Record<string, string> = {};\n\n if (method === \"POST\" || method === \"PUT\" || method === \"PATCH\") {\n // Default to JSON if we have a body\n headers[\"Content-Type\"] = \"application/json\";\n }\n\n headers[\"Accept\"] = \"application/json\";\n\n return headers;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n// Entry point for the browser.\n\nimport { loadBrowserPrng } from \"./prng-browser.js\";\nloadBrowserPrng();\nexport * from \"./index.js\";\n\n// The web stuff doesn't support package.json export declarations yet,\n// so we export more stuff here than we should.\nexport * from \"./http-common.js\";\n", "/*\n This file is part of GNU Anastasis\n (C) 2021-2022 Anastasis SARL\n\n GNU Anastasis is free software; you can redistribute it and/or modify it under the\n terms of the GNU Affero General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Anastasis is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.\n\n You should have received a copy of the GNU Affero General Public License along with\n GNU Anastasis; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { StateUpdater, useEffect, useState } from \"preact/hooks\";\n\nexport function useLocalStorage(\n key: string,\n initialValue?: string,\n): [string | undefined, StateUpdater<string | undefined>] {\n const [storedValue, setStoredValue] = useState<string | undefined>(\n (): string | undefined => {\n return typeof window !== \"undefined\"\n ? window.localStorage.getItem(key) || initialValue\n : initialValue;\n },\n );\n\n useEffect(() => {\n const listener = buildListenerForKey(key, (newValue) => {\n setStoredValue(newValue ?? initialValue);\n });\n window.addEventListener(\"storage\", listener);\n return () => {\n window.removeEventListener(\"storage\", listener);\n };\n }, []);\n\n const setValue = (\n value?: string | ((val?: string) => string | undefined),\n ): void => {\n setStoredValue((p) => {\n const toStore = value instanceof Function ? value(p) : value;\n if (typeof window !== \"undefined\") {\n if (!toStore) {\n window.localStorage.removeItem(key);\n } else {\n window.localStorage.setItem(key, toStore);\n }\n }\n return toStore;\n });\n };\n\n return [storedValue, setValue];\n}\n\nfunction buildListenerForKey(\n key: string,\n onUpdate: (newValue: string | undefined) => void,\n): () => void {\n return function listenKeyChange() {\n const value = window.localStorage.getItem(key);\n onUpdate(value ?? undefined);\n };\n}\n\n//TODO: merge with the above function\nexport function useNotNullLocalStorage(\n key: string,\n initialValue: string,\n): [string, StateUpdater<string>, boolean] {\n const [storedValue, setStoredValue] = useState<string>((): string => {\n return typeof window !== \"undefined\"\n ? window.localStorage.getItem(key) || initialValue\n : initialValue;\n });\n\n useEffect(() => {\n const listener = buildListenerForKey(key, (newValue) => {\n setStoredValue(newValue ?? initialValue);\n });\n window.addEventListener(\"storage\", listener);\n return () => {\n window.removeEventListener(\"storage\", listener);\n };\n });\n\n const setValue = (value: string | ((val: string) => string)): void => {\n const valueToStore = value instanceof Function ? value(storedValue) : value;\n setStoredValue(valueToStore);\n if (typeof window !== \"undefined\") {\n if (!valueToStore) {\n window.localStorage.removeItem(key);\n } else {\n window.localStorage.setItem(key, valueToStore);\n }\n }\n };\n\n const isSaved = window.localStorage.getItem(key) !== null;\n return [storedValue, setValue, isSaved];\n}\n", "/*\n This file is part of GNU Anastasis\n (C) 2021-2022 Anastasis SARL\n\n GNU Anastasis is free software; you can redistribute it and/or modify it under the\n terms of the GNU Affero General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Anastasis is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.\n\n You should have received a copy of the GNU Affero General Public License along with\n GNU Anastasis; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\nimport { useNotNullLocalStorage } from \"./useLocalStorage.js\";\n\nfunction getBrowserLang(): string | undefined {\n if (window.navigator.languages) return window.navigator.languages[0];\n if (window.navigator.language) return window.navigator.language;\n return undefined;\n}\n\nexport function useLang(\n initial?: string,\n): [string, (s: string) => void, boolean] {\n const defaultLang = (getBrowserLang() || initial || \"en\").substring(0, 2);\n return useNotNullLocalStorage(\"lang-preference\", defaultLang);\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\nimport { TalerErrorDetail } from \"@gnu-taler/taler-util\";\n// import { TalerError } from \"@gnu-taler/taler-wallet-core\";\nimport { useEffect, useMemo, useState } from \"preact/hooks\";\n\nexport interface HookOk<T> {\n hasError: false;\n response: T;\n}\n\nexport type HookError = HookGenericError | HookOperationalError;\n\nexport interface HookGenericError {\n hasError: true;\n operational: false;\n message: string;\n}\n\nexport interface HookOperationalError {\n hasError: true;\n operational: true;\n details: TalerErrorDetail;\n}\n\ninterface WithRetry {\n retry: () => void;\n}\n\nexport type HookResponse<T> = HookOk<T> | HookError | undefined;\nexport type HookResponseWithRetry<T> =\n | ((HookOk<T> | HookError) & WithRetry)\n | undefined;\n\nexport function useAsyncAsHook<T>(\n fn: () => Promise<T | false>,\n deps?: any[],\n): HookResponseWithRetry<T> {\n const [result, setHookResponse] = useState<HookResponse<T>>(undefined);\n\n const args = useMemo(\n () => ({\n fn,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }),\n deps || [],\n );\n\n async function doAsync(): Promise<void> {\n try {\n const response = await args.fn();\n if (response === false) return;\n setHookResponse({ hasError: false, response });\n } catch (e) {\n // if (e instanceof TalerError) {\n // setHookResponse({\n // hasError: true,\n // operational: true,\n // details: e.errorDetail,\n // });\n // } else\n if (e instanceof Error) {\n setHookResponse({\n hasError: true,\n operational: false,\n message: e.message,\n });\n }\n }\n }\n\n useEffect(() => {\n doAsync();\n }, [args]);\n\n if (!result) return undefined;\n return { ...result, retry: doAsync };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n\nexport function base64encode(str: string): string {\n return base64EncArr(strToUTF8Arr(str))\n}\n\nexport function base64decode(str: string): string {\n return UTF8ArrToStr(base64DecToArr(str))\n}\n\n// from https://developer.mozilla.org/en-US/docs/Glossary/Base64\n\n// Array of bytes to Base64 string decoding\nfunction b64ToUint6(nChr: number): number {\n return nChr > 64 && nChr < 91\n ? nChr - 65\n : nChr > 96 && nChr < 123\n ? nChr - 71\n : nChr > 47 && nChr < 58\n ? nChr + 4\n : nChr === 43\n ? 62\n : nChr === 47\n ? 63\n : 0;\n}\n\nfunction base64DecToArr(sBase64: string, nBlocksSize?: number): Uint8Array {\n const sB64Enc = sBase64.replace(/[^A-Za-z0-9+/]/g, \"\"); // Only necessary if the base64 includes whitespace such as line breaks.\n const nInLen = sB64Enc.length;\n const nOutLen = nBlocksSize\n ? Math.ceil(((nInLen * 3 + 1) >> 2) / nBlocksSize) * nBlocksSize\n : (nInLen * 3 + 1) >> 2;\n const taBytes = new Uint8Array(nOutLen);\n\n let nMod3;\n let nMod4;\n let nUint24 = 0;\n let nOutIdx = 0;\n for (let nInIdx = 0; nInIdx < nInLen; nInIdx++) {\n nMod4 = nInIdx & 3;\n nUint24 |= b64ToUint6(sB64Enc.charCodeAt(nInIdx)) << (6 * (3 - nMod4));\n if (nMod4 === 3 || nInLen - nInIdx === 1) {\n nMod3 = 0;\n while (nMod3 < 3 && nOutIdx < nOutLen) {\n taBytes[nOutIdx] = (nUint24 >>> ((16 >>> nMod3) & 24)) & 255;\n nMod3++;\n nOutIdx++;\n }\n nUint24 = 0;\n }\n }\n\n return taBytes;\n}\n\n/* Base64 string to array encoding */\nfunction uint6ToB64(nUint6: number): number {\n return nUint6 < 26\n ? nUint6 + 65\n : nUint6 < 52\n ? nUint6 + 71\n : nUint6 < 62\n ? nUint6 - 4\n : nUint6 === 62\n ? 43\n : nUint6 === 63\n ? 47\n : 65;\n}\n\nfunction base64EncArr(aBytes: Uint8Array): string {\n let nMod3 = 2;\n let sB64Enc = \"\";\n\n const nLen = aBytes.length;\n let nUint24 = 0;\n for (let nIdx = 0; nIdx < nLen; nIdx++) {\n nMod3 = nIdx % 3;\n // To break your base64 into several 80-character lines, add:\n // if (nIdx > 0 && ((nIdx * 4) / 3) % 76 === 0) {\n // sB64Enc += \"\\r\\n\";\n // }\n\n nUint24 |= aBytes[nIdx] << ((16 >>> nMod3) & 24);\n if (nMod3 === 2 || aBytes.length - nIdx === 1) {\n sB64Enc += String.fromCodePoint(\n uint6ToB64((nUint24 >>> 18) & 63),\n uint6ToB64((nUint24 >>> 12) & 63),\n uint6ToB64((nUint24 >>> 6) & 63),\n uint6ToB64(nUint24 & 63)\n );\n nUint24 = 0;\n }\n }\n return (\n sB64Enc.substring(0, sB64Enc.length - 2 + nMod3) +\n (nMod3 === 2 ? \"\" : nMod3 === 1 ? \"=\" : \"==\")\n );\n}\n\n/* UTF-8 array to JS string and vice versa */\n\nfunction UTF8ArrToStr(aBytes: Uint8Array): string {\n let sView = \"\";\n let nPart;\n const nLen = aBytes.length;\n for (let nIdx = 0; nIdx < nLen; nIdx++) {\n nPart = aBytes[nIdx];\n sView += String.fromCodePoint(\n nPart > 251 && nPart < 254 && nIdx + 5 < nLen /* six bytes */\n ? /* (nPart - 252 << 30) may be not so safe in ECMAScript! So\u2026: */\n (nPart - 252) * 1073741824 +\n ((aBytes[++nIdx] - 128) << 24) +\n ((aBytes[++nIdx] - 128) << 18) +\n ((aBytes[++nIdx] - 128) << 12) +\n ((aBytes[++nIdx] - 128) << 6) +\n aBytes[++nIdx] -\n 128\n : nPart > 247 && nPart < 252 && nIdx + 4 < nLen /* five bytes */\n ? ((nPart - 248) << 24) +\n ((aBytes[++nIdx] - 128) << 18) +\n ((aBytes[++nIdx] - 128) << 12) +\n ((aBytes[++nIdx] - 128) << 6) +\n aBytes[++nIdx] -\n 128\n : nPart > 239 && nPart < 248 && nIdx + 3 < nLen /* four bytes */\n ? ((nPart - 240) << 18) +\n ((aBytes[++nIdx] - 128) << 12) +\n ((aBytes[++nIdx] - 128) << 6) +\n aBytes[++nIdx] -\n 128\n : nPart > 223 && nPart < 240 && nIdx + 2 < nLen /* three bytes */\n ? ((nPart - 224) << 12) +\n ((aBytes[++nIdx] - 128) << 6) +\n aBytes[++nIdx] -\n 128\n : nPart > 191 && nPart < 224 && nIdx + 1 < nLen /* two bytes */\n ? ((nPart - 192) << 6) + aBytes[++nIdx] - 128\n : /* nPart < 127 ? */ /* one byte */\n nPart\n );\n }\n return sView;\n}\n\nfunction strToUTF8Arr(sDOMStr: string): Uint8Array {\n let nChr;\n const nStrLen = sDOMStr.length;\n let nArrLen = 0;\n\n /* mapping\u2026 */\n for (let nMapIdx = 0; nMapIdx < nStrLen; nMapIdx++) {\n nChr = sDOMStr.codePointAt(nMapIdx);\n if (nChr === undefined) {\n throw Error(`No char at ${nMapIdx} on string with length: ${sDOMStr.length}`)\n }\n\n if (nChr >= 0x10000) {\n nMapIdx++;\n }\n\n nArrLen +=\n nChr < 0x80\n ? 1\n : nChr < 0x800\n ? 2\n : nChr < 0x10000\n ? 3\n : nChr < 0x200000\n ? 4\n : nChr < 0x4000000\n ? 5\n : 6;\n }\n\n const aBytes = new Uint8Array(nArrLen);\n\n /* transcription\u2026 */\n let nIdx = 0;\n let nChrIdx = 0;\n while (nIdx < nArrLen) {\n nChr = sDOMStr.codePointAt(nChrIdx);\n if (nChr === undefined) {\n throw Error(`No char at ${nChrIdx} on string with length: ${sDOMStr.length}`)\n }\n if (nChr < 128) {\n /* one byte */\n aBytes[nIdx++] = nChr;\n } else if (nChr < 0x800) {\n /* two bytes */\n aBytes[nIdx++] = 192 + (nChr >>> 6);\n aBytes[nIdx++] = 128 + (nChr & 63);\n } else if (nChr < 0x10000) {\n /* three bytes */\n aBytes[nIdx++] = 224 + (nChr >>> 12);\n aBytes[nIdx++] = 128 + ((nChr >>> 6) & 63);\n aBytes[nIdx++] = 128 + (nChr & 63);\n } else if (nChr < 0x200000) {\n /* four bytes */\n aBytes[nIdx++] = 240 + (nChr >>> 18);\n aBytes[nIdx++] = 128 + ((nChr >>> 12) & 63);\n aBytes[nIdx++] = 128 + ((nChr >>> 6) & 63);\n aBytes[nIdx++] = 128 + (nChr & 63);\n nChrIdx++;\n } else if (nChr < 0x4000000) {\n /* five bytes */\n aBytes[nIdx++] = 248 + (nChr >>> 24);\n aBytes[nIdx++] = 128 + ((nChr >>> 18) & 63);\n aBytes[nIdx++] = 128 + ((nChr >>> 12) & 63);\n aBytes[nIdx++] = 128 + ((nChr >>> 6) & 63);\n aBytes[nIdx++] = 128 + (nChr & 63);\n nChrIdx++;\n } /* if (nChr <= 0x7fffffff) */ else {\n /* six bytes */\n aBytes[nIdx++] = 252 + (nChr >>> 30);\n aBytes[nIdx++] = 128 + ((nChr >>> 24) & 63);\n aBytes[nIdx++] = 128 + ((nChr >>> 18) & 63);\n aBytes[nIdx++] = 128 + ((nChr >>> 12) & 63);\n aBytes[nIdx++] = 128 + ((nChr >>> 6) & 63);\n aBytes[nIdx++] = 128 + (nChr & 63);\n nChrIdx++;\n }\n nChrIdx++;\n }\n\n return aBytes;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\nimport { HttpStatusCode } from \"@gnu-taler/taler-util\";\nimport { base64encode } from \"./base64.js\";\n\nexport enum ErrorType {\n CLIENT,\n SERVER,\n TIMEOUT,\n UNEXPECTED,\n}\n\n/**\n *\n * @param baseUrl URL where the service is located\n * @param endpoint endpoint of the service to be called\n * @param options auth, method and params\n * @returns\n */\nexport async function defaultRequestHandler<T>(\n baseUrl: string,\n endpoint: string,\n options: RequestOptions = {},\n): Promise<HttpResponseOk<T>> {\n const requestHeaders: Record<string, string> = {};\n if (options.token) {\n requestHeaders.Authorization = `Bearer ${options.token}`;\n } else if (options.basicAuth) {\n requestHeaders.Authorization = `Basic ${base64encode(\n `${options.basicAuth.username}:${options.basicAuth.password}`,\n )}`;\n }\n requestHeaders[\"Content-Type\"] =\n options.contentType === \"json\" ? \"application/json\" : \"text/plain\";\n\n const requestMethod = options?.method ?? \"GET\";\n const requestBody = options?.data;\n const requestTimeout = options?.timeout ?? 5 * 1000;\n const requestParams = options.params ?? {};\n\n const _url = new URL(`${baseUrl}${endpoint}`);\n\n Object.entries(requestParams).forEach(([key, value]) => {\n _url.searchParams.set(key, String(value));\n });\n\n let payload: BodyInit | undefined = undefined;\n if (requestBody != null) {\n if (typeof requestBody === \"string\") {\n payload = requestBody;\n } else if (requestBody instanceof ArrayBuffer) {\n payload = requestBody;\n } else if (ArrayBuffer.isView(requestBody)) {\n payload = requestBody;\n } else if (typeof requestBody === \"object\") {\n payload = JSON.stringify(requestBody);\n } else {\n throw Error(\"unsupported request body type\");\n }\n }\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => {\n controller.abort(\"HTTP_REQUEST_TIMEOUT\");\n }, requestTimeout);\n\n let response;\n try {\n response = await fetch(_url.href, {\n headers: requestHeaders,\n method: requestMethod,\n credentials: \"omit\",\n mode: \"cors\",\n body: payload,\n signal: controller.signal,\n });\n } catch (ex) {\n const info: RequestInfo = {\n payload,\n url: _url.href,\n hasToken: !!options.token,\n status: 0,\n };\n const error: HttpRequestTimeoutError = {\n clientError: true,\n isNotfound: false,\n isUnauthorized: false,\n error: undefined,\n info,\n type: ErrorType.TIMEOUT,\n message: \"Request timeout\",\n };\n throw new RequestError(error);\n }\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n const headerMap = new Headers();\n response.headers.forEach((value, key) => {\n headerMap.set(key, value);\n });\n\n if (response.ok) {\n const result = await buildRequestOk<T>(\n response,\n _url.href,\n payload,\n !!options.token,\n );\n return result;\n } else {\n const error = await buildRequestFailed(\n response,\n _url.href,\n payload,\n !!options.token,\n );\n throw new RequestError(error);\n }\n}\n\nexport type HttpResponse<T, ErrorDetail> =\n | HttpResponseOk<T>\n | HttpResponseLoading<T>\n | HttpError<ErrorDetail>;\n\nexport type HttpResponsePaginated<T, ErrorDetail> =\n | HttpResponseOkPaginated<T>\n | HttpResponseLoading<T>\n | HttpError<ErrorDetail>;\n\nexport interface RequestInfo {\n url: string;\n hasToken: boolean;\n payload: any;\n status: number;\n}\n\ninterface HttpResponseLoading<T> {\n ok?: false;\n loading: true;\n clientError?: false;\n serverError?: false;\n\n data?: T;\n}\nexport interface HttpResponseOk<T> {\n ok: true;\n loading?: false;\n clientError?: false;\n serverError?: false;\n\n data: T;\n info?: RequestInfo;\n}\n\nexport type HttpResponseOkPaginated<T> = HttpResponseOk<T> & WithPagination;\n\nexport interface WithPagination {\n loadMore: () => void;\n loadMorePrev: () => void;\n isReachingEnd?: boolean;\n isReachingStart?: boolean;\n}\n\nexport type HttpError<ErrorDetail> =\n | HttpRequestTimeoutError\n | HttpResponseClientError<ErrorDetail>\n | HttpResponseServerError<ErrorDetail>\n | HttpResponseUnexpectedError;\n\nexport interface HttpResponseServerError<ErrorDetail> {\n ok?: false;\n loading?: false;\n /**\n * @deprecated use status\n */\n clientError?: false;\n /**\n * @deprecated use status\n */\n serverError: true;\n type: ErrorType.SERVER;\n /**\n * @deprecated use payload\n */\n error: ErrorDetail;\n payload: ErrorDetail;\n status: HttpStatusCode;\n message: string;\n info?: RequestInfo;\n}\ninterface HttpRequestTimeoutError {\n ok?: false;\n loading?: false;\n /**\n * @deprecated use type\n */\n clientError: true;\n /**\n * @deprecated use type\n */\n serverError?: false;\n type: ErrorType.TIMEOUT;\n\n info?: RequestInfo;\n error: undefined;\n\n isUnauthorized: false;\n isNotfound: false;\n message: string;\n}\ninterface HttpResponseClientError<ErrorDetail> {\n ok?: false;\n loading?: false;\n /**\n * @deprecated use type\n */\n clientError: true;\n /**\n * @deprecated use type\n */\n serverError?: false;\n type: ErrorType.CLIENT;\n\n info?: RequestInfo;\n /**\n * @deprecated use status\n */\n isUnauthorized: boolean;\n /**\n * @deprecated use status\n */\n isNotfound: boolean;\n status: HttpStatusCode;\n /**\n * @deprecated use payload\n */\n error: ErrorDetail;\n payload: ErrorDetail;\n message: string;\n}\n\ninterface HttpResponseUnexpectedError {\n ok?: false;\n loading?: false;\n /**\n * @deprecated use type\n */\n clientError?: false;\n /**\n * @deprecated use type\n */\n serverError?: false;\n type: ErrorType.UNEXPECTED;\n\n info?: RequestInfo;\n status?: HttpStatusCode;\n /**\n * @deprecated use exception\n */\n error: unknown;\n exception: unknown;\n message: string;\n}\n\nexport class RequestError<ErrorDetail> extends Error {\n /**\n * @deprecated use cause\n */\n info: HttpError<ErrorDetail>;\n cause: HttpError<ErrorDetail>;\n constructor(d: HttpError<ErrorDetail>) {\n super(d.message);\n this.info = d;\n this.cause = d;\n }\n}\n\ntype Methods = \"GET\" | \"POST\" | \"PATCH\" | \"DELETE\" | \"PUT\";\n\nexport interface RequestOptions {\n method?: Methods;\n token?: string;\n basicAuth?: {\n username: string;\n password: string;\n };\n data?: any;\n params?: unknown;\n timeout?: number;\n contentType?: \"text\" | \"json\";\n}\n\nasync function buildRequestOk<T>(\n response: Response,\n url: string,\n payload: any,\n hasToken: boolean,\n): Promise<HttpResponseOk<T>> {\n const dataTxt = await response.text();\n const data = dataTxt ? JSON.parse(dataTxt) : undefined;\n return {\n ok: true,\n data,\n info: {\n payload,\n url,\n hasToken,\n status: response.status,\n },\n };\n}\n\nasync function buildRequestFailed<ErrorDetail>(\n response: Response,\n url: string,\n payload: any,\n hasToken: boolean,\n): Promise<\n | HttpResponseClientError<ErrorDetail>\n | HttpResponseServerError<ErrorDetail>\n | HttpResponseUnexpectedError\n> {\n const status = response?.status;\n\n const info: RequestInfo = {\n payload,\n url,\n hasToken,\n status: status || 0,\n };\n\n try {\n const dataTxt = await response.text();\n const data = dataTxt ? JSON.parse(dataTxt) : undefined;\n if (status && status >= 400 && status < 500) {\n const error: HttpResponseClientError<ErrorDetail> = {\n clientError: true,\n isNotfound: status === 404,\n isUnauthorized: status === 401,\n type: ErrorType.CLIENT,\n status,\n info,\n message: data?.hint,\n error: data, // remove this\n payload: data,\n };\n return error;\n }\n if (status && status >= 500 && status < 600) {\n const error: HttpResponseServerError<ErrorDetail> = {\n serverError: true,\n type: ErrorType.SERVER,\n status,\n info,\n message: `${data?.hint} (code ${data?.code})`,\n error: data, //remove this\n payload: data,\n };\n return error;\n }\n return {\n info,\n type: ErrorType.UNEXPECTED,\n status,\n error: {}, // remove this\n exception: undefined,\n message: \"NOT DEFINED\",\n };\n } catch (ex) {\n const error: HttpResponseUnexpectedError = {\n info,\n status,\n type: ErrorType.UNEXPECTED,\n error: ex,\n exception: ex,\n message: \"NOT DEFINED\",\n };\n\n return error;\n }\n}\n\n// export function isAxiosError<T>(\n// error: AxiosError | any,\n// ): error is AxiosError<T> {\n// return error && error.isAxiosError;\n// }\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { ComponentChildren, createContext, h, VNode } from \"preact\";\nimport { useContext } from \"preact/hooks\";\nimport { defaultRequestHandler } from \"../utils/request.js\";\n\ninterface Type {\n request: typeof defaultRequestHandler;\n}\n\nconst Context = createContext<Type>({\n request: defaultRequestHandler,\n});\n\nexport const useApiContext = (): Type => useContext(Context);\nexport const ApiContextProvider = ({\n children,\n value,\n}: {\n value: Type;\n children: ComponentChildren;\n}): VNode => {\n return h(Context.Provider, { value, children });\n};\n", "/*\n This file is part of GNU Taler\n (C) 2022 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\nimport { i18n, setupI18n } from \"@gnu-taler/taler-util\";\nimport { ComponentChildren, createContext, h, VNode } from \"preact\";\nimport { useContext, useEffect } from \"preact/hooks\";\nimport { useLang } from \"../hooks/index.js\";\n\nexport type InternationalizationAPI = typeof i18n;\n\ninterface Type {\n lang: string;\n supportedLang: { [id in keyof typeof supportedLang]: string };\n changeLanguage: (l: string) => void;\n i18n: InternationalizationAPI;\n isSaved: boolean;\n}\n\nconst supportedLang = {\n es: \"Espanol [es]\",\n en: \"English [en]\",\n fr: \"Francais [fr]\",\n de: \"Deutsch [de]\",\n sv: \"Svenska [sv]\",\n it: \"Italiane [it]\",\n navigator: \"Defined by navigator\",\n};\n\nconst initial = {\n lang: \"en\",\n supportedLang,\n changeLanguage: () => {\n // do not change anything\n },\n i18n,\n isSaved: false,\n};\nconst Context = createContext<Type>(initial);\n\ninterface Props {\n initial?: string;\n children: ComponentChildren;\n forceLang?: string;\n source: Record<string, any>;\n}\n\n// Outmost UI wrapper.\nexport const TranslationProvider = ({\n initial,\n children,\n forceLang,\n source,\n}: Props): VNode => {\n const [lang, changeLanguage, isSaved] = useLang(initial);\n useEffect(() => {\n if (forceLang) {\n changeLanguage(forceLang);\n }\n });\n useEffect(() => {\n setupI18n(lang, source);\n }, [lang]);\n if (forceLang) {\n setupI18n(forceLang, source);\n } else {\n setupI18n(lang, source);\n }\n\n return h(Context.Provider, {\n value: { lang, changeLanguage, supportedLang, i18n, isSaved },\n children,\n });\n};\n\nexport const useTranslationContext = (): Type => useContext(Context);\n", "import { createElement, VNode } from \"preact\";\n\nexport type StateFunc<S> = (p: S) => VNode;\n\nexport type StateViewMap<StateType extends { status: string }> = {\n [S in StateType as S[\"status\"]]: StateFunc<S>;\n};\n\nexport type RecursiveState<S extends object> = S | (() => RecursiveState<S>);\n\nexport function compose<SType extends { status: string }, PType>(\n hook: (p: PType) => RecursiveState<SType>,\n viewMap: StateViewMap<SType>,\n): (p: PType) => VNode {\n function withHook(stateHook: () => RecursiveState<SType>): () => VNode {\n function ComposedComponent(): VNode {\n const state = stateHook();\n\n if (typeof state === \"function\") {\n const subComponent = withHook(state);\n return createElement(subComponent, {});\n }\n\n const statusName = state.status as unknown as SType[\"status\"];\n const viewComponent = viewMap[statusName] as unknown as StateFunc<SType>;\n return createElement(viewComponent, state);\n }\n\n return ComposedComponent;\n }\n\n return (p: PType) => {\n const h = withHook(() => hook(p));\n return h();\n };\n}\n\n/**\n *\n * @param obj VNode\n * @returns\n */\nexport function saveVNodeForInspection<T>(obj: T): T {\n // @ts-ignore\n window[\"showVNodeInfo\"] = function showVNodeInfo() {\n inspect(obj);\n };\n return obj;\n}\nfunction inspect(obj: any) {\n if (!obj) return;\n if (obj.__c && obj.__c.__H) {\n const componentName = obj.__c.constructor.name;\n const hookState = obj.__c.__H;\n const stateList = hookState.__ as Array<any>;\n console.log(\"==============\", componentName);\n stateList.forEach((hook) => {\n const { __: value, c: context, __h: factory, __H: args } = hook;\n if (typeof context !== \"undefined\") {\n const { __c: contextId } = context;\n console.log(\"context:\", contextId, hook);\n } else if (typeof factory === \"function\") {\n console.log(\"memo:\", value, \"deps:\", args);\n } else if (typeof value === \"function\") {\n const effectName = value.name;\n console.log(\"effect:\", effectName, \"deps:\", args);\n } else if (typeof value.current !== \"undefined\") {\n const ref = value.current;\n console.log(\"ref:\", ref instanceof Element ? ref.outerHTML : ref);\n } else if (value instanceof Array) {\n console.log(\"state:\", value[0]);\n } else {\n console.log(hook);\n }\n });\n }\n const children = obj.__k;\n if (children instanceof Array) {\n children.forEach((e) => inspect(e));\n } else {\n inspect(children);\n }\n}\n", "export * from \"./hook.js\";\n// export * from \"./axios.js\"\n", "/*\n This file is part of GNU Taler\n (C) 2022 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\nimport {\n ComponentChildren,\n Fragment,\n FunctionalComponent,\n h as create,\n options,\n render as renderIntoDom,\n VNode\n} from \"preact\";\n\n// This library is expected to be included in testing environment only\n// When doing tests we want the requestAnimationFrame to be as fast as possible.\n// without this option the RAF will timeout after 100ms making the tests slower\noptions.requestAnimationFrame = (fn: () => void) => {\n return fn();\n};\n\nexport function createExample<Props>(\n Component: FunctionalComponent<Props>,\n props: Partial<Props> | (() => Partial<Props>),\n): ComponentChildren {\n const evaluatedProps = typeof props === \"function\" ? props() : props;\n const Render = (args: any): VNode => create(Component, args);\n\n return {\n component: Render,\n props: evaluatedProps,\n };\n}\n\nconst isNode = typeof window === \"undefined\";\n\n/**\n * To be used on automated unit test.\n * So test will run under node or browser\n * @param Component\n * @param args\n */\nexport function renderNodeOrBrowser(\n Component: any,\n args: any,\n Context?: any,\n): void {\n const vdom = !Context\n ? create(Component, args)\n : create(Context, { children: [create(Component, args)] });\n\n const customElement = {} as Element;\n const parentElement = isNode ? customElement : document.createElement(\"div\");\n if (!isNode) {\n document.body.appendChild(parentElement);\n }\n // renderIntoDom works also in nodejs\n // if the VirtualDOM is composed only by functional components\n // then no called is going to be made to the DOM api.\n // vdom should not have any 'div' or other html component\n renderIntoDom(vdom, parentElement);\n\n if (!isNode) {\n document.body.removeChild(parentElement);\n }\n}\ntype RecursiveState<S> = S | (() => RecursiveState<S>);\n\ninterface Mounted<T> {\n // unmount: () => void;\n pullLastResultOrThrow: () => Exclude<T, VoidFunction>;\n assertNoPendingUpdate: () => Promise<boolean>;\n // waitNextUpdate: (s?: string) => Promise<void>;\n waitForStateUpdate: () => Promise<boolean>;\n}\n\n/**\n * Manual API mount the hook and return testing API\n * Consider using hookBehaveLikeThis() function\n * \n * @param hookToBeTested\n * @param Context\n * \n * @returns testing API\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function mountHook<T extends object>(\n hookToBeTested: () => RecursiveState<T>,\n Context?: ({ children }: { children: any }) => VNode | null,\n): Mounted<T> {\n let lastResult: Exclude<T, VoidFunction> | Error | null = null;\n\n const listener: Array<() => void> = [];\n\n // component that's going to hold the hook\n function Component(): VNode {\n try {\n let componentOrResult = hookToBeTested();\n while (typeof componentOrResult === \"function\") {\n componentOrResult = componentOrResult();\n }\n //typecheck fails here\n const l: Exclude<T, () => void> = componentOrResult as any;\n lastResult = l;\n } catch (e) {\n if (e instanceof Error) {\n lastResult = e;\n } else {\n lastResult = new Error(`mounting the hook throw an exception: ${e}`);\n }\n }\n\n // notify to everyone waiting for an update and clean the queue\n listener.splice(0, listener.length).forEach((cb) => cb());\n return create(Fragment, {});\n }\n\n renderNodeOrBrowser(Component, {}, Context);\n\n function pullLastResult(): Exclude<T | Error | null, VoidFunction> {\n const copy: Exclude<T | Error | null, VoidFunction> = lastResult;\n lastResult = null;\n return copy;\n }\n\n function pullLastResultOrThrow(): Exclude<T, VoidFunction> {\n const r = pullLastResult();\n if (r instanceof Error) throw r;\n //sanity check\n if (!r) throw Error(\"there was no last result\");\n return r;\n }\n\n async function assertNoPendingUpdate(): Promise<boolean> {\n await new Promise((res, rej) => {\n const tid = setTimeout(() => {\n res(true);\n }, 10);\n\n listener.push(() => {\n clearTimeout(tid);\n res(false);\n // Error(`Expecting no pending result but the hook got updated.\n // If the update was not intended you need to check the hook dependencies\n // (or dependencies of the internal state) but otherwise make\n // sure to consume the result before ending the test.`),\n // );\n });\n });\n\n const r = pullLastResult();\n if (r) {\n return Promise.resolve(false);\n }\n return Promise.resolve(true);\n // throw Error(`There are still pending results.\n // This may happen because the hook did a new update but the test didn't consume the result using pullLastResult`);\n }\n async function waitForStateUpdate(): Promise<boolean> {\n return await new Promise((res, rej) => {\n const tid = setTimeout(() => {\n res(false);\n }, 10);\n\n listener.push(() => {\n clearTimeout(tid);\n res(true);\n });\n });\n }\n\n return {\n // unmount,\n pullLastResultOrThrow,\n waitForStateUpdate,\n assertNoPendingUpdate,\n };\n}\n\nexport const nullFunction = (): void => {\n null;\n};\nexport const nullAsyncFunction = (): Promise<void> => {\n return Promise.resolve();\n};\n\ntype HookTestResult = HookTestResultOk | HookTestResultError;\n\ninterface HookTestResultOk {\n result: \"ok\";\n}\ninterface HookTestResultError {\n result: \"fail\";\n error: string;\n index: number;\n}\n\n/**\n * Main testing driver.\n * It will assert that there are no more and no less hook updates than expected. \n * \n * @param hookFunction hook function to be tested\n * @param props initial props for the hook\n * @param checks step by step state validation\n * @param Context additional testing context for overrides\n * \n * @returns testing result, should also be checked to be \"ok\"\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport async function hookBehaveLikeThis<T extends object, PropsType>(\n hookFunction: (p: PropsType) => RecursiveState<T>,\n props: PropsType,\n checks: Array<(state: Exclude<T, VoidFunction>) => void>,\n Context?: ({ children }: { children: any }) => VNode | null,\n): Promise<HookTestResult> {\n const { pullLastResultOrThrow, waitForStateUpdate, assertNoPendingUpdate } =\n mountHook<T>(() => hookFunction(props), Context);\n\n const [firstCheck, ...resultOfTheChecks] = checks;\n {\n const state = pullLastResultOrThrow();\n const checkError = firstCheck(state);\n if (checkError !== undefined) {\n return {\n result: \"fail\",\n index: 0,\n error: `Check return not undefined error: ${checkError}`,\n };\n }\n }\n\n let index = 1;\n for (const check of resultOfTheChecks) {\n const hasNext = await waitForStateUpdate();\n if (!hasNext) {\n return {\n result: \"fail\",\n error: \"Component didn't update and the test expected one more state\",\n index,\n };\n }\n const state = pullLastResultOrThrow();\n const checkError = check(state);\n if (checkError !== undefined) {\n return {\n result: \"fail\",\n index,\n error: `Check return not undefined error: ${checkError}`,\n };\n }\n index++;\n }\n\n const hasNext = await waitForStateUpdate();\n if (hasNext) {\n return {\n result: \"fail\",\n index,\n error: \"Component updated and test didn't expect more states\",\n };\n }\n const noMoreUpdates = await assertNoPendingUpdate();\n if (noMoreUpdates === false) {\n return {\n result: \"fail\",\n index,\n error: \"Component was updated but the test does not cover the update\",\n };\n }\n\n return {\n result: \"ok\",\n };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { setupI18n } from \"@gnu-taler/taler-util\";\nimport e from \"express\";\nimport {\n ComponentChild,\n ComponentChildren,\n Fragment,\n FunctionalComponent,\n FunctionComponent,\n h,\n JSX,\n render,\n VNode,\n} from \"preact\";\nimport { useEffect, useErrorBoundary, useState } from \"preact/hooks\";\n\nconst Page: FunctionalComponent = ({ children }): VNode => {\n return (\n <div\n style={{\n fontFamily: \"Arial, Helvetica, sans-serif\",\n width: \"100%\",\n display: \"flex\",\n flexDirection: \"row\",\n }}\n >\n {children}\n </div>\n );\n};\n\nconst SideBar: FunctionalComponent<{ width: number }> = ({\n width,\n children,\n}): VNode => {\n return (\n <div\n style={{\n minWidth: width,\n height: \"calc(100vh - 20px)\",\n overflowX: \"hidden\",\n overflowY: \"visible\",\n scrollBehavior: \"smooth\",\n }}\n >\n {children}\n </div>\n );\n};\n\nconst ResizeHandleDiv: FunctionalComponent<\n JSX.HTMLAttributes<HTMLDivElement>\n> = ({ children, ...props }): VNode => {\n return (\n <div\n {...props}\n style={{\n width: 10,\n backgroundColor: \"#ddd\",\n cursor: \"ew-resize\",\n }}\n >\n {children}\n </div>\n );\n};\n\nconst Content: FunctionalComponent = ({ children }): VNode => {\n return (\n <div\n style={{\n width: \"100%\",\n padding: 20,\n }}\n >\n {children}\n </div>\n );\n};\n\nfunction findByGroupComponentName(\n allExamples: Group[],\n group: string,\n component: string,\n name: string,\n): ExampleItem | undefined {\n const gl = allExamples.filter((e) => e.title === group);\n if (gl.length === 0) {\n return undefined;\n }\n const cl = gl[0].list.filter((l) => l.name === component);\n if (cl.length === 0) {\n return undefined;\n }\n const el = cl[0].examples.filter((c) => c.name === name);\n if (el.length === 0) {\n return undefined;\n }\n return el[0];\n}\n\nfunction getContentForExample(\n item: ExampleItem | undefined,\n allExamples: Group[],\n): FunctionalComponent {\n if (!item)\n return function SelectExampleMessage() {\n return <div>select example from the list on the left</div>;\n };\n const example = findByGroupComponentName(\n allExamples,\n item.group,\n item.component,\n item.name,\n );\n if (!example) {\n return function ExampleNotFoundMessage() {\n return <div>example not found</div>;\n };\n }\n return () => example.render.component(example.render.props);\n}\n\nfunction ExampleList({\n name,\n list,\n selected,\n onSelectStory,\n}: {\n name: string;\n list: {\n name: string;\n examples: ExampleItem[];\n }[];\n selected: ExampleItem | undefined;\n onSelectStory: (i: ExampleItem, id: string) => void;\n}): VNode {\n const [isOpen, setOpen] = useState(selected && selected.group === name);\n return (\n <ol style={{ padding: 4, margin: 0 }}>\n <div\n style={{ backgroundColor: \"lightcoral\", cursor: \"pointer\" }}\n onClick={() => setOpen(!isOpen)}\n >\n {name}\n </div>\n <div style={{ display: isOpen ? undefined : \"none\" }}>\n {list.map((k) => (\n <li key={k.name}>\n <dl style={{ margin: 0 }}>\n <dt>{k.name}</dt>\n {k.examples.map((r, i) => {\n const e = encodeURIComponent;\n const eId = `${e(r.group)}-${e(r.component)}-${e(r.name)}`;\n const isSelected =\n selected &&\n selected.component === r.component &&\n selected.group === r.group &&\n selected.name === r.name;\n return (\n <dd\n id={eId}\n key={r.name}\n style={{\n backgroundColor: isSelected\n ? \"green\"\n : i % 2\n ? \"lightgray\"\n : \"lightblue\",\n marginLeft: \"1em\",\n padding: 4,\n cursor: \"pointer\",\n borderRadius: 4,\n marginBottom: 4,\n }}\n >\n <a\n href={`#${eId}`}\n style={{ color: \"black\" }}\n onClick={(e) => {\n e.preventDefault();\n location.hash = `#${eId}`;\n onSelectStory(r, eId);\n history.pushState({}, \"\", `#${eId}`);\n }}\n >\n {r.name}\n </a>\n </dd>\n );\n })}\n </dl>\n </li>\n ))}\n </div>\n </ol>\n );\n}\n\n/**\n * Prevents the UI from redirecting and inform the dev\n * where the <a /> should have redirected\n * @returns\n */\nfunction PreventLinkNavigation({\n children,\n}: {\n children: ComponentChildren;\n}): VNode {\n return (\n <div\n onClick={(e) => {\n let t: any = e.target;\n do {\n if (t.localName === \"a\" && t.getAttribute(\"href\")) {\n alert(`should navigate to: ${t.attributes.href.value}`);\n e.stopImmediatePropagation();\n e.stopPropagation();\n e.preventDefault();\n return false;\n }\n } while ((t = t.parentNode));\n return true;\n }}\n >\n {children}\n </div>\n );\n}\n\nfunction ErrorReport({\n children,\n selected,\n}: {\n children: ComponentChild;\n selected: ExampleItem | undefined;\n}): VNode {\n const [error, resetError] = useErrorBoundary();\n //if there is an error, reset when unloading this component\n useEffect(() => (error ? resetError : undefined));\n if (error) {\n return (\n <div>\n <p>Error was thrown trying to render</p>\n {selected && (\n <ul>\n <li>\n <b>group</b>: {selected.group}\n </li>\n <li>\n <b>component</b>: {selected.component}\n </li>\n <li>\n <b>example</b>: {selected.name}\n </li>\n <li>\n <b>args</b>:{\" \"}\n <pre>{JSON.stringify(selected.render.props, undefined, 2)}</pre>\n </li>\n </ul>\n )}\n <p>{error.message}</p>\n <pre>{error.stack}</pre>\n </div>\n );\n }\n return <Fragment>{children}</Fragment>;\n}\n\nfunction getSelectionFromLocationHash(\n hash: string,\n allExamples: Group[],\n): ExampleItem | undefined {\n if (!hash) return undefined;\n const parts = hash.substring(1).split(\"-\");\n if (parts.length < 3) return undefined;\n return findByGroupComponentName(\n allExamples,\n decodeURIComponent(parts[0]),\n decodeURIComponent(parts[1]),\n decodeURIComponent(parts[2]),\n );\n}\n\nfunction parseExampleImport(\n group: string,\n componentName: string,\n im: MaybeComponent,\n): ComponentItem {\n const examples: ExampleItem[] = Object.entries(im)\n .filter(([k]) => k !== \"default\")\n .map(([exampleName, exampleValue]): ExampleItem => {\n if (!exampleValue) {\n throw Error(\n `example \"${exampleName}\" from component \"${componentName}\" in group \"${group}\" is undefined`,\n );\n }\n\n if (typeof exampleValue === \"function\") {\n return {\n group,\n component: componentName,\n name: exampleName,\n render: {\n component: exampleValue as FunctionComponent,\n props: {},\n },\n };\n }\n const v: any = exampleValue;\n if (\n \"component\" in v &&\n typeof v.component === \"function\" &&\n \"props\" in v\n ) {\n return {\n group,\n component: componentName,\n name: exampleName,\n render: v,\n };\n }\n throw Error(\n `example \"${exampleName}\" from component \"${componentName}\" in group \"${group}\" doesn't follow one of the two ways of example`,\n );\n });\n return {\n name: componentName,\n examples,\n };\n}\n\nexport function parseGroupImport(\n groups: Record<string, ComponentOrFolder>,\n): Group[] {\n return Object.entries(groups).map(([groupName, value]) => {\n return {\n title: groupName,\n list: Object.entries(value).flatMap(([key, value]) =>\n folder(groupName, value),\n ),\n };\n });\n}\n\nexport interface Group {\n title: string;\n list: ComponentItem[];\n}\n\nexport interface ComponentItem {\n name: string;\n examples: ExampleItem[];\n}\n\nexport interface ExampleItem {\n group: string;\n component: string;\n name: string;\n render: {\n component: FunctionalComponent;\n props: object;\n };\n}\n\ntype ComponentOrFolder = MaybeComponent | MaybeFolder;\ninterface MaybeFolder {\n default?: { title: string };\n // [exampleName: string]: FunctionalComponent;\n}\ninterface MaybeComponent {\n // default?: undefined;\n [exampleName: string]: undefined | object;\n}\n\nfunction folder(groupName: string, value: ComponentOrFolder): ComponentItem[] {\n let title: string | undefined = undefined;\n try {\n title =\n typeof value === \"object\" &&\n typeof value.default === \"object\" &&\n value.default !== undefined &&\n \"title\" in value.default &&\n typeof value.default.title === \"string\"\n ? value.default.title\n : undefined;\n } catch (e) {\n throw Error(\n `Could not defined if it is component or folder ${groupName}: ${JSON.stringify(\n value,\n undefined,\n 2,\n )}`,\n );\n }\n if (title) {\n const c = parseExampleImport(groupName, title, value as MaybeComponent);\n return [c];\n }\n return Object.entries(value).flatMap(([subkey, value]) =>\n folder(groupName, value),\n );\n}\n\ninterface Props {\n getWrapperForGroup: (name: string) => FunctionComponent;\n examplesInGroups: Group[];\n langs: Record<string, object>;\n}\n\nfunction Application({\n langs,\n examplesInGroups,\n getWrapperForGroup,\n}: Props): VNode {\n const initialSelection = getSelectionFromLocationHash(\n location.hash,\n examplesInGroups,\n );\n\n const url = new URL(window.location.href);\n const currentLang = url.searchParams.get(\"lang\") || \"en\";\n\n if (!langs[\"en\"]) {\n langs[\"en\"] = {};\n }\n setupI18n(currentLang, langs);\n\n const [selected, updateSelected] = useState<ExampleItem | undefined>(\n initialSelection,\n );\n const [sidebarWidth, setSidebarWidth] = useState(200);\n useEffect(() => {\n if (location.hash) {\n const hash = location.hash.substring(1);\n const found = document.getElementById(hash);\n if (found) {\n setTimeout(() => {\n found.scrollIntoView({\n block: \"center\",\n });\n }, 10);\n }\n }\n }, []);\n\n const GroupWrapper = getWrapperForGroup(selected?.group || \"default\");\n const ExampleContent = getContentForExample(selected, examplesInGroups);\n\n //style={{ \"--with-size\": `${sidebarWidth}px` }}\n return (\n <Page>\n {/* <LiveReload /> */}\n <SideBar width={sidebarWidth}>\n <div>\n Language:\n <select\n value={currentLang}\n onChange={(e) => {\n const url = new URL(window.location.href);\n url.searchParams.set(\"lang\", e.currentTarget.value);\n window.location.href = url.href;\n }}\n >\n {Object.keys(langs).map((l) => (\n <option key={l}>{l}</option>\n ))}\n </select>\n </div>\n {examplesInGroups.map((group) => (\n <ExampleList\n key={group.title}\n name={group.title}\n list={group.list}\n selected={selected}\n onSelectStory={(item, htmlId) => {\n document.getElementById(htmlId)?.scrollIntoView({\n block: \"center\",\n });\n updateSelected(item);\n }}\n />\n ))}\n <hr />\n </SideBar>\n <ResizeHandle\n onUpdate={(x) => {\n setSidebarWidth((s) => s + x);\n }}\n />\n <Content>\n <ErrorReport selected={selected}>\n <PreventLinkNavigation>\n <GroupWrapper>\n <ExampleContent />\n </GroupWrapper>\n </PreventLinkNavigation>\n </ErrorReport>\n </Content>\n </Page>\n );\n}\n\nexport interface Options {\n id?: string;\n strings?: any;\n getWrapperForGroup?: (name: string) => FunctionComponent;\n}\n\nexport function renderStories(\n groups: Record<string, ComponentOrFolder>,\n options: Options = {},\n): void {\n const examples = parseGroupImport(groups);\n\n try {\n const cid = options.id ?? \"container\";\n const container = document.getElementById(cid);\n if (!container) {\n throw Error(\n `container with id ${cid} not found, can't mount page contents`,\n );\n }\n render(\n <Application\n examplesInGroups={examples}\n getWrapperForGroup={options.getWrapperForGroup ?? (() => Fragment)}\n langs={options.strings ?? { en: {} }}\n />,\n container,\n );\n } catch (e) {\n console.error(\"got error\", e);\n if (e instanceof Error) {\n document.body.innerText = `Fatal error: \"${e.message}\". Please report this bug at https://bugs.gnunet.org/.`;\n }\n }\n}\n\nfunction ResizeHandle({ onUpdate }: { onUpdate: (x: number) => void }): VNode {\n const [start, setStart] = useState<number | undefined>(undefined);\n return (\n <ResizeHandleDiv\n onMouseDown={(e: any) => {\n setStart(e.pageX);\n console.log(\"active\", e.pageX);\n return false;\n }}\n onMouseMove={(e: any) => {\n if (start !== undefined) {\n onUpdate(e.pageX - start);\n }\n return false;\n }}\n onMouseUp={() => {\n setStart(undefined);\n return false;\n }}\n />\n );\n}\n", "\nconst EMPTY = {};\n\nexport function assign(obj, props) {\n\t// eslint-disable-next-line guard-for-in\n\tfor (let i in props) {\n\t\tobj[i] = props[i];\n\t}\n\treturn obj;\n}\n\nexport function exec(url, route, opts) {\n\tlet reg = /(?:\\?([^#]*))?(#.*)?$/,\n\t\tc = url.match(reg),\n\t\tmatches = {},\n\t\tret;\n\tif (c && c[1]) {\n\t\tlet p = c[1].split('&');\n\t\tfor (let i=0; i<p.length; i++) {\n\t\t\tlet r = p[i].split('=');\n\t\t\tmatches[decodeURIComponent(r[0])] = decodeURIComponent(r.slice(1).join('='));\n\t\t}\n\t}\n\turl = segmentize(url.replace(reg, ''));\n\troute = segmentize(route || '');\n\tlet max = Math.max(url.length, route.length);\n\tfor (let i=0; i<max; i++) {\n\t\tif (route[i] && route[i].charAt(0)===':') {\n\t\t\tlet param = route[i].replace(/(^:|[+*?]+$)/g, ''),\n\t\t\t\tflags = (route[i].match(/[+*?]+$/) || EMPTY)[0] || '',\n\t\t\t\tplus = ~flags.indexOf('+'),\n\t\t\t\tstar = ~flags.indexOf('*'),\n\t\t\t\tval = url[i] || '';\n\t\t\tif (!val && !star && (flags.indexOf('?')<0 || plus)) {\n\t\t\t\tret = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatches[param] = decodeURIComponent(val);\n\t\t\tif (plus || star) {\n\t\t\t\tmatches[param] = url.slice(i).map(decodeURIComponent).join('/');\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\telse if (route[i]!==url[i]) {\n\t\t\tret = false;\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (opts.default!==true && ret===false) return false;\n\treturn matches;\n}\n\nexport function pathRankSort(a, b) {\n\treturn (\n\t\t(a.rank < b.rank) ? 1 :\n\t\t\t(a.rank > b.rank) ? -1 :\n\t\t\t\t(a.index - b.index)\n\t);\n}\n\n// filter out VNodes without attributes (which are unrankeable), and add `index`/`rank` properties to be used in sorting.\nexport function prepareVNodeForRanking(vnode, index) {\n\tvnode.index = index;\n\tvnode.rank = rankChild(vnode);\n\treturn vnode.props;\n}\n\nexport function segmentize(url) {\n\treturn url.replace(/(^\\/+|\\/+$)/g, '').split('/');\n}\n\nexport function rankSegment(segment) {\n\treturn segment.charAt(0)==':' ? (1 + '*+?'.indexOf(segment.charAt(segment.length-1))) || 4 : 5;\n}\n\nexport function rank(path) {\n\treturn segmentize(path).map(rankSegment).join('');\n}\n\nfunction rankChild(vnode) {\n\treturn vnode.props.default ? 0 : rank(vnode.props.path);\n}\n", "import { cloneElement, createElement, Component, toChildArray } from 'preact';\nimport { exec, prepareVNodeForRanking, assign, pathRankSort } from './util';\n\nlet customHistory = null;\n\nconst ROUTERS = [];\n\nconst subscribers = [];\n\nconst EMPTY = {};\n\nfunction setUrl(url, type='push') {\n\tif (customHistory && customHistory[type]) {\n\t\tcustomHistory[type](url);\n\t}\n\telse if (typeof history!=='undefined' && history[type+'State']) {\n\t\thistory[type+'State'](null, null, url);\n\t}\n}\n\n\nfunction getCurrentUrl() {\n\tlet url;\n\tif (customHistory && customHistory.location) {\n\t\turl = customHistory.location;\n\t}\n\telse if (customHistory && customHistory.getCurrentLocation) {\n\t\turl = customHistory.getCurrentLocation();\n\t}\n\telse {\n\t\turl = typeof location!=='undefined' ? location : EMPTY;\n\t}\n\treturn `${url.pathname || ''}${url.search || ''}`;\n}\n\n\n\nfunction route(url, replace=false) {\n\tif (typeof url!=='string' && url.url) {\n\t\treplace = url.replace;\n\t\turl = url.url;\n\t}\n\n\t// only push URL into history if we can handle it\n\tif (canRoute(url)) {\n\t\tsetUrl(url, replace ? 'replace' : 'push');\n\t}\n\n\treturn routeTo(url);\n}\n\n\n/** Check if the given URL can be handled by any router instances. */\nfunction canRoute(url) {\n\tfor (let i=ROUTERS.length; i--; ) {\n\t\tif (ROUTERS[i].canRoute(url)) return true;\n\t}\n\treturn false;\n}\n\n\n/** Tell all router instances to handle the given URL. */\nfunction routeTo(url) {\n\tlet didRoute = false;\n\tfor (let i=0; i<ROUTERS.length; i++) {\n\t\tif (ROUTERS[i].routeTo(url)===true) {\n\t\t\tdidRoute = true;\n\t\t}\n\t}\n\tfor (let i=subscribers.length; i--; ) {\n\t\tsubscribers[i](url);\n\t}\n\treturn didRoute;\n}\n\n\nfunction routeFromLink(node) {\n\t// only valid elements\n\tif (!node || !node.getAttribute) return;\n\n\tlet href = node.getAttribute('href'),\n\t\ttarget = node.getAttribute('target');\n\n\t// ignore links with targets and non-path URLs\n\tif (!href || !href.match(/^\\//g) || (target && !target.match(/^_?self$/i))) return;\n\n\t// attempt to route, if no match simply cede control to browser\n\treturn route(href);\n}\n\n\nfunction handleLinkClick(e) {\n\tif (e.ctrlKey || e.metaKey || e.altKey || e.shiftKey || e.button!==0) return;\n\trouteFromLink(e.currentTarget || e.target || this);\n\treturn prevent(e);\n}\n\n\nfunction prevent(e) {\n\tif (e) {\n\t\tif (e.stopImmediatePropagation) e.stopImmediatePropagation();\n\t\tif (e.stopPropagation) e.stopPropagation();\n\t\te.preventDefault();\n\t}\n\treturn false;\n}\n\n\nfunction delegateLinkHandler(e) {\n\t// ignore events the browser takes care of already:\n\tif (e.ctrlKey || e.metaKey || e.altKey || e.shiftKey || e.button!==0) return;\n\n\tlet t = e.target;\n\tdo {\n\t\tif (String(t.nodeName).toUpperCase()==='A' && t.getAttribute('href')) {\n\t\t\tif (t.hasAttribute('native')) return;\n\t\t\t// if link is handled by the router, prevent browser defaults\n\t\t\tif (routeFromLink(t)) {\n\t\t\t\treturn prevent(e);\n\t\t\t}\n\t\t}\n\t} while ((t=t.parentNode));\n}\n\n\nlet eventListenersInitialized = false;\n\nfunction initEventListeners() {\n\tif (eventListenersInitialized) return;\n\n\tif (typeof addEventListener==='function') {\n\t\tif (!customHistory) {\n\t\t\taddEventListener('popstate', () => {\n\t\t\t\trouteTo(getCurrentUrl());\n\t\t\t});\n\t\t}\n\t\taddEventListener('click', delegateLinkHandler);\n\t}\n\teventListenersInitialized = true;\n}\n\n\nclass Router extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tif (props.history) {\n\t\t\tcustomHistory = props.history;\n\t\t}\n\n\t\tthis.state = {\n\t\t\turl: props.url || getCurrentUrl()\n\t\t};\n\n\t\tinitEventListeners();\n\t}\n\n\tshouldComponentUpdate(props) {\n\t\tif (props.static!==true) return true;\n\t\treturn props.url!==this.props.url || props.onChange!==this.props.onChange;\n\t}\n\n\t/** Check if the given URL can be matched against any children */\n\tcanRoute(url) {\n\t\tconst children = toChildArray(this.props.children);\n\t\treturn this.getMatchingChildren(children, url, false).length > 0;\n\t}\n\n\t/** Re-render children with a new URL to match against. */\n\trouteTo(url) {\n\t\tthis.setState({ url });\n\n\t\tconst didRoute = this.canRoute(url);\n\n\t\t// trigger a manual re-route if we're not in the middle of an update:\n\t\tif (!this.updating) this.forceUpdate();\n\n\t\treturn didRoute;\n\t}\n\n\tcomponentWillMount() {\n\t\tROUTERS.push(this);\n\t\tthis.updating = true;\n\t}\n\n\tcomponentDidMount() {\n\t\tif (customHistory) {\n\t\t\tthis.unlisten = customHistory.listen((location) => {\n\t\t\t\tthis.routeTo(`${location.pathname || ''}${location.search || ''}`);\n\t\t\t});\n\t\t}\n\t\tthis.updating = false;\n\t}\n\n\tcomponentWillUnmount() {\n\t\tif (typeof this.unlisten==='function') this.unlisten();\n\t\tROUTERS.splice(ROUTERS.indexOf(this), 1);\n\t}\n\n\tcomponentWillUpdate() {\n\t\tthis.updating = true;\n\t}\n\n\tcomponentDidUpdate() {\n\t\tthis.updating = false;\n\t}\n\n\tgetMatchingChildren(children, url, invoke) {\n\t\treturn children\n\t\t\t.filter(prepareVNodeForRanking)\n\t\t\t.sort(pathRankSort)\n\t\t\t.map( vnode => {\n\t\t\t\tlet matches = exec(url, vnode.props.path, vnode.props);\n\t\t\t\tif (matches) {\n\t\t\t\t\tif (invoke !== false) {\n\t\t\t\t\t\tlet newProps = { url, matches };\n\t\t\t\t\t\tassign(newProps, matches);\n\t\t\t\t\t\tdelete newProps.ref;\n\t\t\t\t\t\tdelete newProps.key;\n\t\t\t\t\t\treturn cloneElement(vnode, newProps);\n\t\t\t\t\t}\n\t\t\t\t\treturn vnode;\n\t\t\t\t}\n\t\t\t}).filter(Boolean);\n\t}\n\n\trender({ children, onChange }, { url }) {\n\t\tlet active = this.getMatchingChildren(toChildArray(children), url, true);\n\n\t\tlet current = active[0] || null;\n\n\t\tlet previous = this.previousUrl;\n\t\tif (url!==previous) {\n\t\t\tthis.previousUrl = url;\n\t\t\tif (typeof onChange==='function') {\n\t\t\t\tonChange({\n\t\t\t\t\trouter: this,\n\t\t\t\t\turl,\n\t\t\t\t\tprevious,\n\t\t\t\t\tactive,\n\t\t\t\t\tcurrent\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn current;\n\t}\n}\n\nconst Link = (props) => (\n\tcreateElement('a', assign({ onClick: handleLinkClick }, props))\n);\n\nconst Route = props => createElement(props.component, props);\n\nRouter.subscribers = subscribers;\nRouter.getCurrentUrl = getCurrentUrl;\nRouter.route = route;\nRouter.Router = Router;\nRouter.Route = Route;\nRouter.Link = Link;\nRouter.exec = exec;\n\nexport { subscribers, getCurrentUrl, route, Router, Route, Link, exec };\nexport default Router;\n", "export default function _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}", "function isAbsolute(pathname) {\n return pathname.charAt(0) === '/';\n}\n\n// About 1.5x faster than the two-arg version of Array#splice()\nfunction spliceOne(list, index) {\n for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) {\n list[i] = list[k];\n }\n\n list.pop();\n}\n\n// This implementation is based heavily on node's url.parse\nfunction resolvePathname(to, from) {\n if (from === undefined) from = '';\n\n var toParts = (to && to.split('/')) || [];\n var fromParts = (from && from.split('/')) || [];\n\n var isToAbs = to && isAbsolute(to);\n var isFromAbs = from && isAbsolute(from);\n var mustEndAbs = isToAbs || isFromAbs;\n\n if (to && isAbsolute(to)) {\n // to is absolute\n fromParts = toParts;\n } else if (toParts.length) {\n // to is relative, drop the filename\n fromParts.pop();\n fromParts = fromParts.concat(toParts);\n }\n\n if (!fromParts.length) return '/';\n\n var hasTrailingSlash;\n if (fromParts.length) {\n var last = fromParts[fromParts.length - 1];\n hasTrailingSlash = last === '.' || last === '..' || last === '';\n } else {\n hasTrailingSlash = false;\n }\n\n var up = 0;\n for (var i = fromParts.length; i >= 0; i--) {\n var part = fromParts[i];\n\n if (part === '.') {\n spliceOne(fromParts, i);\n } else if (part === '..') {\n spliceOne(fromParts, i);\n up++;\n } else if (up) {\n spliceOne(fromParts, i);\n up--;\n }\n }\n\n if (!mustEndAbs) for (; up--; up) fromParts.unshift('..');\n\n if (\n mustEndAbs &&\n fromParts[0] !== '' &&\n (!fromParts[0] || !isAbsolute(fromParts[0]))\n )\n fromParts.unshift('');\n\n var result = fromParts.join('/');\n\n if (hasTrailingSlash && result.substr(-1) !== '/') result += '/';\n\n return result;\n}\n\nexport default resolvePathname;\n", "var isProduction = process.env.NODE_ENV === 'production';\nfunction warning(condition, message) {\n if (!isProduction) {\n if (condition) {\n return;\n }\n\n var text = \"Warning: \" + message;\n\n if (typeof console !== 'undefined') {\n console.warn(text);\n }\n\n try {\n throw Error(text);\n } catch (x) {}\n }\n}\n\nexport default warning;\n", "var isProduction = process.env.NODE_ENV === 'production';\nvar prefix = 'Invariant failed';\nfunction invariant(condition, message) {\n if (condition) {\n return;\n }\n if (isProduction) {\n throw new Error(prefix);\n }\n var provided = typeof message === 'function' ? message() : message;\n var value = provided ? \"\".concat(prefix, \": \").concat(provided) : prefix;\n throw new Error(value);\n}\n\nexport { invariant as default };\n", "import _extends from '@babel/runtime/helpers/esm/extends';\nimport resolvePathname from 'resolve-pathname';\nimport valueEqual from 'value-equal';\nimport warning from 'tiny-warning';\nimport invariant from 'tiny-invariant';\n\nfunction addLeadingSlash(path) {\n return path.charAt(0) === '/' ? path : '/' + path;\n}\nfunction stripLeadingSlash(path) {\n return path.charAt(0) === '/' ? path.substr(1) : path;\n}\nfunction hasBasename(path, prefix) {\n return path.toLowerCase().indexOf(prefix.toLowerCase()) === 0 && '/?#'.indexOf(path.charAt(prefix.length)) !== -1;\n}\nfunction stripBasename(path, prefix) {\n return hasBasename(path, prefix) ? path.substr(prefix.length) : path;\n}\nfunction stripTrailingSlash(path) {\n return path.charAt(path.length - 1) === '/' ? path.slice(0, -1) : path;\n}\nfunction parsePath(path) {\n var pathname = path || '/';\n var search = '';\n var hash = '';\n var hashIndex = pathname.indexOf('#');\n\n if (hashIndex !== -1) {\n hash = pathname.substr(hashIndex);\n pathname = pathname.substr(0, hashIndex);\n }\n\n var searchIndex = pathname.indexOf('?');\n\n if (searchIndex !== -1) {\n search = pathname.substr(searchIndex);\n pathname = pathname.substr(0, searchIndex);\n }\n\n return {\n pathname: pathname,\n search: search === '?' ? '' : search,\n hash: hash === '#' ? '' : hash\n };\n}\nfunction createPath(location) {\n var pathname = location.pathname,\n search = location.search,\n hash = location.hash;\n var path = pathname || '/';\n if (search && search !== '?') path += search.charAt(0) === '?' ? search : \"?\" + search;\n if (hash && hash !== '#') path += hash.charAt(0) === '#' ? hash : \"#\" + hash;\n return path;\n}\n\nfunction createLocation(path, state, key, currentLocation) {\n var location;\n\n if (typeof path === 'string') {\n // Two-arg form: push(path, state)\n location = parsePath(path);\n location.state = state;\n } else {\n // One-arg form: push(location)\n location = _extends({}, path);\n if (location.pathname === undefined) location.pathname = '';\n\n if (location.search) {\n if (location.search.charAt(0) !== '?') location.search = '?' + location.search;\n } else {\n location.search = '';\n }\n\n if (location.hash) {\n if (location.hash.charAt(0) !== '#') location.hash = '#' + location.hash;\n } else {\n location.hash = '';\n }\n\n if (state !== undefined && location.state === undefined) location.state = state;\n }\n\n try {\n location.pathname = decodeURI(location.pathname);\n } catch (e) {\n if (e instanceof URIError) {\n throw new URIError('Pathname \"' + location.pathname + '\" could not be decoded. ' + 'This is likely caused by an invalid percent-encoding.');\n } else {\n throw e;\n }\n }\n\n if (key) location.key = key;\n\n if (currentLocation) {\n // Resolve incomplete/relative pathname relative to current location.\n if (!location.pathname) {\n location.pathname = currentLocation.pathname;\n } else if (location.pathname.charAt(0) !== '/') {\n location.pathname = resolvePathname(location.pathname, currentLocation.pathname);\n }\n } else {\n // When there is no prior location and pathname is empty, set it to /\n if (!location.pathname) {\n location.pathname = '/';\n }\n }\n\n return location;\n}\nfunction locationsAreEqual(a, b) {\n return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash && a.key === b.key && valueEqual(a.state, b.state);\n}\n\nfunction createTransitionManager() {\n var prompt = null;\n\n function setPrompt(nextPrompt) {\n process.env.NODE_ENV !== \"production\" ? warning(prompt == null, 'A history supports only one prompt at a time') : void 0;\n prompt = nextPrompt;\n return function () {\n if (prompt === nextPrompt) prompt = null;\n };\n }\n\n function confirmTransitionTo(location, action, getUserConfirmation, callback) {\n // TODO: If another transition starts while we're still confirming\n // the previous one, we may end up in a weird state. Figure out the\n // best way to handle this.\n if (prompt != null) {\n var result = typeof prompt === 'function' ? prompt(location, action) : prompt;\n\n if (typeof result === 'string') {\n if (typeof getUserConfirmation === 'function') {\n getUserConfirmation(result, callback);\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(false, 'A history needs a getUserConfirmation function in order to use a prompt message') : void 0;\n callback(true);\n }\n } else {\n // Return false from a transition hook to cancel the transition.\n callback(result !== false);\n }\n } else {\n callback(true);\n }\n }\n\n var listeners = [];\n\n function appendListener(fn) {\n var isActive = true;\n\n function listener() {\n if (isActive) fn.apply(void 0, arguments);\n }\n\n listeners.push(listener);\n return function () {\n isActive = false;\n listeners = listeners.filter(function (item) {\n return item !== listener;\n });\n };\n }\n\n function notifyListeners() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n listeners.forEach(function (listener) {\n return listener.apply(void 0, args);\n });\n }\n\n return {\n setPrompt: setPrompt,\n confirmTransitionTo: confirmTransitionTo,\n appendListener: appendListener,\n notifyListeners: notifyListeners\n };\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nfunction getConfirmation(message, callback) {\n callback(window.confirm(message)); // eslint-disable-line no-alert\n}\n/**\n * Returns true if the HTML5 history API is supported. Taken from Modernizr.\n *\n * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\n * changed to avoid false negatives for Windows Phones: https://github.com/reactjs/react-router/issues/586\n */\n\nfunction supportsHistory() {\n var ua = window.navigator.userAgent;\n if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) return false;\n return window.history && 'pushState' in window.history;\n}\n/**\n * Returns true if browser fires popstate on hash change.\n * IE10 and IE11 do not.\n */\n\nfunction supportsPopStateOnHashChange() {\n return window.navigator.userAgent.indexOf('Trident') === -1;\n}\n/**\n * Returns false if using go(n) with hash history causes a full page reload.\n */\n\nfunction supportsGoWithoutReloadUsingHash() {\n return window.navigator.userAgent.indexOf('Firefox') === -1;\n}\n/**\n * Returns true if a given popstate event is an extraneous WebKit event.\n * Accounts for the fact that Chrome on iOS fires real popstate events\n * containing undefined state when pressing the back button.\n */\n\nfunction isExtraneousPopstateEvent(event) {\n return event.state === undefined && navigator.userAgent.indexOf('CriOS') === -1;\n}\n\nvar PopStateEvent = 'popstate';\nvar HashChangeEvent = 'hashchange';\n\nfunction getHistoryState() {\n try {\n return window.history.state || {};\n } catch (e) {\n // IE 11 sometimes throws when accessing window.history.state\n // See https://github.com/ReactTraining/history/pull/289\n return {};\n }\n}\n/**\n * Creates a history object that uses the HTML5 history API including\n * pushState, replaceState, and the popstate event.\n */\n\n\nfunction createBrowserHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n !canUseDOM ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Browser history needs a DOM') : invariant(false) : void 0;\n var globalHistory = window.history;\n var canUseHistory = supportsHistory();\n var needsHashChangeListener = !supportsPopStateOnHashChange();\n var _props = props,\n _props$forceRefresh = _props.forceRefresh,\n forceRefresh = _props$forceRefresh === void 0 ? false : _props$forceRefresh,\n _props$getUserConfirm = _props.getUserConfirmation,\n getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n _props$keyLength = _props.keyLength,\n keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n\n function getDOMLocation(historyState) {\n var _ref = historyState || {},\n key = _ref.key,\n state = _ref.state;\n\n var _window$location = window.location,\n pathname = _window$location.pathname,\n search = _window$location.search,\n hash = _window$location.hash;\n var path = pathname + search + hash;\n process.env.NODE_ENV !== \"production\" ? warning(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : void 0;\n if (basename) path = stripBasename(path, basename);\n return createLocation(path, state, key);\n }\n\n function createKey() {\n return Math.random().toString(36).substr(2, keyLength);\n }\n\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n _extends(history, nextState);\n\n history.length = globalHistory.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n function handlePopState(event) {\n // Ignore extraneous popstate events in WebKit.\n if (isExtraneousPopstateEvent(event)) return;\n handlePop(getDOMLocation(event.state));\n }\n\n function handleHashChange() {\n handlePop(getDOMLocation(getHistoryState()));\n }\n\n var forceNextPop = false;\n\n function handlePop(location) {\n if (forceNextPop) {\n forceNextPop = false;\n setState();\n } else {\n var action = 'POP';\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location\n });\n } else {\n revertPop(location);\n }\n });\n }\n }\n\n function revertPop(fromLocation) {\n var toLocation = history.location; // TODO: We could probably make this more reliable by\n // keeping a list of keys we've seen in sessionStorage.\n // Instead, we just default to 0 for keys we don't know.\n\n var toIndex = allKeys.indexOf(toLocation.key);\n if (toIndex === -1) toIndex = 0;\n var fromIndex = allKeys.indexOf(fromLocation.key);\n if (fromIndex === -1) fromIndex = 0;\n var delta = toIndex - fromIndex;\n\n if (delta) {\n forceNextPop = true;\n go(delta);\n }\n }\n\n var initialLocation = getDOMLocation(getHistoryState());\n var allKeys = [initialLocation.key]; // Public interface\n\n function createHref(location) {\n return basename + createPath(location);\n }\n\n function push(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'PUSH';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var href = createHref(location);\n var key = location.key,\n state = location.state;\n\n if (canUseHistory) {\n globalHistory.pushState({\n key: key,\n state: state\n }, null, href);\n\n if (forceRefresh) {\n window.location.href = href;\n } else {\n var prevIndex = allKeys.indexOf(history.location.key);\n var nextKeys = allKeys.slice(0, prevIndex + 1);\n nextKeys.push(location.key);\n allKeys = nextKeys;\n setState({\n action: action,\n location: location\n });\n }\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Browser history cannot push state in browsers that do not support HTML5 history') : void 0;\n window.location.href = href;\n }\n });\n }\n\n function replace(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var href = createHref(location);\n var key = location.key,\n state = location.state;\n\n if (canUseHistory) {\n globalHistory.replaceState({\n key: key,\n state: state\n }, null, href);\n\n if (forceRefresh) {\n window.location.replace(href);\n } else {\n var prevIndex = allKeys.indexOf(history.location.key);\n if (prevIndex !== -1) allKeys[prevIndex] = location.key;\n setState({\n action: action,\n location: location\n });\n }\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Browser history cannot replace state in browsers that do not support HTML5 history') : void 0;\n window.location.replace(href);\n }\n });\n }\n\n function go(n) {\n globalHistory.go(n);\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n var listenerCount = 0;\n\n function checkDOMListeners(delta) {\n listenerCount += delta;\n\n if (listenerCount === 1 && delta === 1) {\n window.addEventListener(PopStateEvent, handlePopState);\n if (needsHashChangeListener) window.addEventListener(HashChangeEvent, handleHashChange);\n } else if (listenerCount === 0) {\n window.removeEventListener(PopStateEvent, handlePopState);\n if (needsHashChangeListener) window.removeEventListener(HashChangeEvent, handleHashChange);\n }\n }\n\n var isBlocked = false;\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n var unblock = transitionManager.setPrompt(prompt);\n\n if (!isBlocked) {\n checkDOMListeners(1);\n isBlocked = true;\n }\n\n return function () {\n if (isBlocked) {\n isBlocked = false;\n checkDOMListeners(-1);\n }\n\n return unblock();\n };\n }\n\n function listen(listener) {\n var unlisten = transitionManager.appendListener(listener);\n checkDOMListeners(1);\n return function () {\n checkDOMListeners(-1);\n unlisten();\n };\n }\n\n var history = {\n length: globalHistory.length,\n action: 'POP',\n location: initialLocation,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n block: block,\n listen: listen\n };\n return history;\n}\n\nvar HashChangeEvent$1 = 'hashchange';\nvar HashPathCoders = {\n hashbang: {\n encodePath: function encodePath(path) {\n return path.charAt(0) === '!' ? path : '!/' + stripLeadingSlash(path);\n },\n decodePath: function decodePath(path) {\n return path.charAt(0) === '!' ? path.substr(1) : path;\n }\n },\n noslash: {\n encodePath: stripLeadingSlash,\n decodePath: addLeadingSlash\n },\n slash: {\n encodePath: addLeadingSlash,\n decodePath: addLeadingSlash\n }\n};\n\nfunction stripHash(url) {\n var hashIndex = url.indexOf('#');\n return hashIndex === -1 ? url : url.slice(0, hashIndex);\n}\n\nfunction getHashPath() {\n // We can't use window.location.hash here because it's not\n // consistent across browsers - Firefox will pre-decode it!\n var href = window.location.href;\n var hashIndex = href.indexOf('#');\n return hashIndex === -1 ? '' : href.substring(hashIndex + 1);\n}\n\nfunction pushHashPath(path) {\n window.location.hash = path;\n}\n\nfunction replaceHashPath(path) {\n window.location.replace(stripHash(window.location.href) + '#' + path);\n}\n\nfunction createHashHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n !canUseDOM ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Hash history needs a DOM') : invariant(false) : void 0;\n var globalHistory = window.history;\n var canGoWithoutReload = supportsGoWithoutReloadUsingHash();\n var _props = props,\n _props$getUserConfirm = _props.getUserConfirmation,\n getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n _props$hashType = _props.hashType,\n hashType = _props$hashType === void 0 ? 'slash' : _props$hashType;\n var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n var _HashPathCoders$hashT = HashPathCoders[hashType],\n encodePath = _HashPathCoders$hashT.encodePath,\n decodePath = _HashPathCoders$hashT.decodePath;\n\n function getDOMLocation() {\n var path = decodePath(getHashPath());\n process.env.NODE_ENV !== \"production\" ? warning(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : void 0;\n if (basename) path = stripBasename(path, basename);\n return createLocation(path);\n }\n\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n _extends(history, nextState);\n\n history.length = globalHistory.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n var forceNextPop = false;\n var ignorePath = null;\n\n function locationsAreEqual$$1(a, b) {\n return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash;\n }\n\n function handleHashChange() {\n var path = getHashPath();\n var encodedPath = encodePath(path);\n\n if (path !== encodedPath) {\n // Ensure we always have a properly-encoded hash.\n replaceHashPath(encodedPath);\n } else {\n var location = getDOMLocation();\n var prevLocation = history.location;\n if (!forceNextPop && locationsAreEqual$$1(prevLocation, location)) return; // A hashchange doesn't always == location change.\n\n if (ignorePath === createPath(location)) return; // Ignore this change; we already setState in push/replace.\n\n ignorePath = null;\n handlePop(location);\n }\n }\n\n function handlePop(location) {\n if (forceNextPop) {\n forceNextPop = false;\n setState();\n } else {\n var action = 'POP';\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location\n });\n } else {\n revertPop(location);\n }\n });\n }\n }\n\n function revertPop(fromLocation) {\n var toLocation = history.location; // TODO: We could probably make this more reliable by\n // keeping a list of paths we've seen in sessionStorage.\n // Instead, we just default to 0 for paths we don't know.\n\n var toIndex = allPaths.lastIndexOf(createPath(toLocation));\n if (toIndex === -1) toIndex = 0;\n var fromIndex = allPaths.lastIndexOf(createPath(fromLocation));\n if (fromIndex === -1) fromIndex = 0;\n var delta = toIndex - fromIndex;\n\n if (delta) {\n forceNextPop = true;\n go(delta);\n }\n } // Ensure the hash is encoded properly before doing anything else.\n\n\n var path = getHashPath();\n var encodedPath = encodePath(path);\n if (path !== encodedPath) replaceHashPath(encodedPath);\n var initialLocation = getDOMLocation();\n var allPaths = [createPath(initialLocation)]; // Public interface\n\n function createHref(location) {\n var baseTag = document.querySelector('base');\n var href = '';\n\n if (baseTag && baseTag.getAttribute('href')) {\n href = stripHash(window.location.href);\n }\n\n return href + '#' + encodePath(basename + createPath(location));\n }\n\n function push(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Hash history cannot push state; it is ignored') : void 0;\n var action = 'PUSH';\n var location = createLocation(path, undefined, undefined, history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var path = createPath(location);\n var encodedPath = encodePath(basename + path);\n var hashChanged = getHashPath() !== encodedPath;\n\n if (hashChanged) {\n // We cannot tell if a hashchange was caused by a PUSH, so we'd\n // rather setState here and ignore the hashchange. The caveat here\n // is that other hash histories in the page will consider it a POP.\n ignorePath = path;\n pushHashPath(encodedPath);\n var prevIndex = allPaths.lastIndexOf(createPath(history.location));\n var nextPaths = allPaths.slice(0, prevIndex + 1);\n nextPaths.push(path);\n allPaths = nextPaths;\n setState({\n action: action,\n location: location\n });\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(false, 'Hash history cannot PUSH the same path; a new entry will not be added to the history stack') : void 0;\n setState();\n }\n });\n }\n\n function replace(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Hash history cannot replace state; it is ignored') : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, undefined, undefined, history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var path = createPath(location);\n var encodedPath = encodePath(basename + path);\n var hashChanged = getHashPath() !== encodedPath;\n\n if (hashChanged) {\n // We cannot tell if a hashchange was caused by a REPLACE, so we'd\n // rather setState here and ignore the hashchange. The caveat here\n // is that other hash histories in the page will consider it a POP.\n ignorePath = path;\n replaceHashPath(encodedPath);\n }\n\n var prevIndex = allPaths.indexOf(createPath(history.location));\n if (prevIndex !== -1) allPaths[prevIndex] = path;\n setState({\n action: action,\n location: location\n });\n });\n }\n\n function go(n) {\n process.env.NODE_ENV !== \"production\" ? warning(canGoWithoutReload, 'Hash history go(n) causes a full page reload in this browser') : void 0;\n globalHistory.go(n);\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n var listenerCount = 0;\n\n function checkDOMListeners(delta) {\n listenerCount += delta;\n\n if (listenerCount === 1 && delta === 1) {\n window.addEventListener(HashChangeEvent$1, handleHashChange);\n } else if (listenerCount === 0) {\n window.removeEventListener(HashChangeEvent$1, handleHashChange);\n }\n }\n\n var isBlocked = false;\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n var unblock = transitionManager.setPrompt(prompt);\n\n if (!isBlocked) {\n checkDOMListeners(1);\n isBlocked = true;\n }\n\n return function () {\n if (isBlocked) {\n isBlocked = false;\n checkDOMListeners(-1);\n }\n\n return unblock();\n };\n }\n\n function listen(listener) {\n var unlisten = transitionManager.appendListener(listener);\n checkDOMListeners(1);\n return function () {\n checkDOMListeners(-1);\n unlisten();\n };\n }\n\n var history = {\n length: globalHistory.length,\n action: 'POP',\n location: initialLocation,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n block: block,\n listen: listen\n };\n return history;\n}\n\nfunction clamp(n, lowerBound, upperBound) {\n return Math.min(Math.max(n, lowerBound), upperBound);\n}\n/**\n * Creates a history object that stores locations in memory.\n */\n\n\nfunction createMemoryHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n var _props = props,\n getUserConfirmation = _props.getUserConfirmation,\n _props$initialEntries = _props.initialEntries,\n initialEntries = _props$initialEntries === void 0 ? ['/'] : _props$initialEntries,\n _props$initialIndex = _props.initialIndex,\n initialIndex = _props$initialIndex === void 0 ? 0 : _props$initialIndex,\n _props$keyLength = _props.keyLength,\n keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n _extends(history, nextState);\n\n history.length = history.entries.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n function createKey() {\n return Math.random().toString(36).substr(2, keyLength);\n }\n\n var index = clamp(initialIndex, 0, initialEntries.length - 1);\n var entries = initialEntries.map(function (entry) {\n return typeof entry === 'string' ? createLocation(entry, undefined, createKey()) : createLocation(entry, undefined, entry.key || createKey());\n }); // Public interface\n\n var createHref = createPath;\n\n function push(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'PUSH';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var prevIndex = history.index;\n var nextIndex = prevIndex + 1;\n var nextEntries = history.entries.slice(0);\n\n if (nextEntries.length > nextIndex) {\n nextEntries.splice(nextIndex, nextEntries.length - nextIndex, location);\n } else {\n nextEntries.push(location);\n }\n\n setState({\n action: action,\n location: location,\n index: nextIndex,\n entries: nextEntries\n });\n });\n }\n\n function replace(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n history.entries[history.index] = location;\n setState({\n action: action,\n location: location\n });\n });\n }\n\n function go(n) {\n var nextIndex = clamp(history.index + n, 0, history.entries.length - 1);\n var action = 'POP';\n var location = history.entries[nextIndex];\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location,\n index: nextIndex\n });\n } else {\n // Mimic the behavior of DOM histories by\n // causing a render after a cancelled POP.\n setState();\n }\n });\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n function canGo(n) {\n var nextIndex = history.index + n;\n return nextIndex >= 0 && nextIndex < history.entries.length;\n }\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n return transitionManager.setPrompt(prompt);\n }\n\n function listen(listener) {\n return transitionManager.appendListener(listener);\n }\n\n var history = {\n length: entries.length,\n action: 'POP',\n location: entries[index],\n index: index,\n entries: entries,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n canGo: canGo,\n block: block,\n listen: listen\n };\n return history;\n}\n\nexport { createBrowserHistory, createHashHistory, createMemoryHistory, createLocation, locationsAreEqual, parsePath, createPath };\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { StateUpdater, useCallback, useState } from \"preact/hooks\";\nimport { ValueOrFunction } from \"../utils/types.js\";\n\nconst calculateRootPath = () => {\n const rootPath =\n typeof window !== undefined\n ? window.location.origin + window.location.pathname\n : \"/\";\n return rootPath;\n};\n\nexport function useBackendURL(\n url?: string,\n): [string, boolean, StateUpdater<string>, () => void] {\n const [value, setter] = useNotNullLocalStorage(\n \"backend-url\",\n url || calculateRootPath(),\n );\n const [triedToLog, setTriedToLog] = useLocalStorage(\"tried-login\");\n\n const checkedSetter = (v: ValueOrFunction<string>) => {\n setTriedToLog(\"yes\");\n return setter((p) => (v instanceof Function ? v(p) : v).replace(/\\/$/, \"\"));\n };\n\n const resetBackend = () => {\n setTriedToLog(undefined);\n };\n return [value, !!triedToLog, checkedSetter, resetBackend];\n}\n\nexport function useBackendDefaultToken(\n initialValue?: string,\n): [string | undefined, StateUpdater<string | undefined>] {\n return useLocalStorage(\"backend-token\", initialValue);\n}\n\nexport function useBackendInstanceToken(\n id: string,\n): [string | undefined, StateUpdater<string | undefined>] {\n const [random, setRandom] = useState(0);\n const [token, setToken] = useLocalStorage(`backend-token-${id}`);\n const [defaultToken, defaultSetToken] = useBackendDefaultToken();\n\n // instance named 'default' use the default token\n if (id === \"default\") {\n return [defaultToken, defaultSetToken];\n }\n function updateToken(\n value:\n | (string | undefined)\n | ((s: string | undefined) => string | undefined),\n ): void {\n setToken((p) => {\n const toStore = value instanceof Function ? value(p) : value;\n // setToken(value)\n setRandom(new Date().getTime());\n return toStore;\n });\n }\n\n return [token, updateToken];\n}\n\nexport function useLang(initial?: string): [string, StateUpdater<string>] {\n const browserLang =\n typeof window !== \"undefined\"\n ? navigator.language || (navigator as any).userLanguage\n : undefined;\n const defaultLang = (browserLang || initial || \"en\").substring(0, 2);\n return useNotNullLocalStorage(\"lang-preference\", defaultLang);\n}\n\nexport function useLocalStorage(\n key: string,\n initialValue?: string,\n): [string | undefined, StateUpdater<string | undefined>] {\n const [storedValue, setStoredValue] = useState<string | undefined>(\n (): string | undefined => {\n return typeof window !== \"undefined\"\n ? window.localStorage.getItem(key) || initialValue\n : initialValue;\n },\n );\n\n const setValue = (\n value?: string | ((val?: string) => string | undefined),\n ) => {\n setStoredValue((p) => {\n const toStore = value instanceof Function ? value(p) : value;\n if (typeof window !== \"undefined\") {\n if (!toStore) {\n window.localStorage.removeItem(key);\n } else {\n window.localStorage.setItem(key, toStore);\n }\n }\n return toStore;\n });\n };\n\n return [storedValue, setValue];\n}\n\nexport function useNotNullLocalStorage(\n key: string,\n initialValue: string,\n): [string, StateUpdater<string>] {\n const [storedValue, setStoredValue] = useState<string>((): string => {\n return typeof window !== \"undefined\"\n ? window.localStorage.getItem(key) || initialValue\n : initialValue;\n });\n\n const setValue = (value: string | ((val: string) => string)) => {\n const valueToStore = value instanceof Function ? value(storedValue) : value;\n setStoredValue(valueToStore);\n if (typeof window !== \"undefined\") {\n if (!valueToStore) {\n window.localStorage.removeItem(key);\n } else {\n window.localStorage.setItem(key, valueToStore);\n }\n }\n };\n\n return [storedValue, setValue];\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { createContext, h, VNode } from \"preact\";\nimport { useCallback, useContext, useState } from \"preact/hooks\";\nimport { useBackendDefaultToken, useBackendURL } from \"../hooks/index.js\";\n\ninterface BackendContextType {\n url: string;\n token?: string;\n triedToLog: boolean;\n resetBackend: () => void;\n clearAllTokens: () => void;\n addTokenCleaner: (c: () => void) => void;\n updateLoginStatus: (url: string, token?: string) => void;\n updateToken: (token?: string) => void;\n}\n\nconst BackendContext = createContext<BackendContextType>({\n url: \"\",\n token: undefined,\n triedToLog: false,\n resetBackend: () => null,\n clearAllTokens: () => null,\n addTokenCleaner: () => null,\n updateLoginStatus: () => null,\n updateToken: () => null,\n});\n\nfunction useBackendContextState(\n defaultUrl?: string,\n initialToken?: string,\n): BackendContextType {\n const [url, triedToLog, changeBackend, resetBackend] =\n useBackendURL(defaultUrl);\n const [token, _updateToken] = useBackendDefaultToken(initialToken);\n const updateToken = (t?: string) => {\n _updateToken(t);\n };\n\n const tokenCleaner = useCallback(() => {\n updateToken(undefined);\n }, []);\n const [cleaners, setCleaners] = useState([tokenCleaner]);\n const addTokenCleaner = (c: () => void) => setCleaners((cs) => [...cs, c]);\n const addTokenCleanerMemo = useCallback(\n (c: () => void) => {\n addTokenCleaner(c);\n },\n [tokenCleaner],\n );\n\n const clearAllTokens = () => {\n cleaners.forEach((c) => c());\n for (let i = 0; i < localStorage.length; i++) {\n const k = localStorage.key(i);\n if (k && /^backend-token/.test(k)) localStorage.removeItem(k);\n }\n resetBackend();\n };\n\n const updateLoginStatus = (url: string, token?: string) => {\n changeBackend(url);\n if (token) updateToken(token);\n };\n\n return {\n url,\n token,\n triedToLog,\n updateLoginStatus,\n resetBackend,\n clearAllTokens,\n updateToken,\n addTokenCleaner: addTokenCleanerMemo,\n };\n}\n\nexport const BackendContextProvider = ({\n children,\n defaultUrl,\n initialToken,\n}: {\n children: any;\n defaultUrl?: string;\n initialToken?: string;\n}): VNode => {\n const value = useBackendContextState(defaultUrl, initialToken);\n\n return h(BackendContext.Provider, { value, children });\n};\n\nexport const useBackendContext = (): BackendContextType =>\n useContext(BackendContext);\n", "/**\n * Assign properties from `props` to `obj`\n * @template O, P The obj and props types\n * @param {O} obj The object to copy properties to\n * @param {P} props The object to copy properties from\n * @returns {O & P}\n */\nexport function assign(obj, props) {\n\tfor (let i in props) obj[i] = props[i];\n\treturn /** @type {O & P} */ (obj);\n}\n\n/**\n * Check if two objects have a different shape\n * @param {object} a\n * @param {object} b\n * @returns {boolean}\n */\nexport function shallowDiffers(a, b) {\n\tfor (let i in a) if (i !== '__source' && !(i in b)) return true;\n\tfor (let i in b) if (i !== '__source' && a[i] !== b[i]) return true;\n\treturn false;\n}\n\nexport function removeNode(node) {\n\tlet parentNode = node.parentNode;\n\tif (parentNode) parentNode.removeChild(node);\n}\n\n/**\n * Check if two values are the same value\n * @param {*} x\n * @param {*} y\n * @returns {boolean}\n */\nexport function is(x, y) {\n\treturn (x === y && (x !== 0 || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\n", "import { Component } from 'preact';\nimport { shallowDiffers } from './util';\n\n/**\n * Component class with a predefined `shouldComponentUpdate` implementation\n */\nexport function PureComponent(p) {\n\tthis.props = p;\n}\nPureComponent.prototype = new Component();\n// Some third-party libraries check if this property is present\nPureComponent.prototype.isPureReactComponent = true;\nPureComponent.prototype.shouldComponentUpdate = function(props, state) {\n\treturn shallowDiffers(this.props, props) || shallowDiffers(this.state, state);\n};\n", "import { createElement } from 'preact';\nimport { shallowDiffers } from './util';\n\n/**\n * Memoize a component, so that it only updates when the props actually have\n * changed. This was previously known as `React.pure`.\n * @param {import('./internal').FunctionComponent} c functional component\n * @param {(prev: object, next: object) => boolean} [comparer] Custom equality function\n * @returns {import('./internal').FunctionComponent}\n */\nexport function memo(c, comparer) {\n\tfunction shouldUpdate(nextProps) {\n\t\tlet ref = this.props.ref;\n\t\tlet updateRef = ref == nextProps.ref;\n\t\tif (!updateRef && ref) {\n\t\t\tref.call ? ref(null) : (ref.current = null);\n\t\t}\n\n\t\tif (!comparer) {\n\t\t\treturn shallowDiffers(this.props, nextProps);\n\t\t}\n\n\t\treturn !comparer(this.props, nextProps) || !updateRef;\n\t}\n\n\tfunction Memoed(props) {\n\t\tthis.shouldComponentUpdate = shouldUpdate;\n\t\treturn createElement(c, props);\n\t}\n\tMemoed.displayName = 'Memo(' + (c.displayName || c.name) + ')';\n\tMemoed.prototype.isReactComponent = true;\n\tMemoed._forwarded = true;\n\treturn Memoed;\n}\n", "import { options } from 'preact';\nimport { assign } from './util';\n\nlet oldDiffHook = options._diff;\noptions._diff = vnode => {\n\tif (vnode.type && vnode.type._forwarded && vnode.ref) {\n\t\tvnode.props.ref = vnode.ref;\n\t\tvnode.ref = null;\n\t}\n\tif (oldDiffHook) oldDiffHook(vnode);\n};\n\nexport const REACT_FORWARD_SYMBOL =\n\t(typeof Symbol != 'undefined' &&\n\t\tSymbol.for &&\n\t\tSymbol.for('react.forward_ref')) ||\n\t0xf47;\n\n/**\n * Pass ref down to a child. This is mainly used in libraries with HOCs that\n * wrap components. Using `forwardRef` there is an easy way to get a reference\n * of the wrapped component instead of one of the wrapper itself.\n * @param {import('./index').ForwardFn} fn\n * @returns {import('./internal').FunctionComponent}\n */\nexport function forwardRef(fn) {\n\tfunction Forwarded(props) {\n\t\tlet clone = assign({}, props);\n\t\tdelete clone.ref;\n\t\treturn fn(clone, props.ref || null);\n\t}\n\n\t// mobx-react checks for this being present\n\tForwarded.$$typeof = REACT_FORWARD_SYMBOL;\n\t// mobx-react heavily relies on implementation details.\n\t// It expects an object here with a `render` property,\n\t// and prototype.render will fail. Without this\n\t// mobx-react throws.\n\tForwarded.render = Forwarded;\n\n\tForwarded.prototype.isReactComponent = Forwarded._forwarded = true;\n\tForwarded.displayName = 'ForwardRef(' + (fn.displayName || fn.name) + ')';\n\treturn Forwarded;\n}\n", "import { toChildArray } from 'preact';\n\nconst mapFn = (children, fn) => {\n\tif (children == null) return null;\n\treturn toChildArray(toChildArray(children).map(fn));\n};\n\n// This API is completely unnecessary for Preact, so it's basically passthrough.\nexport const Children = {\n\tmap: mapFn,\n\tforEach: mapFn,\n\tcount(children) {\n\t\treturn children ? toChildArray(children).length : 0;\n\t},\n\tonly(children) {\n\t\tconst normalized = toChildArray(children);\n\t\tif (normalized.length !== 1) throw 'Children.only';\n\t\treturn normalized[0];\n\t},\n\ttoArray: toChildArray\n};\n", "import { Component, createElement, options, Fragment } from 'preact';\nimport { assign } from './util';\n\nconst oldCatchError = options._catchError;\noptions._catchError = function(error, newVNode, oldVNode, errorInfo) {\n\tif (error.then) {\n\t\t/** @type {import('./internal').Component} */\n\t\tlet component;\n\t\tlet vnode = newVNode;\n\n\t\tfor (; (vnode = vnode._parent); ) {\n\t\t\tif ((component = vnode._component) && component._childDidSuspend) {\n\t\t\t\tif (newVNode._dom == null) {\n\t\t\t\t\tnewVNode._dom = oldVNode._dom;\n\t\t\t\t\tnewVNode._children = oldVNode._children;\n\t\t\t\t}\n\t\t\t\t// Don't call oldCatchError if we found a Suspense\n\t\t\t\treturn component._childDidSuspend(error, newVNode);\n\t\t\t}\n\t\t}\n\t}\n\toldCatchError(error, newVNode, oldVNode, errorInfo);\n};\n\nconst oldUnmount = options.unmount;\noptions.unmount = function(vnode) {\n\t/** @type {import('./internal').Component} */\n\tconst component = vnode._component;\n\tif (component && component._onResolve) {\n\t\tcomponent._onResolve();\n\t}\n\n\t// if the component is still hydrating\n\t// most likely it is because the component is suspended\n\t// we set the vnode.type as `null` so that it is not a typeof function\n\t// so the unmount will remove the vnode._dom\n\tif (component && vnode._hydrating === true) {\n\t\tvnode.type = null;\n\t}\n\n\tif (oldUnmount) oldUnmount(vnode);\n};\n\nfunction detachedClone(vnode, detachedParent, parentDom) {\n\tif (vnode) {\n\t\tif (vnode._component && vnode._component.__hooks) {\n\t\t\tvnode._component.__hooks._list.forEach(effect => {\n\t\t\t\tif (typeof effect._cleanup == 'function') effect._cleanup();\n\t\t\t});\n\n\t\t\tvnode._component.__hooks = null;\n\t\t}\n\n\t\tvnode = assign({}, vnode);\n\t\tif (vnode._component != null) {\n\t\t\tif (vnode._component._parentDom === parentDom) {\n\t\t\t\tvnode._component._parentDom = detachedParent;\n\t\t\t}\n\t\t\tvnode._component = null;\n\t\t}\n\n\t\tvnode._children =\n\t\t\tvnode._children &&\n\t\t\tvnode._children.map(child =>\n\t\t\t\tdetachedClone(child, detachedParent, parentDom)\n\t\t\t);\n\t}\n\n\treturn vnode;\n}\n\nfunction removeOriginal(vnode, detachedParent, originalParent) {\n\tif (vnode) {\n\t\tvnode._original = null;\n\t\tvnode._children =\n\t\t\tvnode._children &&\n\t\t\tvnode._children.map(child =>\n\t\t\t\tremoveOriginal(child, detachedParent, originalParent)\n\t\t\t);\n\n\t\tif (vnode._component) {\n\t\t\tif (vnode._component._parentDom === detachedParent) {\n\t\t\t\tif (vnode._dom) {\n\t\t\t\t\toriginalParent.insertBefore(vnode._dom, vnode._nextDom);\n\t\t\t\t}\n\t\t\t\tvnode._component._force = true;\n\t\t\t\tvnode._component._parentDom = originalParent;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn vnode;\n}\n\n// having custom inheritance instead of a class here saves a lot of bytes\nexport function Suspense() {\n\t// we do not call super here to golf some bytes...\n\tthis._pendingSuspensionCount = 0;\n\tthis._suspenders = null;\n\tthis._detachOnNextRender = null;\n}\n\n// Things we do here to save some bytes but are not proper JS inheritance:\n// - call `new Component()` as the prototype\n// - do not set `Suspense.prototype.constructor` to `Suspense`\nSuspense.prototype = new Component();\n\n/**\n * @this {import('./internal').SuspenseComponent}\n * @param {Promise} promise The thrown promise\n * @param {import('./internal').VNode<any, any>} suspendingVNode The suspending component\n */\nSuspense.prototype._childDidSuspend = function(promise, suspendingVNode) {\n\tconst suspendingComponent = suspendingVNode._component;\n\n\t/** @type {import('./internal').SuspenseComponent} */\n\tconst c = this;\n\n\tif (c._suspenders == null) {\n\t\tc._suspenders = [];\n\t}\n\tc._suspenders.push(suspendingComponent);\n\n\tconst resolve = suspended(c._vnode);\n\n\tlet resolved = false;\n\tconst onResolved = () => {\n\t\tif (resolved) return;\n\n\t\tresolved = true;\n\t\tsuspendingComponent._onResolve = null;\n\n\t\tif (resolve) {\n\t\t\tresolve(onSuspensionComplete);\n\t\t} else {\n\t\t\tonSuspensionComplete();\n\t\t}\n\t};\n\n\tsuspendingComponent._onResolve = onResolved;\n\n\tconst onSuspensionComplete = () => {\n\t\tif (!--c._pendingSuspensionCount) {\n\t\t\t// If the suspension was during hydration we don't need to restore the\n\t\t\t// suspended children into the _children array\n\t\t\tif (c.state._suspended) {\n\t\t\t\tconst suspendedVNode = c.state._suspended;\n\t\t\t\tc._vnode._children[0] = removeOriginal(\n\t\t\t\t\tsuspendedVNode,\n\t\t\t\t\tsuspendedVNode._component._parentDom,\n\t\t\t\t\tsuspendedVNode._component._originalParentDom\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tc.setState({ _suspended: (c._detachOnNextRender = null) });\n\n\t\t\tlet suspended;\n\t\t\twhile ((suspended = c._suspenders.pop())) {\n\t\t\t\tsuspended.forceUpdate();\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * We do not set `suspended: true` during hydration because we want the actual markup\n\t * to remain on screen and hydrate it when the suspense actually gets resolved.\n\t * While in non-hydration cases the usual fallback -> component flow would occour.\n\t */\n\tconst wasHydrating = suspendingVNode._hydrating === true;\n\tif (!c._pendingSuspensionCount++ && !wasHydrating) {\n\t\tc.setState({ _suspended: (c._detachOnNextRender = c._vnode._children[0]) });\n\t}\n\tpromise.then(onResolved, onResolved);\n};\n\nSuspense.prototype.componentWillUnmount = function() {\n\tthis._suspenders = [];\n};\n\n/**\n * @this {import('./internal').SuspenseComponent}\n * @param {import('./internal').SuspenseComponent[\"props\"]} props\n * @param {import('./internal').SuspenseState} state\n */\nSuspense.prototype.render = function(props, state) {\n\tif (this._detachOnNextRender) {\n\t\t// When the Suspense's _vnode was created by a call to createVNode\n\t\t// (i.e. due to a setState further up in the tree)\n\t\t// it's _children prop is null, in this case we \"forget\" about the parked vnodes to detach\n\t\tif (this._vnode._children) {\n\t\t\tconst detachedParent = document.createElement('div');\n\t\t\tconst detachedComponent = this._vnode._children[0]._component;\n\t\t\tthis._vnode._children[0] = detachedClone(\n\t\t\t\tthis._detachOnNextRender,\n\t\t\t\tdetachedParent,\n\t\t\t\t(detachedComponent._originalParentDom = detachedComponent._parentDom)\n\t\t\t);\n\t\t}\n\n\t\tthis._detachOnNextRender = null;\n\t}\n\n\t// Wrap fallback tree in a VNode that prevents itself from being marked as aborting mid-hydration:\n\t/** @type {import('./internal').VNode} */\n\tconst fallback =\n\t\tstate._suspended && createElement(Fragment, null, props.fallback);\n\tif (fallback) fallback._hydrating = null;\n\n\treturn [\n\t\tcreateElement(Fragment, null, state._suspended ? null : props.children),\n\t\tfallback\n\t];\n};\n\n/**\n * Checks and calls the parent component's _suspended method, passing in the\n * suspended vnode. This is a way for a parent (e.g. SuspenseList) to get notified\n * that one of its children/descendants suspended.\n *\n * The parent MAY return a callback. The callback will get called when the\n * suspension resolves, notifying the parent of the fact.\n * Moreover, the callback gets function `unsuspend` as a parameter. The resolved\n * child descendant will not actually get unsuspended until `unsuspend` gets called.\n * This is a way for the parent to delay unsuspending.\n *\n * If the parent does not return a callback then the resolved vnode\n * gets unsuspended immediately when it resolves.\n *\n * @param {import('./internal').VNode} vnode\n * @returns {((unsuspend: () => void) => void)?}\n */\nexport function suspended(vnode) {\n\t/** @type {import('./internal').Component} */\n\tlet component = vnode._parent._component;\n\treturn component && component._suspended && component._suspended(vnode);\n}\n\nexport function lazy(loader) {\n\tlet prom;\n\tlet component;\n\tlet error;\n\n\tfunction Lazy(props) {\n\t\tif (!prom) {\n\t\t\tprom = loader();\n\t\t\tprom.then(\n\t\t\t\texports => {\n\t\t\t\t\tcomponent = exports.default || exports;\n\t\t\t\t},\n\t\t\t\te => {\n\t\t\t\t\terror = e;\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tif (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t\tif (!component) {\n\t\t\tthrow prom;\n\t\t}\n\n\t\treturn createElement(component, props);\n\t}\n\n\tLazy.displayName = 'Lazy';\n\tLazy._forwarded = true;\n\treturn Lazy;\n}\n", "import { Component, toChildArray } from 'preact';\nimport { suspended } from './suspense.js';\n\n// Indexes to linked list nodes (nodes are stored as arrays to save bytes).\nconst SUSPENDED_COUNT = 0;\nconst RESOLVED_COUNT = 1;\nconst NEXT_NODE = 2;\n\n// Having custom inheritance instead of a class here saves a lot of bytes.\nexport function SuspenseList() {\n\tthis._next = null;\n\tthis._map = null;\n}\n\n// Mark one of child's earlier suspensions as resolved.\n// Some pending callbacks may become callable due to this\n// (e.g. the last suspended descendant gets resolved when\n// revealOrder === 'together'). Process those callbacks as well.\nconst resolve = (list, child, node) => {\n\tif (++node[RESOLVED_COUNT] === node[SUSPENDED_COUNT]) {\n\t\t// The number a child (or any of its descendants) has been suspended\n\t\t// matches the number of times it's been resolved. Therefore we\n\t\t// mark the child as completely resolved by deleting it from ._map.\n\t\t// This is used to figure out when *all* children have been completely\n\t\t// resolved when revealOrder is 'together'.\n\t\tlist._map.delete(child);\n\t}\n\n\t// If revealOrder is falsy then we can do an early exit, as the\n\t// callbacks won't get queued in the node anyway.\n\t// If revealOrder is 'together' then also do an early exit\n\t// if all suspended descendants have not yet been resolved.\n\tif (\n\t\t!list.props.revealOrder ||\n\t\t(list.props.revealOrder[0] === 't' && list._map.size)\n\t) {\n\t\treturn;\n\t}\n\n\t// Walk the currently suspended children in order, calling their\n\t// stored callbacks on the way. Stop if we encounter a child that\n\t// has not been completely resolved yet.\n\tnode = list._next;\n\twhile (node) {\n\t\twhile (node.length > 3) {\n\t\t\tnode.pop()();\n\t\t}\n\t\tif (node[RESOLVED_COUNT] < node[SUSPENDED_COUNT]) {\n\t\t\tbreak;\n\t\t}\n\t\tlist._next = node = node[NEXT_NODE];\n\t}\n};\n\n// Things we do here to save some bytes but are not proper JS inheritance:\n// - call `new Component()` as the prototype\n// - do not set `Suspense.prototype.constructor` to `Suspense`\nSuspenseList.prototype = new Component();\n\nSuspenseList.prototype._suspended = function(child) {\n\tconst list = this;\n\tconst delegated = suspended(list._vnode);\n\n\tlet node = list._map.get(child);\n\tnode[SUSPENDED_COUNT]++;\n\n\treturn unsuspend => {\n\t\tconst wrappedUnsuspend = () => {\n\t\t\tif (!list.props.revealOrder) {\n\t\t\t\t// Special case the undefined (falsy) revealOrder, as there\n\t\t\t\t// is no need to coordinate a specific order or unsuspends.\n\t\t\t\tunsuspend();\n\t\t\t} else {\n\t\t\t\tnode.push(unsuspend);\n\t\t\t\tresolve(list, child, node);\n\t\t\t}\n\t\t};\n\t\tif (delegated) {\n\t\t\tdelegated(wrappedUnsuspend);\n\t\t} else {\n\t\t\twrappedUnsuspend();\n\t\t}\n\t};\n};\n\nSuspenseList.prototype.render = function(props) {\n\tthis._next = null;\n\tthis._map = new Map();\n\n\tconst children = toChildArray(props.children);\n\tif (props.revealOrder && props.revealOrder[0] === 'b') {\n\t\t// If order === 'backwards' (or, well, anything starting with a 'b')\n\t\t// then flip the child list around so that the last child will be\n\t\t// the first in the linked list.\n\t\tchildren.reverse();\n\t}\n\t// Build the linked list. Iterate through the children in reverse order\n\t// so that `_next` points to the first linked list node to be resolved.\n\tfor (let i = children.length; i--; ) {\n\t\t// Create a new linked list node as an array of form:\n\t\t// \t[suspended_count, resolved_count, next_node]\n\t\t// where suspended_count and resolved_count are numeric counters for\n\t\t// keeping track how many times a node has been suspended and resolved.\n\t\t//\n\t\t// Note that suspended_count starts from 1 instead of 0, so we can block\n\t\t// processing callbacks until componentDidMount has been called. In a sense\n\t\t// node is suspended at least until componentDidMount gets called!\n\t\t//\n\t\t// Pending callbacks are added to the end of the node:\n\t\t// \t[suspended_count, resolved_count, next_node, callback_0, callback_1, ...]\n\t\tthis._map.set(children[i], (this._next = [1, 0, this._next]));\n\t}\n\treturn props.children;\n};\n\nSuspenseList.prototype.componentDidUpdate = SuspenseList.prototype.componentDidMount = function() {\n\t// Iterate through all children after mounting for two reasons:\n\t// 1. As each node[SUSPENDED_COUNT] starts from 1, this iteration increases\n\t// each node[RELEASED_COUNT] by 1, therefore balancing the counters.\n\t// The nodes can now be completely consumed from the linked list.\n\t// 2. Handle nodes that might have gotten resolved between render and\n\t// componentDidMount.\n\tthis._map.forEach((node, child) => {\n\t\tresolve(this, child, node);\n\t});\n};\n", "import { createElement, render } from 'preact';\n\n/**\n * @param {import('../../src/index').RenderableProps<{ context: any }>} props\n */\nfunction ContextProvider(props) {\n\tthis.getChildContext = () => props.context;\n\treturn props.children;\n}\n\n/**\n * Portal component\n * @this {import('./internal').Component}\n * @param {object | null | undefined} props\n *\n * TODO: use createRoot() instead of fake root\n */\nfunction Portal(props) {\n\tconst _this = this;\n\tlet container = props._container;\n\n\t_this.componentWillUnmount = function() {\n\t\trender(null, _this._temp);\n\t\t_this._temp = null;\n\t\t_this._container = null;\n\t};\n\n\t// When we change container we should clear our old container and\n\t// indicate a new mount.\n\tif (_this._container && _this._container !== container) {\n\t\t_this.componentWillUnmount();\n\t}\n\n\t// When props.vnode is undefined/false/null we are dealing with some kind of\n\t// conditional vnode. This should not trigger a render.\n\tif (props._vnode) {\n\t\tif (!_this._temp) {\n\t\t\t_this._container = container;\n\n\t\t\t// Create a fake DOM parent node that manages a subset of `container`'s children:\n\t\t\t_this._temp = {\n\t\t\t\tnodeType: 1,\n\t\t\t\tparentNode: container,\n\t\t\t\tchildNodes: [],\n\t\t\t\tappendChild(child) {\n\t\t\t\t\tthis.childNodes.push(child);\n\t\t\t\t\t_this._container.appendChild(child);\n\t\t\t\t},\n\t\t\t\tinsertBefore(child, before) {\n\t\t\t\t\tthis.childNodes.push(child);\n\t\t\t\t\t_this._container.appendChild(child);\n\t\t\t\t},\n\t\t\t\tremoveChild(child) {\n\t\t\t\t\tthis.childNodes.splice(this.childNodes.indexOf(child) >>> 1, 1);\n\t\t\t\t\t_this._container.removeChild(child);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\t// Render our wrapping element into temp.\n\t\trender(\n\t\t\tcreateElement(ContextProvider, { context: _this.context }, props._vnode),\n\t\t\t_this._temp\n\t\t);\n\t}\n\t// When we come from a conditional render, on a mounted\n\t// portal we should clear the DOM.\n\telse if (_this._temp) {\n\t\t_this.componentWillUnmount();\n\t}\n}\n\n/**\n * Create a `Portal` to continue rendering the vnode tree at a different DOM node\n * @param {import('./internal').VNode} vnode The vnode to render\n * @param {import('./internal').PreactElement} container The DOM node to continue rendering in to.\n */\nexport function createPortal(vnode, container) {\n\tconst el = createElement(Portal, { _vnode: vnode, _container: container });\n\tel.containerInfo = container;\n\treturn el;\n}\n", "import {\n\trender as preactRender,\n\thydrate as preactHydrate,\n\toptions,\n\ttoChildArray,\n\tComponent\n} from 'preact';\n\nexport const REACT_ELEMENT_TYPE =\n\t(typeof Symbol != 'undefined' && Symbol.for && Symbol.for('react.element')) ||\n\t0xeac7;\n\nconst CAMEL_PROPS = /^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/;\n\nconst IS_DOM = typeof document !== 'undefined';\n\n// Input types for which onchange should not be converted to oninput.\n// type=\"file|checkbox|radio\", plus \"range\" in IE11.\n// (IE11 doesn't support Symbol, which we use here to turn `rad` into `ra` which matches \"range\")\nconst onChangeInputType = type =>\n\t(typeof Symbol != 'undefined' && typeof Symbol() == 'symbol'\n\t\t? /fil|che|rad/i\n\t\t: /fil|che|ra/i\n\t).test(type);\n\n// Some libraries like `react-virtualized` explicitly check for this.\nComponent.prototype.isReactComponent = {};\n\n// `UNSAFE_*` lifecycle hooks\n// Preact only ever invokes the unprefixed methods.\n// Here we provide a base \"fallback\" implementation that calls any defined UNSAFE_ prefixed method.\n// - If a component defines its own `componentDidMount()` (including via defineProperty), use that.\n// - If a component defines `UNSAFE_componentDidMount()`, `componentDidMount` is the alias getter/setter.\n// - If anything assigns to an `UNSAFE_*` property, the assignment is forwarded to the unprefixed property.\n// See https://github.com/preactjs/preact/issues/1941\n[\n\t'componentWillMount',\n\t'componentWillReceiveProps',\n\t'componentWillUpdate'\n].forEach(key => {\n\tObject.defineProperty(Component.prototype, key, {\n\t\tconfigurable: true,\n\t\tget() {\n\t\t\treturn this['UNSAFE_' + key];\n\t\t},\n\t\tset(v) {\n\t\t\tObject.defineProperty(this, key, {\n\t\t\t\tconfigurable: true,\n\t\t\t\twritable: true,\n\t\t\t\tvalue: v\n\t\t\t});\n\t\t}\n\t});\n});\n\n/**\n * Proxy render() since React returns a Component reference.\n * @param {import('./internal').VNode} vnode VNode tree to render\n * @param {import('./internal').PreactElement} parent DOM node to render vnode tree into\n * @param {() => void} [callback] Optional callback that will be called after rendering\n * @returns {import('./internal').Component | null} The root component reference or null\n */\nexport function render(vnode, parent, callback) {\n\t// React destroys any existing DOM nodes, see #1727\n\t// ...but only on the first render, see #1828\n\tif (parent._children == null) {\n\t\tparent.textContent = '';\n\t}\n\n\tpreactRender(vnode, parent);\n\tif (typeof callback == 'function') callback();\n\n\treturn vnode ? vnode._component : null;\n}\n\nexport function hydrate(vnode, parent, callback) {\n\tpreactHydrate(vnode, parent);\n\tif (typeof callback == 'function') callback();\n\n\treturn vnode ? vnode._component : null;\n}\n\nlet oldEventHook = options.event;\noptions.event = e => {\n\tif (oldEventHook) e = oldEventHook(e);\n\te.persist = empty;\n\te.isPropagationStopped = isPropagationStopped;\n\te.isDefaultPrevented = isDefaultPrevented;\n\treturn (e.nativeEvent = e);\n};\n\nfunction empty() {}\n\nfunction isPropagationStopped() {\n\treturn this.cancelBubble;\n}\n\nfunction isDefaultPrevented() {\n\treturn this.defaultPrevented;\n}\n\nlet classNameDescriptor = {\n\tconfigurable: true,\n\tget() {\n\t\treturn this.class;\n\t}\n};\n\nlet oldVNodeHook = options.vnode;\noptions.vnode = vnode => {\n\tlet type = vnode.type;\n\tlet props = vnode.props;\n\tlet normalizedProps = props;\n\n\t// only normalize props on Element nodes\n\tif (typeof type === 'string') {\n\t\tconst nonCustomElement = type.indexOf('-') === -1;\n\t\tnormalizedProps = {};\n\n\t\tfor (let i in props) {\n\t\t\tlet value = props[i];\n\n\t\t\tif (IS_DOM && i === 'children' && type === 'noscript') {\n\t\t\t\t// Emulate React's behavior of not rendering the contents of noscript tags on the client.\n\t\t\t\tcontinue;\n\t\t\t} else if (i === 'value' && 'defaultValue' in props && value == null) {\n\t\t\t\t// Skip applying value if it is null/undefined and we already set\n\t\t\t\t// a default value\n\t\t\t\tcontinue;\n\t\t\t} else if (\n\t\t\t\ti === 'defaultValue' &&\n\t\t\t\t'value' in props &&\n\t\t\t\tprops.value == null\n\t\t\t) {\n\t\t\t\t// `defaultValue` is treated as a fallback `value` when a value prop is present but null/undefined.\n\t\t\t\t// `defaultValue` for Elements with no value prop is the same as the DOM defaultValue property.\n\t\t\t\ti = 'value';\n\t\t\t} else if (i === 'download' && value === true) {\n\t\t\t\t// Calling `setAttribute` with a truthy value will lead to it being\n\t\t\t\t// passed as a stringified value, e.g. `download=\"true\"`. React\n\t\t\t\t// converts it to an empty string instead, otherwise the attribute\n\t\t\t\t// value will be used as the file name and the file will be called\n\t\t\t\t// \"true\" upon downloading it.\n\t\t\t\tvalue = '';\n\t\t\t} else if (/ondoubleclick/i.test(i)) {\n\t\t\t\ti = 'ondblclick';\n\t\t\t} else if (\n\t\t\t\t/^onchange(textarea|input)/i.test(i + type) &&\n\t\t\t\t!onChangeInputType(props.type)\n\t\t\t) {\n\t\t\t\ti = 'oninput';\n\t\t\t} else if (/^onfocus$/i.test(i)) {\n\t\t\t\ti = 'onfocusin';\n\t\t\t} else if (/^onblur$/i.test(i)) {\n\t\t\t\ti = 'onfocusout';\n\t\t\t} else if (/^on(Ani|Tra|Tou|BeforeInp|Compo)/.test(i)) {\n\t\t\t\ti = i.toLowerCase();\n\t\t\t} else if (nonCustomElement && CAMEL_PROPS.test(i)) {\n\t\t\t\ti = i.replace(/[A-Z0-9]/g, '-$&').toLowerCase();\n\t\t\t} else if (value === null) {\n\t\t\t\tvalue = undefined;\n\t\t\t}\n\n\t\t\t// Add support for onInput and onChange, see #3561\n\t\t\t// if we have an oninput prop already change it to oninputCapture\n\t\t\tif (/^oninput$/i.test(i)) {\n\t\t\t\ti = i.toLowerCase();\n\t\t\t\tif (normalizedProps[i]) {\n\t\t\t\t\ti = 'oninputCapture';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tnormalizedProps[i] = value;\n\t\t}\n\n\t\t// Add support for array select values: <select multiple value={[]} />\n\t\tif (\n\t\t\ttype == 'select' &&\n\t\t\tnormalizedProps.multiple &&\n\t\t\tArray.isArray(normalizedProps.value)\n\t\t) {\n\t\t\t// forEach() always returns undefined, which we abuse here to unset the value prop.\n\t\t\tnormalizedProps.value = toChildArray(props.children).forEach(child => {\n\t\t\t\tchild.props.selected =\n\t\t\t\t\tnormalizedProps.value.indexOf(child.props.value) != -1;\n\t\t\t});\n\t\t}\n\n\t\t// Adding support for defaultValue in select tag\n\t\tif (type == 'select' && normalizedProps.defaultValue != null) {\n\t\t\tnormalizedProps.value = toChildArray(props.children).forEach(child => {\n\t\t\t\tif (normalizedProps.multiple) {\n\t\t\t\t\tchild.props.selected =\n\t\t\t\t\t\tnormalizedProps.defaultValue.indexOf(child.props.value) != -1;\n\t\t\t\t} else {\n\t\t\t\t\tchild.props.selected =\n\t\t\t\t\t\tnormalizedProps.defaultValue == child.props.value;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tvnode.props = normalizedProps;\n\n\t\tif (props.class != props.className) {\n\t\t\tclassNameDescriptor.enumerable = 'className' in props;\n\t\t\tif (props.className != null) normalizedProps.class = props.className;\n\t\t\tObject.defineProperty(normalizedProps, 'className', classNameDescriptor);\n\t\t}\n\t}\n\n\tvnode.$$typeof = REACT_ELEMENT_TYPE;\n\n\tif (oldVNodeHook) oldVNodeHook(vnode);\n};\n\n// Only needed for react-relay\nlet currentComponent;\nconst oldBeforeRender = options._render;\noptions._render = function(vnode) {\n\tif (oldBeforeRender) {\n\t\toldBeforeRender(vnode);\n\t}\n\tcurrentComponent = vnode._component;\n};\n\n// This is a very very private internal function for React it\n// is used to sort-of do runtime dependency injection. So far\n// only `react-relay` makes use of it. It uses it to read the\n// context value.\nexport const __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = {\n\tReactCurrentDispatcher: {\n\t\tcurrent: {\n\t\t\treadContext(context) {\n\t\t\t\treturn currentComponent._globalContext[context._id].props.value;\n\t\t\t}\n\t\t}\n\t}\n};\n", "import {\n\tcreateElement,\n\trender as preactRender,\n\tcloneElement as preactCloneElement,\n\tcreateRef,\n\tComponent,\n\tcreateContext,\n\tFragment\n} from 'preact';\nimport {\n\tuseState,\n\tuseId,\n\tuseReducer,\n\tuseEffect,\n\tuseLayoutEffect,\n\tuseRef,\n\tuseImperativeHandle,\n\tuseMemo,\n\tuseCallback,\n\tuseContext,\n\tuseDebugValue\n} from 'preact/hooks';\nimport { PureComponent } from './PureComponent';\nimport { memo } from './memo';\nimport { forwardRef } from './forwardRef';\nimport { Children } from './Children';\nimport { Suspense, lazy } from './suspense';\nimport { SuspenseList } from './suspense-list';\nimport { createPortal } from './portals';\nimport { is } from './util';\nimport {\n\thydrate,\n\trender,\n\tREACT_ELEMENT_TYPE,\n\t__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\n} from './render';\n\nconst version = '17.0.2'; // trick libraries to think we are react\n\n/**\n * Legacy version of createElement.\n * @param {import('./internal').VNode[\"type\"]} type The node name or Component constructor\n */\nfunction createFactory(type) {\n\treturn createElement.bind(null, type);\n}\n\n/**\n * Check if the passed element is a valid (p)react node.\n * @param {*} element The element to check\n * @returns {boolean}\n */\nfunction isValidElement(element) {\n\treturn !!element && element.$$typeof === REACT_ELEMENT_TYPE;\n}\n\n/**\n * Wrap `cloneElement` to abort if the passed element is not a valid element and apply\n * all vnode normalizations.\n * @param {import('./internal').VNode} element The vnode to clone\n * @param {object} props Props to add when cloning\n * @param {Array<import('./internal').ComponentChildren>} rest Optional component children\n */\nfunction cloneElement(element) {\n\tif (!isValidElement(element)) return element;\n\treturn preactCloneElement.apply(null, arguments);\n}\n\n/**\n * Remove a component tree from the DOM, including state and event handlers.\n * @param {import('./internal').PreactElement} container\n * @returns {boolean}\n */\nfunction unmountComponentAtNode(container) {\n\tif (container._children) {\n\t\tpreactRender(null, container);\n\t\treturn true;\n\t}\n\treturn false;\n}\n\n/**\n * Get the matching DOM node for a component\n * @param {import('./internal').Component} component\n * @returns {import('./internal').PreactElement | null}\n */\nfunction findDOMNode(component) {\n\treturn (\n\t\t(component &&\n\t\t\t(component.base || (component.nodeType === 1 && component))) ||\n\t\tnull\n\t);\n}\n\n/**\n * Deprecated way to control batched rendering inside the reconciler, but we\n * already schedule in batches inside our rendering code\n * @template Arg\n * @param {(arg: Arg) => void} callback function that triggers the updated\n * @param {Arg} [arg] Optional argument that can be passed to the callback\n */\n// eslint-disable-next-line camelcase\nconst unstable_batchedUpdates = (callback, arg) => callback(arg);\n\n/**\n * In React, `flushSync` flushes the entire tree and forces a rerender. It's\n * implmented here as a no-op.\n * @template Arg\n * @template Result\n * @param {(arg: Arg) => Result} callback function that runs before the flush\n * @param {Arg} [arg] Optional arugment that can be passed to the callback\n * @returns\n */\nconst flushSync = (callback, arg) => callback(arg);\n\n/**\n * Strict Mode is not implemented in Preact, so we provide a stand-in for it\n * that just renders its children without imposing any restrictions.\n */\nconst StrictMode = Fragment;\n\nexport function startTransition(cb) {\n\tcb();\n}\n\nexport function useDeferredValue(val) {\n\treturn val;\n}\n\nexport function useTransition() {\n\treturn [false, startTransition];\n}\n\n// TODO: in theory this should be done after a VNode is diffed as we want to insert\n// styles/... before it attaches\nexport const useInsertionEffect = useLayoutEffect;\n\n/**\n * This is taken from https://github.com/facebook/react/blob/main/packages/use-sync-external-store/src/useSyncExternalStoreShimClient.js#L84\n * on a high level this cuts out the warnings, ... and attempts a smaller implementation\n */\nexport function useSyncExternalStore(subscribe, getSnapshot) {\n\tconst value = getSnapshot();\n\n\tconst [{ _instance }, forceUpdate] = useState({\n\t\t_instance: { _value: value, _getSnapshot: getSnapshot }\n\t});\n\n\tuseLayoutEffect(() => {\n\t\t_instance._value = value;\n\t\t_instance._getSnapshot = getSnapshot;\n\n\t\tif (!is(_instance._value, getSnapshot())) {\n\t\t\tforceUpdate({ _instance });\n\t\t}\n\t}, [subscribe, value, getSnapshot]);\n\n\tuseEffect(() => {\n\t\tif (!is(_instance._value, _instance._getSnapshot())) {\n\t\t\tforceUpdate({ _instance });\n\t\t}\n\n\t\treturn subscribe(() => {\n\t\t\tif (!is(_instance._value, _instance._getSnapshot())) {\n\t\t\t\tforceUpdate({ _instance });\n\t\t\t}\n\t\t});\n\t}, [subscribe]);\n\n\treturn value;\n}\n\nexport * from 'preact/hooks';\nexport {\n\tversion,\n\tChildren,\n\trender,\n\thydrate,\n\tunmountComponentAtNode,\n\tcreatePortal,\n\tcreateElement,\n\tcreateContext,\n\tcreateFactory,\n\tcloneElement,\n\tcreateRef,\n\tFragment,\n\tisValidElement,\n\tfindDOMNode,\n\tComponent,\n\tPureComponent,\n\tmemo,\n\tforwardRef,\n\tflushSync,\n\t// eslint-disable-next-line camelcase\n\tunstable_batchedUpdates,\n\tStrictMode,\n\tSuspense,\n\tSuspenseList,\n\tlazy,\n\t__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\n};\n\n// React copies the named exports to the default one.\nexport default {\n\tuseState,\n\tuseId,\n\tuseReducer,\n\tuseEffect,\n\tuseLayoutEffect,\n\tuseInsertionEffect,\n\tuseTransition,\n\tuseDeferredValue,\n\tuseSyncExternalStore,\n\tstartTransition,\n\tuseRef,\n\tuseImperativeHandle,\n\tuseMemo,\n\tuseCallback,\n\tuseContext,\n\tuseDebugValue,\n\tversion,\n\tChildren,\n\trender,\n\thydrate,\n\tunmountComponentAtNode,\n\tcreatePortal,\n\tcreateElement,\n\tcreateContext,\n\tcreateFactory,\n\tcloneElement,\n\tcreateRef,\n\tFragment,\n\tisValidElement,\n\tfindDOMNode,\n\tComponent,\n\tPureComponent,\n\tmemo,\n\tforwardRef,\n\tflushSync,\n\tunstable_batchedUpdates,\n\tStrictMode,\n\tSuspense,\n\tSuspenseList,\n\tlazy,\n\t__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\n};\n", "import { useEffect, useLayoutEffect, createContext, useContext, useState, createElement, useRef, useCallback, useDebugValue } from 'react';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nfunction __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\n\nvar noop = function () { };\n// Using noop() as the undefined value as undefined can possibly be replaced\n// by something else. Prettier ignore and extra parentheses are necessary here\n// to ensure that tsc doesn't remove the __NOINLINE__ comment.\n// prettier-ignore\nvar UNDEFINED = ( /*#__NOINLINE__*/noop());\nvar OBJECT = Object;\nvar isUndefined = function (v) { return v === UNDEFINED; };\nvar isFunction = function (v) { return typeof v == 'function'; };\nvar mergeObjects = function (a, b) { return OBJECT.assign({}, a, b); };\nvar STR_UNDEFINED = 'undefined';\n// NOTE: Use function to guarantee it's re-evaluated between jsdom and node runtime for tests.\nvar hasWindow = function () { return typeof window != STR_UNDEFINED; };\nvar hasDocument = function () { return typeof document != STR_UNDEFINED; };\nvar hasRequestAnimationFrame = function () {\n return hasWindow() && typeof window['requestAnimationFrame'] != STR_UNDEFINED;\n};\n\n// use WeakMap to store the object->key mapping\n// so the objects can be garbage collected.\n// WeakMap uses a hashtable under the hood, so the lookup\n// complexity is almost O(1).\nvar table = new WeakMap();\n// counter of the key\nvar counter = 0;\n// A stable hash implementation that supports:\n// - Fast and ensures unique hash properties\n// - Handles unserializable values\n// - Handles object key ordering\n// - Generates short results\n//\n// This is not a serialization function, and the result is not guaranteed to be\n// parsible.\nvar stableHash = function (arg) {\n var type = typeof arg;\n var constructor = arg && arg.constructor;\n var isDate = constructor == Date;\n var result;\n var index;\n if (OBJECT(arg) === arg && !isDate && constructor != RegExp) {\n // Object/function, not null/date/regexp. Use WeakMap to store the id first.\n // If it's already hashed, directly return the result.\n result = table.get(arg);\n if (result)\n return result;\n // Store the hash first for circular reference detection before entering the\n // recursive `stableHash` calls.\n // For other objects like set and map, we use this id directly as the hash.\n result = ++counter + '~';\n table.set(arg, result);\n if (constructor == Array) {\n // Array.\n result = '@';\n for (index = 0; index < arg.length; index++) {\n result += stableHash(arg[index]) + ',';\n }\n table.set(arg, result);\n }\n if (constructor == OBJECT) {\n // Object, sort keys.\n result = '#';\n var keys = OBJECT.keys(arg).sort();\n while (!isUndefined((index = keys.pop()))) {\n if (!isUndefined(arg[index])) {\n result += index + ':' + stableHash(arg[index]) + ',';\n }\n }\n table.set(arg, result);\n }\n }\n else {\n result = isDate\n ? arg.toJSON()\n : type == 'symbol'\n ? arg.toString()\n : type == 'string'\n ? JSON.stringify(arg)\n : '' + arg;\n }\n return result;\n};\n\n/**\n * Due to bug https://bugs.chromium.org/p/chromium/issues/detail?id=678075,\n * it's not reliable to detect if the browser is currently online or offline\n * based on `navigator.onLine`.\n * As a work around, we always assume it's online on first load, and change\n * the status upon `online` or `offline` events.\n */\nvar online = true;\nvar isOnline = function () { return online; };\nvar hasWin = hasWindow();\nvar hasDoc = hasDocument();\n// For node and React Native, `add/removeEventListener` doesn't exist on window.\nvar onWindowEvent = hasWin && window.addEventListener\n ? window.addEventListener.bind(window)\n : noop;\nvar onDocumentEvent = hasDoc ? document.addEventListener.bind(document) : noop;\nvar offWindowEvent = hasWin && window.removeEventListener\n ? window.removeEventListener.bind(window)\n : noop;\nvar offDocumentEvent = hasDoc\n ? document.removeEventListener.bind(document)\n : noop;\nvar isVisible = function () {\n var visibilityState = hasDoc && document.visibilityState;\n return isUndefined(visibilityState) || visibilityState !== 'hidden';\n};\nvar initFocus = function (callback) {\n // focus revalidate\n onDocumentEvent('visibilitychange', callback);\n onWindowEvent('focus', callback);\n return function () {\n offDocumentEvent('visibilitychange', callback);\n offWindowEvent('focus', callback);\n };\n};\nvar initReconnect = function (callback) {\n // revalidate on reconnected\n var onOnline = function () {\n online = true;\n callback();\n };\n // nothing to revalidate, just update the status\n var onOffline = function () {\n online = false;\n };\n onWindowEvent('online', onOnline);\n onWindowEvent('offline', onOffline);\n return function () {\n offWindowEvent('online', onOnline);\n offWindowEvent('offline', onOffline);\n };\n};\nvar preset = {\n isOnline: isOnline,\n isVisible: isVisible\n};\nvar defaultConfigOptions = {\n initFocus: initFocus,\n initReconnect: initReconnect\n};\n\nvar IS_SERVER = !hasWindow() || 'Deno' in window;\n// Polyfill requestAnimationFrame\nvar rAF = function (f) {\n return hasRequestAnimationFrame() ? window['requestAnimationFrame'](f) : setTimeout(f, 1);\n};\n// React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser.\nvar useIsomorphicLayoutEffect = IS_SERVER ? useEffect : useLayoutEffect;\n// This assignment is to extend the Navigator type to use effectiveType.\nvar navigatorConnection = typeof navigator !== 'undefined' &&\n navigator.connection;\n// Adjust the config based on slow connection status (<= 70Kbps).\nvar slowConnection = !IS_SERVER &&\n navigatorConnection &&\n (['slow-2g', '2g'].includes(navigatorConnection.effectiveType) ||\n navigatorConnection.saveData);\n\nvar serialize = function (key) {\n if (isFunction(key)) {\n try {\n key = key();\n }\n catch (err) {\n // dependencies not ready\n key = '';\n }\n }\n var args = [].concat(key);\n // If key is not falsy, or not an empty array, hash it.\n key =\n typeof key == 'string'\n ? key\n : (Array.isArray(key) ? key.length : key)\n ? stableHash(key)\n : '';\n var infoKey = key ? '$swr$' + key : '';\n return [key, args, infoKey];\n};\n\n// Global state used to deduplicate requests and store listeners\nvar SWRGlobalState = new WeakMap();\n\nvar FOCUS_EVENT = 0;\nvar RECONNECT_EVENT = 1;\nvar MUTATE_EVENT = 2;\n\nvar broadcastState = function (cache, key, data, error, isValidating, revalidate, broadcast) {\n if (broadcast === void 0) { broadcast = true; }\n var _a = SWRGlobalState.get(cache), EVENT_REVALIDATORS = _a[0], STATE_UPDATERS = _a[1], FETCH = _a[3];\n var revalidators = EVENT_REVALIDATORS[key];\n var updaters = STATE_UPDATERS[key];\n // Cache was populated, update states of all hooks.\n if (broadcast && updaters) {\n for (var i = 0; i < updaters.length; ++i) {\n updaters[i](data, error, isValidating);\n }\n }\n // If we also need to revalidate, only do it for the first hook.\n if (revalidate) {\n // Invalidate the key by deleting the concurrent request markers so new\n // requests will not be deduped.\n delete FETCH[key];\n if (revalidators && revalidators[0]) {\n return revalidators[0](MUTATE_EVENT).then(function () {\n return cache.get(key);\n });\n }\n }\n return cache.get(key);\n};\n\n// Global timestamp.\nvar __timestamp = 0;\nvar getTimestamp = function () { return ++__timestamp; };\n\nvar internalMutate = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return __awaiter(void 0, void 0, void 0, function () {\n var cache, _key, _data, _opts, options, populateCache, revalidate, rollbackOnError, customOptimisticData, _a, key, keyInfo, _b, MUTATION, data, error, beforeMutationTs, hasCustomOptimisticData, rollbackData, optimisticData, res;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n cache = args[0], _key = args[1], _data = args[2], _opts = args[3];\n options = typeof _opts === 'boolean' ? { revalidate: _opts } : _opts || {};\n populateCache = isUndefined(options.populateCache)\n ? true\n : options.populateCache;\n revalidate = options.revalidate !== false;\n rollbackOnError = options.rollbackOnError !== false;\n customOptimisticData = options.optimisticData;\n _a = serialize(_key), key = _a[0], keyInfo = _a[2];\n if (!key)\n return [2 /*return*/];\n _b = SWRGlobalState.get(cache), MUTATION = _b[2];\n // If there is no new data provided, revalidate the key with current state.\n if (args.length < 3) {\n // Revalidate and broadcast state.\n return [2 /*return*/, broadcastState(cache, key, cache.get(key), UNDEFINED, UNDEFINED, revalidate, true)];\n }\n data = _data;\n beforeMutationTs = getTimestamp();\n MUTATION[key] = [beforeMutationTs, 0];\n hasCustomOptimisticData = !isUndefined(customOptimisticData);\n rollbackData = cache.get(key);\n // Do optimistic data update.\n if (hasCustomOptimisticData) {\n optimisticData = isFunction(customOptimisticData)\n ? customOptimisticData(rollbackData)\n : customOptimisticData;\n cache.set(key, optimisticData);\n broadcastState(cache, key, optimisticData);\n }\n if (isFunction(data)) {\n // `data` is a function, call it passing current cache value.\n try {\n data = data(cache.get(key));\n }\n catch (err) {\n // If it throws an error synchronously, we shouldn't update the cache.\n error = err;\n }\n }\n if (!(data && isFunction(data.then))) return [3 /*break*/, 2];\n return [4 /*yield*/, data.catch(function (err) {\n error = err;\n })\n // Check if other mutations have occurred since we've started this mutation.\n // If there's a race we don't update cache or broadcast the change,\n // just return the data.\n ];\n case 1:\n // This means that the mutation is async, we need to check timestamps to\n // avoid race conditions.\n data = _c.sent();\n // Check if other mutations have occurred since we've started this mutation.\n // If there's a race we don't update cache or broadcast the change,\n // just return the data.\n if (beforeMutationTs !== MUTATION[key][0]) {\n if (error)\n throw error;\n return [2 /*return*/, data];\n }\n else if (error && hasCustomOptimisticData && rollbackOnError) {\n // Rollback. Always populate the cache in this case but without\n // transforming the data.\n populateCache = true;\n data = rollbackData;\n cache.set(key, rollbackData);\n }\n _c.label = 2;\n case 2:\n // If we should write back the cache after request.\n if (populateCache) {\n if (!error) {\n // Transform the result into data.\n if (isFunction(populateCache)) {\n data = populateCache(data, rollbackData);\n }\n // Only update cached data if there's no error. Data can be `undefined` here.\n cache.set(key, data);\n }\n // Always update or reset the error.\n cache.set(keyInfo, mergeObjects(cache.get(keyInfo), { error: error }));\n }\n // Reset the timestamp to mark the mutation has ended.\n MUTATION[key][1] = getTimestamp();\n return [4 /*yield*/, broadcastState(cache, key, data, error, UNDEFINED, revalidate, !!populateCache)\n // Throw error or return data\n ];\n case 3:\n res = _c.sent();\n // Throw error or return data\n if (error)\n throw error;\n return [2 /*return*/, populateCache ? res : data];\n }\n });\n });\n};\n\nvar revalidateAllKeys = function (revalidators, type) {\n for (var key in revalidators) {\n if (revalidators[key][0])\n revalidators[key][0](type);\n }\n};\nvar initCache = function (provider, options) {\n // The global state for a specific provider will be used to deduplicate\n // requests and store listeners. As well as a mutate function that bound to\n // the cache.\n // Provider's global state might be already initialized. Let's try to get the\n // global state associated with the provider first.\n if (!SWRGlobalState.has(provider)) {\n var opts = mergeObjects(defaultConfigOptions, options);\n // If there's no global state bound to the provider, create a new one with the\n // new mutate function.\n var EVENT_REVALIDATORS = {};\n var mutate = internalMutate.bind(UNDEFINED, provider);\n var unmount = noop;\n // Update the state if it's new, or the provider has been extended.\n SWRGlobalState.set(provider, [EVENT_REVALIDATORS, {}, {}, {}, mutate]);\n // This is a new provider, we need to initialize it and setup DOM events\n // listeners for `focus` and `reconnect` actions.\n if (!IS_SERVER) {\n // When listening to the native events for auto revalidations,\n // we intentionally put a delay (setTimeout) here to make sure they are\n // fired after immediate JavaScript executions, which can possibly be\n // React's state updates.\n // This avoids some unnecessary revalidations such as\n // https://github.com/vercel/swr/issues/1680.\n var releaseFocus_1 = opts.initFocus(setTimeout.bind(UNDEFINED, revalidateAllKeys.bind(UNDEFINED, EVENT_REVALIDATORS, FOCUS_EVENT)));\n var releaseReconnect_1 = opts.initReconnect(setTimeout.bind(UNDEFINED, revalidateAllKeys.bind(UNDEFINED, EVENT_REVALIDATORS, RECONNECT_EVENT)));\n unmount = function () {\n releaseFocus_1 && releaseFocus_1();\n releaseReconnect_1 && releaseReconnect_1();\n // When un-mounting, we need to remove the cache provider from the state\n // storage too because it's a side-effect. Otherwise when re-mounting we\n // will not re-register those event listeners.\n SWRGlobalState.delete(provider);\n };\n }\n // We might want to inject an extra layer on top of `provider` in the future,\n // such as key serialization, auto GC, etc.\n // For now, it's just a `Map` interface without any modifications.\n return [provider, mutate, unmount];\n }\n return [provider, SWRGlobalState.get(provider)[4]];\n};\n\n// error retry\nvar onErrorRetry = function (_, __, config, revalidate, opts) {\n var maxRetryCount = config.errorRetryCount;\n var currentRetryCount = opts.retryCount;\n // Exponential backoff\n var timeout = ~~((Math.random() + 0.5) *\n (1 << (currentRetryCount < 8 ? currentRetryCount : 8))) * config.errorRetryInterval;\n if (!isUndefined(maxRetryCount) && currentRetryCount > maxRetryCount) {\n return;\n }\n setTimeout(revalidate, timeout, opts);\n};\n// Default cache provider\nvar _a = initCache(new Map()), cache = _a[0], mutate = _a[1];\n// Default config\nvar defaultConfig = mergeObjects({\n // events\n onLoadingSlow: noop,\n onSuccess: noop,\n onError: noop,\n onErrorRetry: onErrorRetry,\n onDiscarded: noop,\n // switches\n revalidateOnFocus: true,\n revalidateOnReconnect: true,\n revalidateIfStale: true,\n shouldRetryOnError: true,\n // timeouts\n errorRetryInterval: slowConnection ? 10000 : 5000,\n focusThrottleInterval: 5 * 1000,\n dedupingInterval: 2 * 1000,\n loadingTimeout: slowConnection ? 5000 : 3000,\n // providers\n compare: function (currentData, newData) {\n return stableHash(currentData) == stableHash(newData);\n },\n isPaused: function () { return false; },\n cache: cache,\n mutate: mutate,\n fallback: {}\n}, \n// use web preset by default\npreset);\n\nvar mergeConfigs = function (a, b) {\n // Need to create a new object to avoid mutating the original here.\n var v = mergeObjects(a, b);\n // If two configs are provided, merge their `use` and `fallback` options.\n if (b) {\n var u1 = a.use, f1 = a.fallback;\n var u2 = b.use, f2 = b.fallback;\n if (u1 && u2) {\n v.use = u1.concat(u2);\n }\n if (f1 && f2) {\n v.fallback = mergeObjects(f1, f2);\n }\n }\n return v;\n};\n\nvar SWRConfigContext = createContext({});\nvar SWRConfig$1 = function (props) {\n var value = props.value;\n // Extend parent context values and middleware.\n var extendedConfig = mergeConfigs(useContext(SWRConfigContext), value);\n // Should not use the inherited provider.\n var provider = value && value.provider;\n // Use a lazy initialized state to create the cache on first access.\n var cacheContext = useState(function () {\n return provider\n ? initCache(provider(extendedConfig.cache || cache), value)\n : UNDEFINED;\n })[0];\n // Override the cache if a new provider is given.\n if (cacheContext) {\n extendedConfig.cache = cacheContext[0];\n extendedConfig.mutate = cacheContext[1];\n }\n // Unsubscribe events.\n useIsomorphicLayoutEffect(function () { return (cacheContext ? cacheContext[2] : UNDEFINED); }, []);\n return createElement(SWRConfigContext.Provider, mergeObjects(props, {\n value: extendedConfig\n }));\n};\n\n/**\n * An implementation of state with dependency-tracking.\n */\nvar useStateWithDeps = function (state, unmountedRef) {\n var rerender = useState({})[1];\n var stateRef = useRef(state);\n // If a state property (data, error or isValidating) is accessed by the render\n // function, we mark the property as a dependency so if it is updated again\n // in the future, we trigger a rerender.\n // This is also known as dependency-tracking.\n var stateDependenciesRef = useRef({\n data: false,\n error: false,\n isValidating: false\n });\n /**\n * @param payload To change stateRef, pass the values explicitly to setState:\n * @example\n * ```js\n * setState({\n * isValidating: false\n * data: newData // set data to newData\n * error: undefined // set error to undefined\n * })\n *\n * setState({\n * isValidating: false\n * data: undefined // set data to undefined\n * error: err // set error to err\n * })\n * ```\n */\n var setState = useCallback(function (payload) {\n var shouldRerender = false;\n var currentState = stateRef.current;\n for (var _ in payload) {\n var k = _;\n // If the property has changed, update the state and mark rerender as\n // needed.\n if (currentState[k] !== payload[k]) {\n currentState[k] = payload[k];\n // If the property is accessed by the component, a rerender should be\n // triggered.\n if (stateDependenciesRef.current[k]) {\n shouldRerender = true;\n }\n }\n }\n if (shouldRerender && !unmountedRef.current) {\n rerender({});\n }\n }, \n // config.suspense isn't allowed to change during the lifecycle\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []);\n // Always update the state reference.\n useIsomorphicLayoutEffect(function () {\n stateRef.current = state;\n });\n return [stateRef, stateDependenciesRef.current, setState];\n};\n\nvar normalize = function (args) {\n return isFunction(args[1])\n ? [args[0], args[1], args[2] || {}]\n : [args[0], null, (args[1] === null ? args[2] : args[1]) || {}];\n};\n\nvar useSWRConfig = function () {\n return mergeObjects(defaultConfig, useContext(SWRConfigContext));\n};\n\n// It's tricky to pass generic types as parameters, so we just directly override\n// the types here.\nvar withArgs = function (hook) {\n return function useSWRArgs() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n // Get the default and inherited configuration.\n var fallbackConfig = useSWRConfig();\n // Normalize arguments.\n var _a = normalize(args), key = _a[0], fn = _a[1], _config = _a[2];\n // Merge configurations.\n var config = mergeConfigs(fallbackConfig, _config);\n // Apply middleware\n var next = hook;\n var use = config.use;\n if (use) {\n for (var i = use.length; i-- > 0;) {\n next = use[i](next);\n }\n }\n return next(key, fn || config.fetcher, config);\n };\n};\n\n// Add a callback function to a list of keyed callback functions and return\n// the unsubscribe function.\nvar subscribeCallback = function (key, callbacks, callback) {\n var keyedRevalidators = callbacks[key] || (callbacks[key] = []);\n keyedRevalidators.push(callback);\n return function () {\n var index = keyedRevalidators.indexOf(callback);\n if (index >= 0) {\n // O(1): faster than splice\n keyedRevalidators[index] = keyedRevalidators[keyedRevalidators.length - 1];\n keyedRevalidators.pop();\n }\n };\n};\n\nvar WITH_DEDUPE = { dedupe: true };\nvar useSWRHandler = function (_key, fetcher, config) {\n var cache = config.cache, compare = config.compare, fallbackData = config.fallbackData, suspense = config.suspense, revalidateOnMount = config.revalidateOnMount, refreshInterval = config.refreshInterval, refreshWhenHidden = config.refreshWhenHidden, refreshWhenOffline = config.refreshWhenOffline;\n var _a = SWRGlobalState.get(cache), EVENT_REVALIDATORS = _a[0], STATE_UPDATERS = _a[1], MUTATION = _a[2], FETCH = _a[3];\n // `key` is the identifier of the SWR `data` state, `keyInfo` holds extra\n // states such as `error` and `isValidating` inside,\n // all of them are derived from `_key`.\n // `fnArgs` is an array of arguments parsed from the key, which will be passed\n // to the fetcher.\n var _b = serialize(_key), key = _b[0], fnArgs = _b[1], keyInfo = _b[2];\n // If it's the initial render of this hook.\n var initialMountedRef = useRef(false);\n // If the hook is unmounted already. This will be used to prevent some effects\n // to be called after unmounting.\n var unmountedRef = useRef(false);\n // Refs to keep the key and config.\n var keyRef = useRef(key);\n var fetcherRef = useRef(fetcher);\n var configRef = useRef(config);\n var getConfig = function () { return configRef.current; };\n var isActive = function () { return getConfig().isVisible() && getConfig().isOnline(); };\n var patchFetchInfo = function (info) {\n return cache.set(keyInfo, mergeObjects(cache.get(keyInfo), info));\n };\n // Get the current state that SWR should return.\n var cached = cache.get(key);\n var fallback = isUndefined(fallbackData)\n ? config.fallback[key]\n : fallbackData;\n var data = isUndefined(cached) ? fallback : cached;\n var info = cache.get(keyInfo) || {};\n var error = info.error;\n var isInitialMount = !initialMountedRef.current;\n // - Suspense mode and there's stale data for the initial render.\n // - Not suspense mode and there is no fallback data and `revalidateIfStale` is enabled.\n // - `revalidateIfStale` is enabled but `data` is not defined.\n var shouldRevalidate = function () {\n // If `revalidateOnMount` is set, we take the value directly.\n if (isInitialMount && !isUndefined(revalidateOnMount))\n return revalidateOnMount;\n // If it's paused, we skip revalidation.\n if (getConfig().isPaused())\n return false;\n // Under suspense mode, it will always fetch on render if there is no\n // stale data so no need to revalidate immediately on mount again.\n // If data exists, only revalidate if `revalidateIfStale` is true.\n if (suspense)\n return isUndefined(data) ? false : config.revalidateIfStale;\n // If there is no stale data, we need to revalidate on mount;\n // If `revalidateIfStale` is set to true, we will always revalidate.\n return isUndefined(data) || config.revalidateIfStale;\n };\n // Resolve the current validating state.\n var resolveValidating = function () {\n if (!key || !fetcher)\n return false;\n if (info.isValidating)\n return true;\n // If it's not mounted yet and it should revalidate on mount, revalidate.\n return isInitialMount && shouldRevalidate();\n };\n var isValidating = resolveValidating();\n var _c = useStateWithDeps({\n data: data,\n error: error,\n isValidating: isValidating\n }, unmountedRef), stateRef = _c[0], stateDependencies = _c[1], setState = _c[2];\n // The revalidation function is a carefully crafted wrapper of the original\n // `fetcher`, to correctly handle the many edge cases.\n var revalidate = useCallback(function (revalidateOpts) { return __awaiter(void 0, void 0, void 0, function () {\n var currentFetcher, newData, startAt, loading, opts, shouldStartNewRequest, isCurrentKeyMounted, cleanupState, newState, finishRequestAndUpdateState, mutationInfo, err_1;\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n currentFetcher = fetcherRef.current;\n if (!key ||\n !currentFetcher ||\n unmountedRef.current ||\n getConfig().isPaused()) {\n return [2 /*return*/, false];\n }\n loading = true;\n opts = revalidateOpts || {};\n shouldStartNewRequest = !FETCH[key] || !opts.dedupe;\n isCurrentKeyMounted = function () {\n return !unmountedRef.current &&\n key === keyRef.current &&\n initialMountedRef.current;\n };\n cleanupState = function () {\n // Check if it's still the same request before deleting.\n var requestInfo = FETCH[key];\n if (requestInfo && requestInfo[1] === startAt) {\n delete FETCH[key];\n }\n };\n newState = { isValidating: false };\n finishRequestAndUpdateState = function () {\n patchFetchInfo({ isValidating: false });\n // We can only set state if it's safe (still mounted with the same key).\n if (isCurrentKeyMounted()) {\n setState(newState);\n }\n };\n // Start fetching. Change the `isValidating` state, update the cache.\n patchFetchInfo({\n isValidating: true\n });\n setState({ isValidating: true });\n _b.label = 1;\n case 1:\n _b.trys.push([1, 3, , 4]);\n if (shouldStartNewRequest) {\n // Tell all other hooks to change the `isValidating` state.\n broadcastState(cache, key, stateRef.current.data, stateRef.current.error, true);\n // If no cache being rendered currently (it shows a blank page),\n // we trigger the loading slow event.\n if (config.loadingTimeout && !cache.get(key)) {\n setTimeout(function () {\n if (loading && isCurrentKeyMounted()) {\n getConfig().onLoadingSlow(key, config);\n }\n }, config.loadingTimeout);\n }\n // Start the request and save the timestamp.\n FETCH[key] = [currentFetcher.apply(void 0, fnArgs), getTimestamp()];\n }\n _a = FETCH[key], newData = _a[0], startAt = _a[1];\n return [4 /*yield*/, newData];\n case 2:\n newData = _b.sent();\n if (shouldStartNewRequest) {\n // If the request isn't interrupted, clean it up after the\n // deduplication interval.\n setTimeout(cleanupState, config.dedupingInterval);\n }\n // If there're other ongoing request(s), started after the current one,\n // we need to ignore the current one to avoid possible race conditions:\n // req1------------------>res1 (current one)\n // req2---------------->res2\n // the request that fired later will always be kept.\n // The timestamp maybe be `undefined` or a number\n if (!FETCH[key] || FETCH[key][1] !== startAt) {\n if (shouldStartNewRequest) {\n if (isCurrentKeyMounted()) {\n getConfig().onDiscarded(key);\n }\n }\n return [2 /*return*/, false];\n }\n // Clear error.\n patchFetchInfo({\n error: UNDEFINED\n });\n newState.error = UNDEFINED;\n mutationInfo = MUTATION[key];\n if (!isUndefined(mutationInfo) &&\n // case 1\n (startAt <= mutationInfo[0] ||\n // case 2\n startAt <= mutationInfo[1] ||\n // case 3\n mutationInfo[1] === 0)) {\n finishRequestAndUpdateState();\n if (shouldStartNewRequest) {\n if (isCurrentKeyMounted()) {\n getConfig().onDiscarded(key);\n }\n }\n return [2 /*return*/, false];\n }\n // Deep compare with latest state to avoid extra re-renders.\n // For local state, compare and assign.\n if (!compare(stateRef.current.data, newData)) {\n newState.data = newData;\n }\n else {\n // data and newData are deeply equal\n // it should be safe to broadcast the stale data\n newState.data = stateRef.current.data;\n // At the end of this function, `brocastState` invokes the `onStateUpdate` function,\n // which takes care of avoiding the re-render\n }\n // For global state, it's possible that the key has changed.\n // https://github.com/vercel/swr/pull/1058\n if (!compare(cache.get(key), newData)) {\n cache.set(key, newData);\n }\n // Trigger the successful callback if it's the original request.\n if (shouldStartNewRequest) {\n if (isCurrentKeyMounted()) {\n getConfig().onSuccess(newData, key, config);\n }\n }\n return [3 /*break*/, 4];\n case 3:\n err_1 = _b.sent();\n cleanupState();\n // Not paused, we continue handling the error. Otherwise discard it.\n if (!getConfig().isPaused()) {\n // Get a new error, don't use deep comparison for errors.\n patchFetchInfo({ error: err_1 });\n newState.error = err_1;\n // Error event and retry logic. Only for the actual request, not\n // deduped ones.\n if (shouldStartNewRequest && isCurrentKeyMounted()) {\n getConfig().onError(err_1, key, config);\n if ((typeof config.shouldRetryOnError === 'boolean' &&\n config.shouldRetryOnError) ||\n (isFunction(config.shouldRetryOnError) &&\n config.shouldRetryOnError(err_1))) {\n // When retrying, dedupe is always enabled\n if (isActive()) {\n // If it's active, stop. It will auto revalidate when refocusing\n // or reconnecting.\n getConfig().onErrorRetry(err_1, key, config, revalidate, {\n retryCount: (opts.retryCount || 0) + 1,\n dedupe: true\n });\n }\n }\n }\n }\n return [3 /*break*/, 4];\n case 4:\n // Mark loading as stopped.\n loading = false;\n // Update the current hook's state.\n finishRequestAndUpdateState();\n // Here is the source of the request, need to tell all other hooks to\n // update their states.\n if (isCurrentKeyMounted() && shouldStartNewRequest) {\n broadcastState(cache, key, newState.data, newState.error, false);\n }\n return [2 /*return*/, true];\n }\n });\n }); }, \n // `setState` is immutable, and `eventsCallback`, `fnArgs`, `keyInfo`,\n // and `keyValidating` are depending on `key`, so we can exclude them from\n // the deps array.\n //\n // FIXME:\n // `fn` and `config` might be changed during the lifecycle,\n // but they might be changed every render like this.\n // `useSWR('key', () => fetch('/api/'), { suspense: true })`\n // So we omit the values from the deps array\n // even though it might cause unexpected behaviors.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [key]);\n // Similar to the global mutate, but bound to the current cache and key.\n // `cache` isn't allowed to change during the lifecycle.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n var boundMutate = useCallback(\n // By using `bind` we don't need to modify the size of the rest arguments.\n // Due to https://github.com/microsoft/TypeScript/issues/37181, we have to\n // cast it to any for now.\n internalMutate.bind(UNDEFINED, cache, function () { return keyRef.current; }), \n // eslint-disable-next-line react-hooks/exhaustive-deps\n []);\n // Always update fetcher and config refs.\n useIsomorphicLayoutEffect(function () {\n fetcherRef.current = fetcher;\n configRef.current = config;\n });\n // After mounted or key changed.\n useIsomorphicLayoutEffect(function () {\n if (!key)\n return;\n var keyChanged = key !== keyRef.current;\n var softRevalidate = revalidate.bind(UNDEFINED, WITH_DEDUPE);\n // Expose state updater to global event listeners. So we can update hook's\n // internal state from the outside.\n var onStateUpdate = function (updatedData, updatedError, updatedIsValidating) {\n setState(mergeObjects({\n error: updatedError,\n isValidating: updatedIsValidating\n }, \n // Since `setState` only shallowly compares states, we do a deep\n // comparison here.\n compare(stateRef.current.data, updatedData)\n ? UNDEFINED\n : {\n data: updatedData\n }));\n };\n // Expose revalidators to global event listeners. So we can trigger\n // revalidation from the outside.\n var nextFocusRevalidatedAt = 0;\n var onRevalidate = function (type) {\n if (type == FOCUS_EVENT) {\n var now = Date.now();\n if (getConfig().revalidateOnFocus &&\n now > nextFocusRevalidatedAt &&\n isActive()) {\n nextFocusRevalidatedAt = now + getConfig().focusThrottleInterval;\n softRevalidate();\n }\n }\n else if (type == RECONNECT_EVENT) {\n if (getConfig().revalidateOnReconnect && isActive()) {\n softRevalidate();\n }\n }\n else if (type == MUTATE_EVENT) {\n return revalidate();\n }\n return;\n };\n var unsubUpdate = subscribeCallback(key, STATE_UPDATERS, onStateUpdate);\n var unsubEvents = subscribeCallback(key, EVENT_REVALIDATORS, onRevalidate);\n // Mark the component as mounted and update corresponding refs.\n unmountedRef.current = false;\n keyRef.current = key;\n initialMountedRef.current = true;\n // When `key` updates, reset the state to the initial value\n // and trigger a rerender if necessary.\n if (keyChanged) {\n setState({\n data: data,\n error: error,\n isValidating: isValidating\n });\n }\n // Trigger a revalidation.\n if (shouldRevalidate()) {\n if (isUndefined(data) || IS_SERVER) {\n // Revalidate immediately.\n softRevalidate();\n }\n else {\n // Delay the revalidate if we have data to return so we won't block\n // rendering.\n rAF(softRevalidate);\n }\n }\n return function () {\n // Mark it as unmounted.\n unmountedRef.current = true;\n unsubUpdate();\n unsubEvents();\n };\n }, [key, revalidate]);\n // Polling\n useIsomorphicLayoutEffect(function () {\n var timer;\n function next() {\n // Use the passed interval\n // ...or invoke the function with the updated data to get the interval\n var interval = isFunction(refreshInterval)\n ? refreshInterval(data)\n : refreshInterval;\n // We only start next interval if `refreshInterval` is not 0, and:\n // - `force` is true, which is the start of polling\n // - or `timer` is not 0, which means the effect wasn't canceled\n if (interval && timer !== -1) {\n timer = setTimeout(execute, interval);\n }\n }\n function execute() {\n // Check if it's OK to execute:\n // Only revalidate when the page is visible, online and not errored.\n if (!stateRef.current.error &&\n (refreshWhenHidden || getConfig().isVisible()) &&\n (refreshWhenOffline || getConfig().isOnline())) {\n revalidate(WITH_DEDUPE).then(next);\n }\n else {\n // Schedule next interval to check again.\n next();\n }\n }\n next();\n return function () {\n if (timer) {\n clearTimeout(timer);\n timer = -1;\n }\n };\n }, [refreshInterval, refreshWhenHidden, refreshWhenOffline, revalidate]);\n // Display debug info in React DevTools.\n useDebugValue(data);\n // In Suspense mode, we can't return the empty `data` state.\n // If there is `error`, the `error` needs to be thrown to the error boundary.\n // If there is no `error`, the `revalidation` promise needs to be thrown to\n // the suspense boundary.\n if (suspense && isUndefined(data) && key) {\n // Always update fetcher and config refs even with the Suspense mode.\n fetcherRef.current = fetcher;\n configRef.current = config;\n unmountedRef.current = false;\n throw isUndefined(error) ? revalidate(WITH_DEDUPE) : error;\n }\n return {\n mutate: boundMutate,\n get data() {\n stateDependencies.data = true;\n return data;\n },\n get error() {\n stateDependencies.error = true;\n return error;\n },\n get isValidating() {\n stateDependencies.isValidating = true;\n return isValidating;\n }\n };\n};\nvar SWRConfig = OBJECT.defineProperty(SWRConfig$1, 'default', {\n value: defaultConfig\n});\nvar unstable_serialize = function (key) { return serialize(key)[0]; };\nvar useSWR = withArgs(useSWRHandler);\n\n// useSWR\n\nexport { SWRConfig, useSWR as default, mutate, unstable_serialize, useSWRConfig };\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { createContext } from \"preact\";\nimport { useContext } from \"preact/hooks\";\n\ninterface Type {\n id: string;\n token?: string;\n admin?: boolean;\n changeToken: (t?: string) => void;\n}\n\nconst Context = createContext<Type>({} as any);\n\nexport const InstanceContextProvider = Context.Provider;\nexport const useInstanceContext = (): Type => useContext(Context);\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useSWRConfig } from \"swr\";\nimport { MerchantBackend } from \"../declaration.js\";\nimport { useBackendContext } from \"../context/backend.js\";\nimport { useCallback, useEffect, useState } from \"preact/hooks\";\nimport { useInstanceContext } from \"../context/instance.js\";\nimport {\n HttpResponse,\n HttpResponseOk,\n RequestOptions,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { useApiContext } from \"@gnu-taler/web-util/lib/index.browser\";\n\nexport function useMatchMutate(): (\n re: RegExp,\n value?: unknown,\n) => Promise<any> {\n const { cache, mutate } = useSWRConfig();\n\n if (!(cache instanceof Map)) {\n throw new Error(\n \"matchMutate requires the cache provider to be a Map instance\",\n );\n }\n\n return function matchRegexMutate(re: RegExp, value?: unknown) {\n const allKeys = Array.from(cache.keys());\n const keys = allKeys.filter((key) => re.test(key));\n const mutations = keys.map((key) => {\n return mutate(key, value, true);\n });\n return Promise.all(mutations);\n };\n}\n\nexport function useBackendInstancesTestForAdmin(): HttpResponse<\n MerchantBackend.Instances.InstancesResponse,\n MerchantBackend.ErrorDetail\n> {\n const { request } = useBackendBaseRequest();\n\n type Type = MerchantBackend.Instances.InstancesResponse;\n\n const [result, setResult] = useState<\n HttpResponse<Type, MerchantBackend.ErrorDetail>\n >({ loading: true });\n\n useEffect(() => {\n request<Type>(`/management/instances`)\n .then((data) => setResult(data))\n .catch((error) => setResult(error));\n }, [request]);\n\n return result;\n}\n\nexport function useBackendConfig(): HttpResponse<\n MerchantBackend.VersionResponse,\n MerchantBackend.ErrorDetail\n> {\n const { request } = useBackendBaseRequest();\n\n type Type = MerchantBackend.VersionResponse;\n\n const [result, setResult] = useState<\n HttpResponse<Type, MerchantBackend.ErrorDetail>\n >({ loading: true });\n\n useEffect(() => {\n request<Type>(`/config`)\n .then((data) => setResult(data))\n .catch((error) => setResult(error));\n }, [request]);\n\n return result;\n}\n\ninterface useBackendInstanceRequestType {\n request: <T>(\n endpoint: string,\n options?: RequestOptions,\n ) => Promise<HttpResponseOk<T>>;\n fetcher: <T>(endpoint: string) => Promise<HttpResponseOk<T>>;\n reserveDetailFetcher: <T>(endpoint: string) => Promise<HttpResponseOk<T>>;\n tipsDetailFetcher: <T>(endpoint: string) => Promise<HttpResponseOk<T>>;\n multiFetcher: <T>(url: string[]) => Promise<HttpResponseOk<T>[]>;\n orderFetcher: <T>(\n endpoint: string,\n paid?: YesOrNo,\n refunded?: YesOrNo,\n wired?: YesOrNo,\n searchDate?: Date,\n delta?: number,\n ) => Promise<HttpResponseOk<T>>;\n transferFetcher: <T>(\n endpoint: string,\n payto_uri?: string,\n verified?: string,\n position?: string,\n delta?: number,\n ) => Promise<HttpResponseOk<T>>;\n templateFetcher: <T>(\n endpoint: string,\n position?: string,\n delta?: number,\n ) => Promise<HttpResponseOk<T>>;\n webhookFetcher: <T>(\n endpoint: string,\n position?: string,\n delta?: number,\n ) => Promise<HttpResponseOk<T>>;\n}\ninterface useBackendBaseRequestType {\n request: <T>(\n endpoint: string,\n options?: RequestOptions,\n ) => Promise<HttpResponseOk<T>>;\n}\n\ntype YesOrNo = \"yes\" | \"no\";\n\n/**\n *\n * @param root the request is intended to the base URL and no the instance URL\n * @returns request handler to\n */\nexport function useBackendBaseRequest(): useBackendBaseRequestType {\n const { url: backend, token } = useBackendContext();\n const { request: requestHandler } = useApiContext();\n\n const request = useCallback(\n function requestImpl<T>(\n endpoint: string,\n options: RequestOptions = {},\n ): Promise<HttpResponseOk<T>> {\n return requestHandler<T>(backend, endpoint, { token, ...options });\n },\n [backend, token],\n );\n\n return { request };\n}\n\nexport function useBackendInstanceRequest(): useBackendInstanceRequestType {\n const { url: rootBackendUrl, token: rootToken } = useBackendContext();\n const { token: instanceToken, id, admin } = useInstanceContext();\n const { request: requestHandler } = useApiContext();\n\n const { baseUrl, token } = !admin\n ? { baseUrl: rootBackendUrl, token: rootToken }\n : { baseUrl: `${rootBackendUrl}/instances/${id}`, token: instanceToken };\n\n const request = useCallback(\n function requestImpl<T>(\n endpoint: string,\n options: RequestOptions = {},\n ): Promise<HttpResponseOk<T>> {\n return requestHandler<T>(baseUrl, endpoint, { token, ...options });\n },\n [baseUrl, token],\n );\n\n const multiFetcher = useCallback(\n function multiFetcherImpl<T>(\n endpoints: string[],\n ): Promise<HttpResponseOk<T>[]> {\n return Promise.all(\n endpoints.map((endpoint) =>\n requestHandler<T>(baseUrl, endpoint, { token }),\n ),\n );\n },\n [baseUrl, token],\n );\n\n const fetcher = useCallback(\n function fetcherImpl<T>(endpoint: string): Promise<HttpResponseOk<T>> {\n return requestHandler<T>(baseUrl, endpoint, { token });\n },\n [baseUrl, token],\n );\n\n const orderFetcher = useCallback(\n function orderFetcherImpl<T>(\n endpoint: string,\n paid?: YesOrNo,\n refunded?: YesOrNo,\n wired?: YesOrNo,\n searchDate?: Date,\n delta?: number,\n ): Promise<HttpResponseOk<T>> {\n const date_ms =\n delta && delta < 0 && searchDate\n ? searchDate.getTime() + 1\n : searchDate?.getTime();\n const params: any = {};\n if (paid !== undefined) params.paid = paid;\n if (delta !== undefined) params.delta = delta;\n if (refunded !== undefined) params.refunded = refunded;\n if (wired !== undefined) params.wired = wired;\n if (date_ms !== undefined) params.date_ms = date_ms;\n return requestHandler<T>(baseUrl, endpoint, { params, token });\n },\n [baseUrl, token],\n );\n\n const reserveDetailFetcher = useCallback(\n function reserveDetailFetcherImpl<T>(\n endpoint: string,\n ): Promise<HttpResponseOk<T>> {\n return requestHandler<T>(baseUrl, endpoint, {\n params: {\n tips: \"yes\",\n },\n token,\n });\n },\n [baseUrl, token],\n );\n\n const tipsDetailFetcher = useCallback(\n function tipsDetailFetcherImpl<T>(\n endpoint: string,\n ): Promise<HttpResponseOk<T>> {\n return requestHandler<T>(baseUrl, endpoint, {\n params: {\n pickups: \"yes\",\n },\n token,\n });\n },\n [baseUrl, token],\n );\n\n const transferFetcher = useCallback(\n function transferFetcherImpl<T>(\n endpoint: string,\n payto_uri?: string,\n verified?: string,\n position?: string,\n delta?: number,\n ): Promise<HttpResponseOk<T>> {\n const params: any = {};\n if (payto_uri !== undefined) params.payto_uri = payto_uri;\n if (verified !== undefined) params.verified = verified;\n if (delta !== undefined) {\n params.limit = delta;\n }\n if (position !== undefined) params.offset = position;\n\n return requestHandler<T>(baseUrl, endpoint, { params, token });\n },\n [baseUrl, token],\n );\n\n const templateFetcher = useCallback(\n function templateFetcherImpl<T>(\n endpoint: string,\n position?: string,\n delta?: number,\n ): Promise<HttpResponseOk<T>> {\n const params: any = {};\n if (delta !== undefined) {\n params.limit = delta;\n }\n if (position !== undefined) params.offset = position;\n\n return requestHandler<T>(baseUrl, endpoint, { params, token });\n },\n [baseUrl, token],\n );\n\n const webhookFetcher = useCallback(\n function webhookFetcherImpl<T>(\n endpoint: string,\n position?: string,\n delta?: number,\n ): Promise<HttpResponseOk<T>> {\n const params: any = {};\n if (delta !== undefined) {\n params.limit = delta;\n }\n if (position !== undefined) params.offset = position;\n\n return requestHandler<T>(baseUrl, endpoint, { params, token });\n },\n [baseUrl, token],\n );\n\n return {\n request,\n fetcher,\n multiFetcher,\n orderFetcher,\n reserveDetailFetcher,\n tipsDetailFetcher,\n transferFetcher,\n templateFetcher,\n webhookFetcher,\n };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\nimport {\n HttpResponse,\n HttpResponseOk,\n RequestError,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { useBackendContext } from \"../context/backend.js\";\nimport { MerchantBackend } from \"../declaration.js\";\nimport {\n useBackendBaseRequest,\n useBackendInstanceRequest,\n useMatchMutate,\n} from \"./backend.js\";\n\n// FIX default import https://github.com/microsoft/TypeScript/issues/49189\nimport _useSWR, { SWRHook, useSWRConfig } from \"swr\";\nconst useSWR = _useSWR as unknown as SWRHook;\n\ninterface InstanceAPI {\n updateInstance: (\n data: MerchantBackend.Instances.InstanceReconfigurationMessage,\n ) => Promise<void>;\n deleteInstance: () => Promise<void>;\n clearToken: () => Promise<void>;\n setNewToken: (token: string) => Promise<void>;\n}\n\nexport function useAdminAPI(): AdminAPI {\n const { request } = useBackendBaseRequest();\n const mutateAll = useMatchMutate();\n\n const createInstance = async (\n instance: MerchantBackend.Instances.InstanceConfigurationMessage,\n ): Promise<void> => {\n await request(`/management/instances`, {\n method: \"POST\",\n data: instance,\n });\n\n mutateAll(/\\/management\\/instances/);\n };\n\n const deleteInstance = async (id: string): Promise<void> => {\n await request(`/management/instances/${id}`, {\n method: \"DELETE\",\n });\n\n mutateAll(/\\/management\\/instances/);\n };\n\n const purgeInstance = async (id: string): Promise<void> => {\n await request(`/management/instances/${id}`, {\n method: \"DELETE\",\n params: {\n purge: \"YES\",\n },\n });\n\n mutateAll(/\\/management\\/instances/);\n };\n\n return { createInstance, deleteInstance, purgeInstance };\n}\n\nexport interface AdminAPI {\n createInstance: (\n data: MerchantBackend.Instances.InstanceConfigurationMessage,\n ) => Promise<void>;\n deleteInstance: (id: string) => Promise<void>;\n purgeInstance: (id: string) => Promise<void>;\n}\n\nexport function useManagementAPI(instanceId: string): InstanceAPI {\n const mutateAll = useMatchMutate();\n const { updateToken } = useBackendContext();\n const { request } = useBackendBaseRequest();\n\n const updateInstance = async (\n instance: MerchantBackend.Instances.InstanceReconfigurationMessage,\n ): Promise<void> => {\n await request(`/management/instances/${instanceId}`, {\n method: \"PATCH\",\n data: instance,\n });\n\n mutateAll(/\\/management\\/instances/);\n };\n\n const deleteInstance = async (): Promise<void> => {\n await request(`/management/instances/${instanceId}`, {\n method: \"DELETE\",\n });\n\n mutateAll(/\\/management\\/instances/);\n };\n\n const clearToken = async (): Promise<void> => {\n await request(`/management/instances/${instanceId}/auth`, {\n method: \"POST\",\n data: { method: \"external\" },\n });\n\n mutateAll(/\\/management\\/instances/);\n };\n\n const setNewToken = async (newToken: string): Promise<void> => {\n await request(`/management/instances/${instanceId}/auth`, {\n method: \"POST\",\n data: { method: \"token\", token: newToken },\n });\n\n updateToken(newToken);\n mutateAll(/\\/management\\/instances/);\n };\n\n return { updateInstance, deleteInstance, setNewToken, clearToken };\n}\n\nexport function useInstanceAPI(): InstanceAPI {\n const { mutate } = useSWRConfig();\n const {\n url: baseUrl,\n token: adminToken,\n updateLoginStatus,\n } = useBackendContext();\n const { request } = useBackendInstanceRequest();\n\n const updateInstance = async (\n instance: MerchantBackend.Instances.InstanceReconfigurationMessage,\n ): Promise<void> => {\n await request(`/private/`, {\n method: \"PATCH\",\n data: instance,\n });\n\n if (adminToken) mutate([\"/private/instances\", adminToken, baseUrl], null);\n mutate([`/private/`], null);\n };\n\n const deleteInstance = async (): Promise<void> => {\n await request(`/private/`, {\n method: \"DELETE\",\n // token: adminToken,\n });\n\n if (adminToken) mutate([\"/private/instances\", adminToken, baseUrl], null);\n mutate([`/private/`], null);\n };\n\n const clearToken = async (): Promise<void> => {\n await request(`/private/auth`, {\n method: \"POST\",\n data: { method: \"external\" },\n });\n\n mutate([`/private/`], null);\n };\n\n const setNewToken = async (newToken: string): Promise<void> => {\n await request(`/private/auth`, {\n method: \"POST\",\n data: { method: \"token\", token: newToken },\n });\n\n updateLoginStatus(baseUrl, newToken);\n mutate([`/private/`], null);\n };\n\n return { updateInstance, deleteInstance, setNewToken, clearToken };\n}\n\nexport function useInstanceDetails(): HttpResponse<\n MerchantBackend.Instances.QueryInstancesResponse,\n MerchantBackend.ErrorDetail\n> {\n const { fetcher } = useBackendInstanceRequest();\n\n const { data, error, isValidating } = useSWR<\n HttpResponseOk<MerchantBackend.Instances.QueryInstancesResponse>,\n RequestError<MerchantBackend.ErrorDetail>\n >([`/private/`], fetcher, {\n refreshInterval: 0,\n refreshWhenHidden: false,\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n refreshWhenOffline: false,\n errorRetryCount: 0,\n errorRetryInterval: 1,\n shouldRetryOnError: false,\n });\n\n if (isValidating) return { loading: true, data: data?.data };\n if (data) return data;\n if (error) return error.info;\n return { loading: true };\n}\n\ntype KYCStatus =\n | { type: \"ok\" }\n | { type: \"redirect\"; status: MerchantBackend.Instances.AccountKycRedirects };\n\nexport function useInstanceKYCDetails(): HttpResponse<\n KYCStatus,\n MerchantBackend.ErrorDetail\n> {\n const { fetcher } = useBackendInstanceRequest();\n\n const { data, error } = useSWR<\n HttpResponseOk<MerchantBackend.Instances.AccountKycRedirects>,\n RequestError<MerchantBackend.ErrorDetail>\n >([`/private/kyc`], fetcher, {\n refreshInterval: 60 * 1000,\n refreshWhenHidden: false,\n revalidateOnFocus: false,\n revalidateIfStale: false,\n revalidateOnMount: false,\n revalidateOnReconnect: false,\n refreshWhenOffline: false,\n errorRetryCount: 0,\n errorRetryInterval: 1,\n shouldRetryOnError: false,\n });\n\n if (data) {\n if (data.info?.status === 202)\n return { ok: true, data: { type: \"redirect\", status: data.data } };\n return { ok: true, data: { type: \"ok\" } };\n }\n if (error) return error.info;\n return { loading: true };\n}\n\nexport function useManagedInstanceDetails(\n instanceId: string,\n): HttpResponse<\n MerchantBackend.Instances.QueryInstancesResponse,\n MerchantBackend.ErrorDetail\n> {\n const { request } = useBackendBaseRequest();\n\n const { data, error, isValidating } = useSWR<\n HttpResponseOk<MerchantBackend.Instances.QueryInstancesResponse>,\n RequestError<MerchantBackend.ErrorDetail>\n >([`/management/instances/${instanceId}`], request, {\n refreshInterval: 0,\n refreshWhenHidden: false,\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n refreshWhenOffline: false,\n errorRetryCount: 0,\n errorRetryInterval: 1,\n shouldRetryOnError: false,\n });\n\n if (isValidating) return { loading: true, data: data?.data };\n if (data) return data;\n if (error) return error.info;\n return { loading: true };\n}\n\nexport function useBackendInstances(): HttpResponse<\n MerchantBackend.Instances.InstancesResponse,\n MerchantBackend.ErrorDetail\n> {\n const { request } = useBackendBaseRequest();\n\n const { data, error, isValidating } = useSWR<\n HttpResponseOk<MerchantBackend.Instances.InstancesResponse>,\n RequestError<MerchantBackend.ErrorDetail>\n >([\"/management/instances\"], request);\n\n if (isValidating) return { loading: true, data: data?.data };\n if (data) return data;\n if (error) return error.info;\n return { loading: true };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\n//https://tools.ietf.org/html/rfc8905\nexport const PAYTO_REGEX =\n /^payto:\\/\\/[a-zA-Z][a-zA-Z0-9-.]+(\\/[a-zA-Z0-9\\-\\.\\~\\(\\)@_%:!$&'*+,;=]*)*\\??((amount|receiver-name|sender-name|instruction|message)=[a-zA-Z0-9\\-\\.\\~\\(\\)@_%:!$'*+,;=]*&?)*$/;\nexport const PAYTO_WIRE_METHOD_LOOKUP =\n /payto:\\/\\/([a-zA-Z][a-zA-Z0-9-.]+)\\/.*/;\n\nexport const AMOUNT_REGEX = /^[a-zA-Z][a-zA-Z]*:[0-9][0-9,]*\\.?[0-9,]*$/;\n\nexport const INSTANCE_ID_LOOKUP = /\\/instances\\/([^/]*)\\/?$/;\n\nexport const AMOUNT_ZERO_REGEX = /^[a-zA-Z][a-zA-Z]*:0$/;\n\nexport const CROCKFORD_BASE32_REGEX =\n /^[0123456789ABCDEFGHJKMNPQRSTVWXYZ]+[*~$=U]*$/;\n\nexport const URL_REGEX =\n /^((https?:)(\\/\\/\\/?)([\\w]*(?::[\\w]*)?@)?([\\d\\w\\.-]+)(?::(\\d+))?)\\/$/;\n\n// how much rows we add every time user hit load more\nexport const PAGE_SIZE = 20;\n// how bigger can be the result set\n// after this threshold, load more with move the cursor\nexport const MAX_RESULT_SIZE = PAGE_SIZE * 2 - 1;\n\n// how much we will wait for all request, in seconds\nexport const DEFAULT_REQUEST_TIMEOUT = 10;\n\nexport const MAX_IMAGE_SIZE = 1024 * 1024;\n\nexport const INSTANCE_ID_REGEX = /^[a-zA-Z0-9][a-zA-Z0-9_.@-]+$/;\n\nexport const COUNTRY_TABLE = {\n AE: \"U.A.E.\",\n AF: \"Afghanistan\",\n AL: \"Albania\",\n AM: \"Armenia\",\n AN: \"Netherlands Antilles\",\n AR: \"Argentina\",\n AT: \"Austria\",\n AU: \"Australia\",\n AZ: \"Azerbaijan\",\n BA: \"Bosnia and Herzegovina\",\n BD: \"Bangladesh\",\n BE: \"Belgium\",\n BG: \"Bulgaria\",\n BH: \"Bahrain\",\n BN: \"Brunei Darussalam\",\n BO: \"Bolivia\",\n BR: \"Brazil\",\n BT: \"Bhutan\",\n BY: \"Belarus\",\n BZ: \"Belize\",\n CA: \"Canada\",\n CG: \"Congo\",\n CH: \"Switzerland\",\n CI: \"Cote d'Ivoire\",\n CL: \"Chile\",\n CM: \"Cameroon\",\n CN: \"People's Republic of China\",\n CO: \"Colombia\",\n CR: \"Costa Rica\",\n CS: \"Serbia and Montenegro\",\n CZ: \"Czech Republic\",\n DE: \"Germany\",\n DK: \"Denmark\",\n DO: \"Dominican Republic\",\n DZ: \"Algeria\",\n EC: \"Ecuador\",\n EE: \"Estonia\",\n EG: \"Egypt\",\n ER: \"Eritrea\",\n ES: \"Spain\",\n ET: \"Ethiopia\",\n FI: \"Finland\",\n FO: \"Faroe Islands\",\n FR: \"France\",\n GB: \"United Kingdom\",\n GD: \"Caribbean\",\n GE: \"Georgia\",\n GL: \"Greenland\",\n GR: \"Greece\",\n GT: \"Guatemala\",\n HK: \"Hong Kong\",\n // HK: \"Hong Kong S.A.R.\",\n HN: \"Honduras\",\n HR: \"Croatia\",\n HT: \"Haiti\",\n HU: \"Hungary\",\n ID: \"Indonesia\",\n IE: \"Ireland\",\n IL: \"Israel\",\n IN: \"India\",\n IQ: \"Iraq\",\n IR: \"Iran\",\n IS: \"Iceland\",\n IT: \"Italy\",\n JM: \"Jamaica\",\n JO: \"Jordan\",\n JP: \"Japan\",\n KE: \"Kenya\",\n KG: \"Kyrgyzstan\",\n KH: \"Cambodia\",\n KR: \"South Korea\",\n KW: \"Kuwait\",\n KZ: \"Kazakhstan\",\n LA: \"Laos\",\n LB: \"Lebanon\",\n LI: \"Liechtenstein\",\n LK: \"Sri Lanka\",\n LT: \"Lithuania\",\n LU: \"Luxembourg\",\n LV: \"Latvia\",\n LY: \"Libya\",\n MA: \"Morocco\",\n MC: \"Principality of Monaco\",\n MD: \"Moldava\",\n // MD: \"Moldova\",\n ME: \"Montenegro\",\n MK: \"Former Yugoslav Republic of Macedonia\",\n ML: \"Mali\",\n MM: \"Myanmar\",\n MN: \"Mongolia\",\n MO: \"Macau S.A.R.\",\n MT: \"Malta\",\n MV: \"Maldives\",\n MX: \"Mexico\",\n MY: \"Malaysia\",\n NG: \"Nigeria\",\n NI: \"Nicaragua\",\n NL: \"Netherlands\",\n NO: \"Norway\",\n NP: \"Nepal\",\n NZ: \"New Zealand\",\n OM: \"Oman\",\n PA: \"Panama\",\n PE: \"Peru\",\n PH: \"Philippines\",\n PK: \"Islamic Republic of Pakistan\",\n PL: \"Poland\",\n PR: \"Puerto Rico\",\n PT: \"Portugal\",\n PY: \"Paraguay\",\n QA: \"Qatar\",\n RE: \"Reunion\",\n RO: \"Romania\",\n RS: \"Serbia\",\n RU: \"Russia\",\n RW: \"Rwanda\",\n SA: \"Saudi Arabia\",\n SE: \"Sweden\",\n SG: \"Singapore\",\n SI: \"Slovenia\",\n SK: \"Slovak\",\n SN: \"Senegal\",\n SO: \"Somalia\",\n SR: \"Suriname\",\n SV: \"El Salvador\",\n SY: \"Syria\",\n TH: \"Thailand\",\n TJ: \"Tajikistan\",\n TM: \"Turkmenistan\",\n TN: \"Tunisia\",\n TR: \"Turkey\",\n TT: \"Trinidad and Tobago\",\n TW: \"Taiwan\",\n TZ: \"Tanzania\",\n UA: \"Ukraine\",\n US: \"United States\",\n UY: \"Uruguay\",\n VA: \"Vatican\",\n VE: \"Venezuela\",\n VN: \"Viet Nam\",\n YE: \"Yemen\",\n ZA: \"South Africa\",\n ZW: \"Zimbabwe\",\n};\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { h, VNode } from \"preact\";\n\nexport function Loading(): VNode {\n return (\n <div\n class=\"columns is-centered is-vcentered\"\n style={{\n height: \"calc(100% - 3rem)\",\n position: \"absolute\",\n width: \"100%\",\n }}\n >\n <Spinner />\n </div>\n );\n}\n\nexport function Spinner(): VNode {\n return (\n <div class=\"lds-ring\">\n <div />\n <div />\n <div />\n <div />\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { ComponentChildren, createContext, h, VNode } from \"preact\";\nimport { useContext, useMemo } from \"preact/hooks\";\n\ntype Updater<S> = (value: (prevState: S) => S) => void;\n\nexport interface Props<T> {\n object?: Partial<T>;\n errors?: FormErrors<T>;\n name?: string;\n valueHandler: Updater<Partial<T>> | null;\n children: ComponentChildren;\n}\n\nconst noUpdater: Updater<Partial<unknown>> = () => (s: unknown) => s;\n\nexport function FormProvider<T>({\n object = {},\n errors = {},\n name = \"\",\n valueHandler,\n children,\n}: Props<T>): VNode {\n const initialObject = useMemo(() => object, []);\n const value = useMemo<FormType<T>>(\n () => ({\n errors,\n object,\n initialObject,\n valueHandler: valueHandler ? valueHandler : noUpdater,\n name,\n toStr: {},\n fromStr: {},\n }),\n [errors, object, valueHandler],\n );\n\n return (\n <FormContext.Provider value={value}>\n <form\n class=\"field\"\n onSubmit={(e) => {\n e.preventDefault();\n // if (valueHandler) valueHandler(object);\n }}\n >\n {children}\n </form>\n </FormContext.Provider>\n );\n}\n\nexport interface FormType<T> {\n object: Partial<T>;\n initialObject: Partial<T>;\n errors: FormErrors<T>;\n toStr: FormtoStr<T>;\n name: string;\n fromStr: FormfromStr<T>;\n valueHandler: Updater<Partial<T>>;\n}\n\nconst FormContext = createContext<FormType<unknown>>(null!);\n\nexport function useFormContext<T>() {\n return useContext<FormType<T>>(FormContext);\n}\n\nexport type FormErrors<T> = {\n [P in keyof T]?: string | FormErrors<T[P]>;\n};\n\nexport type FormtoStr<T> = {\n [P in keyof T]?: (f?: T[P]) => string;\n};\n\nexport type FormfromStr<T> = {\n [P in keyof T]?: (f: string) => T[P];\n};\n\nexport type FormUpdater<T> = {\n [P in keyof T]?: (f: keyof T) => (v: T[P]) => void;\n};\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { ComponentChildren, VNode } from \"preact\";\nimport { useFormContext } from \"./FormProvider.js\";\n\ninterface Use<V> {\n error?: string;\n required: boolean;\n value: any;\n initial: any;\n onChange: (v: V) => void;\n toStr: (f: V | undefined) => string;\n fromStr: (v: string) => V;\n}\n\nexport function useField<T>(name: keyof T): Use<T[typeof name]> {\n const { errors, object, initialObject, toStr, fromStr, valueHandler } =\n useFormContext<T>();\n type P = typeof name;\n type V = T[P];\n\n const updateField =\n (field: P) =>\n (value: V): void => {\n return valueHandler((prev) => {\n return setValueDeeper(prev, String(field).split(\".\"), value);\n });\n };\n\n const defaultToString = (f?: V): string => String(!f ? \"\" : f);\n const defaultFromString = (v: string): V => v as any;\n const value = readField(object, String(name));\n const initial = readField(initialObject, String(name));\n const isDirty = value !== initial;\n const hasError = readField(errors, String(name));\n return {\n error: isDirty ? hasError : undefined,\n required: !isDirty && hasError,\n value,\n initial,\n onChange: updateField(name) as any,\n toStr: toStr[name] ? toStr[name]! : defaultToString,\n fromStr: fromStr[name] ? fromStr[name]! : defaultFromString,\n };\n}\n/**\n * read the field of an object an support accessing it using '.'\n *\n * @param object\n * @param name\n * @returns\n */\nconst readField = (object: any, name: string) => {\n return name\n .split(\".\")\n .reduce((prev, current) => prev && prev[current], object);\n};\n\nconst setValueDeeper = (object: any, names: string[], value: any): any => {\n if (names.length === 0) return value;\n const [head, ...rest] = names;\n return { ...object, [head]: setValueDeeper(object[head] || {}, rest, value) };\n};\n\nexport interface InputProps<T> {\n name: T;\n label: ComponentChildren;\n placeholder?: string;\n tooltip?: ComponentChildren;\n readonly?: boolean;\n help?: ComponentChildren;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { ComponentChildren, h, VNode } from \"preact\";\nimport { useField, InputProps } from \"./useField.js\";\n\ninterface Props<T> extends InputProps<T> {\n inputType?: \"text\" | \"number\" | \"multiline\" | \"password\";\n expand?: boolean;\n toStr?: (v?: any) => string;\n fromStr?: (s: string) => any;\n inputExtra?: any;\n side?: ComponentChildren;\n children?: ComponentChildren;\n}\n\nconst defaultToString = (f?: any): string => f || \"\";\nconst defaultFromString = (v: string): any => v as any;\n\nconst TextInput = ({ inputType, error, ...rest }: any) =>\n inputType === \"multiline\" ? (\n <textarea\n {...rest}\n class={error ? \"textarea is-danger\" : \"textarea\"}\n rows=\"3\"\n />\n ) : (\n <input\n {...rest}\n class={error ? \"input is-danger\" : \"input\"}\n type={inputType}\n />\n );\n\nexport function Input<T>({\n name,\n readonly,\n placeholder,\n tooltip,\n label,\n expand,\n help,\n children,\n inputType,\n inputExtra,\n side,\n fromStr = defaultFromString,\n toStr = defaultToString,\n}: Props<keyof T>): VNode {\n const { error, value, onChange, required } = useField<T>(name);\n return (\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">\n {label}\n {tooltip && (\n <span class=\"icon has-tooltip-right\" data-tooltip={tooltip}>\n <i class=\"mdi mdi-information\" />\n </span>\n )}\n </label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n <p\n class={\n expand\n ? \"control is-expanded has-icons-right\"\n : \"control has-icons-right\"\n }\n >\n <TextInput\n error={error}\n {...inputExtra}\n inputType={inputType}\n placeholder={placeholder}\n readonly={readonly}\n disabled={readonly}\n name={String(name)}\n value={toStr(value)}\n onChange={(e: h.JSX.TargetedEvent<HTMLInputElement>): void =>\n onChange(fromStr(e.currentTarget.value))\n }\n />\n {help}\n {children}\n {required && (\n <span class=\"icon has-text-danger is-right\">\n <i class=\"mdi mdi-alert\" />\n </span>\n )}\n </p>\n {error && <p class=\"help is-danger\">{error}</p>}\n </div>\n {side}\n </div>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { ComponentChildren, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { useInstanceContext } from \"../../context/instance.js\";\nimport { DEFAULT_REQUEST_TIMEOUT } from \"../../utils/constants.js\";\nimport { Spinner } from \"../exception/loading.js\";\nimport { FormProvider } from \"../form/FormProvider.js\";\nimport { Input } from \"../form/Input.js\";\n\ninterface Props {\n active?: boolean;\n description?: string;\n onCancel?: () => void;\n onConfirm?: () => void;\n label?: string;\n children?: ComponentChildren;\n danger?: boolean;\n disabled?: boolean;\n}\n\nexport function ConfirmModal({\n active,\n description,\n onCancel,\n onConfirm,\n children,\n danger,\n disabled,\n label = \"Confirm\",\n}: Props): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class={active ? \"modal is-active\" : \"modal\"}>\n <div class=\"modal-background \" onClick={onCancel} />\n <div class=\"modal-card\" style={{ maxWidth: 700 }}>\n <header class=\"modal-card-head\">\n {!description ? null : (\n <p class=\"modal-card-title\">\n <b>{description}</b>\n </p>\n )}\n <button class=\"delete \" aria-label=\"close\" onClick={onCancel} />\n </header>\n <section class=\"modal-card-body\">{children}</section>\n <footer class=\"modal-card-foot\">\n <div class=\"buttons is-right\" style={{ width: \"100%\" }}>\n <button class=\"button \" onClick={onCancel}>\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n <button\n class={danger ? \"button is-danger \" : \"button is-info \"}\n disabled={disabled}\n onClick={onConfirm}\n >\n <i18n.Translate>{label}</i18n.Translate>\n </button>\n </div>\n </footer>\n </div>\n <button\n class=\"modal-close is-large \"\n aria-label=\"close\"\n onClick={onCancel}\n />\n </div>\n );\n}\n\nexport function ContinueModal({\n active,\n description,\n onCancel,\n onConfirm,\n children,\n disabled,\n}: Props): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class={active ? \"modal is-active\" : \"modal\"}>\n <div class=\"modal-background \" onClick={onCancel} />\n <div class=\"modal-card\">\n <header class=\"modal-card-head has-background-success\">\n {!description ? null : <p class=\"modal-card-title\">{description}</p>}\n <button class=\"delete \" aria-label=\"close\" onClick={onCancel} />\n </header>\n <section class=\"modal-card-body\">{children}</section>\n <footer class=\"modal-card-foot\">\n <div class=\"buttons is-right\" style={{ width: \"100%\" }}>\n <button\n class=\"button is-success \"\n disabled={disabled}\n onClick={onConfirm}\n >\n <i18n.Translate>Continue</i18n.Translate>\n </button>\n </div>\n </footer>\n </div>\n <button\n class=\"modal-close is-large \"\n aria-label=\"close\"\n onClick={onCancel}\n />\n </div>\n );\n}\n\nexport function SimpleModal({ onCancel, children }: any): VNode {\n return (\n <div class=\"modal is-active\">\n <div class=\"modal-background \" onClick={onCancel} />\n <div class=\"modal-card\">\n <section class=\"modal-card-body is-main-section\">{children}</section>\n </div>\n <button\n class=\"modal-close is-large \"\n aria-label=\"close\"\n onClick={onCancel}\n />\n </div>\n );\n}\n\nexport function ClearConfirmModal({\n description,\n onCancel,\n onClear,\n onConfirm,\n children,\n}: Props & { onClear?: () => void }): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"modal is-active\">\n <div class=\"modal-background \" onClick={onCancel} />\n <div class=\"modal-card\">\n <header class=\"modal-card-head\">\n {!description ? null : <p class=\"modal-card-title\">{description}</p>}\n <button class=\"delete \" aria-label=\"close\" onClick={onCancel} />\n </header>\n <section class=\"modal-card-body is-main-section\">{children}</section>\n <footer class=\"modal-card-foot\">\n {onClear && (\n <button\n class=\"button is-danger\"\n onClick={onClear}\n disabled={onClear === undefined}\n >\n <i18n.Translate>Clear</i18n.Translate>\n </button>\n )}\n <div class=\"buttons is-right\" style={{ width: \"100%\" }}>\n <button class=\"button \" onClick={onCancel}>\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n <button\n class=\"button is-info\"\n onClick={onConfirm}\n disabled={onConfirm === undefined}\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </button>\n </div>\n </footer>\n </div>\n <button\n class=\"modal-close is-large \"\n aria-label=\"close\"\n onClick={onCancel}\n />\n </div>\n );\n}\n\ninterface DeleteModalProps {\n element: { id: string; name: string };\n onCancel: () => void;\n onConfirm: (id: string) => void;\n}\n\nexport function DeleteModal({\n element,\n onCancel,\n onConfirm,\n}: DeleteModalProps): VNode {\n return (\n <ConfirmModal\n label={`Delete instance`}\n description={`Delete the instance \"${element.name}\"`}\n danger\n active\n onCancel={onCancel}\n onConfirm={() => onConfirm(element.id)}\n >\n <p>\n If you delete the instance named <b>&quot;{element.name}&quot;</b> (ID:{\" \"}\n <b>{element.id}</b>), the merchant will no longer be able to process\n orders or refunds\n </p>\n <p>\n This action deletes the instance private key, but preserves all\n transaction data. You can still access that data after deleting the\n instance.\n </p>\n <p class=\"warning\">\n Deleting an instance <b>cannot be undone</b>.\n </p>\n </ConfirmModal>\n );\n}\n\nexport function PurgeModal({\n element,\n onCancel,\n onConfirm,\n}: DeleteModalProps): VNode {\n return (\n <ConfirmModal\n label={`Purge the instance`}\n description={`Purge the instance \"${element.name}\"`}\n danger\n active\n onCancel={onCancel}\n onConfirm={() => onConfirm(element.id)}\n >\n <p>\n If you purge the instance named <b>&quot;{element.name}&quot;</b> (ID:{\" \"}\n <b>{element.id}</b>), you will also delete all it&apos;s transaction\n data.\n </p>\n <p>\n The instance will disappear from your list, and you will no longer be\n able to access it&apos;s data.\n </p>\n <p class=\"warning\">\n Purging an instance <b>cannot be undone</b>.\n </p>\n </ConfirmModal>\n );\n}\n\ninterface UpdateTokenModalProps {\n oldToken?: string;\n onCancel: () => void;\n onConfirm: (value: string) => void;\n onClear: () => void;\n}\n\n//FIXME: merge UpdateTokenModal with SetTokenNewInstanceModal\nexport function UpdateTokenModal({\n onCancel,\n onClear,\n onConfirm,\n oldToken,\n}: UpdateTokenModalProps): VNode {\n type State = { old_token: string; new_token: string; repeat_token: string };\n const [form, setValue] = useState<Partial<State>>({\n old_token: \"\",\n new_token: \"\",\n repeat_token: \"\",\n });\n const { i18n } = useTranslationContext();\n\n const hasInputTheCorrectOldToken = oldToken && oldToken !== form.old_token;\n const errors = {\n old_token: hasInputTheCorrectOldToken\n ? i18n.str`is not the same as the current access token`\n : undefined,\n new_token: !form.new_token\n ? i18n.str`cannot be empty`\n : form.new_token === form.old_token\n ? i18n.str`cannot be the same as the old token`\n : undefined,\n repeat_token:\n form.new_token !== form.repeat_token\n ? i18n.str`is not the same`\n : undefined,\n };\n\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n\n const instance = useInstanceContext();\n\n const text = i18n.str`You are updating the access token from instance with id ${instance.id}`;\n\n return (\n <ClearConfirmModal\n description={text}\n onCancel={onCancel}\n onConfirm={!hasErrors ? () => onConfirm(form.new_token!) : undefined}\n onClear={!hasInputTheCorrectOldToken && oldToken ? onClear : undefined}\n >\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-four-fifths\">\n <FormProvider errors={errors} object={form} valueHandler={setValue}>\n {oldToken && (\n <Input<State>\n name=\"old_token\"\n label={i18n.str`Old access token`}\n tooltip={i18n.str`access token currently in use`}\n inputType=\"password\"\n />\n )}\n <Input<State>\n name=\"new_token\"\n label={i18n.str`New access token`}\n tooltip={i18n.str`next access token to be used`}\n inputType=\"password\"\n />\n <Input<State>\n name=\"repeat_token\"\n label={i18n.str`Repeat access token`}\n tooltip={i18n.str`confirm the same access token`}\n inputType=\"password\"\n />\n </FormProvider>\n <p>\n <i18n.Translate>\n Clearing the access token will mean public access to the instance\n </i18n.Translate>\n </p>\n </div>\n <div class=\"column\" />\n </div>\n </ClearConfirmModal>\n );\n}\n\nexport function SetTokenNewInstanceModal({\n onCancel,\n onClear,\n onConfirm,\n}: UpdateTokenModalProps): VNode {\n type State = { old_token: string; new_token: string; repeat_token: string };\n const [form, setValue] = useState<Partial<State>>({\n new_token: \"\",\n repeat_token: \"\",\n });\n const { i18n } = useTranslationContext();\n\n const errors = {\n new_token: !form.new_token\n ? i18n.str`cannot be empty`\n : form.new_token === form.old_token\n ? i18n.str`cannot be the same as the old access token`\n : undefined,\n repeat_token:\n form.new_token !== form.repeat_token\n ? i18n.str`is not the same`\n : undefined,\n };\n\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n\n return (\n <div class=\"modal is-active\">\n <div class=\"modal-background \" onClick={onCancel} />\n <div class=\"modal-card\">\n <header class=\"modal-card-head\">\n <p class=\"modal-card-title\">{i18n.str`You are setting the access token for the new instance`}</p>\n <button class=\"delete \" aria-label=\"close\" onClick={onCancel} />\n </header>\n <section class=\"modal-card-body is-main-section\">\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-four-fifths\">\n <FormProvider\n errors={errors}\n object={form}\n valueHandler={setValue}\n >\n <Input<State>\n name=\"new_token\"\n label={i18n.str`New access token`}\n tooltip={i18n.str`next access token to be used`}\n inputType=\"password\"\n />\n <Input<State>\n name=\"repeat_token\"\n label={i18n.str`Repeat access token`}\n tooltip={i18n.str`confirm the same access token`}\n inputType=\"password\"\n />\n </FormProvider>\n <p>\n <i18n.Translate>\n With external authorization method no check will be done by\n the merchant backend\n </i18n.Translate>\n </p>\n </div>\n <div class=\"column\" />\n </div>\n </section>\n <footer class=\"modal-card-foot\">\n {onClear && (\n <button\n class=\"button is-danger\"\n onClick={onClear}\n disabled={onClear === undefined}\n >\n <i18n.Translate>Set external authorization</i18n.Translate>\n </button>\n )}\n <div class=\"buttons is-right\" style={{ width: \"100%\" }}>\n <button class=\"button \" onClick={onCancel}>\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n <button\n class=\"button is-info\"\n onClick={() => onConfirm(form.new_token!)}\n disabled={hasErrors}\n >\n <i18n.Translate>Set access token</i18n.Translate>\n </button>\n </div>\n </footer>\n </div>\n <button\n class=\"modal-close is-large \"\n aria-label=\"close\"\n onClick={onCancel}\n />\n </div>\n );\n}\n\nexport function LoadingModal({ onCancel }: { onCancel: () => void }): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"modal is-active\">\n <div class=\"modal-background \" onClick={onCancel} />\n <div class=\"modal-card\">\n <header class=\"modal-card-head\">\n <p class=\"modal-card-title\">\n <i18n.Translate>Operation in progress...</i18n.Translate>\n </p>\n </header>\n <section class=\"modal-card-body\">\n <div class=\"columns\">\n <div class=\"column\" />\n <Spinner />\n <div class=\"column\" />\n </div>\n <p>{i18n.str`The operation will be automatically canceled after ${DEFAULT_REQUEST_TIMEOUT} seconds`}</p>\n </section>\n <footer class=\"modal-card-foot\">\n <div class=\"buttons is-right\" style={{ width: \"100%\" }}>\n <button class=\"button \" onClick={onCancel}>\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n </div>\n </footer>\n </div>\n <button\n class=\"modal-close is-large \"\n aria-label=\"close\"\n onClick={onCancel}\n />\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { useState } from \"preact/hooks\";\n\nexport interface Options {\n slowTolerance: number;\n}\n\nexport interface AsyncOperationApi<T> {\n request: (...a: any) => void;\n cancel: () => void;\n data: T | undefined;\n isSlow: boolean;\n isLoading: boolean;\n error: string | undefined;\n}\n\nexport function useAsync<T>(\n fn?: (...args: any) => Promise<T>,\n { slowTolerance: tooLong }: Options = { slowTolerance: 1000 },\n): AsyncOperationApi<T> {\n const [data, setData] = useState<T | undefined>(undefined);\n const [isLoading, setLoading] = useState<boolean>(false);\n const [error, setError] = useState<any>(undefined);\n const [isSlow, setSlow] = useState(false);\n\n const request = async (...args: any) => {\n if (!fn) return;\n setLoading(true);\n\n const handler = setTimeout(() => {\n setSlow(true);\n }, tooLong);\n\n try {\n const result = await fn(...args);\n setData(result);\n } catch (error) {\n setError(error);\n }\n setLoading(false);\n setSlow(false);\n clearTimeout(handler);\n };\n\n function cancel(): void {\n setLoading(false);\n setSlow(false);\n }\n\n return {\n request,\n cancel,\n data,\n isSlow,\n isLoading,\n error,\n };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { ComponentChildren, h } from \"preact\";\nimport { LoadingModal } from \"../modal/index.js\";\nimport { useAsync } from \"../../hooks/async.js\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\n\ntype Props = {\n children: ComponentChildren;\n disabled: boolean;\n onClick?: () => Promise<void>;\n [rest: string]: any;\n};\n\nexport function AsyncButton({ onClick, disabled, children, ...rest }: Props) {\n const { isSlow, isLoading, request, cancel } = useAsync(onClick);\n const { i18n } = useTranslationContext();\n if (isSlow) {\n return <LoadingModal onCancel={cancel} />;\n }\n if (isLoading) {\n return (\n <button class=\"button\">\n <i18n.Translate>Loading...</i18n.Translate>\n </button>\n );\n }\n\n return (\n <span {...rest}>\n <button class=\"button is-success\" onClick={request} disabled={disabled}>\n {children}\n </button>\n </span>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { createContext } from \"preact\";\nimport { useContext } from \"preact/hooks\";\n\ninterface Type {\n currency: string;\n version: string;\n}\nconst Context = createContext<Type>(null!);\n\nexport const ConfigContextProvider = Context.Provider;\nexport const useConfigContext = (): Type => useContext(Context);\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { ComponentChildren, h, VNode } from \"preact\";\nimport { InputProps, useField } from \"./useField.js\";\n\nexport interface Props<T> extends InputProps<T> {\n expand?: boolean;\n inputType?: \"text\" | \"number\";\n addonBefore?: ComponentChildren;\n addonAfter?: ComponentChildren;\n toStr?: (v?: any) => string;\n fromStr?: (s: string) => any;\n inputExtra?: any;\n children?: ComponentChildren;\n side?: ComponentChildren;\n}\n\nconst defaultToString = (f?: any): string => f || \"\";\nconst defaultFromString = (v: string): any => v as any;\n\nexport function InputWithAddon<T>({\n name,\n readonly,\n addonBefore,\n children,\n expand,\n label,\n placeholder,\n help,\n tooltip,\n inputType,\n inputExtra,\n side,\n addonAfter,\n toStr = defaultToString,\n fromStr = defaultFromString,\n}: Props<keyof T>): VNode {\n const { error, value, onChange, required } = useField<T>(name);\n\n return (\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">\n {label}\n {tooltip && (\n <span class=\"icon has-tooltip-right\" data-tooltip={tooltip}>\n <i class=\"mdi mdi-information\" />\n </span>\n )}\n </label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n <div class=\"field has-addons\">\n {addonBefore && (\n <div class=\"control\">\n <a class=\"button is-static\">{addonBefore}</a>\n </div>\n )}\n <p\n class={`control${expand ? \" is-expanded\" : \"\"}${\n required ? \" has-icons-right\" : \"\"\n }`}\n >\n <input\n {...(inputExtra || {})}\n class={error ? \"input is-danger\" : \"input\"}\n type={inputType}\n placeholder={placeholder}\n readonly={readonly}\n disabled={readonly}\n name={String(name)}\n value={toStr(value)}\n onChange={(e): void => onChange(fromStr(e.currentTarget.value))}\n />\n {required && (\n <span class=\"icon has-text-danger is-right\">\n <i class=\"mdi mdi-alert\" />\n </span>\n )}\n {help}\n {children}\n </p>\n {addonAfter && (\n <div class=\"control\">\n <a class=\"button is-static\">{addonAfter}</a>\n </div>\n )}\n </div>\n {error && <p class=\"help is-danger\">{error}</p>}\n </div>\n {side}\n </div>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { ComponentChildren, h, VNode } from \"preact\";\nimport { useConfigContext } from \"../../context/config.js\";\nimport { Amount } from \"../../declaration.js\";\nimport { InputWithAddon } from \"./InputWithAddon.js\";\nimport { InputProps } from \"./useField.js\";\n\nexport interface Props<T> extends InputProps<T> {\n expand?: boolean;\n addonAfter?: ComponentChildren;\n children?: ComponentChildren;\n side?: ComponentChildren;\n}\n\nexport function InputCurrency<T>({\n name,\n readonly,\n label,\n placeholder,\n help,\n tooltip,\n expand,\n addonAfter,\n children,\n side,\n}: Props<keyof T>): VNode {\n const config = useConfigContext();\n return (\n <InputWithAddon<T>\n name={name}\n readonly={readonly}\n addonBefore={config.currency}\n side={side}\n label={label}\n placeholder={placeholder}\n help={help}\n tooltip={tooltip}\n addonAfter={addonAfter}\n inputType=\"number\"\n expand={expand}\n toStr={(v?: Amount) => v?.split(\":\")[1] || \"\"}\n fromStr={(v: string) => (!v ? undefined : `${config.currency}:${v}`)}\n inputExtra={{ min: 0 }}\n >\n {children}\n </InputWithAddon>\n );\n}\n", "export default function toInteger(dirtyNumber) {\n if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) {\n return NaN;\n }\n\n var number = Number(dirtyNumber);\n\n if (isNaN(number)) {\n return number;\n }\n\n return number < 0 ? Math.ceil(number) : Math.floor(number);\n}", "export default function requiredArgs(required, args) {\n if (args.length < required) {\n throw new TypeError(required + ' argument' + (required > 1 ? 's' : '') + ' required, but only ' + args.length + ' present');\n }\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @param {Date|Number} argument - the value to convert\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\n\nexport default function toDate(argument) {\n requiredArgs(1, arguments);\n var argStr = Object.prototype.toString.call(argument); // Clone the date\n\n if (argument instanceof Date || _typeof(argument) === 'object' && argStr === '[object Date]') {\n // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n return new Date(argument.getTime());\n } else if (typeof argument === 'number' || argStr === '[object Number]') {\n return new Date(argument);\n } else {\n if ((typeof argument === 'string' || argStr === '[object String]') && typeof console !== 'undefined') {\n // eslint-disable-next-line no-console\n console.warn(\"Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#string-arguments\"); // eslint-disable-next-line no-console\n\n console.warn(new Error().stack);\n }\n\n return new Date(NaN);\n }\n}", "import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addDays\n * @category Day Helpers\n * @summary Add the specified number of days to the given date.\n *\n * @description\n * Add the specified number of days to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of days to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} - the new date with the days added\n * @throws {TypeError} - 2 arguments required\n *\n * @example\n * // Add 10 days to 1 September 2014:\n * const result = addDays(new Date(2014, 8, 1), 10)\n * //=> Thu Sep 11 2014 00:00:00\n */\n\nexport default function addDays(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var amount = toInteger(dirtyAmount);\n\n if (isNaN(amount)) {\n return new Date(NaN);\n }\n\n if (!amount) {\n // If 0 days, no-op to avoid changing times in the hour before end of DST\n return date;\n }\n\n date.setDate(date.getDate() + amount);\n return date;\n}", "import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addMonths\n * @category Month Helpers\n * @summary Add the specified number of months to the given date.\n *\n * @description\n * Add the specified number of months to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of months to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the months added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 5 months to 1 September 2014:\n * const result = addMonths(new Date(2014, 8, 1), 5)\n * //=> Sun Feb 01 2015 00:00:00\n */\n\nexport default function addMonths(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var amount = toInteger(dirtyAmount);\n\n if (isNaN(amount)) {\n return new Date(NaN);\n }\n\n if (!amount) {\n // If 0 months, no-op to avoid changing times in the hour before end of DST\n return date;\n }\n\n var dayOfMonth = date.getDate(); // The JS Date object supports date math by accepting out-of-bounds values for\n // month, day, etc. For example, new Date(2020, 0, 0) returns 31 Dec 2019 and\n // new Date(2020, 13, 1) returns 1 Feb 2021. This is *almost* the behavior we\n // want except that dates will wrap around the end of a month, meaning that\n // new Date(2020, 13, 31) will return 3 Mar 2021 not 28 Feb 2021 as desired. So\n // we'll default to the end of the desired month by adding 1 to the desired\n // month and using a date of 0 to back up one day to the end of the desired\n // month.\n\n var endOfDesiredMonth = new Date(date.getTime());\n endOfDesiredMonth.setMonth(date.getMonth() + amount + 1, 0);\n var daysInMonth = endOfDesiredMonth.getDate();\n\n if (dayOfMonth >= daysInMonth) {\n // If we're already at the end of the month, then this is the correct date\n // and we're done.\n return endOfDesiredMonth;\n } else {\n // Otherwise, we now know that setting the original day-of-month value won't\n // cause an overflow, so set the desired day-of-month. Note that we can't\n // just set the date of `endOfDesiredMonth` because that object may have had\n // its time changed in the unusual case where where a DST transition was on\n // the last day of the month and its local time was in the hour skipped or\n // repeated next to a DST transition. So we use `date` instead which is\n // guaranteed to still have the original time.\n date.setFullYear(endOfDesiredMonth.getFullYear(), endOfDesiredMonth.getMonth(), dayOfMonth);\n return date;\n }\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nimport addDays from \"../addDays/index.js\";\nimport addMonths from \"../addMonths/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n\n/**\n * @name add\n * @category Common Helpers\n * @summary Add the specified years, months, weeks, days, hours, minutes and seconds to the given date.\n *\n * @description\n * Add the specified years, months, weeks, days, hours, minutes and seconds to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Duration} duration - the object with years, months, weeks, days, hours, minutes and seconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n *\n * | Key | Description |\n * |----------------|------------------------------------|\n * | years | Amount of years to be added |\n * | months | Amount of months to be added |\n * | weeks | Amount of weeks to be added |\n * | days | Amount of days to be added |\n * | hours | Amount of hours to be added |\n * | minutes | Amount of minutes to be added |\n * | seconds | Amount of seconds to be added |\n *\n * All values default to 0\n *\n * @returns {Date} the new date with the seconds added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add the following duration to 1 September 2014, 10:19:50\n * const result = add(new Date(2014, 8, 1, 10, 19, 50), {\n * years: 2,\n * months: 9,\n * weeks: 1,\n * days: 7,\n * hours: 5,\n * minutes: 9,\n * seconds: 30,\n * })\n * //=> Thu Jun 15 2017 15:29:20\n */\nexport default function add(dirtyDate, duration) {\n requiredArgs(2, arguments);\n if (!duration || _typeof(duration) !== 'object') return new Date(NaN);\n var years = duration.years ? toInteger(duration.years) : 0;\n var months = duration.months ? toInteger(duration.months) : 0;\n var weeks = duration.weeks ? toInteger(duration.weeks) : 0;\n var days = duration.days ? toInteger(duration.days) : 0;\n var hours = duration.hours ? toInteger(duration.hours) : 0;\n var minutes = duration.minutes ? toInteger(duration.minutes) : 0;\n var seconds = duration.seconds ? toInteger(duration.seconds) : 0; // Add years and months\n\n var date = toDate(dirtyDate);\n var dateWithMonths = months || years ? addMonths(date, months + years * 12) : date; // Add weeks and days\n\n var dateWithDays = days || weeks ? addDays(dateWithMonths, days + weeks * 7) : dateWithMonths; // Add days, hours, minutes and seconds\n\n var minutesToAdd = minutes + hours * 60;\n var secondsToAdd = seconds + minutesToAdd * 60;\n var msToAdd = secondsToAdd * 1000;\n var finalDate = new Date(dateWithDays.getTime() + msToAdd);\n return finalDate;\n}", "import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addMilliseconds\n * @category Millisecond Helpers\n * @summary Add the specified number of milliseconds to the given date.\n *\n * @description\n * Add the specified number of milliseconds to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the milliseconds added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 750 milliseconds to 10 July 2014 12:45:30.000:\n * const result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:30.750\n */\n\nexport default function addMilliseconds(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var timestamp = toDate(dirtyDate).getTime();\n var amount = toInteger(dirtyAmount);\n return new Date(timestamp + amount);\n}", "var defaultOptions = {};\nexport function getDefaultOptions() {\n return defaultOptions;\n}\nexport function setDefaultOptions(newOptions) {\n defaultOptions = newOptions;\n}", "/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport default function getTimezoneOffsetInMilliseconds(date) {\n var utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()));\n utcDate.setUTCFullYear(date.getFullYear());\n return date.getTime() - utcDate.getTime();\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfDay\n * @category Day Helpers\n * @summary Return the start of a day for the given date.\n *\n * @description\n * Return the start of a day for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a day\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a day for 2 September 2014 11:55:00:\n * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 00:00:00\n */\n\nexport default function startOfDay(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n date.setHours(0, 0, 0, 0);\n return date;\n}", "import getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport startOfDay from \"../startOfDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_DAY = 86400000;\n/**\n * @name differenceInCalendarDays\n * @category Day Helpers\n * @summary Get the number of calendar days between the given dates.\n *\n * @description\n * Get the number of calendar days between the given dates. This means that the times are removed\n * from the dates and then the difference in days is calculated.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar days\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInCalendarDays(\n * new Date(2012, 6, 2, 0, 0),\n * new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 366\n * // How many calendar days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInCalendarDays(\n * new Date(2011, 6, 3, 0, 1),\n * new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 1\n */\n\nexport default function differenceInCalendarDays(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var startOfDayLeft = startOfDay(dirtyDateLeft);\n var startOfDayRight = startOfDay(dirtyDateRight);\n var timestampLeft = startOfDayLeft.getTime() - getTimezoneOffsetInMilliseconds(startOfDayLeft);\n var timestampRight = startOfDayRight.getTime() - getTimezoneOffsetInMilliseconds(startOfDayRight); // Round the number of days to the nearest integer\n // because the number of milliseconds in a day is not constant\n // (e.g. it's different in the day of the daylight saving time clock shift)\n\n return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_DAY);\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name compareAsc\n * @category Common Helpers\n * @summary Compare the two dates and return -1, 0 or 1.\n *\n * @description\n * Compare the two dates and return 1 if the first date is after the second,\n * -1 if the first date is before the second or 0 if dates are equal.\n *\n * @param {Date|Number} dateLeft - the first date to compare\n * @param {Date|Number} dateRight - the second date to compare\n * @returns {Number} the result of the comparison\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Compare 11 February 1987 and 10 July 1989:\n * const result = compareAsc(new Date(1987, 1, 11), new Date(1989, 6, 10))\n * //=> -1\n *\n * @example\n * // Sort the array of dates:\n * const result = [\n * new Date(1995, 6, 2),\n * new Date(1987, 1, 11),\n * new Date(1989, 6, 10)\n * ].sort(compareAsc)\n * //=> [\n * // Wed Feb 11 1987 00:00:00,\n * // Mon Jul 10 1989 00:00:00,\n * // Sun Jul 02 1995 00:00:00\n * // ]\n */\n\nexport default function compareAsc(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n var diff = dateLeft.getTime() - dateRight.getTime();\n\n if (diff < 0) {\n return -1;\n } else if (diff > 0) {\n return 1; // Return 0 if diff is 0; return NaN if diff is NaN\n } else {\n return diff;\n }\n}", "/**\n * Days in 1 week.\n *\n * @name daysInWeek\n * @constant\n * @type {number}\n * @default\n */\nexport var daysInWeek = 7;\n/**\n * Days in 1 year\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occures every 4 years, except for years that are divisable by 100 and not divisable by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n *\n * @name daysInYear\n * @constant\n * @type {number}\n * @default\n */\n\nexport var daysInYear = 365.2425;\n/**\n * Maximum allowed time.\n *\n * @name maxTime\n * @constant\n * @type {number}\n * @default\n */\n\nexport var maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n/**\n * Milliseconds in 1 minute\n *\n * @name millisecondsInMinute\n * @constant\n * @type {number}\n * @default\n */\n\nexport var millisecondsInMinute = 60000;\n/**\n * Milliseconds in 1 hour\n *\n * @name millisecondsInHour\n * @constant\n * @type {number}\n * @default\n */\n\nexport var millisecondsInHour = 3600000;\n/**\n * Milliseconds in 1 second\n *\n * @name millisecondsInSecond\n * @constant\n * @type {number}\n * @default\n */\n\nexport var millisecondsInSecond = 1000;\n/**\n * Minimum allowed time.\n *\n * @name minTime\n * @constant\n * @type {number}\n * @default\n */\n\nexport var minTime = -maxTime;\n/**\n * Minutes in 1 hour\n *\n * @name minutesInHour\n * @constant\n * @type {number}\n * @default\n */\n\nexport var minutesInHour = 60;\n/**\n * Months in 1 quarter\n *\n * @name monthsInQuarter\n * @constant\n * @type {number}\n * @default\n */\n\nexport var monthsInQuarter = 3;\n/**\n * Months in 1 year\n *\n * @name monthsInYear\n * @constant\n * @type {number}\n * @default\n */\n\nexport var monthsInYear = 12;\n/**\n * Quarters in 1 year\n *\n * @name quartersInYear\n * @constant\n * @type {number}\n * @default\n */\n\nexport var quartersInYear = 4;\n/**\n * Seconds in 1 hour\n *\n * @name secondsInHour\n * @constant\n * @type {number}\n * @default\n */\n\nexport var secondsInHour = 3600;\n/**\n * Seconds in 1 minute\n *\n * @name secondsInMinute\n * @constant\n * @type {number}\n * @default\n */\n\nexport var secondsInMinute = 60;\n/**\n * Seconds in 1 day\n *\n * @name secondsInDay\n * @constant\n * @type {number}\n * @default\n */\n\nexport var secondsInDay = secondsInHour * 24;\n/**\n * Seconds in 1 week\n *\n * @name secondsInWeek\n * @constant\n * @type {number}\n * @default\n */\n\nexport var secondsInWeek = secondsInDay * 7;\n/**\n * Seconds in 1 year\n *\n * @name secondsInYear\n * @constant\n * @type {number}\n * @default\n */\n\nexport var secondsInYear = secondsInDay * daysInYear;\n/**\n * Seconds in 1 month\n *\n * @name secondsInMonth\n * @constant\n * @type {number}\n * @default\n */\n\nexport var secondsInMonth = secondsInYear / 12;\n/**\n * Seconds in 1 quarter\n *\n * @name secondsInQuarter\n * @constant\n * @type {number}\n * @default\n */\n\nexport var secondsInQuarter = secondsInMonth * 3;", "function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * @param {*} value - the value to check\n * @returns {boolean} true if the given value is a date\n * @throws {TypeError} 1 arguments required\n *\n * @example\n * // For a valid date:\n * const result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * const result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * const result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * const result = isDate({})\n * //=> false\n */\n\nexport default function isDate(value) {\n requiredArgs(1, arguments);\n return value instanceof Date || _typeof(value) === 'object' && Object.prototype.toString.call(value) === '[object Date]';\n}", "import isDate from \"../isDate/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @param {*} date - the date to check\n * @returns {Boolean} the date is valid\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // For the valid date:\n * const result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertable into a date:\n * const result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isValid(new Date(''))\n * //=> false\n */\n\nexport default function isValid(dirtyDate) {\n requiredArgs(1, arguments);\n\n if (!isDate(dirtyDate) && typeof dirtyDate !== 'number') {\n return false;\n }\n\n var date = toDate(dirtyDate);\n return !isNaN(Number(date));\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInCalendarMonths\n * @category Month Helpers\n * @summary Get the number of calendar months between the given dates.\n *\n * @description\n * Get the number of calendar months between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar months\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar months are between 31 January 2014 and 1 September 2014?\n * const result = differenceInCalendarMonths(\n * new Date(2014, 8, 1),\n * new Date(2014, 0, 31)\n * )\n * //=> 8\n */\n\nexport default function differenceInCalendarMonths(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n var yearDiff = dateLeft.getFullYear() - dateRight.getFullYear();\n var monthDiff = dateLeft.getMonth() - dateRight.getMonth();\n return yearDiff * 12 + monthDiff;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInCalendarYears\n * @category Year Helpers\n * @summary Get the number of calendar years between the given dates.\n *\n * @description\n * Get the number of calendar years between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar years\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar years are between 31 December 2013 and 11 February 2015?\n * const result = differenceInCalendarYears(\n * new Date(2015, 1, 11),\n * new Date(2013, 11, 31)\n * )\n * //=> 2\n */\n\nexport default function differenceInCalendarYears(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n return dateLeft.getFullYear() - dateRight.getFullYear();\n}", "import toDate from \"../toDate/index.js\";\nimport differenceInCalendarDays from \"../differenceInCalendarDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\"; // Like `compareAsc` but uses local time not UTC, which is needed\n// for accurate equality comparisons of UTC timestamps that end up\n// having the same representation in local time, e.g. one hour before\n// DST ends vs. the instant that DST ends.\n\nfunction compareLocalAsc(dateLeft, dateRight) {\n var diff = dateLeft.getFullYear() - dateRight.getFullYear() || dateLeft.getMonth() - dateRight.getMonth() || dateLeft.getDate() - dateRight.getDate() || dateLeft.getHours() - dateRight.getHours() || dateLeft.getMinutes() - dateRight.getMinutes() || dateLeft.getSeconds() - dateRight.getSeconds() || dateLeft.getMilliseconds() - dateRight.getMilliseconds();\n\n if (diff < 0) {\n return -1;\n } else if (diff > 0) {\n return 1; // Return 0 if diff is 0; return NaN if diff is NaN\n } else {\n return diff;\n }\n}\n/**\n * @name differenceInDays\n * @category Day Helpers\n * @summary Get the number of full days between the given dates.\n *\n * @description\n * Get the number of full day periods between two dates. Fractional days are\n * truncated towards zero.\n *\n * One \"full day\" is the distance between a local time in one day to the same\n * local time on the next or previous day. A full day can sometimes be less than\n * or more than 24 hours if a daylight savings change happens between two dates.\n *\n * To ignore DST and only measure exact 24-hour periods, use this instead:\n * `Math.floor(differenceInHours(dateLeft, dateRight)/24)|0`.\n *\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full days according to the local timezone\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInDays(\n * new Date(2012, 6, 2, 0, 0),\n * new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 365\n * // How many full days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInDays(\n * new Date(2011, 6, 3, 0, 1),\n * new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 0\n * // How many full days are between\n * // 1 March 2020 0:00 and 1 June 2020 0:00 ?\n * // Note: because local time is used, the\n * // result will always be 92 days, even in\n * // time zones where DST starts and the\n * // period has only 92*24-1 hours.\n * const result = differenceInDays(\n * new Date(2020, 5, 1),\n * new Date(2020, 2, 1)\n * )\n//=> 92\n */\n\n\nexport default function differenceInDays(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n var sign = compareLocalAsc(dateLeft, dateRight);\n var difference = Math.abs(differenceInCalendarDays(dateLeft, dateRight));\n dateLeft.setDate(dateLeft.getDate() - sign * difference); // Math.abs(diff in full days - diff in calendar days) === 1 if last calendar day is not full\n // If so, result must be decreased by 1 in absolute value\n\n var isLastDayNotFull = Number(compareLocalAsc(dateLeft, dateRight) === -sign);\n var result = sign * (difference - isLastDayNotFull); // Prevent negative zero\n\n return result === 0 ? 0 : result;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInMilliseconds\n * @category Millisecond Helpers\n * @summary Get the number of milliseconds between the given dates.\n *\n * @description\n * Get the number of milliseconds between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of milliseconds\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many milliseconds are between\n * // 2 July 2014 12:30:20.600 and 2 July 2014 12:30:21.700?\n * const result = differenceInMilliseconds(\n * new Date(2014, 6, 2, 12, 30, 21, 700),\n * new Date(2014, 6, 2, 12, 30, 20, 600)\n * )\n * //=> 1100\n */\n\nexport default function differenceInMilliseconds(dateLeft, dateRight) {\n requiredArgs(2, arguments);\n return toDate(dateLeft).getTime() - toDate(dateRight).getTime();\n}", "var roundingMap = {\n ceil: Math.ceil,\n round: Math.round,\n floor: Math.floor,\n trunc: function trunc(value) {\n return value < 0 ? Math.ceil(value) : Math.floor(value);\n } // Math.trunc is not supported by IE\n\n};\nvar defaultRoundingMethod = 'trunc';\nexport function getRoundingMethod(method) {\n return method ? roundingMap[method] : roundingMap[defaultRoundingMethod];\n}", "import { millisecondsInHour } from \"../constants/index.js\";\nimport differenceInMilliseconds from \"../differenceInMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getRoundingMethod } from \"../_lib/roundingMethods/index.js\";\n/**\n * @name differenceInHours\n * @category Hour Helpers\n * @summary Get the number of hours between the given dates.\n *\n * @description\n * Get the number of hours between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @param {Object} [options] - an object with options.\n * @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)\n * @returns {Number} the number of hours\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many hours are between 2 July 2014 06:50:00 and 2 July 2014 19:00:00?\n * const result = differenceInHours(\n * new Date(2014, 6, 2, 19, 0),\n * new Date(2014, 6, 2, 6, 50)\n * )\n * //=> 12\n */\n\nexport default function differenceInHours(dateLeft, dateRight, options) {\n requiredArgs(2, arguments);\n var diff = differenceInMilliseconds(dateLeft, dateRight) / millisecondsInHour;\n return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);\n}", "import { millisecondsInMinute } from \"../constants/index.js\";\nimport differenceInMilliseconds from \"../differenceInMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getRoundingMethod } from \"../_lib/roundingMethods/index.js\";\n/**\n * @name differenceInMinutes\n * @category Minute Helpers\n * @summary Get the number of minutes between the given dates.\n *\n * @description\n * Get the signed number of full (rounded towards 0) minutes between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @param {Object} [options] - an object with options.\n * @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)\n * @returns {Number} the number of minutes\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many minutes are between 2 July 2014 12:07:59 and 2 July 2014 12:20:00?\n * const result = differenceInMinutes(\n * new Date(2014, 6, 2, 12, 20, 0),\n * new Date(2014, 6, 2, 12, 7, 59)\n * )\n * //=> 12\n *\n * @example\n * // How many minutes are between 10:01:59 and 10:00:00\n * const result = differenceInMinutes(\n * new Date(2000, 0, 1, 10, 0, 0),\n * new Date(2000, 0, 1, 10, 1, 59)\n * )\n * //=> -1\n */\n\nexport default function differenceInMinutes(dateLeft, dateRight, options) {\n requiredArgs(2, arguments);\n var diff = differenceInMilliseconds(dateLeft, dateRight) / millisecondsInMinute;\n return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfDay\n * @category Day Helpers\n * @summary Return the end of a day for the given date.\n *\n * @description\n * Return the end of a day for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a day\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a day for 2 September 2014 11:55:00:\n * const result = endOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 23:59:59.999\n */\n\nexport default function endOfDay(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n date.setHours(23, 59, 59, 999);\n return date;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfMonth\n * @category Month Helpers\n * @summary Return the end of a month for the given date.\n *\n * @description\n * Return the end of a month for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a month for 2 September 2014 11:55:00:\n * const result = endOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 23:59:59.999\n */\n\nexport default function endOfMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var month = date.getMonth();\n date.setFullYear(date.getFullYear(), month + 1, 0);\n date.setHours(23, 59, 59, 999);\n return date;\n}", "import toDate from \"../toDate/index.js\";\nimport endOfDay from \"../endOfDay/index.js\";\nimport endOfMonth from \"../endOfMonth/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isLastDayOfMonth\n * @category Month Helpers\n * @summary Is the given date the last day of a month?\n *\n * @description\n * Is the given date the last day of a month?\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is the last day of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 28 February 2014 the last day of a month?\n * const result = isLastDayOfMonth(new Date(2014, 1, 28))\n * //=> true\n */\n\nexport default function isLastDayOfMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n return endOfDay(date).getTime() === endOfMonth(date).getTime();\n}", "import toDate from \"../toDate/index.js\";\nimport differenceInCalendarMonths from \"../differenceInCalendarMonths/index.js\";\nimport compareAsc from \"../compareAsc/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport isLastDayOfMonth from \"../isLastDayOfMonth/index.js\";\n/**\n * @name differenceInMonths\n * @category Month Helpers\n * @summary Get the number of full months between the given dates.\n *\n * @description\n * Get the number of full months between the given dates using trunc as a default rounding method.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full months\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full months are between 31 January 2014 and 1 September 2014?\n * const result = differenceInMonths(new Date(2014, 8, 1), new Date(2014, 0, 31))\n * //=> 7\n */\n\nexport default function differenceInMonths(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n var sign = compareAsc(dateLeft, dateRight);\n var difference = Math.abs(differenceInCalendarMonths(dateLeft, dateRight));\n var result; // Check for the difference of less than month\n\n if (difference < 1) {\n result = 0;\n } else {\n if (dateLeft.getMonth() === 1 && dateLeft.getDate() > 27) {\n // This will check if the date is end of Feb and assign a higher end of month date\n // to compare it with Jan\n dateLeft.setDate(30);\n }\n\n dateLeft.setMonth(dateLeft.getMonth() - sign * difference); // Math.abs(diff in full months - diff in calendar months) === 1 if last calendar month is not full\n // If so, result must be decreased by 1 in absolute value\n\n var isLastMonthNotFull = compareAsc(dateLeft, dateRight) === -sign; // Check for cases of one full calendar month\n\n if (isLastDayOfMonth(toDate(dirtyDateLeft)) && difference === 1 && compareAsc(dirtyDateLeft, dateRight) === 1) {\n isLastMonthNotFull = false;\n }\n\n result = sign * (difference - Number(isLastMonthNotFull));\n } // Prevent negative zero\n\n\n return result === 0 ? 0 : result;\n}", "import differenceInMilliseconds from \"../differenceInMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getRoundingMethod } from \"../_lib/roundingMethods/index.js\";\n/**\n * @name differenceInSeconds\n * @category Second Helpers\n * @summary Get the number of seconds between the given dates.\n *\n * @description\n * Get the number of seconds between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @param {Object} [options] - an object with options.\n * @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)\n * @returns {Number} the number of seconds\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many seconds are between\n * // 2 July 2014 12:30:07.999 and 2 July 2014 12:30:20.000?\n * const result = differenceInSeconds(\n * new Date(2014, 6, 2, 12, 30, 20, 0),\n * new Date(2014, 6, 2, 12, 30, 7, 999)\n * )\n * //=> 12\n */\n\nexport default function differenceInSeconds(dateLeft, dateRight, options) {\n requiredArgs(2, arguments);\n var diff = differenceInMilliseconds(dateLeft, dateRight) / 1000;\n return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);\n}", "import toDate from \"../toDate/index.js\";\nimport differenceInCalendarYears from \"../differenceInCalendarYears/index.js\";\nimport compareAsc from \"../compareAsc/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInYears\n * @category Year Helpers\n * @summary Get the number of full years between the given dates.\n *\n * @description\n * Get the number of full years between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full years\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full years are between 31 December 2013 and 11 February 2015?\n * const result = differenceInYears(new Date(2015, 1, 11), new Date(2013, 11, 31))\n * //=> 1\n */\n\nexport default function differenceInYears(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n var sign = compareAsc(dateLeft, dateRight);\n var difference = Math.abs(differenceInCalendarYears(dateLeft, dateRight)); // Set both dates to a valid leap year for accurate comparison when dealing\n // with leap days\n\n dateLeft.setFullYear(1584);\n dateRight.setFullYear(1584); // Math.abs(diff in full years - diff in calendar years) === 1 if last calendar year is not full\n // If so, result must be decreased by 1 in absolute value\n\n var isLastYearNotFull = compareAsc(dateLeft, dateRight) === -sign;\n var result = sign * (difference - Number(isLastYearNotFull)); // Prevent negative zero\n\n return result === 0 ? 0 : result;\n}", "import addMilliseconds from \"../addMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name subMilliseconds\n * @category Millisecond Helpers\n * @summary Subtract the specified number of milliseconds from the given date.\n *\n * @description\n * Subtract the specified number of milliseconds from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the milliseconds subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 750 milliseconds from 10 July 2014 12:45:30.000:\n * const result = subMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:29.250\n */\n\nexport default function subMilliseconds(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addMilliseconds(dirtyDate, -amount);\n}", "import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_DAY = 86400000;\nexport default function getUTCDayOfYear(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var timestamp = date.getTime();\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n var startOfYearTimestamp = date.getTime();\n var difference = timestamp - startOfYearTimestamp;\n return Math.floor(difference / MILLISECONDS_IN_DAY) + 1;\n}", "import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nexport default function startOfUTCISOWeek(dirtyDate) {\n requiredArgs(1, arguments);\n var weekStartsOn = 1;\n var date = toDate(dirtyDate);\n var day = date.getUTCDay();\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n date.setUTCDate(date.getUTCDate() - diff);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n}", "import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\";\nexport default function getUTCISOWeekYear(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var year = date.getUTCFullYear();\n var fourthOfJanuaryOfNextYear = new Date(0);\n fourthOfJanuaryOfNextYear.setUTCFullYear(year + 1, 0, 4);\n fourthOfJanuaryOfNextYear.setUTCHours(0, 0, 0, 0);\n var startOfNextYear = startOfUTCISOWeek(fourthOfJanuaryOfNextYear);\n var fourthOfJanuaryOfThisYear = new Date(0);\n fourthOfJanuaryOfThisYear.setUTCFullYear(year, 0, 4);\n fourthOfJanuaryOfThisYear.setUTCHours(0, 0, 0, 0);\n var startOfThisYear = startOfUTCISOWeek(fourthOfJanuaryOfThisYear);\n\n if (date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}", "import getUTCISOWeekYear from \"../getUTCISOWeekYear/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nexport default function startOfUTCISOWeekYear(dirtyDate) {\n requiredArgs(1, arguments);\n var year = getUTCISOWeekYear(dirtyDate);\n var fourthOfJanuary = new Date(0);\n fourthOfJanuary.setUTCFullYear(year, 0, 4);\n fourthOfJanuary.setUTCHours(0, 0, 0, 0);\n var date = startOfUTCISOWeek(fourthOfJanuary);\n return date;\n}", "import toDate from \"../../toDate/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\";\nimport startOfUTCISOWeekYear from \"../startOfUTCISOWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000;\nexport default function getUTCISOWeek(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var diff = startOfUTCISOWeek(date).getTime() - startOfUTCISOWeekYear(date).getTime(); // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n\n return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}", "import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport toInteger from \"../toInteger/index.js\";\nimport { getDefaultOptions } from \"../defaultOptions/index.js\";\nexport default function startOfUTCWeek(dirtyDate, options) {\n var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n\n requiredArgs(1, arguments);\n var defaultOptions = getDefaultOptions();\n var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n\n var date = toDate(dirtyDate);\n var day = date.getUTCDay();\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n date.setUTCDate(date.getUTCDate() - diff);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n}", "import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport toInteger from \"../toInteger/index.js\";\nimport { getDefaultOptions } from \"../defaultOptions/index.js\";\nexport default function getUTCWeekYear(dirtyDate, options) {\n var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var year = date.getUTCFullYear();\n var defaultOptions = getDefaultOptions();\n var firstWeekContainsDate = toInteger((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n }\n\n var firstWeekOfNextYear = new Date(0);\n firstWeekOfNextYear.setUTCFullYear(year + 1, 0, firstWeekContainsDate);\n firstWeekOfNextYear.setUTCHours(0, 0, 0, 0);\n var startOfNextYear = startOfUTCWeek(firstWeekOfNextYear, options);\n var firstWeekOfThisYear = new Date(0);\n firstWeekOfThisYear.setUTCFullYear(year, 0, firstWeekContainsDate);\n firstWeekOfThisYear.setUTCHours(0, 0, 0, 0);\n var startOfThisYear = startOfUTCWeek(firstWeekOfThisYear, options);\n\n if (date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}", "import getUTCWeekYear from \"../getUTCWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport toInteger from \"../toInteger/index.js\";\nimport { getDefaultOptions } from \"../defaultOptions/index.js\";\nexport default function startOfUTCWeekYear(dirtyDate, options) {\n var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n\n requiredArgs(1, arguments);\n var defaultOptions = getDefaultOptions();\n var firstWeekContainsDate = toInteger((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1);\n var year = getUTCWeekYear(dirtyDate, options);\n var firstWeek = new Date(0);\n firstWeek.setUTCFullYear(year, 0, firstWeekContainsDate);\n firstWeek.setUTCHours(0, 0, 0, 0);\n var date = startOfUTCWeek(firstWeek, options);\n return date;\n}", "import toDate from \"../../toDate/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport startOfUTCWeekYear from \"../startOfUTCWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000;\nexport default function getUTCWeek(dirtyDate, options) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var diff = startOfUTCWeek(date, options).getTime() - startOfUTCWeekYear(date, options).getTime(); // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n\n return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}", "export default function addLeadingZeros(number, targetLength) {\n var sign = number < 0 ? '-' : '';\n var output = Math.abs(number).toString();\n\n while (output.length < targetLength) {\n output = '0' + output;\n }\n\n return sign + output;\n}", "import addLeadingZeros from \"../../addLeadingZeros/index.js\";\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | |\n * | d | Day of month | D | |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | m | Minute | M | Month |\n * | s | Second | S | Fraction of second |\n * | y | Year (abs) | Y | |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n */\n\nvar formatters = {\n // Year\n y: function y(date, token) {\n // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens\n // | Year | y | yy | yyy | yyyy | yyyyy |\n // |----------|-------|----|-------|-------|-------|\n // | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n // | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n // | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n var signedYear = date.getUTCFullYear(); // Returns 1 for 1 BC (which is year 0 in JavaScript)\n\n var year = signedYear > 0 ? signedYear : 1 - signedYear;\n return addLeadingZeros(token === 'yy' ? year % 100 : year, token.length);\n },\n // Month\n M: function M(date, token) {\n var month = date.getUTCMonth();\n return token === 'M' ? String(month + 1) : addLeadingZeros(month + 1, 2);\n },\n // Day of the month\n d: function d(date, token) {\n return addLeadingZeros(date.getUTCDate(), token.length);\n },\n // AM or PM\n a: function a(date, token) {\n var dayPeriodEnumValue = date.getUTCHours() / 12 >= 1 ? 'pm' : 'am';\n\n switch (token) {\n case 'a':\n case 'aa':\n return dayPeriodEnumValue.toUpperCase();\n\n case 'aaa':\n return dayPeriodEnumValue;\n\n case 'aaaaa':\n return dayPeriodEnumValue[0];\n\n case 'aaaa':\n default:\n return dayPeriodEnumValue === 'am' ? 'a.m.' : 'p.m.';\n }\n },\n // Hour [1-12]\n h: function h(date, token) {\n return addLeadingZeros(date.getUTCHours() % 12 || 12, token.length);\n },\n // Hour [0-23]\n H: function H(date, token) {\n return addLeadingZeros(date.getUTCHours(), token.length);\n },\n // Minute\n m: function m(date, token) {\n return addLeadingZeros(date.getUTCMinutes(), token.length);\n },\n // Second\n s: function s(date, token) {\n return addLeadingZeros(date.getUTCSeconds(), token.length);\n },\n // Fraction of second\n S: function S(date, token) {\n var numberOfDigits = token.length;\n var milliseconds = date.getUTCMilliseconds();\n var fractionalSeconds = Math.floor(milliseconds * Math.pow(10, numberOfDigits - 3));\n return addLeadingZeros(fractionalSeconds, token.length);\n }\n};\nexport default formatters;", "import getUTCDayOfYear from \"../../../_lib/getUTCDayOfYear/index.js\";\nimport getUTCISOWeek from \"../../../_lib/getUTCISOWeek/index.js\";\nimport getUTCISOWeekYear from \"../../../_lib/getUTCISOWeekYear/index.js\";\nimport getUTCWeek from \"../../../_lib/getUTCWeek/index.js\";\nimport getUTCWeekYear from \"../../../_lib/getUTCWeekYear/index.js\";\nimport addLeadingZeros from \"../../addLeadingZeros/index.js\";\nimport lightFormatters from \"../lightFormatters/index.js\";\nvar dayPeriodEnum = {\n am: 'am',\n pm: 'pm',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n};\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O | Timezone (GMT) |\n * | p! | Long localized time | P! | Long localized date |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\nvar formatters = {\n // Era\n G: function G(date, token, localize) {\n var era = date.getUTCFullYear() > 0 ? 1 : 0;\n\n switch (token) {\n // AD, BC\n case 'G':\n case 'GG':\n case 'GGG':\n return localize.era(era, {\n width: 'abbreviated'\n });\n // A, B\n\n case 'GGGGG':\n return localize.era(era, {\n width: 'narrow'\n });\n // Anno Domini, Before Christ\n\n case 'GGGG':\n default:\n return localize.era(era, {\n width: 'wide'\n });\n }\n },\n // Year\n y: function y(date, token, localize) {\n // Ordinal number\n if (token === 'yo') {\n var signedYear = date.getUTCFullYear(); // Returns 1 for 1 BC (which is year 0 in JavaScript)\n\n var year = signedYear > 0 ? signedYear : 1 - signedYear;\n return localize.ordinalNumber(year, {\n unit: 'year'\n });\n }\n\n return lightFormatters.y(date, token);\n },\n // Local week-numbering year\n Y: function Y(date, token, localize, options) {\n var signedWeekYear = getUTCWeekYear(date, options); // Returns 1 for 1 BC (which is year 0 in JavaScript)\n\n var weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear; // Two digit year\n\n if (token === 'YY') {\n var twoDigitYear = weekYear % 100;\n return addLeadingZeros(twoDigitYear, 2);\n } // Ordinal number\n\n\n if (token === 'Yo') {\n return localize.ordinalNumber(weekYear, {\n unit: 'year'\n });\n } // Padding\n\n\n return addLeadingZeros(weekYear, token.length);\n },\n // ISO week-numbering year\n R: function R(date, token) {\n var isoWeekYear = getUTCISOWeekYear(date); // Padding\n\n return addLeadingZeros(isoWeekYear, token.length);\n },\n // Extended year. This is a single number designating the year of this calendar system.\n // The main difference between `y` and `u` localizers are B.C. years:\n // | Year | `y` | `u` |\n // |------|-----|-----|\n // | AC 1 | 1 | 1 |\n // | BC 1 | 1 | 0 |\n // | BC 2 | 2 | -1 |\n // Also `yy` always returns the last two digits of a year,\n // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n u: function u(date, token) {\n var year = date.getUTCFullYear();\n return addLeadingZeros(year, token.length);\n },\n // Quarter\n Q: function Q(date, token, localize) {\n var quarter = Math.ceil((date.getUTCMonth() + 1) / 3);\n\n switch (token) {\n // 1, 2, 3, 4\n case 'Q':\n return String(quarter);\n // 01, 02, 03, 04\n\n case 'QQ':\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n\n case 'Qo':\n return localize.ordinalNumber(quarter, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'QQQ':\n return localize.quarter(quarter, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'QQQQQ':\n return localize.quarter(quarter, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'QQQQ':\n default:\n return localize.quarter(quarter, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Stand-alone quarter\n q: function q(date, token, localize) {\n var quarter = Math.ceil((date.getUTCMonth() + 1) / 3);\n\n switch (token) {\n // 1, 2, 3, 4\n case 'q':\n return String(quarter);\n // 01, 02, 03, 04\n\n case 'qq':\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n\n case 'qo':\n return localize.ordinalNumber(quarter, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'qqq':\n return localize.quarter(quarter, {\n width: 'abbreviated',\n context: 'standalone'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'qqqqq':\n return localize.quarter(quarter, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'qqqq':\n default:\n return localize.quarter(quarter, {\n width: 'wide',\n context: 'standalone'\n });\n }\n },\n // Month\n M: function M(date, token, localize) {\n var month = date.getUTCMonth();\n\n switch (token) {\n case 'M':\n case 'MM':\n return lightFormatters.M(date, token);\n // 1st, 2nd, ..., 12th\n\n case 'Mo':\n return localize.ordinalNumber(month + 1, {\n unit: 'month'\n });\n // Jan, Feb, ..., Dec\n\n case 'MMM':\n return localize.month(month, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // J, F, ..., D\n\n case 'MMMMM':\n return localize.month(month, {\n width: 'narrow',\n context: 'formatting'\n });\n // January, February, ..., December\n\n case 'MMMM':\n default:\n return localize.month(month, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Stand-alone month\n L: function L(date, token, localize) {\n var month = date.getUTCMonth();\n\n switch (token) {\n // 1, 2, ..., 12\n case 'L':\n return String(month + 1);\n // 01, 02, ..., 12\n\n case 'LL':\n return addLeadingZeros(month + 1, 2);\n // 1st, 2nd, ..., 12th\n\n case 'Lo':\n return localize.ordinalNumber(month + 1, {\n unit: 'month'\n });\n // Jan, Feb, ..., Dec\n\n case 'LLL':\n return localize.month(month, {\n width: 'abbreviated',\n context: 'standalone'\n });\n // J, F, ..., D\n\n case 'LLLLL':\n return localize.month(month, {\n width: 'narrow',\n context: 'standalone'\n });\n // January, February, ..., December\n\n case 'LLLL':\n default:\n return localize.month(month, {\n width: 'wide',\n context: 'standalone'\n });\n }\n },\n // Local week of year\n w: function w(date, token, localize, options) {\n var week = getUTCWeek(date, options);\n\n if (token === 'wo') {\n return localize.ordinalNumber(week, {\n unit: 'week'\n });\n }\n\n return addLeadingZeros(week, token.length);\n },\n // ISO week of year\n I: function I(date, token, localize) {\n var isoWeek = getUTCISOWeek(date);\n\n if (token === 'Io') {\n return localize.ordinalNumber(isoWeek, {\n unit: 'week'\n });\n }\n\n return addLeadingZeros(isoWeek, token.length);\n },\n // Day of the month\n d: function d(date, token, localize) {\n if (token === 'do') {\n return localize.ordinalNumber(date.getUTCDate(), {\n unit: 'date'\n });\n }\n\n return lightFormatters.d(date, token);\n },\n // Day of year\n D: function D(date, token, localize) {\n var dayOfYear = getUTCDayOfYear(date);\n\n if (token === 'Do') {\n return localize.ordinalNumber(dayOfYear, {\n unit: 'dayOfYear'\n });\n }\n\n return addLeadingZeros(dayOfYear, token.length);\n },\n // Day of week\n E: function E(date, token, localize) {\n var dayOfWeek = date.getUTCDay();\n\n switch (token) {\n // Tue\n case 'E':\n case 'EE':\n case 'EEE':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // T\n\n case 'EEEEE':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'EEEEEE':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n });\n // Tuesday\n\n case 'EEEE':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Local day of week\n e: function e(date, token, localize, options) {\n var dayOfWeek = date.getUTCDay();\n var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n\n switch (token) {\n // Numerical value (Nth day of week with current locale or weekStartsOn)\n case 'e':\n return String(localDayOfWeek);\n // Padded numerical value\n\n case 'ee':\n return addLeadingZeros(localDayOfWeek, 2);\n // 1st, 2nd, ..., 7th\n\n case 'eo':\n return localize.ordinalNumber(localDayOfWeek, {\n unit: 'day'\n });\n\n case 'eee':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // T\n\n case 'eeeee':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'eeeeee':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n });\n // Tuesday\n\n case 'eeee':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Stand-alone local day of week\n c: function c(date, token, localize, options) {\n var dayOfWeek = date.getUTCDay();\n var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n\n switch (token) {\n // Numerical value (same as in `e`)\n case 'c':\n return String(localDayOfWeek);\n // Padded numerical value\n\n case 'cc':\n return addLeadingZeros(localDayOfWeek, token.length);\n // 1st, 2nd, ..., 7th\n\n case 'co':\n return localize.ordinalNumber(localDayOfWeek, {\n unit: 'day'\n });\n\n case 'ccc':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'standalone'\n });\n // T\n\n case 'ccccc':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tu\n\n case 'cccccc':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'standalone'\n });\n // Tuesday\n\n case 'cccc':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'standalone'\n });\n }\n },\n // ISO day of week\n i: function i(date, token, localize) {\n var dayOfWeek = date.getUTCDay();\n var isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;\n\n switch (token) {\n // 2\n case 'i':\n return String(isoDayOfWeek);\n // 02\n\n case 'ii':\n return addLeadingZeros(isoDayOfWeek, token.length);\n // 2nd\n\n case 'io':\n return localize.ordinalNumber(isoDayOfWeek, {\n unit: 'day'\n });\n // Tue\n\n case 'iii':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // T\n\n case 'iiiii':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'iiiiii':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n });\n // Tuesday\n\n case 'iiii':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // AM or PM\n a: function a(date, token, localize) {\n var hours = date.getUTCHours();\n var dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am';\n\n switch (token) {\n case 'a':\n case 'aa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n });\n\n case 'aaa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n }).toLowerCase();\n\n case 'aaaaa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'aaaa':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // AM, PM, midnight, noon\n b: function b(date, token, localize) {\n var hours = date.getUTCHours();\n var dayPeriodEnumValue;\n\n if (hours === 12) {\n dayPeriodEnumValue = dayPeriodEnum.noon;\n } else if (hours === 0) {\n dayPeriodEnumValue = dayPeriodEnum.midnight;\n } else {\n dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am';\n }\n\n switch (token) {\n case 'b':\n case 'bb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n });\n\n case 'bbb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n }).toLowerCase();\n\n case 'bbbbb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'bbbb':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // in the morning, in the afternoon, in the evening, at night\n B: function B(date, token, localize) {\n var hours = date.getUTCHours();\n var dayPeriodEnumValue;\n\n if (hours >= 17) {\n dayPeriodEnumValue = dayPeriodEnum.evening;\n } else if (hours >= 12) {\n dayPeriodEnumValue = dayPeriodEnum.afternoon;\n } else if (hours >= 4) {\n dayPeriodEnumValue = dayPeriodEnum.morning;\n } else {\n dayPeriodEnumValue = dayPeriodEnum.night;\n }\n\n switch (token) {\n case 'B':\n case 'BB':\n case 'BBB':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n });\n\n case 'BBBBB':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'BBBB':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Hour [1-12]\n h: function h(date, token, localize) {\n if (token === 'ho') {\n var hours = date.getUTCHours() % 12;\n if (hours === 0) hours = 12;\n return localize.ordinalNumber(hours, {\n unit: 'hour'\n });\n }\n\n return lightFormatters.h(date, token);\n },\n // Hour [0-23]\n H: function H(date, token, localize) {\n if (token === 'Ho') {\n return localize.ordinalNumber(date.getUTCHours(), {\n unit: 'hour'\n });\n }\n\n return lightFormatters.H(date, token);\n },\n // Hour [0-11]\n K: function K(date, token, localize) {\n var hours = date.getUTCHours() % 12;\n\n if (token === 'Ko') {\n return localize.ordinalNumber(hours, {\n unit: 'hour'\n });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n // Hour [1-24]\n k: function k(date, token, localize) {\n var hours = date.getUTCHours();\n if (hours === 0) hours = 24;\n\n if (token === 'ko') {\n return localize.ordinalNumber(hours, {\n unit: 'hour'\n });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n // Minute\n m: function m(date, token, localize) {\n if (token === 'mo') {\n return localize.ordinalNumber(date.getUTCMinutes(), {\n unit: 'minute'\n });\n }\n\n return lightFormatters.m(date, token);\n },\n // Second\n s: function s(date, token, localize) {\n if (token === 'so') {\n return localize.ordinalNumber(date.getUTCSeconds(), {\n unit: 'second'\n });\n }\n\n return lightFormatters.s(date, token);\n },\n // Fraction of second\n S: function S(date, token) {\n return lightFormatters.S(date, token);\n },\n // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n X: function X(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n if (timezoneOffset === 0) {\n return 'Z';\n }\n\n switch (token) {\n // Hours and optional minutes\n case 'X':\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XX`\n\n case 'XXXX':\n case 'XX':\n // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XXX`\n\n case 'XXXXX':\n case 'XXX': // Hours and minutes with `:` delimiter\n\n default:\n return formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n x: function x(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n switch (token) {\n // Hours and optional minutes\n case 'x':\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xx`\n\n case 'xxxx':\n case 'xx':\n // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xxx`\n\n case 'xxxxx':\n case 'xxx': // Hours and minutes with `:` delimiter\n\n default:\n return formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (GMT)\n O: function O(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n switch (token) {\n // Short\n case 'O':\n case 'OO':\n case 'OOO':\n return 'GMT' + formatTimezoneShort(timezoneOffset, ':');\n // Long\n\n case 'OOOO':\n default:\n return 'GMT' + formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (specific non-location)\n z: function z(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n switch (token) {\n // Short\n case 'z':\n case 'zz':\n case 'zzz':\n return 'GMT' + formatTimezoneShort(timezoneOffset, ':');\n // Long\n\n case 'zzzz':\n default:\n return 'GMT' + formatTimezone(timezoneOffset, ':');\n }\n },\n // Seconds timestamp\n t: function t(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timestamp = Math.floor(originalDate.getTime() / 1000);\n return addLeadingZeros(timestamp, token.length);\n },\n // Milliseconds timestamp\n T: function T(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timestamp = originalDate.getTime();\n return addLeadingZeros(timestamp, token.length);\n }\n};\n\nfunction formatTimezoneShort(offset, dirtyDelimiter) {\n var sign = offset > 0 ? '-' : '+';\n var absOffset = Math.abs(offset);\n var hours = Math.floor(absOffset / 60);\n var minutes = absOffset % 60;\n\n if (minutes === 0) {\n return sign + String(hours);\n }\n\n var delimiter = dirtyDelimiter || '';\n return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);\n}\n\nfunction formatTimezoneWithOptionalMinutes(offset, dirtyDelimiter) {\n if (offset % 60 === 0) {\n var sign = offset > 0 ? '-' : '+';\n return sign + addLeadingZeros(Math.abs(offset) / 60, 2);\n }\n\n return formatTimezone(offset, dirtyDelimiter);\n}\n\nfunction formatTimezone(offset, dirtyDelimiter) {\n var delimiter = dirtyDelimiter || '';\n var sign = offset > 0 ? '-' : '+';\n var absOffset = Math.abs(offset);\n var hours = addLeadingZeros(Math.floor(absOffset / 60), 2);\n var minutes = addLeadingZeros(absOffset % 60, 2);\n return sign + hours + delimiter + minutes;\n}\n\nexport default formatters;", "var dateLongFormatter = function dateLongFormatter(pattern, formatLong) {\n switch (pattern) {\n case 'P':\n return formatLong.date({\n width: 'short'\n });\n\n case 'PP':\n return formatLong.date({\n width: 'medium'\n });\n\n case 'PPP':\n return formatLong.date({\n width: 'long'\n });\n\n case 'PPPP':\n default:\n return formatLong.date({\n width: 'full'\n });\n }\n};\n\nvar timeLongFormatter = function timeLongFormatter(pattern, formatLong) {\n switch (pattern) {\n case 'p':\n return formatLong.time({\n width: 'short'\n });\n\n case 'pp':\n return formatLong.time({\n width: 'medium'\n });\n\n case 'ppp':\n return formatLong.time({\n width: 'long'\n });\n\n case 'pppp':\n default:\n return formatLong.time({\n width: 'full'\n });\n }\n};\n\nvar dateTimeLongFormatter = function dateTimeLongFormatter(pattern, formatLong) {\n var matchResult = pattern.match(/(P+)(p+)?/) || [];\n var datePattern = matchResult[1];\n var timePattern = matchResult[2];\n\n if (!timePattern) {\n return dateLongFormatter(pattern, formatLong);\n }\n\n var dateTimeFormat;\n\n switch (datePattern) {\n case 'P':\n dateTimeFormat = formatLong.dateTime({\n width: 'short'\n });\n break;\n\n case 'PP':\n dateTimeFormat = formatLong.dateTime({\n width: 'medium'\n });\n break;\n\n case 'PPP':\n dateTimeFormat = formatLong.dateTime({\n width: 'long'\n });\n break;\n\n case 'PPPP':\n default:\n dateTimeFormat = formatLong.dateTime({\n width: 'full'\n });\n break;\n }\n\n return dateTimeFormat.replace('{{date}}', dateLongFormatter(datePattern, formatLong)).replace('{{time}}', timeLongFormatter(timePattern, formatLong));\n};\n\nvar longFormatters = {\n p: timeLongFormatter,\n P: dateTimeLongFormatter\n};\nexport default longFormatters;", "var protectedDayOfYearTokens = ['D', 'DD'];\nvar protectedWeekYearTokens = ['YY', 'YYYY'];\nexport function isProtectedDayOfYearToken(token) {\n return protectedDayOfYearTokens.indexOf(token) !== -1;\n}\nexport function isProtectedWeekYearToken(token) {\n return protectedWeekYearTokens.indexOf(token) !== -1;\n}\nexport function throwProtectedError(token, format, input) {\n if (token === 'YYYY') {\n throw new RangeError(\"Use `yyyy` instead of `YYYY` (in `\".concat(format, \"`) for formatting years to the input `\").concat(input, \"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\"));\n } else if (token === 'YY') {\n throw new RangeError(\"Use `yy` instead of `YY` (in `\".concat(format, \"`) for formatting years to the input `\").concat(input, \"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\"));\n } else if (token === 'D') {\n throw new RangeError(\"Use `d` instead of `D` (in `\".concat(format, \"`) for formatting days of the month to the input `\").concat(input, \"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\"));\n } else if (token === 'DD') {\n throw new RangeError(\"Use `dd` instead of `DD` (in `\".concat(format, \"`) for formatting days of the month to the input `\").concat(input, \"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\"));\n }\n}", "var formatDistanceLocale = {\n lessThanXSeconds: {\n one: 'less than a second',\n other: 'less than {{count}} seconds'\n },\n xSeconds: {\n one: '1 second',\n other: '{{count}} seconds'\n },\n halfAMinute: 'half a minute',\n lessThanXMinutes: {\n one: 'less than a minute',\n other: 'less than {{count}} minutes'\n },\n xMinutes: {\n one: '1 minute',\n other: '{{count}} minutes'\n },\n aboutXHours: {\n one: 'about 1 hour',\n other: 'about {{count}} hours'\n },\n xHours: {\n one: '1 hour',\n other: '{{count}} hours'\n },\n xDays: {\n one: '1 day',\n other: '{{count}} days'\n },\n aboutXWeeks: {\n one: 'about 1 week',\n other: 'about {{count}} weeks'\n },\n xWeeks: {\n one: '1 week',\n other: '{{count}} weeks'\n },\n aboutXMonths: {\n one: 'about 1 month',\n other: 'about {{count}} months'\n },\n xMonths: {\n one: '1 month',\n other: '{{count}} months'\n },\n aboutXYears: {\n one: 'about 1 year',\n other: 'about {{count}} years'\n },\n xYears: {\n one: '1 year',\n other: '{{count}} years'\n },\n overXYears: {\n one: 'over 1 year',\n other: 'over {{count}} years'\n },\n almostXYears: {\n one: 'almost 1 year',\n other: 'almost {{count}} years'\n }\n};\n\nvar formatDistance = function formatDistance(token, count, options) {\n var result;\n var tokenValue = formatDistanceLocale[token];\n\n if (typeof tokenValue === 'string') {\n result = tokenValue;\n } else if (count === 1) {\n result = tokenValue.one;\n } else {\n result = tokenValue.other.replace('{{count}}', count.toString());\n }\n\n if (options !== null && options !== void 0 && options.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return 'in ' + result;\n } else {\n return result + ' ago';\n }\n }\n\n return result;\n};\n\nexport default formatDistance;", "export default function buildFormatLongFn(args) {\n return function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // TODO: Remove String()\n var width = options.width ? String(options.width) : args.defaultWidth;\n var format = args.formats[width] || args.formats[args.defaultWidth];\n return format;\n };\n}", "import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n full: 'EEEE, MMMM do, y',\n long: 'MMMM do, y',\n medium: 'MMM d, y',\n short: 'MM/dd/yyyy'\n};\nvar timeFormats = {\n full: 'h:mm:ss a zzzz',\n long: 'h:mm:ss a z',\n medium: 'h:mm:ss a',\n short: 'h:mm a'\n};\nvar dateTimeFormats = {\n full: \"{{date}} 'at' {{time}}\",\n long: \"{{date}} 'at' {{time}}\",\n medium: '{{date}}, {{time}}',\n short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: 'full'\n }),\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: 'full'\n }),\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: 'full'\n })\n};\nexport default formatLong;", "var formatRelativeLocale = {\n lastWeek: \"'last' eeee 'at' p\",\n yesterday: \"'yesterday at' p\",\n today: \"'today at' p\",\n tomorrow: \"'tomorrow at' p\",\n nextWeek: \"eeee 'at' p\",\n other: 'P'\n};\n\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n return formatRelativeLocale[token];\n};\n\nexport default formatRelative;", "export default function buildLocalizeFn(args) {\n return function (dirtyIndex, options) {\n var context = options !== null && options !== void 0 && options.context ? String(options.context) : 'standalone';\n var valuesArray;\n\n if (context === 'formatting' && args.formattingValues) {\n var defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n var width = options !== null && options !== void 0 && options.width ? String(options.width) : defaultWidth;\n valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth];\n } else {\n var _defaultWidth = args.defaultWidth;\n\n var _width = options !== null && options !== void 0 && options.width ? String(options.width) : args.defaultWidth;\n\n valuesArray = args.values[_width] || args.values[_defaultWidth];\n }\n\n var index = args.argumentCallback ? args.argumentCallback(dirtyIndex) : dirtyIndex; // @ts-ignore: For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n\n return valuesArray[index];\n };\n}", "import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n narrow: ['B', 'A'],\n abbreviated: ['BC', 'AD'],\n wide: ['Before Christ', 'Anno Domini']\n};\nvar quarterValues = {\n narrow: ['1', '2', '3', '4'],\n abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n wide: ['1st quarter', '2nd quarter', '3rd quarter', '4th quarter']\n}; // Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\n\nvar monthValues = {\n narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n abbreviated: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n wide: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\n};\nvar dayValues = {\n narrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],\n short: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n abbreviated: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n wide: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\n};\nvar dayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mi',\n noon: 'n',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n }\n};\nvar formattingDayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mi',\n noon: 'n',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n }\n};\n\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n var number = Number(dirtyNumber); // If ordinal numbers depend on context, for example,\n // if they are different for different grammatical genders,\n // use `options.unit`.\n //\n // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n // 'day', 'hour', 'minute', 'second'.\n\n var rem100 = number % 100;\n\n if (rem100 > 20 || rem100 < 10) {\n switch (rem100 % 10) {\n case 1:\n return number + 'st';\n\n case 2:\n return number + 'nd';\n\n case 3:\n return number + 'rd';\n }\n }\n\n return number + 'th';\n};\n\nvar localize = {\n ordinalNumber: ordinalNumber,\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: 'wide'\n }),\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: 'wide',\n argumentCallback: function argumentCallback(quarter) {\n return quarter - 1;\n }\n }),\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: 'wide'\n }),\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: 'wide'\n }),\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: 'wide',\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: 'wide'\n })\n};\nexport default localize;", "export default function buildMatchFn(args) {\n return function (string) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var width = options.width;\n var matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth];\n var matchResult = string.match(matchPattern);\n\n if (!matchResult) {\n return null;\n }\n\n var matchedString = matchResult[0];\n var parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth];\n var key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, function (pattern) {\n return pattern.test(matchedString);\n }) : findKey(parsePatterns, function (pattern) {\n return pattern.test(matchedString);\n });\n var value;\n value = args.valueCallback ? args.valueCallback(key) : key;\n value = options.valueCallback ? options.valueCallback(value) : value;\n var rest = string.slice(matchedString.length);\n return {\n value: value,\n rest: rest\n };\n };\n}\n\nfunction findKey(object, predicate) {\n for (var key in object) {\n if (object.hasOwnProperty(key) && predicate(object[key])) {\n return key;\n }\n }\n\n return undefined;\n}\n\nfunction findIndex(array, predicate) {\n for (var key = 0; key < array.length; key++) {\n if (predicate(array[key])) {\n return key;\n }\n }\n\n return undefined;\n}", "export default function buildMatchPatternFn(args) {\n return function (string) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var matchResult = string.match(args.matchPattern);\n if (!matchResult) return null;\n var matchedString = matchResult[0];\n var parseResult = string.match(args.parsePattern);\n if (!parseResult) return null;\n var value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0];\n value = options.valueCallback ? options.valueCallback(value) : value;\n var rest = string.slice(matchedString.length);\n return {\n value: value,\n rest: rest\n };\n };\n}", "import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n narrow: /^(b|a)/i,\n abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n wide: /^(before christ|before common era|anno domini|common era)/i\n};\nvar parseEraPatterns = {\n any: [/^b/i, /^(a|c)/i]\n};\nvar matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](th|st|nd|rd)? quarter/i\n};\nvar parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i\n};\nvar parseMonthPatterns = {\n narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n narrow: /^[smtwf]/i,\n short: /^(su|mo|tu|we|th|fr|sa)/i,\n abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i\n};\nvar parseDayPatterns = {\n narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i\n};\nvar parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mi/i,\n noon: /^no/i,\n morning: /morning/i,\n afternoon: /afternoon/i,\n evening: /evening/i,\n night: /night/i\n }\n};\nvar match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: function valueCallback(value) {\n return parseInt(value, 10);\n }\n }),\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseEraPatterns,\n defaultParseWidth: 'any'\n }),\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: 'any',\n valueCallback: function valueCallback(index) {\n return index + 1;\n }\n }),\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: 'any'\n }),\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseDayPatterns,\n defaultParseWidth: 'any'\n }),\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: 'any',\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: 'any'\n })\n};\nexport default match;", "import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n\n/**\n * @type {Locale}\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp]{@link https://github.com/kossnocorp}\n * @author Lesha Koss [@leshakoss]{@link https://github.com/leshakoss}\n */\nvar locale = {\n code: 'en-US',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 0\n /* Sunday */\n ,\n firstWeekContainsDate: 1\n }\n};\nexport default locale;", "import defaultLocale from \"../../locale/en-US/index.js\";\nexport default defaultLocale;", "import isValid from \"../isValid/index.js\";\nimport subMilliseconds from \"../subMilliseconds/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport formatters from \"../_lib/format/formatters/index.js\";\nimport longFormatters from \"../_lib/format/longFormatters/index.js\";\nimport getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport { isProtectedDayOfYearToken, isProtectedWeekYearToken, throwProtectedError } from \"../_lib/protectedTokens/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\nimport defaultLocale from \"../_lib/defaultLocale/index.js\"; // This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\n\nvar formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g; // This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\n\nvar longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\nvar escapedStringRegExp = /^'([^]*?)'?$/;\nvar doubleQuoteRegExp = /''/g;\nvar unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n/**\n * @name format\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > \u26A0\uFE0F Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit | Pattern | Result examples | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era | G..GGG | AD, BC | |\n * | | GGGG | Anno Domini, Before Christ | 2 |\n * | | GGGGG | A, B | |\n * | Calendar year | y | 44, 1, 1900, 2017 | 5 |\n * | | yo | 44th, 1st, 0th, 17th | 5,7 |\n * | | yy | 44, 01, 00, 17 | 5 |\n * | | yyy | 044, 001, 1900, 2017 | 5 |\n * | | yyyy | 0044, 0001, 1900, 2017 | 5 |\n * | | yyyyy | ... | 3,5 |\n * | Local week-numbering year | Y | 44, 1, 1900, 2017 | 5 |\n * | | Yo | 44th, 1st, 1900th, 2017th | 5,7 |\n * | | YY | 44, 01, 00, 17 | 5,8 |\n * | | YYY | 044, 001, 1900, 2017 | 5 |\n * | | YYYY | 0044, 0001, 1900, 2017 | 5,8 |\n * | | YYYYY | ... | 3,5 |\n * | ISO week-numbering year | R | -43, 0, 1, 1900, 2017 | 5,7 |\n * | | RR | -43, 00, 01, 1900, 2017 | 5,7 |\n * | | RRR | -043, 000, 001, 1900, 2017 | 5,7 |\n * | | RRRR | -0043, 0000, 0001, 1900, 2017 | 5,7 |\n * | | RRRRR | ... | 3,5,7 |\n * | Extended year | u | -43, 0, 1, 1900, 2017 | 5 |\n * | | uu | -43, 01, 1900, 2017 | 5 |\n * | | uuu | -043, 001, 1900, 2017 | 5 |\n * | | uuuu | -0043, 0001, 1900, 2017 | 5 |\n * | | uuuuu | ... | 3,5 |\n * | Quarter (formatting) | Q | 1, 2, 3, 4 | |\n * | | Qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | QQ | 01, 02, 03, 04 | |\n * | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | q | 1, 2, 3, 4 | |\n * | | qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | qq | 01, 02, 03, 04 | |\n * | | qqq | Q1, Q2, Q3, Q4 | |\n * | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | qqqqq | 1, 2, 3, 4 | 4 |\n * | Month (formatting) | M | 1, 2, ..., 12 | |\n * | | Mo | 1st, 2nd, ..., 12th | 7 |\n * | | MM | 01, 02, ..., 12 | |\n * | | MMM | Jan, Feb, ..., Dec | |\n * | | MMMM | January, February, ..., December | 2 |\n * | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | L | 1, 2, ..., 12 | |\n * | | Lo | 1st, 2nd, ..., 12th | 7 |\n * | | LL | 01, 02, ..., 12 | |\n * | | LLL | Jan, Feb, ..., Dec | |\n * | | LLLL | January, February, ..., December | 2 |\n * | | LLLLL | J, F, ..., D | |\n * | Local week of year | w | 1, 2, ..., 53 | |\n * | | wo | 1st, 2nd, ..., 53th | 7 |\n * | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | I | 1, 2, ..., 53 | 7 |\n * | | Io | 1st, 2nd, ..., 53th | 7 |\n * | | II | 01, 02, ..., 53 | 7 |\n * | Day of month | d | 1, 2, ..., 31 | |\n * | | do | 1st, 2nd, ..., 31st | 7 |\n * | | dd | 01, 02, ..., 31 | |\n * | Day of year | D | 1, 2, ..., 365, 366 | 9 |\n * | | Do | 1st, 2nd, ..., 365th, 366th | 7 |\n * | | DD | 01, 02, ..., 365, 366 | 9 |\n * | | DDD | 001, 002, ..., 365, 366 | |\n * | | DDDD | ... | 3 |\n * | Day of week (formatting) | E..EEE | Mon, Tue, Wed, ..., Sun | |\n * | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | EEEEE | M, T, W, T, F, S, S | |\n * | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | ISO day of week (formatting) | i | 1, 2, 3, ..., 7 | 7 |\n * | | io | 1st, 2nd, ..., 7th | 7 |\n * | | ii | 01, 02, ..., 07 | 7 |\n * | | iii | Mon, Tue, Wed, ..., Sun | 7 |\n * | | iiii | Monday, Tuesday, ..., Sunday | 2,7 |\n * | | iiiii | M, T, W, T, F, S, S | 7 |\n * | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 7 |\n * | Local day of week (formatting) | e | 2, 3, 4, ..., 1 | |\n * | | eo | 2nd, 3rd, ..., 1st | 7 |\n * | | ee | 02, 03, ..., 01 | |\n * | | eee | Mon, Tue, Wed, ..., Sun | |\n * | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | eeeee | M, T, W, T, F, S, S | |\n * | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | Local day of week (stand-alone) | c | 2, 3, 4, ..., 1 | |\n * | | co | 2nd, 3rd, ..., 1st | 7 |\n * | | cc | 02, 03, ..., 01 | |\n * | | ccc | Mon, Tue, Wed, ..., Sun | |\n * | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | ccccc | M, T, W, T, F, S, S | |\n * | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | AM, PM | a..aa | AM, PM | |\n * | | aaa | am, pm | |\n * | | aaaa | a.m., p.m. | 2 |\n * | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | b..bb | AM, PM, noon, midnight | |\n * | | bbb | am, pm, noon, midnight | |\n * | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | bbbbb | a, p, n, mi | |\n * | Flexible day period | B..BBB | at night, in the morning, ... | |\n * | | BBBB | at night, in the morning, ... | 2 |\n * | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | h | 1, 2, ..., 11, 12 | |\n * | | ho | 1st, 2nd, ..., 11th, 12th | 7 |\n * | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | H | 0, 1, 2, ..., 23 | |\n * | | Ho | 0th, 1st, 2nd, ..., 23rd | 7 |\n * | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | K | 1, 2, ..., 11, 0 | |\n * | | Ko | 1st, 2nd, ..., 11th, 0th | 7 |\n * | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | k | 24, 1, 2, ..., 23 | |\n * | | ko | 24th, 1st, 2nd, ..., 23rd | 7 |\n * | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | m | 0, 1, ..., 59 | |\n * | | mo | 0th, 1st, ..., 59th | 7 |\n * | | mm | 00, 01, ..., 59 | |\n * | Second | s | 0, 1, ..., 59 | |\n * | | so | 0th, 1st, ..., 59th | 7 |\n * | | ss | 00, 01, ..., 59 | |\n * | Fraction of second | S | 0, 1, ..., 9 | |\n * | | SS | 00, 01, ..., 99 | |\n * | | SSS | 000, 001, ..., 999 | |\n * | | SSSS | ... | 3 |\n * | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z | |\n * | | XX | -0800, +0530, Z | |\n * | | XXX | -08:00, +05:30, Z | |\n * | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | x | -08, +0530, +00 | |\n * | | xx | -0800, +0530, +0000 | |\n * | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Timezone (GMT) | O...OOO | GMT-8, GMT+5:30, GMT+0 | |\n * | | OOOO | GMT-08:00, GMT+05:30, GMT+00:00 | 2 |\n * | Timezone (specific non-locat.) | z...zzz | GMT-8, GMT+5:30, GMT+0 | 6 |\n * | | zzzz | GMT-08:00, GMT+05:30, GMT+00:00 | 2,6 |\n * | Seconds timestamp | t | 512969520 | 7 |\n * | | tt | ... | 3,7 |\n * | Milliseconds timestamp | T | 512969520900 | 7 |\n * | | TT | ... | 3,7 |\n * | Long localized date | P | 04/29/1453 | 7 |\n * | | PP | Apr 29, 1453 | 7 |\n * | | PPP | April 29th, 1453 | 7 |\n * | | PPPP | Friday, April 29th, 1453 | 2,7 |\n * | Long localized time | p | 12:00 AM | 7 |\n * | | pp | 12:00:00 AM | 7 |\n * | | ppp | 12:00:00 AM GMT+2 | 7 |\n * | | pppp | 12:00:00 AM GMT+02:00 | 2,7 |\n * | Combination of date and time | Pp | 04/29/1453, 12:00 AM | 7 |\n * | | PPpp | Apr 29, 1453, 12:00:00 AM | 7 |\n * | | PPPppp | April 29th, 1453 at ... | 7 |\n * | | PPPPpppp| Friday, April 29th, 1453 at ... | 2,7 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n * the output will be the same as default pattern for this unit, usually\n * the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n * are marked with \"2\" in the last column of the table.\n *\n * `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n * `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n * The output will be padded with zeros to match the length of the pattern.\n *\n * `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` always returns the last two digits of a year,\n * while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n * | Year | `yy` | `uu` |\n * |------|------|------|\n * | 1 | 01 | 01 |\n * | 14 | 14 | 14 |\n * | 376 | 76 | 376 |\n * | 1453 | 53 | 1453 |\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [getISOWeekYear]{@link https://date-fns.org/docs/getISOWeekYear}\n * and [getWeekYear]{@link https://date-fns.org/docs/getWeekYear}).\n *\n * 6. Specific non-location timezones are currently unavailable in `date-fns`,\n * so right now these tokens fall back to GMT timezones.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `t`: seconds timestamp\n * - `T`: milliseconds timestamp\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 9. `D` and `DD` tokens represent days of the year but they are often confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @param {Date|Number} date - the original date\n * @param {String} format - the string of tokens\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Number} [options.firstWeekContainsDate=1] - the day of January, which is\n * @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`;\n * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`;\n * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @returns {String} the formatted date string\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `options.locale` must contain `localize` property\n * @throws {RangeError} `options.locale` must contain `formatLong` property\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} format string contains an unescaped latin alphabet character\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * const result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * const result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n * locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * const result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\n\nexport default function format(dirtyDate, dirtyFormatStr, options) {\n var _ref, _options$locale, _ref2, _ref3, _ref4, _options$firstWeekCon, _options$locale2, _options$locale2$opti, _defaultOptions$local, _defaultOptions$local2, _ref5, _ref6, _ref7, _options$weekStartsOn, _options$locale3, _options$locale3$opti, _defaultOptions$local3, _defaultOptions$local4;\n\n requiredArgs(2, arguments);\n var formatStr = String(dirtyFormatStr);\n var defaultOptions = getDefaultOptions();\n var locale = (_ref = (_options$locale = options === null || options === void 0 ? void 0 : options.locale) !== null && _options$locale !== void 0 ? _options$locale : defaultOptions.locale) !== null && _ref !== void 0 ? _ref : defaultLocale;\n var firstWeekContainsDate = toInteger((_ref2 = (_ref3 = (_ref4 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale2 = options.locale) === null || _options$locale2 === void 0 ? void 0 : (_options$locale2$opti = _options$locale2.options) === null || _options$locale2$opti === void 0 ? void 0 : _options$locale2$opti.firstWeekContainsDate) !== null && _ref4 !== void 0 ? _ref4 : defaultOptions.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : 1); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n }\n\n var weekStartsOn = toInteger((_ref5 = (_ref6 = (_ref7 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale3 = options.locale) === null || _options$locale3 === void 0 ? void 0 : (_options$locale3$opti = _options$locale3.options) === null || _options$locale3$opti === void 0 ? void 0 : _options$locale3$opti.weekStartsOn) !== null && _ref7 !== void 0 ? _ref7 : defaultOptions.weekStartsOn) !== null && _ref6 !== void 0 ? _ref6 : (_defaultOptions$local3 = defaultOptions.locale) === null || _defaultOptions$local3 === void 0 ? void 0 : (_defaultOptions$local4 = _defaultOptions$local3.options) === null || _defaultOptions$local4 === void 0 ? void 0 : _defaultOptions$local4.weekStartsOn) !== null && _ref5 !== void 0 ? _ref5 : 0); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n\n if (!locale.localize) {\n throw new RangeError('locale must contain localize property');\n }\n\n if (!locale.formatLong) {\n throw new RangeError('locale must contain formatLong property');\n }\n\n var originalDate = toDate(dirtyDate);\n\n if (!isValid(originalDate)) {\n throw new RangeError('Invalid time value');\n } // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n // This ensures that when UTC functions will be implemented, locales will be compatible with them.\n // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/376\n\n\n var timezoneOffset = getTimezoneOffsetInMilliseconds(originalDate);\n var utcDate = subMilliseconds(originalDate, timezoneOffset);\n var formatterOptions = {\n firstWeekContainsDate: firstWeekContainsDate,\n weekStartsOn: weekStartsOn,\n locale: locale,\n _originalDate: originalDate\n };\n var result = formatStr.match(longFormattingTokensRegExp).map(function (substring) {\n var firstCharacter = substring[0];\n\n if (firstCharacter === 'p' || firstCharacter === 'P') {\n var longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong);\n }\n\n return substring;\n }).join('').match(formattingTokensRegExp).map(function (substring) {\n // Replace two single quote characters with one single quote character\n if (substring === \"''\") {\n return \"'\";\n }\n\n var firstCharacter = substring[0];\n\n if (firstCharacter === \"'\") {\n return cleanEscapedString(substring);\n }\n\n var formatter = formatters[firstCharacter];\n\n if (formatter) {\n if (!(options !== null && options !== void 0 && options.useAdditionalWeekYearTokens) && isProtectedWeekYearToken(substring)) {\n throwProtectedError(substring, dirtyFormatStr, String(dirtyDate));\n }\n\n if (!(options !== null && options !== void 0 && options.useAdditionalDayOfYearTokens) && isProtectedDayOfYearToken(substring)) {\n throwProtectedError(substring, dirtyFormatStr, String(dirtyDate));\n }\n\n return formatter(utcDate, substring, locale.localize, formatterOptions);\n }\n\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`');\n }\n\n return substring;\n }).join('');\n return result;\n}\n\nfunction cleanEscapedString(input) {\n var matched = input.match(escapedStringRegExp);\n\n if (!matched) {\n return input;\n }\n\n return matched[1].replace(doubleQuoteRegExp, \"'\");\n}", "import { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\nimport defaultLocale from \"../_lib/defaultLocale/index.js\";\nvar defaultFormat = ['years', 'months', 'weeks', 'days', 'hours', 'minutes', 'seconds'];\n/**\n * @name formatDuration\n * @category Common Helpers\n * @summary Formats a duration in human-readable format\n *\n * @description\n * Return human-readable duration string i.e. \"9 months 2 days\"\n *\n * @param {Duration} duration - the duration to format\n * @param {Object} [options] - an object with options.\n * @param {string[]} [options.format=['years', 'months', 'weeks', 'days', 'hours', 'minutes', 'seconds']] - the array of units to format\n * @param {boolean} [options.zero=false] - should zeros be included in the output?\n * @param {string} [options.delimiter=' '] - delimiter string\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {string} the formatted date string\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Format full duration\n * formatDuration({\n * years: 2,\n * months: 9,\n * weeks: 1,\n * days: 7,\n * hours: 5,\n * minutes: 9,\n * seconds: 30\n * })\n * //=> '2 years 9 months 1 week 7 days 5 hours 9 minutes 30 seconds'\n *\n * @example\n * // Format partial duration\n * formatDuration({ months: 9, days: 2 })\n * //=> '9 months 2 days'\n *\n * @example\n * // Customize the format\n * formatDuration(\n * {\n * years: 2,\n * months: 9,\n * weeks: 1,\n * days: 7,\n * hours: 5,\n * minutes: 9,\n * seconds: 30\n * },\n * { format: ['months', 'weeks'] }\n * ) === '9 months 1 week'\n *\n * @example\n * // Customize the zeros presence\n * formatDuration({ years: 0, months: 9 })\n * //=> '9 months'\n * formatDuration({ years: 0, months: 9 }, { zero: true })\n * //=> '0 years 9 months'\n *\n * @example\n * // Customize the delimiter\n * formatDuration({ years: 2, months: 9, weeks: 3 }, { delimiter: ', ' })\n * //=> '2 years, 9 months, 3 weeks'\n */\n\nexport default function formatDuration(duration, options) {\n var _ref, _options$locale, _options$format, _options$zero, _options$delimiter;\n\n if (arguments.length < 1) {\n throw new TypeError(\"1 argument required, but only \".concat(arguments.length, \" present\"));\n }\n\n var defaultOptions = getDefaultOptions();\n var locale = (_ref = (_options$locale = options === null || options === void 0 ? void 0 : options.locale) !== null && _options$locale !== void 0 ? _options$locale : defaultOptions.locale) !== null && _ref !== void 0 ? _ref : defaultLocale;\n var format = (_options$format = options === null || options === void 0 ? void 0 : options.format) !== null && _options$format !== void 0 ? _options$format : defaultFormat;\n var zero = (_options$zero = options === null || options === void 0 ? void 0 : options.zero) !== null && _options$zero !== void 0 ? _options$zero : false;\n var delimiter = (_options$delimiter = options === null || options === void 0 ? void 0 : options.delimiter) !== null && _options$delimiter !== void 0 ? _options$delimiter : ' ';\n\n if (!locale.formatDistance) {\n return '';\n }\n\n var result = format.reduce(function (acc, unit) {\n var token = \"x\".concat(unit.replace(/(^.)/, function (m) {\n return m.toUpperCase();\n }));\n var value = duration[unit];\n\n if (typeof value === 'number' && (zero || duration[unit])) {\n return acc.concat(locale.formatDistance(token, value));\n }\n\n return acc;\n }, []).join(delimiter);\n return result;\n}", "import compareAsc from \"../compareAsc/index.js\";\nimport add from \"../add/index.js\";\nimport differenceInDays from \"../differenceInDays/index.js\";\nimport differenceInHours from \"../differenceInHours/index.js\";\nimport differenceInMinutes from \"../differenceInMinutes/index.js\";\nimport differenceInMonths from \"../differenceInMonths/index.js\";\nimport differenceInSeconds from \"../differenceInSeconds/index.js\";\nimport differenceInYears from \"../differenceInYears/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name intervalToDuration\n * @category Common Helpers\n * @summary Convert interval to duration\n *\n * @description\n * Convert a interval object to a duration object.\n *\n * @param {Interval} interval - the interval to convert to duration\n *\n * @returns {Duration} The duration Object\n * @throws {TypeError} Requires 2 arguments\n * @throws {RangeError} `start` must not be Invalid Date\n * @throws {RangeError} `end` must not be Invalid Date\n *\n * @example\n * // Get the duration between January 15, 1929 and April 4, 1968.\n * intervalToDuration({\n * start: new Date(1929, 0, 15, 12, 0, 0),\n * end: new Date(1968, 3, 4, 19, 5, 0)\n * })\n * // => { years: 39, months: 2, days: 20, hours: 7, minutes: 5, seconds: 0 }\n */\n\nexport default function intervalToDuration(interval) {\n requiredArgs(1, arguments);\n var start = toDate(interval.start);\n var end = toDate(interval.end);\n if (isNaN(start.getTime())) throw new RangeError('Start Date is invalid');\n if (isNaN(end.getTime())) throw new RangeError('End Date is invalid');\n var duration = {};\n duration.years = Math.abs(differenceInYears(end, start));\n var sign = compareAsc(end, start);\n var remainingMonths = add(start, {\n years: sign * duration.years\n });\n duration.months = Math.abs(differenceInMonths(end, remainingMonths));\n var remainingDays = add(remainingMonths, {\n months: sign * duration.months\n });\n duration.days = Math.abs(differenceInDays(end, remainingDays));\n var remainingHours = add(remainingDays, {\n days: sign * duration.days\n });\n duration.hours = Math.abs(differenceInHours(end, remainingHours));\n var remainingMinutes = add(remainingHours, {\n hours: sign * duration.hours\n });\n duration.minutes = Math.abs(differenceInMinutes(end, remainingMinutes));\n var remainingSeconds = add(remainingMinutes, {\n minutes: sign * duration.minutes\n });\n duration.seconds = Math.abs(differenceInSeconds(end, remainingSeconds));\n return duration;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isAfter\n * @category Common Helpers\n * @summary Is the first date after the second one?\n *\n * @description\n * Is the first date after the second one?\n *\n * @param {Date|Number} date - the date that should be after the other one to return true\n * @param {Date|Number} dateToCompare - the date to compare with\n * @returns {Boolean} the first date is after the second date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Is 10 July 1989 after 11 February 1987?\n * const result = isAfter(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> true\n */\n\nexport default function isAfter(dirtyDate, dirtyDateToCompare) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var dateToCompare = toDate(dirtyDateToCompare);\n return date.getTime() > dateToCompare.getTime();\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isBefore\n * @category Common Helpers\n * @summary Is the first date before the second one?\n *\n * @description\n * Is the first date before the second one?\n *\n * @param {Date|Number} date - the date that should be before the other one to return true\n * @param {Date|Number} dateToCompare - the date to compare with\n * @returns {Boolean} the first date is before the second date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Is 10 July 1989 before 11 February 1987?\n * const result = isBefore(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> false\n */\n\nexport default function isBefore(dirtyDate, dirtyDateToCompare) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var dateToCompare = toDate(dirtyDateToCompare);\n return date.getTime() < dateToCompare.getTime();\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isFuture\n * @category Common Helpers\n * @summary Is the given date in the future?\n * @pure false\n *\n * @description\n * Is the given date in the future?\n *\n * > \u26A0\uFE0F Please note that this function is not present in the FP submodule as\n * > it uses `Date.now()` internally hence impure and can't be safely curried.\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is in the future\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // If today is 6 October 2014, is 31 December 2014 in the future?\n * const result = isFuture(new Date(2014, 11, 31))\n * //=> true\n */\n\nexport default function isFuture(dirtyDate) {\n requiredArgs(1, arguments);\n return toDate(dirtyDate).getTime() > Date.now();\n}", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport \"../../scss/DurationPicker.scss\";\n\nexport interface Props {\n hours?: boolean;\n minutes?: boolean;\n seconds?: boolean;\n days?: boolean;\n onChange: (value: number) => void;\n value: number;\n}\n\n// inspiration taken from https://github.com/flurmbo/react-duration-picker\nexport function DurationPicker({\n days,\n hours,\n minutes,\n seconds,\n onChange,\n value,\n}: Props): VNode {\n const ss = 1000 * 1000;\n const ms = ss * 60;\n const hs = ms * 60;\n const ds = hs * 24;\n const { i18n } = useTranslationContext();\n\n return (\n <div class=\"rdp-picker\">\n {days && (\n <DurationColumn\n unit={i18n.str`days`}\n max={99}\n value={Math.floor(value / ds)}\n onDecrease={value >= ds ? () => onChange(value - ds) : undefined}\n onIncrease={value < 99 * ds ? () => onChange(value + ds) : undefined}\n onChange={(diff) => onChange(value + diff * ds)}\n />\n )}\n {hours && (\n <DurationColumn\n unit={i18n.str`hours`}\n max={23}\n min={1}\n value={Math.floor(value / hs) % 24}\n onDecrease={value >= hs ? () => onChange(value - hs) : undefined}\n onIncrease={value < 99 * ds ? () => onChange(value + hs) : undefined}\n onChange={(diff) => onChange(value + diff * hs)}\n />\n )}\n {minutes && (\n <DurationColumn\n unit={i18n.str`minutes`}\n max={59}\n min={1}\n value={Math.floor(value / ms) % 60}\n onDecrease={value >= ms ? () => onChange(value - ms) : undefined}\n onIncrease={value < 99 * ds ? () => onChange(value + ms) : undefined}\n onChange={(diff) => onChange(value + diff * ms)}\n />\n )}\n {seconds && (\n <DurationColumn\n unit={i18n.str`seconds`}\n max={59}\n value={Math.floor(value / ss) % 60}\n onDecrease={value >= ss ? () => onChange(value - ss) : undefined}\n onIncrease={value < 99 * ds ? () => onChange(value + ss) : undefined}\n onChange={(diff) => onChange(value + diff * ss)}\n />\n )}\n </div>\n );\n}\n\ninterface ColProps {\n unit: string;\n min?: number;\n max: number;\n value: number;\n onIncrease?: () => void;\n onDecrease?: () => void;\n onChange?: (diff: number) => void;\n}\n\nfunction InputNumber({\n initial,\n onChange,\n}: {\n initial: number;\n onChange: (n: number) => void;\n}) {\n const [value, handler] = useState<{ v: string }>({\n v: toTwoDigitString(initial),\n });\n\n return (\n <input\n value={value.v}\n onBlur={(e) => onChange(parseInt(value.v, 10))}\n onInput={(e) => {\n e.preventDefault();\n const n = Number.parseInt(e.currentTarget.value, 10);\n if (isNaN(n)) return handler({ v: toTwoDigitString(initial) });\n return handler({ v: toTwoDigitString(n) });\n }}\n style={{\n width: 50,\n border: \"none\",\n fontSize: \"inherit\",\n background: \"inherit\",\n }}\n />\n );\n}\n\nfunction DurationColumn({\n unit,\n min = 0,\n max,\n value,\n onIncrease,\n onDecrease,\n onChange,\n}: ColProps): VNode {\n const cellHeight = 35;\n return (\n <div class=\"rdp-column-container\">\n <div class=\"rdp-masked-div\">\n <hr class=\"rdp-reticule\" style={{ top: cellHeight * 2 - 1 }} />\n <hr class=\"rdp-reticule\" style={{ top: cellHeight * 3 - 1 }} />\n\n <div class=\"rdp-column\" style={{ top: 0 }}>\n <div class=\"rdp-cell\" key={value - 2}>\n {onDecrease && (\n <button\n style={{ width: \"100%\", textAlign: \"center\", margin: 5 }}\n onClick={onDecrease}\n >\n <span class=\"icon\">\n <i class=\"mdi mdi-chevron-up\" />\n </span>\n </button>\n )}\n </div>\n <div class=\"rdp-cell\" key={value - 1}>\n {value > min ? toTwoDigitString(value - 1) : \"\"}\n </div>\n <div class=\"rdp-cell rdp-center\" key={value}>\n {onChange ? (\n <InputNumber\n initial={value}\n onChange={(n) => onChange(n - value)}\n />\n ) : (\n toTwoDigitString(value)\n )}\n <div>{unit}</div>\n </div>\n\n <div class=\"rdp-cell\" key={value + 1}>\n {value < max ? toTwoDigitString(value + 1) : \"\"}\n </div>\n\n <div class=\"rdp-cell\" key={value + 2}>\n {onIncrease && (\n <button\n style={{ width: \"100%\", textAlign: \"center\", margin: 5 }}\n onClick={onIncrease}\n >\n <span class=\"icon\">\n <i class=\"mdi mdi-chevron-down\" />\n </span>\n </button>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction toTwoDigitString(n: number) {\n if (n < 10) {\n return `0${n}`;\n }\n return `${n}`;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { formatDuration, intervalToDuration } from \"date-fns\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { SimpleModal } from \"../modal/index.js\";\nimport { DurationPicker } from \"../picker/DurationPicker.js\";\nimport { InputProps, useField } from \"./useField.js\";\n\nexport interface Props<T> extends InputProps<T> {\n expand?: boolean;\n readonly?: boolean;\n withForever?: boolean;\n}\n\nexport function InputDuration<T>({\n name,\n expand,\n placeholder,\n tooltip,\n label,\n help,\n readonly,\n withForever,\n}: Props<keyof T>): VNode {\n const [opened, setOpened] = useState(false);\n const { i18n } = useTranslationContext();\n\n const { error, required, value, onChange } = useField<T>(name);\n let strValue = \"\";\n if (!value) {\n strValue = \"\";\n } else if (value.d_us === \"forever\") {\n strValue = i18n.str`forever`;\n } else {\n strValue = formatDuration(\n intervalToDuration({ start: 0, end: value.d_us / 1000 }),\n {\n locale: {\n formatDistance: (name, value) => {\n switch (name) {\n case \"xMonths\":\n return i18n.str`${value}M`;\n case \"xYears\":\n return i18n.str`${value}Y`;\n case \"xDays\":\n return i18n.str`${value}d`;\n case \"xHours\":\n return i18n.str`${value}h`;\n case \"xMinutes\":\n return i18n.str`${value}min`;\n case \"xSeconds\":\n return i18n.str`${value}sec`;\n }\n },\n localize: {\n day: () => \"s\",\n month: () => \"m\",\n ordinalNumber: () => \"th\",\n dayPeriod: () => \"p\",\n quarter: () => \"w\",\n era: () => \"e\",\n },\n },\n },\n );\n }\n\n return (\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">\n {label}\n {tooltip && (\n <span class=\"icon\" data-tooltip={tooltip}>\n <i class=\"mdi mdi-information\" />\n </span>\n )}\n </label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n <div class=\"field has-addons\">\n <p class={expand ? \"control is-expanded \" : \"control \"}>\n <input\n class=\"input\"\n type=\"text\"\n readonly\n value={strValue}\n placeholder={placeholder}\n onClick={() => {\n if (!readonly) setOpened(true);\n }}\n />\n {required && (\n <span class=\"icon has-text-danger is-right\">\n <i class=\"mdi mdi-alert\" />\n </span>\n )}\n {help}\n </p>\n <div\n class=\"control\"\n onClick={() => {\n if (!readonly) setOpened(true);\n }}\n >\n <a class=\"button is-static\">\n <span class=\"icon\">\n <i class=\"mdi mdi-clock\" />\n </span>\n </a>\n </div>\n </div>\n {error && <p class=\"help is-danger\">{error}</p>}\n </div>\n {withForever && (\n <span data-tooltip={i18n.str`change value to never`}>\n <button\n class=\"button is-info mr-3\"\n onClick={() => onChange({ d_us: \"forever\" } as any)}\n >\n <i18n.Translate>forever</i18n.Translate>\n </button>\n </span>\n )}\n {!readonly && (\n <span data-tooltip={i18n.str`change value to empty`}>\n <button\n class=\"button is-info \"\n onClick={() => onChange(undefined as any)}\n >\n <i18n.Translate>clear</i18n.Translate>\n </button>\n </span>\n )}\n </div>\n {opened && (\n <SimpleModal onCancel={() => setOpened(false)}>\n <DurationPicker\n days\n hours\n minutes\n value={!value || value.d_us === \"forever\" ? 0 : value.d_us}\n onChange={(v) => {\n onChange({ d_us: v } as any);\n }}\n />\n </SimpleModal>\n )}\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useFormContext } from \"./FormProvider.js\";\n\ninterface Use {\n hasError?: boolean;\n}\n\nexport function useGroupField<T>(name: keyof T): Use {\n const f = useFormContext<T>();\n if (!f) return {};\n\n return {\n hasError: readField(f.errors, String(name)),\n };\n}\n\nconst readField = (object: any, name: string) => {\n return name\n .split(\".\")\n .reduce((prev, current) => prev && prev[current], object);\n};\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { ComponentChildren, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { useGroupField } from \"./useGroupField.js\";\n\nexport interface Props<T> {\n name: T;\n children: ComponentChildren;\n label: ComponentChildren;\n tooltip?: ComponentChildren;\n alternative?: ComponentChildren;\n fixed?: boolean;\n initialActive?: boolean;\n}\n\nexport function InputGroup<T>({\n name,\n label,\n children,\n tooltip,\n alternative,\n fixed,\n initialActive,\n}: Props<keyof T>): VNode {\n const [active, setActive] = useState(initialActive || fixed);\n const group = useGroupField<T>(name);\n\n return (\n <div class=\"card\">\n <header class=\"card-header\">\n <p class=\"card-header-title\">\n {label}\n {tooltip && (\n <span class=\"icon has-tooltip-right\" data-tooltip={tooltip}>\n <i class=\"mdi mdi-information\" />\n </span>\n )}\n {group?.hasError && (\n <span class=\"icon has-text-danger\" data-tooltip={tooltip}>\n <i class=\"mdi mdi-alert\" />\n </span>\n )}\n </p>\n {!fixed && (\n <button\n class=\"card-header-icon\"\n aria-label=\"more options\"\n onClick={(): void => setActive(!active)}\n >\n <span class=\"icon\">\n {active ? (\n <i class=\"mdi mdi-arrow-up\" />\n ) : (\n <i class=\"mdi mdi-arrow-down\" />\n )}\n </span>\n </button>\n )}\n </header>\n {active ? (\n <div class=\"card-content\">{children}</div>\n ) : alternative ? (\n <div class=\"card-content\">{alternative}</div>\n ) : undefined}\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { ComponentChildren, h, VNode } from \"preact\";\nimport { useRef, useState } from \"preact/hooks\";\nimport { MAX_IMAGE_SIZE as MAX_IMAGE_UPLOAD_SIZE } from \"../../utils/constants.js\";\nimport { InputProps, useField } from \"./useField.js\";\n\nexport interface Props<T> extends InputProps<T> {\n expand?: boolean;\n addonAfter?: ComponentChildren;\n children?: ComponentChildren;\n}\n\nexport function InputImage<T>({\n name,\n readonly,\n placeholder,\n tooltip,\n label,\n help,\n children,\n expand,\n}: Props<keyof T>): VNode {\n const { error, value, onChange } = useField<T>(name);\n\n const image = useRef<HTMLInputElement>(null);\n const { i18n } = useTranslationContext();\n const [sizeError, setSizeError] = useState(false);\n\n return (\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">\n {label}\n {tooltip && (\n <span class=\"icon has-tooltip-right\" data-tooltip={tooltip}>\n <i class=\"mdi mdi-information\" />\n </span>\n )}\n </label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n <p class={expand ? \"control is-expanded\" : \"control\"}>\n {value && (\n <img\n src={value}\n style={{ width: 200, height: 200 }}\n onClick={() => image.current?.click()}\n />\n )}\n <input\n ref={image}\n style={{ display: \"none\" }}\n type=\"file\"\n name={String(name)}\n placeholder={placeholder}\n readonly={readonly}\n onChange={(e) => {\n const f: FileList | null = e.currentTarget.files;\n if (!f || f.length != 1) {\n return onChange(undefined!);\n }\n if (f[0].size > MAX_IMAGE_UPLOAD_SIZE) {\n setSizeError(true);\n return onChange(undefined!);\n }\n setSizeError(false);\n return f[0].arrayBuffer().then((b) => {\n const b64 = window.btoa(\n new Uint8Array(b).reduce(\n (data, byte) => data + String.fromCharCode(byte),\n \"\",\n ),\n );\n return onChange(`data:${f[0].type};base64,${b64}` as any);\n });\n }}\n />\n {help}\n {children}\n </p>\n {error && <p class=\"help is-danger\">{error}</p>}\n {sizeError && (\n <p class=\"help is-danger\">\n <i18n.Translate>Image should be smaller than 1 MB</i18n.Translate>\n </p>\n )}\n {!value && (\n <button class=\"button\" onClick={() => image.current?.click()}>\n <i18n.Translate>Add</i18n.Translate>\n </button>\n )}\n {value && (\n <button class=\"button\" onClick={() => onChange(undefined!)}>\n <i18n.Translate>Remove</i18n.Translate>\n </button>\n )}\n </div>\n </div>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { Fragment, h } from \"preact\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Input } from \"./Input.js\";\n\nexport function InputLocation({ name }: { name: string }) {\n const { i18n } = useTranslationContext();\n return (\n <>\n <Input name={`${name}.country`} label={i18n.str`Country`} />\n <Input\n name={`${name}.address_lines`}\n inputType=\"multiline\"\n label={i18n.str`Address`}\n toStr={(v: string[] | undefined) => (!v ? \"\" : v.join(\"\\n\"))}\n fromStr={(v: string) => v.split(\"\\n\")}\n />\n <Input\n name={`${name}.building_number`}\n label={i18n.str`Building number`}\n />\n <Input name={`${name}.building_name`} label={i18n.str`Building name`} />\n <Input name={`${name}.street`} label={i18n.str`Street`} />\n <Input name={`${name}.post_code`} label={i18n.str`Post code`} />\n <Input name={`${name}.town_location`} label={i18n.str`Town location`} />\n <Input name={`${name}.town`} label={i18n.str`Town`} />\n <Input name={`${name}.district`} label={i18n.str`District`} />\n <Input\n name={`${name}.country_subdivision`}\n label={i18n.str`Country subdivision`}\n />\n </>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\nimport { WithId } from \"../declaration.js\";\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nexport interface Actions<T extends WithId> {\n element: T;\n type: \"DELETE\" | \"UPDATE\";\n}\n\nfunction notEmpty<TValue>(value: TValue | null | undefined): value is TValue {\n return value !== null && value !== undefined;\n}\n\nexport function buildActions<T extends WithId>(\n instances: T[],\n selected: string[],\n action: \"DELETE\",\n): Actions<T>[] {\n return selected\n .map((id) => instances.find((i) => i.id === id))\n .filter(notEmpty)\n .map((id) => ({ element: id, type: action }));\n}\n\n/**\n * For any object or array, return the same object if is not empty.\n * not empty:\n * - for arrays: at least one element not undefined\n * - for objects: at least one property not undefined\n * @param obj\n * @returns\n */\nexport function undefinedIfEmpty<\n T extends Record<string, unknown> | Array<unknown>,\n>(obj: T): T | undefined {\n if (obj === undefined) return undefined;\n return Object.values(obj).some((v) => v !== undefined) ? obj : undefined;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { h, VNode } from \"preact\";\nimport { InputProps, useField } from \"./useField.js\";\n\ninterface Props<T> extends InputProps<T> {\n readonly?: boolean;\n expand?: boolean;\n values: string[];\n convert?: (v: string) => any;\n toStr?: (v?: any) => string;\n fromStr?: (s: string) => any;\n}\n\nconst defaultToString = (f?: any): string => f || \"\";\nconst defaultFromString = (v: string): any => v as any;\n\nexport function InputSelector<T>({\n name,\n readonly,\n expand,\n placeholder,\n tooltip,\n label,\n help,\n values,\n convert,\n toStr = defaultToString,\n}: Props<keyof T>): VNode {\n const { error, value, onChange } = useField<T>(name);\n\n return (\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">\n {label}\n {tooltip && (\n <span class=\"icon has-tooltip-right\" data-tooltip={tooltip}>\n <i class=\"mdi mdi-information\" />\n </span>\n )}\n </label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n <p class={expand ? \"control is-expanded select\" : \"control select\"}>\n <select\n class={error ? \"select is-danger\" : \"select\"}\n name={String(name)}\n disabled={readonly}\n readonly={readonly}\n onChange={(e) => {\n const v = convert\n ? convert(e.currentTarget.value)\n : e.currentTarget.value;\n onChange(v);\n }}\n >\n {placeholder && <option>{placeholder}</option>}\n {values.map((v, i) => (\n <option key={i} value={v} selected={value === v}>\n {toStr(v)}\n </option>\n ))}\n </select>\n {help}\n </p>\n {error && <p class=\"help is-danger\">{error}</p>}\n </div>\n </div>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useCallback, useState } from \"preact/hooks\";\nimport { COUNTRY_TABLE } from \"../../utils/constants.js\";\nimport { undefinedIfEmpty } from \"../../utils/table.js\";\nimport { FormErrors, FormProvider } from \"./FormProvider.js\";\nimport { Input } from \"./Input.js\";\nimport { InputGroup } from \"./InputGroup.js\";\nimport { InputSelector } from \"./InputSelector.js\";\nimport { InputProps, useField } from \"./useField.js\";\n\nexport interface Props<T> extends InputProps<T> {\n isValid?: (e: any) => boolean;\n}\n\n// https://datatracker.ietf.org/doc/html/rfc8905\ntype Entity = {\n // iban, bitcoin, x-taler-bank. it defined the format\n target: string;\n // path1 if the first field to be used\n path1: string;\n // path2 if the second field to be used, optional\n path2?: string;\n // options of the payto uri\n options: {\n \"receiver-name\"?: string;\n sender?: string;\n message?: string;\n amount?: string;\n instruction?: string;\n [name: string]: string | undefined;\n };\n};\n\nfunction isEthereumAddress(address: string) {\n if (!/^(0x)?[0-9a-f]{40}$/i.test(address)) {\n return false;\n } else if (\n /^(0x|0X)?[0-9a-f]{40}$/.test(address) ||\n /^(0x|0X)?[0-9A-F]{40}$/.test(address)\n ) {\n return true;\n }\n return checkAddressChecksum(address);\n}\n\nfunction checkAddressChecksum(address: string) {\n //TODO implement ethereum checksum\n return true;\n}\n\nfunction validateBitcoin(\n addr: string,\n i18n: ReturnType<typeof useTranslationContext>[\"i18n\"],\n): string | undefined {\n try {\n const valid = /^(bc1|[13])[a-zA-HJ-NP-Z0-9]{25,39}$/.test(addr);\n if (valid) return undefined;\n } catch (e) {\n console.log(e);\n }\n return i18n.str`This is not a valid bitcoin address.`;\n}\n\nfunction validateEthereum(\n addr: string,\n i18n: ReturnType<typeof useTranslationContext>[\"i18n\"],\n): string | undefined {\n try {\n const valid = isEthereumAddress(addr);\n if (valid) return undefined;\n } catch (e) {\n console.log(e);\n }\n return i18n.str`This is not a valid Ethereum address.`;\n}\n\n/**\n * An IBAN is validated by converting it into an integer and performing a\n * basic mod-97 operation (as described in ISO 7064) on it.\n * If the IBAN is valid, the remainder equals 1.\n *\n * The algorithm of IBAN validation is as follows:\n * 1.- Check that the total IBAN length is correct as per the country. If not, the IBAN is invalid\n * 2.- Move the four initial characters to the end of the string\n * 3.- Replace each letter in the string with two digits, thereby expanding the string, where A = 10, B = 11, ..., Z = 35\n * 4.- Interpret the string as a decimal integer and compute the remainder of that number on division by 97\n *\n * If the remainder is 1, the check digit test is passed and the IBAN might be valid.\n *\n */\nfunction validateIBAN(\n iban: string,\n i18n: ReturnType<typeof useTranslationContext>[\"i18n\"],\n): string | undefined {\n // Check total length\n if (iban.length < 4)\n return i18n.str`IBAN numbers usually have more that 4 digits`;\n if (iban.length > 34)\n return i18n.str`IBAN numbers usually have less that 34 digits`;\n\n const A_code = \"A\".charCodeAt(0);\n const Z_code = \"Z\".charCodeAt(0);\n const IBAN = iban.toUpperCase();\n // check supported country\n const code = IBAN.substr(0, 2);\n const found = code in COUNTRY_TABLE;\n if (!found) return i18n.str`IBAN country code not found`;\n\n // 2.- Move the four initial characters to the end of the string\n const step2 = IBAN.substr(4) + iban.substr(0, 4);\n const step3 = Array.from(step2)\n .map((letter) => {\n const code = letter.charCodeAt(0);\n if (code < A_code || code > Z_code) return letter;\n return `${letter.charCodeAt(0) - \"A\".charCodeAt(0) + 10}`;\n })\n .join(\"\");\n\n function calculate_iban_checksum(str: string): number {\n const numberStr = str.substr(0, 5);\n const rest = str.substr(5);\n const number = parseInt(numberStr, 10);\n const result = number % 97;\n if (rest.length > 0) {\n return calculate_iban_checksum(`${result}${rest}`);\n }\n return result;\n }\n\n const checksum = calculate_iban_checksum(step3);\n if (checksum !== 1)\n return i18n.str`IBAN number is not valid, checksum is wrong`;\n return undefined;\n}\n\n// const targets = ['ach', 'bic', 'iban', 'upi', 'bitcoin', 'ilp', 'void', 'x-taler-bank']\nconst targets = [\n \"Choose one...\",\n \"iban\",\n \"x-taler-bank\",\n \"bitcoin\",\n \"ethereum\",\n];\nconst noTargetValue = targets[0];\nconst defaultTarget = { target: noTargetValue, options: {} };\n\nexport function InputPaytoForm<T>({\n name,\n readonly,\n label,\n tooltip,\n}: Props<keyof T>): VNode {\n const { value: paytos, onChange } = useField<T>(name);\n\n const [value, valueHandler] = useState<Partial<Entity>>(defaultTarget);\n\n let payToPath;\n if (value.target === \"iban\" && value.path1) {\n payToPath = `/${value.path1.toUpperCase()}`;\n } else if (value.path1) {\n if (value.path2) {\n payToPath = `/${value.path1}/${value.path2}`;\n } else {\n payToPath = `/${value.path1}`;\n }\n }\n const { i18n } = useTranslationContext();\n\n const ops = value.options!;\n const url = tryUrl(`payto://${value.target}${payToPath}`);\n if (url) {\n Object.keys(ops).forEach((opt_key) => {\n const opt_value = ops[opt_key];\n if (opt_value) url.searchParams.set(opt_key, opt_value);\n });\n }\n const paytoURL = !url ? \"\" : url.href;\n\n const errors: FormErrors<Entity> = {\n target: value.target === noTargetValue ? i18n.str`required` : undefined,\n path1: !value.path1\n ? i18n.str`required`\n : value.target === \"iban\"\n ? validateIBAN(value.path1, i18n)\n : value.target === \"bitcoin\"\n ? validateBitcoin(value.path1, i18n)\n : value.target === \"ethereum\"\n ? validateEthereum(value.path1, i18n)\n : undefined,\n path2:\n value.target === \"x-taler-bank\"\n ? !value.path2\n ? i18n.str`required`\n : undefined\n : undefined,\n options: undefinedIfEmpty({\n \"receiver-name\": !value.options?.[\"receiver-name\"]\n ? i18n.str`required`\n : undefined,\n }),\n };\n\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n\n const submit = useCallback((): void => {\n const alreadyExists =\n paytos.findIndex((x: string) => x === paytoURL) !== -1;\n if (!alreadyExists) {\n onChange([paytoURL, ...paytos] as any);\n }\n valueHandler(defaultTarget);\n }, [value]);\n\n //FIXME: translating plural singular\n return (\n <InputGroup name=\"payto\" label={label} fixed tooltip={tooltip}>\n <FormProvider<Entity>\n name=\"tax\"\n errors={errors}\n object={value}\n valueHandler={valueHandler}\n >\n <InputSelector<Entity>\n name=\"target\"\n label={i18n.str`Target type`}\n tooltip={i18n.str`Method to use for wire transfer`}\n values={targets}\n toStr={(v) => (v === noTargetValue ? i18n.str`Choose one...` : v)}\n />\n\n {value.target === \"ach\" && (\n <Fragment>\n <Input<Entity>\n name=\"path1\"\n label={i18n.str`Routing`}\n tooltip={i18n.str`Routing number.`}\n />\n <Input<Entity>\n name=\"path2\"\n label={i18n.str`Account`}\n tooltip={i18n.str`Account number.`}\n />\n </Fragment>\n )}\n {value.target === \"bic\" && (\n <Fragment>\n <Input<Entity>\n name=\"path1\"\n label={i18n.str`Code`}\n tooltip={i18n.str`Business Identifier Code.`}\n />\n </Fragment>\n )}\n {value.target === \"iban\" && (\n <Fragment>\n <Input<Entity>\n name=\"path1\"\n label={i18n.str`Account`}\n tooltip={i18n.str`Bank Account Number.`}\n inputExtra={{ style: { textTransform: \"uppercase\" } }}\n />\n </Fragment>\n )}\n {value.target === \"upi\" && (\n <Fragment>\n <Input<Entity>\n name=\"path1\"\n label={i18n.str`Account`}\n tooltip={i18n.str`Unified Payment Interface.`}\n />\n </Fragment>\n )}\n {value.target === \"bitcoin\" && (\n <Fragment>\n <Input<Entity>\n name=\"path1\"\n label={i18n.str`Address`}\n tooltip={i18n.str`Bitcoin protocol.`}\n />\n </Fragment>\n )}\n {value.target === \"ethereum\" && (\n <Fragment>\n <Input<Entity>\n name=\"path1\"\n label={i18n.str`Address`}\n tooltip={i18n.str`Ethereum protocol.`}\n />\n </Fragment>\n )}\n {value.target === \"ilp\" && (\n <Fragment>\n <Input<Entity>\n name=\"path1\"\n label={i18n.str`Address`}\n tooltip={i18n.str`Interledger protocol.`}\n />\n </Fragment>\n )}\n {value.target === \"void\" && <Fragment />}\n {value.target === \"x-taler-bank\" && (\n <Fragment>\n <Input<Entity>\n name=\"path1\"\n label={i18n.str`Host`}\n tooltip={i18n.str`Bank host.`}\n />\n <Input<Entity>\n name=\"path2\"\n label={i18n.str`Account`}\n tooltip={i18n.str`Bank account.`}\n />\n </Fragment>\n )}\n\n {value.target !== noTargetValue && (\n <Input\n name=\"options.receiver-name\"\n label={i18n.str`Name`}\n tooltip={i18n.str`Bank account owner's name.`}\n />\n )}\n\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\" />\n <div class=\"field-body\" style={{ display: \"block\" }}>\n {paytos.map((v: any, i: number) => (\n <div\n key={i}\n class=\"tags has-addons mt-3 mb-0 mr-3\"\n style={{ flexWrap: \"nowrap\" }}\n >\n <span\n class=\"tag is-medium is-info mb-0\"\n style={{ maxWidth: \"90%\" }}\n >\n {v}\n </span>\n <a\n class=\"tag is-medium is-danger is-delete mb-0\"\n onClick={() => {\n onChange(paytos.filter((f: any) => f !== v) as any);\n }}\n />\n </div>\n ))}\n {!paytos.length && i18n.str`No accounts yet.`}\n </div>\n </div>\n\n {value.target !== noTargetValue && (\n <div class=\"buttons is-right mt-5\">\n <button\n class=\"button is-info\"\n data-tooltip={i18n.str`add tax to the tax list`}\n disabled={hasErrors}\n onClick={submit}\n >\n <i18n.Translate>Add</i18n.Translate>\n </button>\n </div>\n )}\n </FormProvider>\n </InputGroup>\n );\n}\n\nfunction tryUrl(s: string): URL | undefined {\n try {\n return new URL(s);\n } catch (e) {\n return undefined;\n }\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useBackendContext } from \"../../context/backend.js\";\nimport { Entity } from \"../../paths/admin/create/CreatePage.js\";\nimport { Input } from \"../form/Input.js\";\nimport { InputCurrency } from \"../form/InputCurrency.js\";\nimport { InputDuration } from \"../form/InputDuration.js\";\nimport { InputGroup } from \"../form/InputGroup.js\";\nimport { InputImage } from \"../form/InputImage.js\";\nimport { InputLocation } from \"../form/InputLocation.js\";\nimport { InputPaytoForm } from \"../form/InputPaytoForm.js\";\nimport { InputWithAddon } from \"../form/InputWithAddon.js\";\n\nexport function DefaultInstanceFormFields({\n readonlyId,\n showId,\n}: {\n readonlyId?: boolean;\n showId: boolean;\n}): VNode {\n const { i18n } = useTranslationContext();\n const backend = useBackendContext();\n return (\n <Fragment>\n {showId && (\n <InputWithAddon<Entity>\n name=\"id\"\n addonBefore={`${backend.url}/instances/`}\n readonly={readonlyId}\n label={i18n.str`Identifier`}\n tooltip={i18n.str`Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.`}\n />\n )}\n\n <Input<Entity>\n name=\"name\"\n label={i18n.str`Business name`}\n tooltip={i18n.str`Legal name of the business represented by this instance.`}\n />\n\n <Input<Entity>\n name=\"email\"\n label={i18n.str`Email`}\n tooltip={i18n.str`Contact email`}\n />\n\n <Input<Entity>\n name=\"website\"\n label={i18n.str`Website URL`}\n tooltip={i18n.str`URL.`}\n />\n\n <InputImage<Entity>\n name=\"logo\"\n label={i18n.str`Logo`}\n tooltip={i18n.str`Logo image.`}\n />\n\n <InputPaytoForm<Entity>\n name=\"payto_uris\"\n label={i18n.str`Bank account`}\n tooltip={i18n.str`URI specifying bank account for crediting revenue.`}\n />\n\n <InputCurrency<Entity>\n name=\"default_max_deposit_fee\"\n label={i18n.str`Default max deposit fee`}\n tooltip={i18n.str`Maximum deposit fees this merchant is willing to pay per order by default.`}\n />\n\n <InputCurrency<Entity>\n name=\"default_max_wire_fee\"\n label={i18n.str`Default max wire fee`}\n tooltip={i18n.str`Maximum wire fees this merchant is willing to pay per wire transfer by default.`}\n />\n\n <Input<Entity>\n name=\"default_wire_fee_amortization\"\n label={i18n.str`Default wire fee amortization`}\n tooltip={i18n.str`Number of orders excess wire transfer fees will be divided by to compute per order surcharge.`}\n />\n\n <InputGroup\n name=\"address\"\n label={i18n.str`Address`}\n tooltip={i18n.str`Physical location of the merchant.`}\n >\n <InputLocation name=\"address\" />\n </InputGroup>\n\n <InputGroup\n name=\"jurisdiction\"\n label={i18n.str`Jurisdiction`}\n tooltip={i18n.str`Jurisdiction for legal disputes with the merchant.`}\n >\n <InputLocation name=\"jurisdiction\" />\n </InputGroup>\n\n <InputDuration<Entity>\n name=\"default_pay_delay\"\n label={i18n.str`Default payment delay`}\n withForever\n tooltip={i18n.str`Time customers have to pay an order before the offer expires by default.`}\n />\n\n <InputDuration<Entity>\n name=\"default_wire_transfer_delay\"\n label={i18n.str`Default wire transfer delay`}\n tooltip={i18n.str`Maximum time an exchange is allowed to delay wiring funds to the merchant, enabling it to aggregate smaller payments into larger wire transfers and reducing wire fees.`}\n withForever\n />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { Amounts } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { AsyncButton } from \"../../../components/exception/AsyncButton.js\";\nimport {\n FormErrors,\n FormProvider,\n} from \"../../../components/form/FormProvider.js\";\nimport { DefaultInstanceFormFields } from \"../../../components/instance/DefaultInstanceFormFields.js\";\nimport { SetTokenNewInstanceModal } from \"../../../components/modal/index.js\";\nimport { MerchantBackend } from \"../../../declaration.js\";\nimport { INSTANCE_ID_REGEX, PAYTO_REGEX } from \"../../../utils/constants.js\";\nimport { undefinedIfEmpty } from \"../../../utils/table.js\";\n\nexport type Entity = MerchantBackend.Instances.InstanceConfigurationMessage & {\n auth_token?: string;\n};\n\ninterface Props {\n onCreate: (d: Entity) => Promise<void>;\n onBack?: () => void;\n forceId?: string;\n}\n\nfunction with_defaults(id?: string): Partial<Entity> {\n return {\n id,\n payto_uris: [],\n default_pay_delay: { d_us: 2 * 1000 * 60 * 60 * 1000 }, // two hours\n default_wire_fee_amortization: 1,\n default_wire_transfer_delay: { d_us: 1000 * 2 * 60 * 60 * 24 * 1000 }, // two days\n };\n}\n\nexport function CreatePage({ onCreate, onBack, forceId }: Props): VNode {\n const [value, valueHandler] = useState(with_defaults(forceId));\n const [isTokenSet, updateIsTokenSet] = useState<boolean>(false);\n const [isTokenDialogActive, updateIsTokenDialogActive] =\n useState<boolean>(false);\n\n const { i18n } = useTranslationContext();\n\n const errors: FormErrors<Entity> = {\n id: !value.id\n ? i18n.str`required`\n : !INSTANCE_ID_REGEX.test(value.id)\n ? i18n.str`is not valid`\n : undefined,\n name: !value.name ? i18n.str`required` : undefined,\n payto_uris:\n !value.payto_uris || !value.payto_uris.length\n ? i18n.str`required`\n : undefinedIfEmpty(\n value.payto_uris.map((p) => {\n return !PAYTO_REGEX.test(p) ? i18n.str`is not valid` : undefined;\n }),\n ),\n default_max_deposit_fee: !value.default_max_deposit_fee\n ? i18n.str`required`\n : !Amounts.parse(value.default_max_deposit_fee)\n ? i18n.str`invalid format`\n : undefined,\n default_max_wire_fee: !value.default_max_wire_fee\n ? i18n.str`required`\n : !Amounts.parse(value.default_max_wire_fee)\n ? i18n.str`invalid format`\n : undefined,\n default_wire_fee_amortization:\n value.default_wire_fee_amortization === undefined\n ? i18n.str`required`\n : isNaN(value.default_wire_fee_amortization)\n ? i18n.str`is not a number`\n : value.default_wire_fee_amortization < 1\n ? i18n.str`must be 1 or greater`\n : undefined,\n default_pay_delay: !value.default_pay_delay\n ? i18n.str`required`\n : undefined,\n default_wire_transfer_delay: !value.default_wire_transfer_delay\n ? i18n.str`required`\n : undefined,\n address: undefinedIfEmpty({\n address_lines:\n value.address?.address_lines && value.address?.address_lines.length > 7\n ? i18n.str`max 7 lines`\n : undefined,\n }),\n jurisdiction: undefinedIfEmpty({\n address_lines:\n value.address?.address_lines && value.address?.address_lines.length > 7\n ? i18n.str`max 7 lines`\n : undefined,\n }),\n };\n\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n\n const submit = (): Promise<void> => {\n // use conversion instead of this\n const newToken = value.auth_token;\n value.auth_token = undefined;\n value.auth =\n newToken === null || newToken === undefined\n ? { method: \"external\" }\n : { method: \"token\", token: `secret-token:${newToken}` };\n if (!value.address) value.address = {};\n if (!value.jurisdiction) value.jurisdiction = {};\n // remove above use conversion\n // schema.validateSync(value, { abortEarly: false })\n return onCreate(value as Entity);\n };\n\n function updateToken(token: string | null) {\n valueHandler((old) => ({\n ...old,\n auth_token: token === null ? undefined : token,\n }));\n }\n\n return (\n <div>\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-four-fifths\">\n {isTokenDialogActive && (\n <SetTokenNewInstanceModal\n onCancel={() => {\n updateIsTokenDialogActive(false);\n updateIsTokenSet(false);\n }}\n onClear={() => {\n updateToken(null);\n updateIsTokenDialogActive(false);\n updateIsTokenSet(true);\n }}\n onConfirm={(newToken) => {\n updateToken(newToken);\n updateIsTokenDialogActive(false);\n updateIsTokenSet(true);\n }}\n />\n )}\n </div>\n <div class=\"column\" />\n </div>\n\n <section class=\"hero is-hero-bar\">\n <div class=\"hero-body\">\n <div class=\"level\">\n <div class=\"level-item has-text-centered\">\n <h1 class=\"title\">\n <button\n class=\"button is-danger has-tooltip-bottom\"\n data-tooltip={i18n.str`change authorization configuration`}\n onClick={() => updateIsTokenDialogActive(true)}\n >\n <div class=\"icon is-centered\">\n <i class=\"mdi mdi-lock-reset\" />\n </div>\n <span>\n <i18n.Translate>Set access token</i18n.Translate>\n </span>\n </button>\n </h1>\n </div>\n </div>\n </div>\n </section>\n\n <section class=\"section is-main-section\">\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-four-fifths\">\n <FormProvider<Entity>\n errors={errors}\n object={value}\n valueHandler={valueHandler}\n >\n <DefaultInstanceFormFields readonlyId={!!forceId} showId={true} />\n </FormProvider>\n\n <div class=\"buttons is-right mt-5\">\n {onBack && (\n <button class=\"button\" onClick={onBack}>\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n )}\n <AsyncButton\n onClick={submit}\n disabled={!isTokenSet || hasErrors}\n data-tooltip={\n hasErrors\n ? i18n.str`Need to complete marked fields and choose authorization method`\n : \"confirm operation\"\n }\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </AsyncButton>\n </div>\n </div>\n <div class=\"column\" />\n </div>\n </section>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { ComponentChildren, h, VNode } from \"preact\";\n\ninterface Props {\n onCreateAnother?: () => void;\n onConfirm: () => void;\n children: ComponentChildren;\n}\n\nexport function CreatedSuccessfully({\n children,\n onConfirm,\n onCreateAnother,\n}: Props): VNode {\n return (\n <div class=\"columns is-fullwidth is-vcentered mt-3\">\n <div class=\"column\" />\n <div class=\"column is-four-fifths\">\n <div class=\"card\">\n <header class=\"card-header has-background-success\">\n <p class=\"card-header-title has-text-white-ter\">Success.</p>\n </header>\n <div class=\"card-content\">{children}</div>\n </div>\n <div class=\"buttons is-right\">\n {onCreateAnother && (\n <button class=\"button is-info\" onClick={onCreateAnother}>\n Create another\n </button>\n )}\n <button class=\"button is-info\" onClick={onConfirm}>\n Continue\n </button>\n </div>\n </div>\n <div class=\"column\" />\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { h, VNode } from \"preact\";\nimport { CreatedSuccessfully } from \"../../../components/notifications/CreatedSuccessfully.js\";\nimport { Entity } from \"./index.js\";\n\nexport function InstanceCreatedSuccessfully({\n entity,\n onConfirm,\n}: {\n entity: Entity;\n onConfirm: () => void;\n}): VNode {\n return (\n <CreatedSuccessfully onConfirm={onConfirm}>\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">ID</label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n <p class=\"control\">\n <input class=\"input\" readonly value={entity.id} />\n </p>\n </div>\n </div>\n </div>\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">Business Name</label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n <p class=\"control\">\n <input class=\"input\" readonly value={entity.name} />\n </p>\n </div>\n </div>\n </div>\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">Access token</label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n <p class=\"control\">\n {entity.auth.method === \"external\" && \"external\"}\n {entity.auth.method === \"token\" && (\n <input class=\"input\" readonly value={entity.auth.token} />\n )}\n </p>\n </div>\n </div>\n </div>\n </CreatedSuccessfully>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { NotificationCard } from \"../../../components/menu/index.js\";\nimport { MerchantBackend } from \"../../../declaration.js\";\nimport { useAdminAPI } from \"../../../hooks/instance.js\";\nimport { Notification } from \"../../../utils/types.js\";\nimport { CreatePage } from \"./CreatePage.js\";\nimport { InstanceCreatedSuccessfully } from \"./InstanceCreatedSuccessfully.js\";\n\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n forceId?: string;\n}\nexport type Entity = MerchantBackend.Instances.InstanceConfigurationMessage;\n\nexport default function Create({ onBack, onConfirm, forceId }: Props): VNode {\n const { createInstance } = useAdminAPI();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const [createdOk, setCreatedOk] = useState<Entity | undefined>(undefined);\n const { i18n } = useTranslationContext();\n\n if (createdOk) {\n return (\n <InstanceCreatedSuccessfully entity={createdOk} onConfirm={onConfirm} />\n );\n }\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n\n <CreatePage\n onBack={onBack}\n forceId={forceId}\n onCreate={(\n d: MerchantBackend.Instances.InstanceConfigurationMessage,\n ) => {\n return createInstance(d)\n .then(() => {\n setCreatedOk(d);\n })\n .catch((error) => {\n setNotif({\n message: i18n.str`Failed to create instance`,\n type: \"ERROR\",\n description: error.message,\n });\n });\n }}\n />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { StateUpdater, useEffect, useState } from \"preact/hooks\";\nimport { MerchantBackend } from \"../../../declaration.js\";\n\ninterface Props {\n instances: MerchantBackend.Instances.Instance[];\n onUpdate: (id: string) => void;\n onDelete: (id: MerchantBackend.Instances.Instance) => void;\n onPurge: (id: MerchantBackend.Instances.Instance) => void;\n onCreate: () => void;\n selected?: boolean;\n setInstanceName: (s: string) => void;\n}\n\nexport function CardTable({\n instances,\n onCreate,\n onUpdate,\n onPurge,\n setInstanceName,\n onDelete,\n selected,\n}: Props): VNode {\n const [actionQueue, actionQueueHandler] = useState<Actions[]>([]);\n const [rowSelection, rowSelectionHandler] = useState<string[]>([]);\n\n useEffect(() => {\n if (\n actionQueue.length > 0 &&\n !selected &&\n actionQueue[0].type == \"DELETE\"\n ) {\n onDelete(actionQueue[0].element);\n actionQueueHandler(actionQueue.slice(1));\n }\n }, [actionQueue, selected, onDelete]);\n\n useEffect(() => {\n if (\n actionQueue.length > 0 &&\n !selected &&\n actionQueue[0].type == \"UPDATE\"\n ) {\n onUpdate(actionQueue[0].element.id);\n actionQueueHandler(actionQueue.slice(1));\n }\n }, [actionQueue, selected, onUpdate]);\n\n const { i18n } = useTranslationContext();\n\n return (\n <div class=\"card has-table\">\n <header class=\"card-header\">\n <p class=\"card-header-title\">\n <span class=\"icon\">\n <i class=\"mdi mdi-desktop-mac\" />\n </span>\n <i18n.Translate>Instances</i18n.Translate>\n </p>\n\n <div class=\"card-header-icon\" aria-label=\"more options\">\n <button\n class={rowSelection.length > 0 ? \"button is-danger\" : \"is-hidden\"}\n type=\"button\"\n onClick={(): void =>\n actionQueueHandler(\n buildActions(instances, rowSelection, \"DELETE\"),\n )\n }\n >\n <i18n.Translate>Delete</i18n.Translate>\n </button>\n </div>\n <div class=\"card-header-icon\" aria-label=\"more options\">\n <span\n class=\"has-tooltip-left\"\n data-tooltip={i18n.str`add new instance`}\n >\n <button class=\"button is-info\" type=\"button\" onClick={onCreate}>\n <span class=\"icon is-small\">\n <i class=\"mdi mdi-plus mdi-36px\" />\n </span>\n </button>\n </span>\n </div>\n </header>\n <div class=\"card-content\">\n <div class=\"b-table has-pagination\">\n <div class=\"table-wrapper has-mobile-cards\">\n {instances.length > 0 ? (\n <Table\n instances={instances}\n onPurge={onPurge}\n onUpdate={onUpdate}\n setInstanceName={setInstanceName}\n onDelete={onDelete}\n rowSelection={rowSelection}\n rowSelectionHandler={rowSelectionHandler}\n />\n ) : (\n <EmptyTable />\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\ninterface TableProps {\n rowSelection: string[];\n instances: MerchantBackend.Instances.Instance[];\n onUpdate: (id: string) => void;\n onDelete: (id: MerchantBackend.Instances.Instance) => void;\n onPurge: (id: MerchantBackend.Instances.Instance) => void;\n rowSelectionHandler: StateUpdater<string[]>;\n setInstanceName: (s: string) => void;\n}\n\nfunction toggleSelected<T>(id: T): (prev: T[]) => T[] {\n return (prev: T[]): T[] =>\n prev.indexOf(id) == -1 ? [...prev, id] : prev.filter((e) => e != id);\n}\n\nfunction Table({\n rowSelection,\n rowSelectionHandler,\n setInstanceName,\n instances,\n onUpdate,\n onDelete,\n onPurge,\n}: TableProps): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"table-container\">\n <table class=\"table is-fullwidth is-striped is-hoverable is-fullwidth\">\n <thead>\n <tr>\n <th class=\"is-checkbox-cell\">\n <label class=\"b-checkbox checkbox\">\n <input\n type=\"checkbox\"\n checked={rowSelection.length === instances.length}\n onClick={(): void =>\n rowSelectionHandler(\n rowSelection.length === instances.length\n ? []\n : instances.map((i) => i.id),\n )\n }\n />\n <span class=\"check\" />\n </label>\n </th>\n <th>\n <i18n.Translate>ID</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Name</i18n.Translate>\n </th>\n <th />\n </tr>\n </thead>\n <tbody>\n {instances.map((i) => {\n return (\n <tr key={i.id}>\n <td class=\"is-checkbox-cell\">\n <label class=\"b-checkbox checkbox\">\n <input\n type=\"checkbox\"\n checked={rowSelection.indexOf(i.id) != -1}\n onClick={(): void =>\n rowSelectionHandler(toggleSelected(i.id))\n }\n />\n <span class=\"check\" />\n </label>\n </td>\n <td>\n <a\n href={`#/orders?instance=${i.id}`}\n onClick={(e) => {\n setInstanceName(i.id);\n }}\n >\n {i.id}\n </a>\n </td>\n <td>{i.name}</td>\n <td class=\"is-actions-cell right-sticky\">\n <div class=\"buttons is-right\">\n <button\n class=\"button is-small is-success jb-modal\"\n type=\"button\"\n onClick={(): void => onUpdate(i.id)}\n >\n <i18n.Translate>Edit</i18n.Translate>\n </button>\n {!i.deleted && (\n <button\n class=\"button is-small is-danger jb-modal is-outlined\"\n type=\"button\"\n onClick={(): void => onDelete(i)}\n >\n <i18n.Translate>Delete</i18n.Translate>\n </button>\n )}\n {i.deleted && (\n <button\n class=\"button is-small is-danger jb-modal\"\n type=\"button\"\n onClick={(): void => onPurge(i)}\n >\n <i18n.Translate>Purge</i18n.Translate>\n </button>\n )}\n </div>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n}\n\nfunction EmptyTable(): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"content has-text-grey has-text-centered\">\n <p>\n <span class=\"icon is-large\">\n <i class=\"mdi mdi-emoticon-sad mdi-48px\" />\n </span>\n </p>\n <p>\n <i18n.Translate>\n There is no instances yet, add more pressing the + sign\n </i18n.Translate>\n </p>\n </div>\n );\n}\n\ninterface Actions {\n element: MerchantBackend.Instances.Instance;\n type: \"DELETE\" | \"UPDATE\";\n}\n\nfunction notEmpty<TValue>(value: TValue | null | undefined): value is TValue {\n return value !== null && value !== undefined;\n}\n\nfunction buildActions(\n instances: MerchantBackend.Instances.Instance[],\n selected: string[],\n action: \"DELETE\",\n): Actions[] {\n return selected\n .map((id) => instances.find((i) => i.id === id))\n .filter(notEmpty)\n .map((id) => ({ element: id, type: action }));\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { MerchantBackend } from \"../../../declaration.js\";\nimport { CardTable as CardTableActive } from \"./TableActive.js\";\n\ninterface Props {\n instances: MerchantBackend.Instances.Instance[];\n onCreate: () => void;\n onUpdate: (id: string) => void;\n onDelete: (id: MerchantBackend.Instances.Instance) => void;\n onPurge: (id: MerchantBackend.Instances.Instance) => void;\n selected?: boolean;\n setInstanceName: (s: string) => void;\n}\n\nexport function View({\n instances,\n onCreate,\n onDelete,\n onPurge,\n onUpdate,\n setInstanceName,\n selected,\n}: Props): VNode {\n const [show, setShow] = useState<\"active\" | \"deleted\" | null>(\"active\");\n const showIsActive = show === \"active\" ? \"is-active\" : \"\";\n const showIsDeleted = show === \"deleted\" ? \"is-active\" : \"\";\n const showAll = show === null ? \"is-active\" : \"\";\n const { i18n } = useTranslationContext();\n\n const showingInstances = showIsDeleted\n ? instances.filter((i) => i.deleted)\n : showIsActive\n ? instances.filter((i) => !i.deleted)\n : instances;\n\n return (\n <section class=\"section is-main-section\">\n <div class=\"columns\">\n <div class=\"column is-two-thirds\">\n <div class=\"tabs\" style={{ overflow: \"inherit\" }}>\n <ul>\n <li class={showIsActive}>\n <div\n class=\"has-tooltip-right\"\n data-tooltip={i18n.str`Only show active instances`}\n >\n <a onClick={() => setShow(\"active\")}>\n <i18n.Translate>Active</i18n.Translate>\n </a>\n </div>\n </li>\n <li class={showIsDeleted}>\n <div\n class=\"has-tooltip-right\"\n data-tooltip={i18n.str`Only show deleted instances`}\n >\n <a onClick={() => setShow(\"deleted\")}>\n <i18n.Translate>Deleted</i18n.Translate>\n </a>\n </div>\n </li>\n <li class={showAll}>\n <div\n class=\"has-tooltip-right\"\n data-tooltip={i18n.str`Show all instances`}\n >\n <a onClick={() => setShow(null)}>\n <i18n.Translate>All</i18n.Translate>\n </a>\n </div>\n </li>\n </ul>\n </div>\n </div>\n </div>\n <CardTableActive\n instances={showingInstances}\n onDelete={onDelete}\n onPurge={onPurge}\n setInstanceName={setInstanceName}\n onUpdate={onUpdate}\n selected={selected}\n onCreate={onCreate}\n />\n </section>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport {\n HttpError,\n useTranslationContext,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { Loading } from \"../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../components/menu/index.js\";\nimport { DeleteModal, PurgeModal } from \"../../../components/modal/index.js\";\nimport { MerchantBackend } from \"../../../declaration.js\";\nimport { useAdminAPI, useBackendInstances } from \"../../../hooks/instance.js\";\nimport { Notification } from \"../../../utils/types.js\";\nimport { View } from \"./View.js\";\n\ninterface Props {\n onCreate: () => void;\n onUpdate: (id: string) => void;\n instances: MerchantBackend.Instances.Instance[];\n onUnauthorized: () => VNode;\n onNotFound: () => VNode;\n onLoadError: (error: HttpError<MerchantBackend.ErrorDetail>) => VNode;\n setInstanceName: (s: string) => void;\n}\n\nexport default function Instances({\n onUnauthorized,\n onLoadError,\n onNotFound,\n onCreate,\n onUpdate,\n setInstanceName,\n}: Props): VNode {\n const result = useBackendInstances();\n const [deleting, setDeleting] =\n useState<MerchantBackend.Instances.Instance | null>(null);\n const [purging, setPurging] =\n useState<MerchantBackend.Instances.Instance | null>(null);\n const { deleteInstance, purgeInstance } = useAdminAPI();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { i18n } = useTranslationContext();\n\n if (result.clientError && result.isUnauthorized) return onUnauthorized();\n if (result.clientError && result.isNotfound) return onNotFound();\n if (result.loading) return <Loading />;\n if (!result.ok) return onLoadError(result);\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n <View\n instances={result.data.instances}\n onDelete={setDeleting}\n onCreate={onCreate}\n onPurge={setPurging}\n onUpdate={onUpdate}\n setInstanceName={setInstanceName}\n selected={!!deleting}\n />\n {deleting && (\n <DeleteModal\n element={deleting}\n onCancel={() => setDeleting(null)}\n onConfirm={async (): Promise<void> => {\n try {\n await deleteInstance(deleting.id);\n // pushNotification({ message: 'delete_success', type: 'SUCCESS' })\n setNotif({\n message: i18n.str`Instance '${deleting.name}' (ID: ${deleting.id}) has been deleted`,\n type: \"SUCCESS\",\n });\n } catch (error) {\n setNotif({\n message: i18n.str`Failed to delete instance`,\n type: \"ERROR\",\n description: error instanceof Error ? error.message : undefined,\n });\n // pushNotification({ message: 'delete_error', type: 'ERROR' })\n }\n setDeleting(null);\n }}\n />\n )}\n {purging && (\n <PurgeModal\n element={purging}\n onCancel={() => setPurging(null)}\n onConfirm={async (): Promise<void> => {\n try {\n await purgeInstance(purging.id);\n setNotif({\n message: i18n.str`Instance '${purging.name}' (ID: ${purging.id}) has been disabled`,\n type: \"SUCCESS\",\n });\n } catch (error) {\n setNotif({\n message: i18n.str`Failed to purge instance`,\n type: \"ERROR\",\n description: error instanceof Error ? error.message : undefined,\n });\n }\n setPurging(null);\n }}\n />\n )}\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\n\nexport interface Props {\n status: MerchantBackend.Instances.AccountKycRedirects;\n}\n\nexport function ListPage({ status }: Props): VNode {\n const { i18n } = useTranslationContext();\n\n return (\n <section class=\"section is-main-section\">\n <div class=\"card has-table\">\n <header class=\"card-header\">\n <p class=\"card-header-title\">\n <span class=\"icon\">\n <i class=\"mdi mdi-clock\" />\n </span>\n <i18n.Translate>Pending KYC verification</i18n.Translate>\n </p>\n\n <div class=\"card-header-icon\" aria-label=\"more options\" />\n </header>\n <div class=\"card-content\">\n <div class=\"b-table has-pagination\">\n <div class=\"table-wrapper has-mobile-cards\">\n {status.pending_kycs.length > 0 ? (\n <PendingTable entries={status.pending_kycs} />\n ) : (\n <EmptyTable />\n )}\n </div>\n </div>\n </div>\n </div>\n\n {status.timeout_kycs.length > 0 ? (\n <div class=\"card has-table\">\n <header class=\"card-header\">\n <p class=\"card-header-title\">\n <span class=\"icon\">\n <i class=\"mdi mdi-clock\" />\n </span>\n <i18n.Translate>Timed out</i18n.Translate>\n </p>\n\n <div class=\"card-header-icon\" aria-label=\"more options\" />\n </header>\n <div class=\"card-content\">\n <div class=\"b-table has-pagination\">\n <div class=\"table-wrapper has-mobile-cards\">\n {status.timeout_kycs.length > 0 ? (\n <TimedOutTable entries={status.timeout_kycs} />\n ) : (\n <EmptyTable />\n )}\n </div>\n </div>\n </div>\n </div>\n ) : undefined}\n </section>\n );\n}\ninterface PendingTableProps {\n entries: MerchantBackend.Instances.MerchantAccountKycRedirect[];\n}\n\ninterface TimedOutTableProps {\n entries: MerchantBackend.Instances.ExchangeKycTimeout[];\n}\n\nfunction PendingTable({ entries }: PendingTableProps): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"table-container\">\n <table class=\"table is-striped is-hoverable is-fullwidth\">\n <thead>\n <tr>\n <th>\n <i18n.Translate>Exchange</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Target account</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>KYC URL</i18n.Translate>\n </th>\n </tr>\n </thead>\n <tbody>\n {entries.map((e, i) => {\n return (\n <tr key={i}>\n <td>{e.exchange_url}</td>\n <td>{e.payto_uri}</td>\n <td>\n <a href={e.kyc_url} target=\"_black\" rel=\"noreferrer\">\n {e.kyc_url}\n </a>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n}\n\nfunction TimedOutTable({ entries }: TimedOutTableProps): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"table-container\">\n <table class=\"table is-striped is-hoverable is-fullwidth\">\n <thead>\n <tr>\n <th>\n <i18n.Translate>Exchange</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Code</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Http Status</i18n.Translate>\n </th>\n </tr>\n </thead>\n <tbody>\n {entries.map((e, i) => {\n return (\n <tr key={i}>\n <td>{e.exchange_url}</td>\n <td>{e.exchange_code}</td>\n <td>{e.exchange_http_status}</td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n}\n\nfunction EmptyTable(): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"content has-text-grey has-text-centered\">\n <p>\n <span class=\"icon is-large\">\n <i class=\"mdi mdi-emoticon-happy mdi-48px\" />\n </span>\n </p>\n <p>\n <i18n.Translate>No pending kyc verification!</i18n.Translate>\n </p>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { HttpError } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport { useInstanceKYCDetails } from \"../../../../hooks/instance.js\";\nimport { ListPage } from \"./ListPage.js\";\n\ninterface Props {\n onUnauthorized: () => VNode;\n onLoadError: (error: HttpError<MerchantBackend.ErrorDetail>) => VNode;\n onNotFound: () => VNode;\n}\n\nexport default function ListKYC({\n onUnauthorized,\n onLoadError,\n onNotFound,\n}: Props): VNode {\n const result = useInstanceKYCDetails();\n if (result.clientError && result.isUnauthorized) return onUnauthorized();\n if (result.clientError && result.isNotfound) return onNotFound();\n if (result.loading) return <Loading />;\n if (!result.ok) return onLoadError(result);\n\n const status = result.data.type === \"ok\" ? undefined : result.data.status;\n\n if (!status) {\n return <div>no kyc required</div>;\n }\n return <ListPage status={status} />;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\nimport {\n HttpResponse,\n HttpResponseOk,\n HttpResponsePaginated,\n RequestError,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { MerchantBackend } from \"../declaration.js\";\nimport { MAX_RESULT_SIZE, PAGE_SIZE } from \"../utils/constants.js\";\nimport { useBackendInstanceRequest, useMatchMutate } from \"./backend.js\";\n\n// FIX default import https://github.com/microsoft/TypeScript/issues/49189\nimport _useSWR, { SWRHook } from \"swr\";\nconst useSWR = _useSWR as unknown as SWRHook;\n\nexport interface OrderAPI {\n //FIXME: add OutOfStockResponse on 410\n createOrder: (\n data: MerchantBackend.Orders.PostOrderRequest,\n ) => Promise<HttpResponseOk<MerchantBackend.Orders.PostOrderResponse>>;\n forgetOrder: (\n id: string,\n data: MerchantBackend.Orders.ForgetRequest,\n ) => Promise<HttpResponseOk<void>>;\n refundOrder: (\n id: string,\n data: MerchantBackend.Orders.RefundRequest,\n ) => Promise<HttpResponseOk<MerchantBackend.Orders.MerchantRefundResponse>>;\n deleteOrder: (id: string) => Promise<HttpResponseOk<void>>;\n getPaymentURL: (id: string) => Promise<HttpResponseOk<string>>;\n}\n\ntype YesOrNo = \"yes\" | \"no\";\n\nexport function useOrderAPI(): OrderAPI {\n const mutateAll = useMatchMutate();\n const { request } = useBackendInstanceRequest();\n\n const createOrder = async (\n data: MerchantBackend.Orders.PostOrderRequest,\n ): Promise<HttpResponseOk<MerchantBackend.Orders.PostOrderResponse>> => {\n const res = await request<MerchantBackend.Orders.PostOrderResponse>(\n `/private/orders`,\n {\n method: \"POST\",\n data,\n },\n );\n await mutateAll(/.*private\\/orders.*/);\n // mutate('')\n return res;\n };\n const refundOrder = async (\n orderId: string,\n data: MerchantBackend.Orders.RefundRequest,\n ): Promise<HttpResponseOk<MerchantBackend.Orders.MerchantRefundResponse>> => {\n mutateAll(/@\"\\/private\\/orders\"@/);\n const res = request<MerchantBackend.Orders.MerchantRefundResponse>(\n `/private/orders/${orderId}/refund`,\n {\n method: \"POST\",\n data,\n },\n );\n\n // order list returns refundable information, so we must evict everything\n await mutateAll(/.*private\\/orders.*/);\n return res;\n };\n\n const forgetOrder = async (\n orderId: string,\n data: MerchantBackend.Orders.ForgetRequest,\n ): Promise<HttpResponseOk<void>> => {\n mutateAll(/@\"\\/private\\/orders\"@/);\n const res = request<void>(`/private/orders/${orderId}/forget`, {\n method: \"PATCH\",\n data,\n });\n // we may be forgetting some fields that are pare of the listing, so we must evict everything\n await mutateAll(/.*private\\/orders.*/);\n return res;\n };\n const deleteOrder = async (\n orderId: string,\n ): Promise<HttpResponseOk<void>> => {\n mutateAll(/@\"\\/private\\/orders\"@/);\n const res = request<void>(`/private/orders/${orderId}`, {\n method: \"DELETE\",\n });\n await mutateAll(/.*private\\/orders.*/);\n return res;\n };\n\n const getPaymentURL = async (\n orderId: string,\n ): Promise<HttpResponseOk<string>> => {\n return request<MerchantBackend.Orders.MerchantOrderStatusResponse>(\n `/private/orders/${orderId}`,\n {\n method: \"GET\",\n },\n ).then((res) => {\n const url =\n res.data.order_status === \"unpaid\"\n ? res.data.taler_pay_uri\n : res.data.contract_terms.fulfillment_url;\n const response: HttpResponseOk<string> = res as any;\n response.data = url || \"\";\n return response;\n });\n };\n\n return { createOrder, forgetOrder, deleteOrder, refundOrder, getPaymentURL };\n}\n\nexport function useOrderDetails(\n oderId: string,\n): HttpResponse<\n MerchantBackend.Orders.MerchantOrderStatusResponse,\n MerchantBackend.ErrorDetail\n> {\n const { fetcher } = useBackendInstanceRequest();\n\n const { data, error, isValidating } = useSWR<\n HttpResponseOk<MerchantBackend.Orders.MerchantOrderStatusResponse>,\n RequestError<MerchantBackend.ErrorDetail>\n >([`/private/orders/${oderId}`], fetcher, {\n refreshInterval: 0,\n refreshWhenHidden: false,\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n refreshWhenOffline: false,\n });\n\n if (isValidating) return { loading: true, data: data?.data };\n if (data) return data;\n if (error) return error.info;\n return { loading: true };\n}\n\nexport interface InstanceOrderFilter {\n paid?: YesOrNo;\n refunded?: YesOrNo;\n wired?: YesOrNo;\n date?: Date;\n}\n\nexport function useInstanceOrders(\n args?: InstanceOrderFilter,\n updateFilter?: (d: Date) => void,\n): HttpResponsePaginated<\n MerchantBackend.Orders.OrderHistory,\n MerchantBackend.ErrorDetail\n> {\n const { orderFetcher } = useBackendInstanceRequest();\n\n const [pageBefore, setPageBefore] = useState(1);\n const [pageAfter, setPageAfter] = useState(1);\n\n const totalAfter = pageAfter * PAGE_SIZE;\n const totalBefore = args?.date ? pageBefore * PAGE_SIZE : 0;\n\n /**\n * FIXME: this can be cleaned up a little\n *\n * the logic of double query should be inside the orderFetch so from the hook perspective and cache\n * is just one query and one error status\n */\n const {\n data: beforeData,\n error: beforeError,\n isValidating: loadingBefore,\n } = useSWR<\n HttpResponseOk<MerchantBackend.Orders.OrderHistory>,\n RequestError<MerchantBackend.ErrorDetail>\n >(\n [\n `/private/orders`,\n args?.paid,\n args?.refunded,\n args?.wired,\n args?.date,\n totalBefore,\n ],\n orderFetcher,\n );\n const {\n data: afterData,\n error: afterError,\n isValidating: loadingAfter,\n } = useSWR<\n HttpResponseOk<MerchantBackend.Orders.OrderHistory>,\n RequestError<MerchantBackend.ErrorDetail>\n >(\n [\n `/private/orders`,\n args?.paid,\n args?.refunded,\n args?.wired,\n args?.date,\n -totalAfter,\n ],\n orderFetcher,\n );\n\n //this will save last result\n const [lastBefore, setLastBefore] = useState<\n HttpResponse<\n MerchantBackend.Orders.OrderHistory,\n MerchantBackend.ErrorDetail\n >\n >({ loading: true });\n const [lastAfter, setLastAfter] = useState<\n HttpResponse<\n MerchantBackend.Orders.OrderHistory,\n MerchantBackend.ErrorDetail\n >\n >({ loading: true });\n useEffect(() => {\n if (afterData) setLastAfter(afterData);\n if (beforeData) setLastBefore(beforeData);\n }, [afterData, beforeData]);\n\n if (beforeError) return beforeError.info;\n if (afterError) return afterError.info;\n\n // if the query returns less that we ask, then we have reach the end or beginning\n const isReachingEnd = afterData && afterData.data.orders.length < totalAfter;\n const isReachingStart =\n args?.date === undefined ||\n (beforeData && beforeData.data.orders.length < totalBefore);\n\n const pagination = {\n isReachingEnd,\n isReachingStart,\n loadMore: () => {\n if (!afterData || isReachingEnd) return;\n if (afterData.data.orders.length < MAX_RESULT_SIZE) {\n setPageAfter(pageAfter + 1);\n } else {\n const from =\n afterData.data.orders[afterData.data.orders.length - 1].timestamp.t_s;\n if (from && from !== \"never\" && updateFilter)\n updateFilter(new Date(from * 1000));\n }\n },\n loadMorePrev: () => {\n if (!beforeData || isReachingStart) return;\n if (beforeData.data.orders.length < MAX_RESULT_SIZE) {\n setPageBefore(pageBefore + 1);\n } else if (beforeData) {\n const from =\n beforeData.data.orders[beforeData.data.orders.length - 1].timestamp\n .t_s;\n if (from && from !== \"never\" && updateFilter)\n updateFilter(new Date(from * 1000));\n }\n },\n };\n\n const orders =\n !beforeData || !afterData\n ? []\n : (beforeData || lastBefore).data.orders\n .slice()\n .reverse()\n .concat((afterData || lastAfter).data.orders);\n if (loadingAfter || loadingBefore) return { loading: true, data: { orders } };\n if (beforeData && afterData) {\n return { ok: true, data: { orders }, ...pagination };\n }\n return { loading: true };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\nimport {\n HttpResponse,\n HttpResponseOk,\n RequestError,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { MerchantBackend, WithId } from \"../declaration.js\";\nimport { useBackendInstanceRequest, useMatchMutate } from \"./backend.js\";\n\n// FIX default import https://github.com/microsoft/TypeScript/issues/49189\nimport _useSWR, { SWRHook, useSWRConfig } from \"swr\";\nconst useSWR = _useSWR as unknown as SWRHook;\n\nexport interface ProductAPI {\n createProduct: (\n data: MerchantBackend.Products.ProductAddDetail,\n ) => Promise<void>;\n updateProduct: (\n id: string,\n data: MerchantBackend.Products.ProductPatchDetail,\n ) => Promise<void>;\n deleteProduct: (id: string) => Promise<void>;\n lockProduct: (\n id: string,\n data: MerchantBackend.Products.LockRequest,\n ) => Promise<void>;\n}\n\nexport function useProductAPI(): ProductAPI {\n const mutateAll = useMatchMutate();\n const { mutate } = useSWRConfig();\n\n const { request } = useBackendInstanceRequest();\n\n const createProduct = async (\n data: MerchantBackend.Products.ProductAddDetail,\n ): Promise<void> => {\n const res = await request(`/private/products`, {\n method: \"POST\",\n data,\n });\n\n return await mutateAll(/.*\"\\/private\\/products.*/);\n };\n\n const updateProduct = async (\n productId: string,\n data: MerchantBackend.Products.ProductPatchDetail,\n ): Promise<void> => {\n const r = await request(`/private/products/${productId}`, {\n method: \"PATCH\",\n data,\n });\n\n return await mutateAll(/.*\"\\/private\\/products.*/);\n };\n\n const deleteProduct = async (productId: string): Promise<void> => {\n await request(`/private/products/${productId}`, {\n method: \"DELETE\",\n });\n await mutate([`/private/products`]);\n };\n\n const lockProduct = async (\n productId: string,\n data: MerchantBackend.Products.LockRequest,\n ): Promise<void> => {\n await request(`/private/products/${productId}/lock`, {\n method: \"POST\",\n data,\n });\n\n return await mutateAll(/.*\"\\/private\\/products.*/);\n };\n\n return { createProduct, updateProduct, deleteProduct, lockProduct };\n}\n\nexport function useInstanceProducts(): HttpResponse<\n (MerchantBackend.Products.ProductDetail & WithId)[],\n MerchantBackend.ErrorDetail\n> {\n const { fetcher, multiFetcher } = useBackendInstanceRequest();\n\n const { data: list, error: listError } = useSWR<\n HttpResponseOk<MerchantBackend.Products.InventorySummaryResponse>,\n RequestError<MerchantBackend.ErrorDetail>\n >([`/private/products`], fetcher, {\n refreshInterval: 0,\n refreshWhenHidden: false,\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n refreshWhenOffline: false,\n });\n\n const paths = (list?.data.products || []).map(\n (p) => `/private/products/${p.product_id}`,\n );\n const { data: products, error: productError } = useSWR<\n HttpResponseOk<MerchantBackend.Products.ProductDetail>[],\n RequestError<MerchantBackend.ErrorDetail>\n >([paths], multiFetcher, {\n refreshInterval: 0,\n refreshWhenHidden: false,\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n refreshWhenOffline: false,\n });\n\n if (listError) return listError.info;\n if (productError) return productError.info;\n\n if (products) {\n const dataWithId = products.map((d) => {\n //take the id from the queried url\n return {\n ...d.data,\n id: d.info?.url.replace(/.*\\/private\\/products\\//, \"\") || \"\",\n };\n });\n return { ok: true, data: dataWithId };\n }\n return { loading: true };\n}\n\nexport function useProductDetails(\n productId: string,\n): HttpResponse<\n MerchantBackend.Products.ProductDetail,\n MerchantBackend.ErrorDetail\n> {\n const { fetcher } = useBackendInstanceRequest();\n\n const { data, error, isValidating } = useSWR<\n HttpResponseOk<MerchantBackend.Products.ProductDetail>,\n RequestError<MerchantBackend.ErrorDetail>\n >([`/private/products/${productId}`], fetcher, {\n refreshInterval: 0,\n refreshWhenHidden: false,\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n refreshWhenOffline: false,\n });\n\n if (isValidating) return { loading: true, data: data?.data };\n if (data) return data;\n if (error) return error.info;\n return { loading: true };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { h, VNode } from \"preact\";\nimport { InputProps, useField } from \"./useField.js\";\n\ninterface Props<T> extends InputProps<T> {\n name: T;\n readonly?: boolean;\n expand?: boolean;\n threeState?: boolean;\n toBoolean?: (v?: any) => boolean | undefined;\n fromBoolean?: (s: boolean | undefined) => any;\n}\n\nconst defaultToBoolean = (f?: any): boolean | undefined => f || \"\";\nconst defaultFromBoolean = (v: boolean | undefined): any => v as any;\n\nexport function InputBoolean<T>({\n name,\n readonly,\n placeholder,\n tooltip,\n label,\n help,\n threeState,\n expand,\n fromBoolean = defaultFromBoolean,\n toBoolean = defaultToBoolean,\n}: Props<keyof T>): VNode {\n const { error, value, onChange } = useField<T>(name);\n\n const onCheckboxClick = (): void => {\n const c = toBoolean(value);\n if (c === false && threeState) return onChange(undefined as any);\n return onChange(fromBoolean(!c));\n };\n\n return (\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">\n {label}\n {tooltip && (\n <span class=\"icon has-tooltip-right\" data-tooltip={tooltip}>\n <i class=\"mdi mdi-information\" />\n </span>\n )}\n </label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n <p class={expand ? \"control is-expanded\" : \"control\"}>\n <label class=\"b-checkbox checkbox\">\n <input\n type=\"checkbox\"\n class={toBoolean(value) === undefined ? \"is-indeterminate\" : \"\"}\n checked={toBoolean(value)}\n placeholder={placeholder}\n readonly={readonly}\n name={String(name)}\n disabled={readonly}\n onChange={onCheckboxClick}\n />\n <span class=\"check\" />\n </label>\n {help}\n </p>\n {error && <p class=\"help is-danger\">{error}</p>}\n </div>\n </div>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { h, Component } from \"preact\";\n\ninterface Props {\n closeFunction?: () => void;\n dateReceiver?: (d: Date) => void;\n opened?: boolean;\n}\ninterface State {\n displayedMonth: number;\n displayedYear: number;\n selectYearMode: boolean;\n currentDate: Date;\n}\n\n// inspired by https://codepen.io/m4r1vs/pen/MOOxyE\nexport class DatePicker extends Component<Props, State> {\n closeDatePicker() {\n this.props.closeFunction && this.props.closeFunction(); // Function gets passed by parent\n }\n\n /**\n * Gets fired when a day gets clicked.\n * @param {object} e The event thrown by the <span /> element clicked\n */\n dayClicked(e: any) {\n const element = e.target; // the actual element clicked\n\n if (element.innerHTML === \"\") return false; // don't continue if <span /> empty\n\n // get date from clicked element (gets attached when rendered)\n const date = new Date(element.getAttribute(\"data-value\"));\n\n // update the state\n this.setState({ currentDate: date });\n this.passDateToParent(date);\n }\n\n /**\n * returns days in month as array\n * @param {number} month the month to display\n * @param {number} year the year to display\n */\n getDaysByMonth(month: number, year: number) {\n const calendar = [];\n\n const date = new Date(year, month, 1); // month to display\n\n const firstDay = new Date(year, month, 1).getDay(); // first weekday of month\n const lastDate = new Date(year, month + 1, 0).getDate(); // last date of month\n\n let day: number | null = 0;\n\n // the calendar is 7*6 fields big, so 42 loops\n for (let i = 0; i < 42; i++) {\n if (i >= firstDay && day !== null) day = day + 1;\n if (day !== null && day > lastDate) day = null;\n\n // append the calendar Array\n calendar.push({\n day: day === 0 || day === null ? null : day, // null or number\n date: day === 0 || day === null ? null : new Date(year, month, day), // null or Date()\n today:\n day === now.getDate() &&\n month === now.getMonth() &&\n year === now.getFullYear(), // boolean\n });\n }\n\n return calendar;\n }\n\n /**\n * Display previous month by updating state\n */\n displayPrevMonth() {\n if (this.state.displayedMonth <= 0) {\n this.setState({\n displayedMonth: 11,\n displayedYear: this.state.displayedYear - 1,\n });\n } else {\n this.setState({\n displayedMonth: this.state.displayedMonth - 1,\n });\n }\n }\n\n /**\n * Display next month by updating state\n */\n displayNextMonth() {\n if (this.state.displayedMonth >= 11) {\n this.setState({\n displayedMonth: 0,\n displayedYear: this.state.displayedYear + 1,\n });\n } else {\n this.setState({\n displayedMonth: this.state.displayedMonth + 1,\n });\n }\n }\n\n /**\n * Display the selected month (gets fired when clicking on the date string)\n */\n displaySelectedMonth() {\n if (this.state.selectYearMode) {\n this.toggleYearSelector();\n } else {\n if (!this.state.currentDate) return false;\n this.setState({\n displayedMonth: this.state.currentDate.getMonth(),\n displayedYear: this.state.currentDate.getFullYear(),\n });\n }\n }\n\n toggleYearSelector() {\n this.setState({ selectYearMode: !this.state.selectYearMode });\n }\n\n changeDisplayedYear(e: any) {\n const element = e.target;\n this.toggleYearSelector();\n this.setState({\n displayedYear: parseInt(element.innerHTML, 10),\n displayedMonth: 0,\n });\n }\n\n /**\n * Pass the selected date to parent when 'OK' is clicked\n */\n passSavedDateDateToParent() {\n this.passDateToParent(this.state.currentDate);\n }\n passDateToParent(date: Date) {\n if (typeof this.props.dateReceiver === \"function\")\n this.props.dateReceiver(date);\n this.closeDatePicker();\n }\n\n componentDidUpdate() {\n if (this.state.selectYearMode) {\n document.getElementsByClassName(\"selected\")[0].scrollIntoView(); // works in every browser incl. IE, replace with scrollIntoViewIfNeeded when browsers support it\n }\n }\n\n constructor() {\n super();\n\n this.closeDatePicker = this.closeDatePicker.bind(this);\n this.dayClicked = this.dayClicked.bind(this);\n this.displayNextMonth = this.displayNextMonth.bind(this);\n this.displayPrevMonth = this.displayPrevMonth.bind(this);\n this.getDaysByMonth = this.getDaysByMonth.bind(this);\n this.changeDisplayedYear = this.changeDisplayedYear.bind(this);\n this.passDateToParent = this.passDateToParent.bind(this);\n this.toggleYearSelector = this.toggleYearSelector.bind(this);\n this.displaySelectedMonth = this.displaySelectedMonth.bind(this);\n\n this.state = {\n currentDate: now,\n displayedMonth: now.getMonth(),\n displayedYear: now.getFullYear(),\n selectYearMode: false,\n };\n }\n\n render() {\n const { currentDate, displayedMonth, displayedYear, selectYearMode } =\n this.state;\n\n return (\n <div>\n <div class={`datePicker ${this.props.opened && \"datePicker--opened\"}`}>\n <div class=\"datePicker--titles\">\n <h3\n style={{\n color: selectYearMode\n ? \"rgba(255,255,255,.87)\"\n : \"rgba(255,255,255,.57)\",\n }}\n onClick={this.toggleYearSelector}\n >\n {currentDate.getFullYear()}\n </h3>\n <h2\n style={{\n color: !selectYearMode\n ? \"rgba(255,255,255,.87)\"\n : \"rgba(255,255,255,.57)\",\n }}\n onClick={this.displaySelectedMonth}\n >\n {dayArr[currentDate.getDay()]},{\" \"}\n {monthArrShort[currentDate.getMonth()]} {currentDate.getDate()}\n </h2>\n </div>\n\n {!selectYearMode && (\n <nav>\n <span onClick={this.displayPrevMonth} class=\"icon\">\n <i\n style={{ transform: \"rotate(180deg)\" }}\n class=\"mdi mdi-forward\"\n />\n </span>\n <h4>\n {monthArrShortFull[displayedMonth]} {displayedYear}\n </h4>\n <span onClick={this.displayNextMonth} class=\"icon\">\n <i class=\"mdi mdi-forward\" />\n </span>\n </nav>\n )}\n\n <div class=\"datePicker--scroll\">\n {!selectYearMode && (\n <div class=\"datePicker--calendar\">\n <div class=\"datePicker--dayNames\">\n {[\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"].map((day, i) => (\n <span key={i}>{day}</span>\n ))}\n </div>\n\n <div onClick={this.dayClicked} class=\"datePicker--days\">\n {/*\n Loop through the calendar object returned by getDaysByMonth().\n */}\n\n {this.getDaysByMonth(\n this.state.displayedMonth,\n this.state.displayedYear,\n ).map((day) => {\n let selected = false;\n\n if (currentDate && day.date)\n selected =\n currentDate.toLocaleDateString() ===\n day.date.toLocaleDateString();\n\n return (\n <span\n key={day.day}\n class={\n (day.today ? \"datePicker--today \" : \"\") +\n (selected ? \"datePicker--selected\" : \"\")\n }\n disabled={!day.date}\n data-value={day.date}\n >\n {day.day}\n </span>\n );\n })}\n </div>\n </div>\n )}\n\n {selectYearMode && (\n <div class=\"datePicker--selectYear\">\n {yearArr.map((year) => (\n <span\n key={year}\n class={year === displayedYear ? \"selected\" : \"\"}\n onClick={this.changeDisplayedYear}\n >\n {year}\n </span>\n ))}\n </div>\n )}\n </div>\n </div>\n\n <div\n class=\"datePicker--background\"\n onClick={this.closeDatePicker}\n style={{\n display: this.props.opened ? \"block\" : \"none\",\n }}\n />\n </div>\n );\n }\n}\n\nconst monthArrShortFull = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n];\n\nconst monthArrShort = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n];\n\nconst dayArr = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\n\nconst now = new Date();\n\nconst yearArr: number[] = [];\n\nfor (let i = 2010; i <= now.getFullYear() + 10; i++) {\n yearArr.push(i);\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { format } from \"date-fns\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { DatePicker } from \"../picker/DatePicker.js\";\nimport { InputProps, useField } from \"./useField.js\";\n\nexport interface Props<T> extends InputProps<T> {\n readonly?: boolean;\n expand?: boolean;\n //FIXME: create separated components InputDate and InputTimestamp\n withTimestampSupport?: boolean;\n}\n\nexport function InputDate<T>({\n name,\n readonly,\n label,\n placeholder,\n help,\n tooltip,\n expand,\n withTimestampSupport,\n}: Props<keyof T>): VNode {\n const [opened, setOpened] = useState(false);\n const { i18n } = useTranslationContext();\n\n const { error, required, value, onChange } = useField<T>(name);\n\n let strValue = \"\";\n if (!value) {\n strValue = withTimestampSupport ? \"unknown\" : \"\";\n } else if (value instanceof Date) {\n strValue = format(value, \"yyyy/MM/dd\");\n } else if (value.t_s) {\n strValue =\n value.t_s === \"never\"\n ? withTimestampSupport\n ? \"never\"\n : \"\"\n : format(new Date(value.t_s * 1000), \"yyyy/MM/dd\");\n }\n\n return (\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">\n {label}\n {tooltip && (\n <span class=\"icon has-tooltip-right\" data-tooltip={tooltip}>\n <i class=\"mdi mdi-information\" />\n </span>\n )}\n </label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n <div class=\"field has-addons\">\n <p\n class={\n expand\n ? \"control is-expanded has-icons-right\"\n : \"control has-icons-right\"\n }\n >\n <input\n class=\"input\"\n type=\"text\"\n readonly\n value={strValue}\n placeholder={placeholder}\n onClick={() => {\n if (!readonly) setOpened(true);\n }}\n />\n {required && (\n <span class=\"icon has-text-danger is-right\">\n <i class=\"mdi mdi-alert\" />\n </span>\n )}\n {help}\n </p>\n <div\n class=\"control\"\n onClick={() => {\n if (!readonly) setOpened(true);\n }}\n >\n <a class=\"button is-static\">\n <span class=\"icon\">\n <i class=\"mdi mdi-calendar\" />\n </span>\n </a>\n </div>\n </div>\n {error && <p class=\"help is-danger\">{error}</p>}\n </div>\n\n {!readonly && (\n <span\n data-tooltip={\n withTimestampSupport\n ? i18n.str`change value to unknown date`\n : i18n.str`change value to empty`\n }\n >\n <button\n class=\"button is-info mr-3\"\n onClick={() => onChange(undefined as any)}\n >\n <i18n.Translate>clear</i18n.Translate>\n </button>\n </span>\n )}\n {withTimestampSupport && (\n <span data-tooltip={i18n.str`change value to never`}>\n <button\n class=\"button is-info\"\n onClick={() => onChange({ t_s: \"never\" } as any)}\n >\n <i18n.Translate>never</i18n.Translate>\n </button>\n </span>\n )}\n </div>\n <DatePicker\n opened={opened}\n closeFunction={() => setOpened(false)}\n dateReceiver={(d) => {\n if (withTimestampSupport) {\n onChange({ t_s: d.getTime() / 1000 } as any);\n } else {\n onChange(d as any);\n }\n }}\n />\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { ComponentChildren, h } from \"preact\";\nimport { InputWithAddon } from \"./InputWithAddon.js\";\nimport { InputProps } from \"./useField.js\";\n\nexport interface Props<T> extends InputProps<T> {\n readonly?: boolean;\n expand?: boolean;\n side?: ComponentChildren;\n children?: ComponentChildren;\n}\n\nexport function InputNumber<T>({\n name,\n readonly,\n placeholder,\n tooltip,\n label,\n help,\n expand,\n children,\n side,\n}: Props<keyof T>) {\n return (\n <InputWithAddon<T>\n name={name}\n readonly={readonly}\n fromStr={(v) => (!v ? undefined : parseInt(v, 10))}\n toStr={(v) => `${v}`}\n inputType=\"number\"\n expand={expand}\n label={label}\n placeholder={placeholder}\n help={help}\n tooltip={tooltip}\n inputExtra={{ min: 0 }}\n children={children}\n side={side}\n />\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport emptyImage from \"../../assets/empty.png\";\nimport { MerchantBackend, WithId } from \"../../declaration.js\";\nimport { FormErrors, FormProvider } from \"./FormProvider.js\";\nimport { InputWithAddon } from \"./InputWithAddon.js\";\n\ntype Entity = MerchantBackend.Products.ProductDetail & WithId;\n\nexport interface Props {\n selected?: Entity;\n onChange: (p?: Entity) => void;\n products: (MerchantBackend.Products.ProductDetail & WithId)[];\n}\n\ninterface ProductSearch {\n name: string;\n}\n\nexport function InputSearchProduct({\n selected,\n onChange,\n products,\n}: Props): VNode {\n const [prodForm, setProdName] = useState<Partial<ProductSearch>>({\n name: \"\",\n });\n\n const errors: FormErrors<ProductSearch> = {\n name: undefined,\n };\n const { i18n } = useTranslationContext();\n\n if (selected) {\n return (\n <article class=\"media\">\n <figure class=\"media-left\">\n <p class=\"image is-128x128\">\n <img src={selected.image ? selected.image : emptyImage} />\n </p>\n </figure>\n <div class=\"media-content\">\n <div class=\"content\">\n <p class=\"media-meta\">\n <i18n.Translate>Product id</i18n.Translate>: <b>{selected.id}</b>\n </p>\n <p>\n <i18n.Translate>Description</i18n.Translate>:{\" \"}\n {selected.description}\n </p>\n <div class=\"buttons is-right mt-5\">\n <button\n class=\"button is-info\"\n onClick={() => onChange(undefined)}\n >\n clear\n </button>\n </div>\n </div>\n </div>\n </article>\n );\n }\n\n return (\n <FormProvider<ProductSearch>\n errors={errors}\n object={prodForm}\n valueHandler={setProdName}\n >\n <InputWithAddon<ProductSearch>\n name=\"name\"\n label={i18n.str`Product`}\n tooltip={i18n.str`search products by it's description or id`}\n addonAfter={\n <span class=\"icon\">\n <i class=\"mdi mdi-magnify\" />\n </span>\n }\n >\n <div>\n <ProductList\n name={prodForm.name}\n list={products}\n onSelect={(p) => {\n setProdName({ name: \"\" });\n onChange(p);\n }}\n />\n </div>\n </InputWithAddon>\n </FormProvider>\n );\n}\n\ninterface ProductListProps {\n name?: string;\n onSelect: (p: MerchantBackend.Products.ProductDetail & WithId) => void;\n list: (MerchantBackend.Products.ProductDetail & WithId)[];\n}\n\nfunction ProductList({ name, onSelect, list }: ProductListProps) {\n const { i18n } = useTranslationContext();\n if (!name) {\n /* FIXME\n this BR is added to occupy the space that will be added when the \n dropdown appears\n */\n return (\n <div>\n <br />\n </div>\n );\n }\n const filtered = list.filter(\n (p) => p.id.includes(name) || p.description.includes(name),\n );\n\n return (\n <div class=\"dropdown is-active\">\n <div\n class=\"dropdown-menu\"\n id=\"dropdown-menu\"\n role=\"menu\"\n style={{ minWidth: \"20rem\" }}\n >\n <div class=\"dropdown-content\">\n {!filtered.length ? (\n <div class=\"dropdown-item\">\n <i18n.Translate>\n no products found with that description\n </i18n.Translate>\n </div>\n ) : (\n filtered.map((p) => (\n <div\n key={p.id}\n class=\"dropdown-item\"\n onClick={() => onSelect(p)}\n style={{ cursor: \"pointer\" }}\n >\n <article class=\"media\">\n <div class=\"media-left\">\n <div class=\"image\" style={{ minWidth: 64 }}>\n <img\n src={p.image ? p.image : emptyImage}\n style={{ width: 64, height: 64 }}\n />\n </div>\n </div>\n <div class=\"media-content\">\n <div class=\"content\">\n <p>\n <strong>{p.id}</strong> <small>{p.price}</small>\n <br />\n {p.description}\n </p>\n </div>\n </div>\n </article>\n </div>\n ))\n )}\n </div>\n </div>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { MerchantBackend, WithId } from \"../../declaration.js\";\nimport { ProductMap } from \"../../paths/instance/orders/create/CreatePage.js\";\nimport { FormErrors, FormProvider } from \"../form/FormProvider.js\";\nimport { InputNumber } from \"../form/InputNumber.js\";\nimport { InputSearchProduct } from \"../form/InputSearchProduct.js\";\n\ntype Form = {\n product: MerchantBackend.Products.ProductDetail & WithId;\n quantity: number;\n};\n\ninterface Props {\n currentProducts: ProductMap;\n onAddProduct: (\n product: MerchantBackend.Products.ProductDetail & WithId,\n quantity: number,\n ) => void;\n inventory: (MerchantBackend.Products.ProductDetail & WithId)[];\n}\n\nexport function InventoryProductForm({\n currentProducts,\n onAddProduct,\n inventory,\n}: Props): VNode {\n const initialState = { quantity: 1 };\n const [state, setState] = useState<Partial<Form>>(initialState);\n const [errors, setErrors] = useState<FormErrors<Form>>({});\n\n const { i18n } = useTranslationContext();\n\n const productWithInfiniteStock =\n state.product && state.product.total_stock === -1;\n\n const submit = (): void => {\n if (!state.product) {\n setErrors({\n product: i18n.str`You must enter a valid product identifier.`,\n });\n return;\n }\n if (productWithInfiniteStock) {\n onAddProduct(state.product, 1);\n } else {\n if (!state.quantity || state.quantity <= 0) {\n setErrors({ quantity: i18n.str`Quantity must be greater than 0!` });\n return;\n }\n const currentStock =\n state.product.total_stock -\n state.product.total_lost -\n state.product.total_sold;\n const p = currentProducts[state.product.id];\n if (p) {\n if (state.quantity + p.quantity > currentStock) {\n const left = currentStock - p.quantity;\n setErrors({\n quantity: i18n.str`This quantity exceeds remaining stock. Currently, only ${left} units remain unreserved in stock.`,\n });\n return;\n }\n onAddProduct(state.product, state.quantity + p.quantity);\n } else {\n if (state.quantity > currentStock) {\n const left = currentStock;\n setErrors({\n quantity: i18n.str`This quantity exceeds remaining stock. Currently, only ${left} units remain unreserved in stock.`,\n });\n return;\n }\n onAddProduct(state.product, state.quantity);\n }\n }\n\n setState(initialState);\n };\n\n return (\n <FormProvider<Form> errors={errors} object={state} valueHandler={setState}>\n <InputSearchProduct\n selected={state.product}\n onChange={(p) => setState((v) => ({ ...v, product: p }))}\n products={inventory}\n />\n {state.product && (\n <div class=\"columns mt-5\">\n <div class=\"column is-two-thirds\">\n {!productWithInfiniteStock && (\n <InputNumber<Form>\n name=\"quantity\"\n label={i18n.str`Quantity`}\n tooltip={i18n.str`how many products will be added`}\n />\n )}\n </div>\n <div class=\"column\">\n <div class=\"buttons is-right\">\n <button class=\"button is-success\" onClick={submit}>\n <i18n.Translate>Add from inventory</i18n.Translate>\n </button>\n </div>\n </div>\n </div>\n )}\n </FormProvider>\n );\n}\n", "// ES6 Map\nvar map\ntry {\n map = Map\n} catch (_) { }\nvar set\n\n// ES6 Set\ntry {\n set = Set\n} catch (_) { }\n\nfunction baseClone (src, circulars, clones) {\n // Null/undefined/functions/etc\n if (!src || typeof src !== 'object' || typeof src === 'function') {\n return src\n }\n\n // DOM Node\n if (src.nodeType && 'cloneNode' in src) {\n return src.cloneNode(true)\n }\n\n // Date\n if (src instanceof Date) {\n return new Date(src.getTime())\n }\n\n // RegExp\n if (src instanceof RegExp) {\n return new RegExp(src)\n }\n\n // Arrays\n if (Array.isArray(src)) {\n return src.map(clone)\n }\n\n // ES6 Maps\n if (map && src instanceof map) {\n return new Map(Array.from(src.entries()))\n }\n\n // ES6 Sets\n if (set && src instanceof set) {\n return new Set(Array.from(src.values()))\n }\n\n // Object\n if (src instanceof Object) {\n circulars.push(src)\n var obj = Object.create(src)\n clones.push(obj)\n for (var key in src) {\n var idx = circulars.findIndex(function (i) {\n return i === src[key]\n })\n obj[key] = idx > -1 ? clones[idx] : baseClone(src[key], circulars, clones)\n }\n return obj\n }\n\n // ???\n return src\n}\n\nexport default function clone (src) {\n return baseClone(src, [], [])\n}\n", "const toString = Object.prototype.toString;\nconst errorToString = Error.prototype.toString;\nconst regExpToString = RegExp.prototype.toString;\nconst symbolToString = typeof Symbol !== 'undefined' ? Symbol.prototype.toString : () => '';\nconst SYMBOL_REGEXP = /^Symbol\\((.*)\\)(.*)$/;\n\nfunction printNumber(val) {\n if (val != +val) return 'NaN';\n const isNegativeZero = val === 0 && 1 / val < 0;\n return isNegativeZero ? '-0' : '' + val;\n}\n\nfunction printSimpleValue(val, quoteStrings = false) {\n if (val == null || val === true || val === false) return '' + val;\n const typeOf = typeof val;\n if (typeOf === 'number') return printNumber(val);\n if (typeOf === 'string') return quoteStrings ? `\"${val}\"` : val;\n if (typeOf === 'function') return '[Function ' + (val.name || 'anonymous') + ']';\n if (typeOf === 'symbol') return symbolToString.call(val).replace(SYMBOL_REGEXP, 'Symbol($1)');\n const tag = toString.call(val).slice(8, -1);\n if (tag === 'Date') return isNaN(val.getTime()) ? '' + val : val.toISOString(val);\n if (tag === 'Error' || val instanceof Error) return '[' + errorToString.call(val) + ']';\n if (tag === 'RegExp') return regExpToString.call(val);\n return null;\n}\n\nexport default function printValue(value, quoteStrings) {\n let result = printSimpleValue(value, quoteStrings);\n if (result !== null) return result;\n return JSON.stringify(value, function (key, value) {\n let result = printSimpleValue(this[key], quoteStrings);\n if (result !== null) return result;\n return value;\n }, 2);\n}", "import printValue from './util/printValue';\nexport let mixed = {\n default: '${path} is invalid',\n required: '${path} is a required field',\n oneOf: '${path} must be one of the following values: ${values}',\n notOneOf: '${path} must not be one of the following values: ${values}',\n notType: ({\n path,\n type,\n value,\n originalValue\n }) => {\n let isCast = originalValue != null && originalValue !== value;\n let msg = `${path} must be a \\`${type}\\` type, ` + `but the final value was: \\`${printValue(value, true)}\\`` + (isCast ? ` (cast from the value \\`${printValue(originalValue, true)}\\`).` : '.');\n\n if (value === null) {\n msg += `\\n If \"null\" is intended as an empty value be sure to mark the schema as \\`.nullable()\\``;\n }\n\n return msg;\n },\n defined: '${path} must be defined'\n};\nexport let string = {\n length: '${path} must be exactly ${length} characters',\n min: '${path} must be at least ${min} characters',\n max: '${path} must be at most ${max} characters',\n matches: '${path} must match the following: \"${regex}\"',\n email: '${path} must be a valid email',\n url: '${path} must be a valid URL',\n uuid: '${path} must be a valid UUID',\n trim: '${path} must be a trimmed string',\n lowercase: '${path} must be a lowercase string',\n uppercase: '${path} must be a upper case string'\n};\nexport let number = {\n min: '${path} must be greater than or equal to ${min}',\n max: '${path} must be less than or equal to ${max}',\n lessThan: '${path} must be less than ${less}',\n moreThan: '${path} must be greater than ${more}',\n positive: '${path} must be a positive number',\n negative: '${path} must be a negative number',\n integer: '${path} must be an integer'\n};\nexport let date = {\n min: '${path} field must be later than ${min}',\n max: '${path} field must be at earlier than ${max}'\n};\nexport let boolean = {\n isValue: '${path} field must be ${value}'\n};\nexport let object = {\n noUnknown: '${path} field has unspecified keys: ${unknown}'\n};\nexport let array = {\n min: '${path} field must have at least ${min} items',\n max: '${path} field must have less than or equal to ${max} items',\n length: '${path} must have ${length} items'\n};\nexport default Object.assign(Object.create(null), {\n mixed,\n string,\n number,\n date,\n object,\n array,\n boolean\n});", "import has from 'lodash/has';\nimport isSchema from './util/isSchema';\n\nclass Condition {\n constructor(refs, options) {\n this.fn = void 0;\n this.refs = refs;\n this.refs = refs;\n\n if (typeof options === 'function') {\n this.fn = options;\n return;\n }\n\n if (!has(options, 'is')) throw new TypeError('`is:` is required for `when()` conditions');\n if (!options.then && !options.otherwise) throw new TypeError('either `then:` or `otherwise:` is required for `when()` conditions');\n let {\n is,\n then,\n otherwise\n } = options;\n let check = typeof is === 'function' ? is : (...values) => values.every(value => value === is);\n\n this.fn = function (...args) {\n let options = args.pop();\n let schema = args.pop();\n let branch = check(...args) ? then : otherwise;\n if (!branch) return undefined;\n if (typeof branch === 'function') return branch(schema);\n return schema.concat(branch.resolve(options));\n };\n }\n\n resolve(base, options) {\n let values = this.refs.map(ref => ref.getValue(options == null ? void 0 : options.value, options == null ? void 0 : options.parent, options == null ? void 0 : options.context));\n let schema = this.fn.apply(base, values.concat(base, options));\n if (schema === undefined || schema === base) return base;\n if (!isSchema(schema)) throw new TypeError('conditions must return a schema object');\n return schema.resolve(options);\n }\n\n}\n\nexport default Condition;", "const isSchema = obj => obj && obj.__isYupSchema__;\n\nexport default isSchema;", "export default function toArray(value) {\n return value == null ? [] : [].concat(value);\n}", "function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport printValue from './util/printValue';\nimport toArray from './util/toArray';\nlet strReg = /\\$\\{\\s*(\\w+)\\s*\\}/g;\nexport default class ValidationError extends Error {\n static formatError(message, params) {\n const path = params.label || params.path || 'this';\n if (path !== params.path) params = _extends({}, params, {\n path\n });\n if (typeof message === 'string') return message.replace(strReg, (_, key) => printValue(params[key]));\n if (typeof message === 'function') return message(params);\n return message;\n }\n\n static isError(err) {\n return err && err.name === 'ValidationError';\n }\n\n constructor(errorOrErrors, value, field, type) {\n super();\n this.value = void 0;\n this.path = void 0;\n this.type = void 0;\n this.errors = void 0;\n this.params = void 0;\n this.inner = void 0;\n this.name = 'ValidationError';\n this.value = value;\n this.path = field;\n this.type = type;\n this.errors = [];\n this.inner = [];\n toArray(errorOrErrors).forEach(err => {\n if (ValidationError.isError(err)) {\n this.errors.push(...err.errors);\n this.inner = this.inner.concat(err.inner.length ? err.inner : err);\n } else {\n this.errors.push(err);\n }\n });\n this.message = this.errors.length > 1 ? `${this.errors.length} errors occurred` : this.errors[0];\n if (Error.captureStackTrace) Error.captureStackTrace(this, ValidationError);\n }\n\n}", "import ValidationError from '../ValidationError';\n\nconst once = cb => {\n let fired = false;\n return (...args) => {\n if (fired) return;\n fired = true;\n cb(...args);\n };\n};\n\nexport default function runTests(options, cb) {\n let {\n endEarly,\n tests,\n args,\n value,\n errors,\n sort,\n path\n } = options;\n let callback = once(cb);\n let count = tests.length;\n const nestedErrors = [];\n errors = errors ? errors : [];\n if (!count) return errors.length ? callback(new ValidationError(errors, value, path)) : callback(null, value);\n\n for (let i = 0; i < tests.length; i++) {\n const test = tests[i];\n test(args, function finishTestRun(err) {\n if (err) {\n // always return early for non validation errors\n if (!ValidationError.isError(err)) {\n return callback(err, value);\n }\n\n if (endEarly) {\n err.value = value;\n return callback(err, value);\n }\n\n nestedErrors.push(err);\n }\n\n if (--count <= 0) {\n if (nestedErrors.length) {\n if (sort) nestedErrors.sort(sort); //show parent errors after the nested ones: name.first, name\n\n if (errors.length) nestedErrors.push(...errors);\n errors = nestedErrors;\n }\n\n if (errors.length) {\n callback(new ValidationError(errors, value, path), value);\n return;\n }\n\n callback(null, value);\n }\n });\n }\n}", "function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport mapValues from 'lodash/mapValues';\nimport ValidationError from '../ValidationError';\nimport Ref from '../Reference';\nexport default function createValidation(config) {\n function validate(_ref, cb) {\n let {\n value,\n path = '',\n label,\n options,\n originalValue,\n sync\n } = _ref,\n rest = _objectWithoutPropertiesLoose(_ref, [\"value\", \"path\", \"label\", \"options\", \"originalValue\", \"sync\"]);\n\n const {\n name,\n test,\n params,\n message\n } = config;\n let {\n parent,\n context\n } = options;\n\n function resolve(item) {\n return Ref.isRef(item) ? item.getValue(value, parent, context) : item;\n }\n\n function createError(overrides = {}) {\n const nextParams = mapValues(_extends({\n value,\n originalValue,\n label,\n path: overrides.path || path\n }, params, overrides.params), resolve);\n const error = new ValidationError(ValidationError.formatError(overrides.message || message, nextParams), value, nextParams.path, overrides.type || name);\n error.params = nextParams;\n return error;\n }\n\n let ctx = _extends({\n path,\n parent,\n type: name,\n createError,\n resolve,\n options,\n originalValue\n }, rest);\n\n if (!sync) {\n try {\n Promise.resolve(test.call(ctx, value, ctx)).then(validOrError => {\n if (ValidationError.isError(validOrError)) cb(validOrError);else if (!validOrError) cb(createError());else cb(null, validOrError);\n }).catch(cb);\n } catch (err) {\n cb(err);\n }\n\n return;\n }\n\n let result;\n\n try {\n var _ref2;\n\n result = test.call(ctx, value, ctx);\n\n if (typeof ((_ref2 = result) == null ? void 0 : _ref2.then) === 'function') {\n throw new Error(`Validation test of type: \"${ctx.type}\" returned a Promise during a synchronous validate. ` + `This test will finish after the validate call has returned`);\n }\n } catch (err) {\n cb(err);\n return;\n }\n\n if (ValidationError.isError(result)) cb(result);else if (!result) cb(createError());else cb(null, result);\n }\n\n validate.OPTIONS = config;\n return validate;\n}", "import { getter } from 'property-expr';\nconst prefixes = {\n context: '$',\n value: '.'\n};\nexport function create(key, options) {\n return new Reference(key, options);\n}\nexport default class Reference {\n constructor(key, options = {}) {\n this.key = void 0;\n this.isContext = void 0;\n this.isValue = void 0;\n this.isSibling = void 0;\n this.path = void 0;\n this.getter = void 0;\n this.map = void 0;\n if (typeof key !== 'string') throw new TypeError('ref must be a string, got: ' + key);\n this.key = key.trim();\n if (key === '') throw new TypeError('ref must be a non-empty string');\n this.isContext = this.key[0] === prefixes.context;\n this.isValue = this.key[0] === prefixes.value;\n this.isSibling = !this.isContext && !this.isValue;\n let prefix = this.isContext ? prefixes.context : this.isValue ? prefixes.value : '';\n this.path = this.key.slice(prefix.length);\n this.getter = this.path && getter(this.path, true);\n this.map = options.map;\n }\n\n getValue(value, parent, context) {\n let result = this.isContext ? context : this.isValue ? value : parent;\n if (this.getter) result = this.getter(result || {});\n if (this.map) result = this.map(result);\n return result;\n }\n /**\n *\n * @param {*} value\n * @param {Object} options\n * @param {Object=} options.context\n * @param {Object=} options.parent\n */\n\n\n cast(value, options) {\n return this.getValue(value, options == null ? void 0 : options.parent, options == null ? void 0 : options.context);\n }\n\n resolve() {\n return this;\n }\n\n describe() {\n return {\n type: 'ref',\n key: this.key\n };\n }\n\n toString() {\n return `Ref(${this.key})`;\n }\n\n static isRef(value) {\n return value && value.__isYupRef;\n }\n\n} // @ts-ignore\n\nReference.prototype.__isYupRef = true;", "import { forEach } from 'property-expr';\n\nlet trim = part => part.substr(0, part.length - 1).substr(1);\n\nexport function getIn(schema, path, value, context = value) {\n let parent, lastPart, lastPartDebug; // root path: ''\n\n if (!path) return {\n parent,\n parentPath: path,\n schema\n };\n forEach(path, (_part, isBracket, isArray) => {\n let part = isBracket ? trim(_part) : _part;\n schema = schema.resolve({\n context,\n parent,\n value\n });\n\n if (schema.innerType) {\n let idx = isArray ? parseInt(part, 10) : 0;\n\n if (value && idx >= value.length) {\n throw new Error(`Yup.reach cannot resolve an array item at index: ${_part}, in the path: ${path}. ` + `because there is no value at that index. `);\n }\n\n parent = value;\n value = value && value[idx];\n schema = schema.innerType;\n } // sometimes the array index part of a path doesn't exist: \"nested.arr.child\"\n // in these cases the current part is the next schema and should be processed\n // in this iteration. For cases where the index signature is included this\n // check will fail and we'll handle the `child` part on the next iteration like normal\n\n\n if (!isArray) {\n if (!schema.fields || !schema.fields[part]) throw new Error(`The schema does not contain the path: ${path}. ` + `(failed at: ${lastPartDebug} which is a type: \"${schema._type}\")`);\n parent = value;\n value = value && value[part];\n schema = schema.fields[part];\n }\n\n lastPart = part;\n lastPartDebug = isBracket ? '[' + _part + ']' : '.' + _part;\n });\n return {\n schema,\n parent,\n parentPath: lastPart\n };\n}\n\nconst reach = (obj, path, value, context) => getIn(obj, path, value, context).schema;\n\nexport default reach;", "import Reference from '../Reference';\nexport default class ReferenceSet {\n constructor() {\n this.list = void 0;\n this.refs = void 0;\n this.list = new Set();\n this.refs = new Map();\n }\n\n get size() {\n return this.list.size + this.refs.size;\n }\n\n describe() {\n const description = [];\n\n for (const item of this.list) description.push(item);\n\n for (const [, ref] of this.refs) description.push(ref.describe());\n\n return description;\n }\n\n toArray() {\n return Array.from(this.list).concat(Array.from(this.refs.values()));\n }\n\n resolveAll(resolve) {\n return this.toArray().reduce((acc, e) => acc.concat(Reference.isRef(e) ? resolve(e) : e), []);\n }\n\n add(value) {\n Reference.isRef(value) ? this.refs.set(value.key, value) : this.list.add(value);\n }\n\n delete(value) {\n Reference.isRef(value) ? this.refs.delete(value.key) : this.list.delete(value);\n }\n\n clone() {\n const next = new ReferenceSet();\n next.list = new Set(this.list);\n next.refs = new Map(this.refs);\n return next;\n }\n\n merge(newItems, removeItems) {\n const next = this.clone();\n newItems.list.forEach(value => next.add(value));\n newItems.refs.forEach(value => next.add(value));\n removeItems.list.forEach(value => next.delete(value));\n removeItems.refs.forEach(value => next.delete(value));\n return next;\n }\n\n}", "function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\n// @ts-ignore\nimport cloneDeep from 'nanoclone';\nimport { mixed as locale } from './locale';\nimport Condition from './Condition';\nimport runTests from './util/runTests';\nimport createValidation from './util/createValidation';\nimport printValue from './util/printValue';\nimport Ref from './Reference';\nimport { getIn } from './util/reach';\nimport ValidationError from './ValidationError';\nimport ReferenceSet from './util/ReferenceSet';\nimport toArray from './util/toArray'; // const UNSET = 'unset' as const;\n\nexport default class BaseSchema {\n constructor(options) {\n this.deps = [];\n this.tests = void 0;\n this.transforms = void 0;\n this.conditions = [];\n this._mutate = void 0;\n this._typeError = void 0;\n this._whitelist = new ReferenceSet();\n this._blacklist = new ReferenceSet();\n this.exclusiveTests = Object.create(null);\n this.spec = void 0;\n this.tests = [];\n this.transforms = [];\n this.withMutation(() => {\n this.typeError(locale.notType);\n });\n this.type = (options == null ? void 0 : options.type) || 'mixed';\n this.spec = _extends({\n strip: false,\n strict: false,\n abortEarly: true,\n recursive: true,\n nullable: false,\n presence: 'optional'\n }, options == null ? void 0 : options.spec);\n } // TODO: remove\n\n\n get _type() {\n return this.type;\n }\n\n _typeCheck(_value) {\n return true;\n }\n\n clone(spec) {\n if (this._mutate) {\n if (spec) Object.assign(this.spec, spec);\n return this;\n } // if the nested value is a schema we can skip cloning, since\n // they are already immutable\n\n\n const next = Object.create(Object.getPrototypeOf(this)); // @ts-expect-error this is readonly\n\n next.type = this.type;\n next._typeError = this._typeError;\n next._whitelistError = this._whitelistError;\n next._blacklistError = this._blacklistError;\n next._whitelist = this._whitelist.clone();\n next._blacklist = this._blacklist.clone();\n next.exclusiveTests = _extends({}, this.exclusiveTests); // @ts-expect-error this is readonly\n\n next.deps = [...this.deps];\n next.conditions = [...this.conditions];\n next.tests = [...this.tests];\n next.transforms = [...this.transforms];\n next.spec = cloneDeep(_extends({}, this.spec, spec));\n return next;\n }\n\n label(label) {\n let next = this.clone();\n next.spec.label = label;\n return next;\n }\n\n meta(...args) {\n if (args.length === 0) return this.spec.meta;\n let next = this.clone();\n next.spec.meta = Object.assign(next.spec.meta || {}, args[0]);\n return next;\n } // withContext<TContext extends AnyObject>(): BaseSchema<\n // TCast,\n // TContext,\n // TOutput\n // > {\n // return this as any;\n // }\n\n\n withMutation(fn) {\n let before = this._mutate;\n this._mutate = true;\n let result = fn(this);\n this._mutate = before;\n return result;\n }\n\n concat(schema) {\n if (!schema || schema === this) return this;\n if (schema.type !== this.type && this.type !== 'mixed') throw new TypeError(`You cannot \\`concat()\\` schema's of different types: ${this.type} and ${schema.type}`);\n let base = this;\n let combined = schema.clone();\n\n const mergedSpec = _extends({}, base.spec, combined.spec); // if (combined.spec.nullable === UNSET)\n // mergedSpec.nullable = base.spec.nullable;\n // if (combined.spec.presence === UNSET)\n // mergedSpec.presence = base.spec.presence;\n\n\n combined.spec = mergedSpec;\n combined._typeError || (combined._typeError = base._typeError);\n combined._whitelistError || (combined._whitelistError = base._whitelistError);\n combined._blacklistError || (combined._blacklistError = base._blacklistError); // manually merge the blacklist/whitelist (the other `schema` takes\n // precedence in case of conflicts)\n\n combined._whitelist = base._whitelist.merge(schema._whitelist, schema._blacklist);\n combined._blacklist = base._blacklist.merge(schema._blacklist, schema._whitelist); // start with the current tests\n\n combined.tests = base.tests;\n combined.exclusiveTests = base.exclusiveTests; // manually add the new tests to ensure\n // the deduping logic is consistent\n\n combined.withMutation(next => {\n schema.tests.forEach(fn => {\n next.test(fn.OPTIONS);\n });\n });\n combined.transforms = [...base.transforms, ...combined.transforms];\n return combined;\n }\n\n isType(v) {\n if (this.spec.nullable && v === null) return true;\n return this._typeCheck(v);\n }\n\n resolve(options) {\n let schema = this;\n\n if (schema.conditions.length) {\n let conditions = schema.conditions;\n schema = schema.clone();\n schema.conditions = [];\n schema = conditions.reduce((schema, condition) => condition.resolve(schema, options), schema);\n schema = schema.resolve(options);\n }\n\n return schema;\n }\n /**\n *\n * @param {*} value\n * @param {Object} options\n * @param {*=} options.parent\n * @param {*=} options.context\n */\n\n\n cast(value, options = {}) {\n let resolvedSchema = this.resolve(_extends({\n value\n }, options));\n\n let result = resolvedSchema._cast(value, options);\n\n if (value !== undefined && options.assert !== false && resolvedSchema.isType(result) !== true) {\n let formattedValue = printValue(value);\n let formattedResult = printValue(result);\n throw new TypeError(`The value of ${options.path || 'field'} could not be cast to a value ` + `that satisfies the schema type: \"${resolvedSchema._type}\". \\n\\n` + `attempted value: ${formattedValue} \\n` + (formattedResult !== formattedValue ? `result of cast: ${formattedResult}` : ''));\n }\n\n return result;\n }\n\n _cast(rawValue, _options) {\n let value = rawValue === undefined ? rawValue : this.transforms.reduce((value, fn) => fn.call(this, value, rawValue, this), rawValue);\n\n if (value === undefined) {\n value = this.getDefault();\n }\n\n return value;\n }\n\n _validate(_value, options = {}, cb) {\n let {\n sync,\n path,\n from = [],\n originalValue = _value,\n strict = this.spec.strict,\n abortEarly = this.spec.abortEarly\n } = options;\n let value = _value;\n\n if (!strict) {\n // this._validating = true;\n value = this._cast(value, _extends({\n assert: false\n }, options)); // this._validating = false;\n } // value is cast, we can check if it meets type requirements\n\n\n let args = {\n value,\n path,\n options,\n originalValue,\n schema: this,\n label: this.spec.label,\n sync,\n from\n };\n let initialTests = [];\n if (this._typeError) initialTests.push(this._typeError);\n let finalTests = [];\n if (this._whitelistError) finalTests.push(this._whitelistError);\n if (this._blacklistError) finalTests.push(this._blacklistError);\n runTests({\n args,\n value,\n path,\n sync,\n tests: initialTests,\n endEarly: abortEarly\n }, err => {\n if (err) return void cb(err, value);\n runTests({\n tests: this.tests.concat(finalTests),\n args,\n path,\n sync,\n value,\n endEarly: abortEarly\n }, cb);\n });\n }\n\n validate(value, options, maybeCb) {\n let schema = this.resolve(_extends({}, options, {\n value\n })); // callback case is for nested validations\n\n return typeof maybeCb === 'function' ? schema._validate(value, options, maybeCb) : new Promise((resolve, reject) => schema._validate(value, options, (err, value) => {\n if (err) reject(err);else resolve(value);\n }));\n }\n\n validateSync(value, options) {\n let schema = this.resolve(_extends({}, options, {\n value\n }));\n let result;\n\n schema._validate(value, _extends({}, options, {\n sync: true\n }), (err, value) => {\n if (err) throw err;\n result = value;\n });\n\n return result;\n }\n\n isValid(value, options) {\n return this.validate(value, options).then(() => true, err => {\n if (ValidationError.isError(err)) return false;\n throw err;\n });\n }\n\n isValidSync(value, options) {\n try {\n this.validateSync(value, options);\n return true;\n } catch (err) {\n if (ValidationError.isError(err)) return false;\n throw err;\n }\n }\n\n _getDefault() {\n let defaultValue = this.spec.default;\n\n if (defaultValue == null) {\n return defaultValue;\n }\n\n return typeof defaultValue === 'function' ? defaultValue.call(this) : cloneDeep(defaultValue);\n }\n\n getDefault(options) {\n let schema = this.resolve(options || {});\n return schema._getDefault();\n }\n\n default(def) {\n if (arguments.length === 0) {\n return this._getDefault();\n }\n\n let next = this.clone({\n default: def\n });\n return next;\n }\n\n strict(isStrict = true) {\n let next = this.clone();\n next.spec.strict = isStrict;\n return next;\n }\n\n _isPresent(value) {\n return value != null;\n }\n\n defined(message = locale.defined) {\n return this.test({\n message,\n name: 'defined',\n exclusive: true,\n\n test(value) {\n return value !== undefined;\n }\n\n });\n }\n\n required(message = locale.required) {\n return this.clone({\n presence: 'required'\n }).withMutation(s => s.test({\n message,\n name: 'required',\n exclusive: true,\n\n test(value) {\n return this.schema._isPresent(value);\n }\n\n }));\n }\n\n notRequired() {\n let next = this.clone({\n presence: 'optional'\n });\n next.tests = next.tests.filter(test => test.OPTIONS.name !== 'required');\n return next;\n }\n\n nullable(isNullable = true) {\n let next = this.clone({\n nullable: isNullable !== false\n });\n return next;\n }\n\n transform(fn) {\n let next = this.clone();\n next.transforms.push(fn);\n return next;\n }\n /**\n * Adds a test function to the schema's queue of tests.\n * tests can be exclusive or non-exclusive.\n *\n * - exclusive tests, will replace any existing tests of the same name.\n * - non-exclusive: can be stacked\n *\n * If a non-exclusive test is added to a schema with an exclusive test of the same name\n * the exclusive test is removed and further tests of the same name will be stacked.\n *\n * If an exclusive test is added to a schema with non-exclusive tests of the same name\n * the previous tests are removed and further tests of the same name will replace each other.\n */\n\n\n test(...args) {\n let opts;\n\n if (args.length === 1) {\n if (typeof args[0] === 'function') {\n opts = {\n test: args[0]\n };\n } else {\n opts = args[0];\n }\n } else if (args.length === 2) {\n opts = {\n name: args[0],\n test: args[1]\n };\n } else {\n opts = {\n name: args[0],\n message: args[1],\n test: args[2]\n };\n }\n\n if (opts.message === undefined) opts.message = locale.default;\n if (typeof opts.test !== 'function') throw new TypeError('`test` is a required parameters');\n let next = this.clone();\n let validate = createValidation(opts);\n let isExclusive = opts.exclusive || opts.name && next.exclusiveTests[opts.name] === true;\n\n if (opts.exclusive) {\n if (!opts.name) throw new TypeError('Exclusive tests must provide a unique `name` identifying the test');\n }\n\n if (opts.name) next.exclusiveTests[opts.name] = !!opts.exclusive;\n next.tests = next.tests.filter(fn => {\n if (fn.OPTIONS.name === opts.name) {\n if (isExclusive) return false;\n if (fn.OPTIONS.test === validate.OPTIONS.test) return false;\n }\n\n return true;\n });\n next.tests.push(validate);\n return next;\n }\n\n when(keys, options) {\n if (!Array.isArray(keys) && typeof keys !== 'string') {\n options = keys;\n keys = '.';\n }\n\n let next = this.clone();\n let deps = toArray(keys).map(key => new Ref(key));\n deps.forEach(dep => {\n // @ts-ignore\n if (dep.isSibling) next.deps.push(dep.key);\n });\n next.conditions.push(new Condition(deps, options));\n return next;\n }\n\n typeError(message) {\n let next = this.clone();\n next._typeError = createValidation({\n message,\n name: 'typeError',\n\n test(value) {\n if (value !== undefined && !this.schema.isType(value)) return this.createError({\n params: {\n type: this.schema._type\n }\n });\n return true;\n }\n\n });\n return next;\n }\n\n oneOf(enums, message = locale.oneOf) {\n let next = this.clone();\n enums.forEach(val => {\n next._whitelist.add(val);\n\n next._blacklist.delete(val);\n });\n next._whitelistError = createValidation({\n message,\n name: 'oneOf',\n\n test(value) {\n if (value === undefined) return true;\n let valids = this.schema._whitelist;\n let resolved = valids.resolveAll(this.resolve);\n return resolved.includes(value) ? true : this.createError({\n params: {\n values: valids.toArray().join(', '),\n resolved\n }\n });\n }\n\n });\n return next;\n }\n\n notOneOf(enums, message = locale.notOneOf) {\n let next = this.clone();\n enums.forEach(val => {\n next._blacklist.add(val);\n\n next._whitelist.delete(val);\n });\n next._blacklistError = createValidation({\n message,\n name: 'notOneOf',\n\n test(value) {\n let invalids = this.schema._blacklist;\n let resolved = invalids.resolveAll(this.resolve);\n if (resolved.includes(value)) return this.createError({\n params: {\n values: invalids.toArray().join(', '),\n resolved\n }\n });\n return true;\n }\n\n });\n return next;\n }\n\n strip(strip = true) {\n let next = this.clone();\n next.spec.strip = strip;\n return next;\n }\n\n describe() {\n const next = this.clone();\n const {\n label,\n meta\n } = next.spec;\n const description = {\n meta,\n label,\n type: next.type,\n oneOf: next._whitelist.describe(),\n notOneOf: next._blacklist.describe(),\n tests: next.tests.map(fn => ({\n name: fn.OPTIONS.name,\n params: fn.OPTIONS.params\n })).filter((n, idx, list) => list.findIndex(c => c.name === n.name) === idx)\n };\n return description;\n }\n\n} // eslint-disable-next-line @typescript-eslint/no-unused-vars\n\n// @ts-expect-error\nBaseSchema.prototype.__isYupSchema__ = true;\n\nfor (const method of ['validate', 'validateSync']) BaseSchema.prototype[`${method}At`] = function (path, value, options = {}) {\n const {\n parent,\n parentPath,\n schema\n } = getIn(this, path, value, options.context);\n return schema[method](parent && parent[parentPath], _extends({}, options, {\n parent,\n path\n }));\n};\n\nfor (const alias of ['equals', 'is']) BaseSchema.prototype[alias] = BaseSchema.prototype.oneOf;\n\nfor (const alias of ['not', 'nope']) BaseSchema.prototype[alias] = BaseSchema.prototype.notOneOf;\n\nBaseSchema.prototype.optional = BaseSchema.prototype.notRequired;", "import BaseSchema from './schema';\nconst Mixed = BaseSchema;\nexport default Mixed;\nexport function create() {\n return new Mixed();\n} // XXX: this is using the Base schema so that `addMethod(mixed)` works as a base class\n\ncreate.prototype = Mixed.prototype;", "const isAbsent = value => value == null;\n\nexport default isAbsent;", "import BaseSchema from './schema';\nimport { boolean as locale } from './locale';\nimport isAbsent from './util/isAbsent';\nexport function create() {\n return new BooleanSchema();\n}\nexport default class BooleanSchema extends BaseSchema {\n constructor() {\n super({\n type: 'boolean'\n });\n this.withMutation(() => {\n this.transform(function (value) {\n if (!this.isType(value)) {\n if (/^(true|1)$/i.test(String(value))) return true;\n if (/^(false|0)$/i.test(String(value))) return false;\n }\n\n return value;\n });\n });\n }\n\n _typeCheck(v) {\n if (v instanceof Boolean) v = v.valueOf();\n return typeof v === 'boolean';\n }\n\n isTrue(message = locale.isValue) {\n return this.test({\n message,\n name: 'is-value',\n exclusive: true,\n params: {\n value: 'true'\n },\n\n test(value) {\n return isAbsent(value) || value === true;\n }\n\n });\n }\n\n isFalse(message = locale.isValue) {\n return this.test({\n message,\n name: 'is-value',\n exclusive: true,\n params: {\n value: 'false'\n },\n\n test(value) {\n return isAbsent(value) || value === false;\n }\n\n });\n }\n\n}\ncreate.prototype = BooleanSchema.prototype;", "import { string as locale } from './locale';\nimport isAbsent from './util/isAbsent';\nimport BaseSchema from './schema'; // eslint-disable-next-line\n\nlet rEmail = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i; // eslint-disable-next-line\n\nlet rUrl = /^((https?|ftp):)?\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i; // eslint-disable-next-line\n\nlet rUUID = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;\n\nlet isTrimmed = value => isAbsent(value) || value === value.trim();\n\nlet objStringTag = {}.toString();\nexport function create() {\n return new StringSchema();\n}\nexport default class StringSchema extends BaseSchema {\n constructor() {\n super({\n type: 'string'\n });\n this.withMutation(() => {\n this.transform(function (value) {\n if (this.isType(value)) return value;\n if (Array.isArray(value)) return value;\n const strValue = value != null && value.toString ? value.toString() : value;\n if (strValue === objStringTag) return value;\n return strValue;\n });\n });\n }\n\n _typeCheck(value) {\n if (value instanceof String) value = value.valueOf();\n return typeof value === 'string';\n }\n\n _isPresent(value) {\n return super._isPresent(value) && !!value.length;\n }\n\n length(length, message = locale.length) {\n return this.test({\n message,\n name: 'length',\n exclusive: true,\n params: {\n length\n },\n\n test(value) {\n return isAbsent(value) || value.length === this.resolve(length);\n }\n\n });\n }\n\n min(min, message = locale.min) {\n return this.test({\n message,\n name: 'min',\n exclusive: true,\n params: {\n min\n },\n\n test(value) {\n return isAbsent(value) || value.length >= this.resolve(min);\n }\n\n });\n }\n\n max(max, message = locale.max) {\n return this.test({\n name: 'max',\n exclusive: true,\n message,\n params: {\n max\n },\n\n test(value) {\n return isAbsent(value) || value.length <= this.resolve(max);\n }\n\n });\n }\n\n matches(regex, options) {\n let excludeEmptyString = false;\n let message;\n let name;\n\n if (options) {\n if (typeof options === 'object') {\n ({\n excludeEmptyString = false,\n message,\n name\n } = options);\n } else {\n message = options;\n }\n }\n\n return this.test({\n name: name || 'matches',\n message: message || locale.matches,\n params: {\n regex\n },\n test: value => isAbsent(value) || value === '' && excludeEmptyString || value.search(regex) !== -1\n });\n }\n\n email(message = locale.email) {\n return this.matches(rEmail, {\n name: 'email',\n message,\n excludeEmptyString: true\n });\n }\n\n url(message = locale.url) {\n return this.matches(rUrl, {\n name: 'url',\n message,\n excludeEmptyString: true\n });\n }\n\n uuid(message = locale.uuid) {\n return this.matches(rUUID, {\n name: 'uuid',\n message,\n excludeEmptyString: false\n });\n } //-- transforms --\n\n\n ensure() {\n return this.default('').transform(val => val === null ? '' : val);\n }\n\n trim(message = locale.trim) {\n return this.transform(val => val != null ? val.trim() : val).test({\n message,\n name: 'trim',\n test: isTrimmed\n });\n }\n\n lowercase(message = locale.lowercase) {\n return this.transform(value => !isAbsent(value) ? value.toLowerCase() : value).test({\n message,\n name: 'string_case',\n exclusive: true,\n test: value => isAbsent(value) || value === value.toLowerCase()\n });\n }\n\n uppercase(message = locale.uppercase) {\n return this.transform(value => !isAbsent(value) ? value.toUpperCase() : value).test({\n message,\n name: 'string_case',\n exclusive: true,\n test: value => isAbsent(value) || value === value.toUpperCase()\n });\n }\n\n}\ncreate.prototype = StringSchema.prototype; //\n// String Interfaces\n//", "import { number as locale } from './locale';\nimport isAbsent from './util/isAbsent';\nimport BaseSchema from './schema';\n\nlet isNaN = value => value != +value;\n\nexport function create() {\n return new NumberSchema();\n}\nexport default class NumberSchema extends BaseSchema {\n constructor() {\n super({\n type: 'number'\n });\n this.withMutation(() => {\n this.transform(function (value) {\n let parsed = value;\n\n if (typeof parsed === 'string') {\n parsed = parsed.replace(/\\s/g, '');\n if (parsed === '') return NaN; // don't use parseFloat to avoid positives on alpha-numeric strings\n\n parsed = +parsed;\n }\n\n if (this.isType(parsed)) return parsed;\n return parseFloat(parsed);\n });\n });\n }\n\n _typeCheck(value) {\n if (value instanceof Number) value = value.valueOf();\n return typeof value === 'number' && !isNaN(value);\n }\n\n min(min, message = locale.min) {\n return this.test({\n message,\n name: 'min',\n exclusive: true,\n params: {\n min\n },\n\n test(value) {\n return isAbsent(value) || value >= this.resolve(min);\n }\n\n });\n }\n\n max(max, message = locale.max) {\n return this.test({\n message,\n name: 'max',\n exclusive: true,\n params: {\n max\n },\n\n test(value) {\n return isAbsent(value) || value <= this.resolve(max);\n }\n\n });\n }\n\n lessThan(less, message = locale.lessThan) {\n return this.test({\n message,\n name: 'max',\n exclusive: true,\n params: {\n less\n },\n\n test(value) {\n return isAbsent(value) || value < this.resolve(less);\n }\n\n });\n }\n\n moreThan(more, message = locale.moreThan) {\n return this.test({\n message,\n name: 'min',\n exclusive: true,\n params: {\n more\n },\n\n test(value) {\n return isAbsent(value) || value > this.resolve(more);\n }\n\n });\n }\n\n positive(msg = locale.positive) {\n return this.moreThan(0, msg);\n }\n\n negative(msg = locale.negative) {\n return this.lessThan(0, msg);\n }\n\n integer(message = locale.integer) {\n return this.test({\n name: 'integer',\n message,\n test: val => isAbsent(val) || Number.isInteger(val)\n });\n }\n\n truncate() {\n return this.transform(value => !isAbsent(value) ? value | 0 : value);\n }\n\n round(method) {\n var _method;\n\n let avail = ['ceil', 'floor', 'round', 'trunc'];\n method = ((_method = method) == null ? void 0 : _method.toLowerCase()) || 'round'; // this exists for symemtry with the new Math.trunc\n\n if (method === 'trunc') return this.truncate();\n if (avail.indexOf(method.toLowerCase()) === -1) throw new TypeError('Only valid options for round() are: ' + avail.join(', '));\n return this.transform(value => !isAbsent(value) ? Math[method](value) : value);\n }\n\n}\ncreate.prototype = NumberSchema.prototype; //\n// Number Interfaces\n//", "/* eslint-disable */\n\n/**\n *\n * Date.parse with progressive enhancement for ISO 8601 <https://github.com/csnover/js-iso8601>\n * NON-CONFORMANT EDITION.\n * \u00A9 2011 Colin Snover <http://zetafleet.com>\n * Released under MIT license.\n */\n// 1 YYYY 2 MM 3 DD 4 HH 5 mm 6 ss 7 msec 8 Z 9 \u00B1 10 tzHH 11 tzmm\nvar isoReg = /^(\\d{4}|[+\\-]\\d{6})(?:-?(\\d{2})(?:-?(\\d{2}))?)?(?:[ T]?(\\d{2}):?(\\d{2})(?::?(\\d{2})(?:[,\\.](\\d{1,}))?)?(?:(Z)|([+\\-])(\\d{2})(?::?(\\d{2}))?)?)?$/;\nexport default function parseIsoDate(date) {\n var numericKeys = [1, 4, 5, 6, 7, 10, 11],\n minutesOffset = 0,\n timestamp,\n struct;\n\n if (struct = isoReg.exec(date)) {\n // avoid NaN timestamps caused by \u201Cundefined\u201D values being passed to Date.UTC\n for (var i = 0, k; k = numericKeys[i]; ++i) struct[k] = +struct[k] || 0; // allow undefined days and months\n\n\n struct[2] = (+struct[2] || 1) - 1;\n struct[3] = +struct[3] || 1; // allow arbitrary sub-second precision beyond milliseconds\n\n struct[7] = struct[7] ? String(struct[7]).substr(0, 3) : 0; // timestamps without timezone identifiers should be considered local time\n\n if ((struct[8] === undefined || struct[8] === '') && (struct[9] === undefined || struct[9] === '')) timestamp = +new Date(struct[1], struct[2], struct[3], struct[4], struct[5], struct[6], struct[7]);else {\n if (struct[8] !== 'Z' && struct[9] !== undefined) {\n minutesOffset = struct[10] * 60 + struct[11];\n if (struct[9] === '+') minutesOffset = 0 - minutesOffset;\n }\n\n timestamp = Date.UTC(struct[1], struct[2], struct[3], struct[4], struct[5] + minutesOffset, struct[6], struct[7]);\n }\n } else timestamp = Date.parse ? Date.parse(date) : NaN;\n\n return timestamp;\n}", "// @ts-ignore\nimport isoParse from './util/isodate';\nimport { date as locale } from './locale';\nimport isAbsent from './util/isAbsent';\nimport Ref from './Reference';\nimport BaseSchema from './schema';\nlet invalidDate = new Date('');\n\nlet isDate = obj => Object.prototype.toString.call(obj) === '[object Date]';\n\nexport function create() {\n return new DateSchema();\n}\nexport default class DateSchema extends BaseSchema {\n constructor() {\n super({\n type: 'date'\n });\n this.withMutation(() => {\n this.transform(function (value) {\n if (this.isType(value)) return value;\n value = isoParse(value); // 0 is a valid timestamp equivalent to 1970-01-01T00:00:00Z(unix epoch) or before.\n\n return !isNaN(value) ? new Date(value) : invalidDate;\n });\n });\n }\n\n _typeCheck(v) {\n return isDate(v) && !isNaN(v.getTime());\n }\n\n prepareParam(ref, name) {\n let param;\n\n if (!Ref.isRef(ref)) {\n let cast = this.cast(ref);\n if (!this._typeCheck(cast)) throw new TypeError(`\\`${name}\\` must be a Date or a value that can be \\`cast()\\` to a Date`);\n param = cast;\n } else {\n param = ref;\n }\n\n return param;\n }\n\n min(min, message = locale.min) {\n let limit = this.prepareParam(min, 'min');\n return this.test({\n message,\n name: 'min',\n exclusive: true,\n params: {\n min\n },\n\n test(value) {\n return isAbsent(value) || value >= this.resolve(limit);\n }\n\n });\n }\n\n max(max, message = locale.max) {\n let limit = this.prepareParam(max, 'max');\n return this.test({\n message,\n name: 'max',\n exclusive: true,\n params: {\n max\n },\n\n test(value) {\n return isAbsent(value) || value <= this.resolve(limit);\n }\n\n });\n }\n\n}\nDateSchema.INVALID_DATE = invalidDate;\ncreate.prototype = DateSchema.prototype;\ncreate.INVALID_DATE = invalidDate;", "function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport has from 'lodash/has';\nimport snakeCase from 'lodash/snakeCase';\nimport camelCase from 'lodash/camelCase';\nimport mapKeys from 'lodash/mapKeys';\nimport mapValues from 'lodash/mapValues';\nimport { getter } from 'property-expr';\nimport { object as locale } from './locale';\nimport sortFields from './util/sortFields';\nimport sortByKeyOrder from './util/sortByKeyOrder';\nimport runTests from './util/runTests';\nimport ValidationError from './ValidationError';\nimport BaseSchema from './schema';\n\nlet isObject = obj => Object.prototype.toString.call(obj) === '[object Object]';\n\nfunction unknown(ctx, value) {\n let known = Object.keys(ctx.fields);\n return Object.keys(value).filter(key => known.indexOf(key) === -1);\n}\n\nconst defaultSort = sortByKeyOrder([]);\nexport default class ObjectSchema extends BaseSchema {\n constructor(spec) {\n super({\n type: 'object'\n });\n this.fields = Object.create(null);\n this._sortErrors = defaultSort;\n this._nodes = [];\n this._excludedEdges = [];\n this.withMutation(() => {\n this.transform(function coerce(value) {\n if (typeof value === 'string') {\n try {\n value = JSON.parse(value);\n } catch (err) {\n value = null;\n }\n }\n\n if (this.isType(value)) return value;\n return null;\n });\n\n if (spec) {\n this.shape(spec);\n }\n });\n }\n\n _typeCheck(value) {\n return isObject(value) || typeof value === 'function';\n }\n\n _cast(_value, options = {}) {\n var _options$stripUnknown;\n\n let value = super._cast(_value, options); //should ignore nulls here\n\n\n if (value === undefined) return this.getDefault();\n if (!this._typeCheck(value)) return value;\n let fields = this.fields;\n let strip = (_options$stripUnknown = options.stripUnknown) != null ? _options$stripUnknown : this.spec.noUnknown;\n\n let props = this._nodes.concat(Object.keys(value).filter(v => this._nodes.indexOf(v) === -1));\n\n let intermediateValue = {}; // is filled during the transform below\n\n let innerOptions = _extends({}, options, {\n parent: intermediateValue,\n __validating: options.__validating || false\n });\n\n let isChanged = false;\n\n for (const prop of props) {\n let field = fields[prop];\n let exists = has(value, prop);\n\n if (field) {\n let fieldValue;\n let inputValue = value[prop]; // safe to mutate since this is fired in sequence\n\n innerOptions.path = (options.path ? `${options.path}.` : '') + prop; // innerOptions.value = value[prop];\n\n field = field.resolve({\n value: inputValue,\n context: options.context,\n parent: intermediateValue\n });\n let fieldSpec = 'spec' in field ? field.spec : undefined;\n let strict = fieldSpec == null ? void 0 : fieldSpec.strict;\n\n if (fieldSpec == null ? void 0 : fieldSpec.strip) {\n isChanged = isChanged || prop in value;\n continue;\n }\n\n fieldValue = !options.__validating || !strict ? // TODO: use _cast, this is double resolving\n field.cast(value[prop], innerOptions) : value[prop];\n\n if (fieldValue !== undefined) {\n intermediateValue[prop] = fieldValue;\n }\n } else if (exists && !strip) {\n intermediateValue[prop] = value[prop];\n }\n\n if (intermediateValue[prop] !== value[prop]) {\n isChanged = true;\n }\n }\n\n return isChanged ? intermediateValue : value;\n }\n\n _validate(_value, opts = {}, callback) {\n let errors = [];\n let {\n sync,\n from = [],\n originalValue = _value,\n abortEarly = this.spec.abortEarly,\n recursive = this.spec.recursive\n } = opts;\n from = [{\n schema: this,\n value: originalValue\n }, ...from]; // this flag is needed for handling `strict` correctly in the context of\n // validation vs just casting. e.g strict() on a field is only used when validating\n\n opts.__validating = true;\n opts.originalValue = originalValue;\n opts.from = from;\n\n super._validate(_value, opts, (err, value) => {\n if (err) {\n if (!ValidationError.isError(err) || abortEarly) {\n return void callback(err, value);\n }\n\n errors.push(err);\n }\n\n if (!recursive || !isObject(value)) {\n callback(errors[0] || null, value);\n return;\n }\n\n originalValue = originalValue || value;\n\n let tests = this._nodes.map(key => (_, cb) => {\n let path = key.indexOf('.') === -1 ? (opts.path ? `${opts.path}.` : '') + key : `${opts.path || ''}[\"${key}\"]`;\n let field = this.fields[key];\n\n if (field && 'validate' in field) {\n field.validate(value[key], _extends({}, opts, {\n // @ts-ignore\n path,\n from,\n // inner fields are always strict:\n // 1. this isn't strict so the casting will also have cast inner values\n // 2. this is strict in which case the nested values weren't cast either\n strict: true,\n parent: value,\n originalValue: originalValue[key]\n }), cb);\n return;\n }\n\n cb(null);\n });\n\n runTests({\n sync,\n tests,\n value,\n errors,\n endEarly: abortEarly,\n sort: this._sortErrors,\n path: opts.path\n }, callback);\n });\n }\n\n clone(spec) {\n const next = super.clone(spec);\n next.fields = _extends({}, this.fields);\n next._nodes = this._nodes;\n next._excludedEdges = this._excludedEdges;\n next._sortErrors = this._sortErrors;\n return next;\n }\n\n concat(schema) {\n let next = super.concat(schema);\n let nextFields = next.fields;\n\n for (let [field, schemaOrRef] of Object.entries(this.fields)) {\n const target = nextFields[field];\n\n if (target === undefined) {\n nextFields[field] = schemaOrRef;\n } else if (target instanceof BaseSchema && schemaOrRef instanceof BaseSchema) {\n nextFields[field] = schemaOrRef.concat(target);\n }\n }\n\n return next.withMutation(() => next.shape(nextFields, this._excludedEdges));\n }\n\n getDefaultFromShape() {\n let dft = {};\n\n this._nodes.forEach(key => {\n const field = this.fields[key];\n dft[key] = 'default' in field ? field.getDefault() : undefined;\n });\n\n return dft;\n }\n\n _getDefault() {\n if ('default' in this.spec) {\n return super._getDefault();\n } // if there is no default set invent one\n\n\n if (!this._nodes.length) {\n return undefined;\n }\n\n return this.getDefaultFromShape();\n }\n\n shape(additions, excludes = []) {\n let next = this.clone();\n let fields = Object.assign(next.fields, additions);\n next.fields = fields;\n next._sortErrors = sortByKeyOrder(Object.keys(fields));\n\n if (excludes.length) {\n // this is a convenience for when users only supply a single pair\n if (!Array.isArray(excludes[0])) excludes = [excludes];\n next._excludedEdges = [...next._excludedEdges, ...excludes];\n }\n\n next._nodes = sortFields(fields, next._excludedEdges);\n return next;\n }\n\n pick(keys) {\n const picked = {};\n\n for (const key of keys) {\n if (this.fields[key]) picked[key] = this.fields[key];\n }\n\n return this.clone().withMutation(next => {\n next.fields = {};\n return next.shape(picked);\n });\n }\n\n omit(keys) {\n const next = this.clone();\n const fields = next.fields;\n next.fields = {};\n\n for (const key of keys) {\n delete fields[key];\n }\n\n return next.withMutation(() => next.shape(fields));\n }\n\n from(from, to, alias) {\n let fromGetter = getter(from, true);\n return this.transform(obj => {\n if (obj == null) return obj;\n let newObj = obj;\n\n if (has(obj, from)) {\n newObj = _extends({}, obj);\n if (!alias) delete newObj[from];\n newObj[to] = fromGetter(obj);\n }\n\n return newObj;\n });\n }\n\n noUnknown(noAllow = true, message = locale.noUnknown) {\n if (typeof noAllow === 'string') {\n message = noAllow;\n noAllow = true;\n }\n\n let next = this.test({\n name: 'noUnknown',\n exclusive: true,\n message: message,\n\n test(value) {\n if (value == null) return true;\n const unknownKeys = unknown(this.schema, value);\n return !noAllow || unknownKeys.length === 0 || this.createError({\n params: {\n unknown: unknownKeys.join(', ')\n }\n });\n }\n\n });\n next.spec.noUnknown = noAllow;\n return next;\n }\n\n unknown(allow = true, message = locale.noUnknown) {\n return this.noUnknown(!allow, message);\n }\n\n transformKeys(fn) {\n return this.transform(obj => obj && mapKeys(obj, (_, key) => fn(key)));\n }\n\n camelCase() {\n return this.transformKeys(camelCase);\n }\n\n snakeCase() {\n return this.transformKeys(snakeCase);\n }\n\n constantCase() {\n return this.transformKeys(key => snakeCase(key).toUpperCase());\n }\n\n describe() {\n let base = super.describe();\n base.fields = mapValues(this.fields, value => value.describe());\n return base;\n }\n\n}\nexport function create(spec) {\n return new ObjectSchema(spec);\n}\ncreate.prototype = ObjectSchema.prototype;", "import has from 'lodash/has'; // @ts-expect-error\n\nimport toposort from 'toposort';\nimport { split } from 'property-expr';\nimport Ref from '../Reference';\nimport isSchema from './isSchema';\nexport default function sortFields(fields, excludedEdges = []) {\n let edges = [];\n let nodes = new Set();\n let excludes = new Set(excludedEdges.map(([a, b]) => `${a}-${b}`));\n\n function addNode(depPath, key) {\n let node = split(depPath)[0];\n nodes.add(node);\n if (!excludes.has(`${key}-${node}`)) edges.push([key, node]);\n }\n\n for (const key in fields) if (has(fields, key)) {\n let value = fields[key];\n nodes.add(key);\n if (Ref.isRef(value) && value.isSibling) addNode(value.path, key);else if (isSchema(value) && 'deps' in value) value.deps.forEach(path => addNode(path, key));\n }\n\n return toposort.array(Array.from(nodes), edges).reverse();\n}", "function findIndex(arr, err) {\n let idx = Infinity;\n arr.some((key, ii) => {\n var _err$path;\n\n if (((_err$path = err.path) == null ? void 0 : _err$path.indexOf(key)) !== -1) {\n idx = ii;\n return true;\n }\n });\n return idx;\n}\n\nexport default function sortByKeyOrder(keys) {\n return (a, b) => {\n return findIndex(keys, a) - findIndex(keys, b);\n };\n}", "function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport isAbsent from './util/isAbsent';\nimport isSchema from './util/isSchema';\nimport printValue from './util/printValue';\nimport { array as locale } from './locale';\nimport runTests from './util/runTests';\nimport ValidationError from './ValidationError';\nimport BaseSchema from './schema';\nexport function create(type) {\n return new ArraySchema(type);\n}\nexport default class ArraySchema extends BaseSchema {\n constructor(type) {\n super({\n type: 'array'\n }); // `undefined` specifically means uninitialized, as opposed to\n // \"no subtype\"\n\n this.innerType = void 0;\n this.innerType = type;\n this.withMutation(() => {\n this.transform(function (values) {\n if (typeof values === 'string') try {\n values = JSON.parse(values);\n } catch (err) {\n values = null;\n }\n return this.isType(values) ? values : null;\n });\n });\n }\n\n _typeCheck(v) {\n return Array.isArray(v);\n }\n\n get _subType() {\n return this.innerType;\n }\n\n _cast(_value, _opts) {\n const value = super._cast(_value, _opts); //should ignore nulls here\n\n\n if (!this._typeCheck(value) || !this.innerType) return value;\n let isChanged = false;\n const castArray = value.map((v, idx) => {\n const castElement = this.innerType.cast(v, _extends({}, _opts, {\n path: `${_opts.path || ''}[${idx}]`\n }));\n\n if (castElement !== v) {\n isChanged = true;\n }\n\n return castElement;\n });\n return isChanged ? castArray : value;\n }\n\n _validate(_value, options = {}, callback) {\n var _options$abortEarly, _options$recursive;\n\n let errors = [];\n let sync = options.sync;\n let path = options.path;\n let innerType = this.innerType;\n let endEarly = (_options$abortEarly = options.abortEarly) != null ? _options$abortEarly : this.spec.abortEarly;\n let recursive = (_options$recursive = options.recursive) != null ? _options$recursive : this.spec.recursive;\n let originalValue = options.originalValue != null ? options.originalValue : _value;\n\n super._validate(_value, options, (err, value) => {\n if (err) {\n if (!ValidationError.isError(err) || endEarly) {\n return void callback(err, value);\n }\n\n errors.push(err);\n }\n\n if (!recursive || !innerType || !this._typeCheck(value)) {\n callback(errors[0] || null, value);\n return;\n }\n\n originalValue = originalValue || value; // #950 Ensure that sparse array empty slots are validated\n\n let tests = new Array(value.length);\n\n for (let idx = 0; idx < value.length; idx++) {\n let item = value[idx];\n let path = `${options.path || ''}[${idx}]`; // object._validate note for isStrict explanation\n\n let innerOptions = _extends({}, options, {\n path,\n strict: true,\n parent: value,\n index: idx,\n originalValue: originalValue[idx]\n });\n\n tests[idx] = (_, cb) => innerType.validate(item, innerOptions, cb);\n }\n\n runTests({\n sync,\n path,\n value,\n errors,\n endEarly,\n tests\n }, callback);\n });\n }\n\n clone(spec) {\n const next = super.clone(spec);\n next.innerType = this.innerType;\n return next;\n }\n\n concat(schema) {\n let next = super.concat(schema);\n next.innerType = this.innerType;\n if (schema.innerType) next.innerType = next.innerType ? // @ts-expect-error Lazy doesn't have concat()\n next.innerType.concat(schema.innerType) : schema.innerType;\n return next;\n }\n\n of(schema) {\n // FIXME: this should return a new instance of array without the default to be\n let next = this.clone();\n if (!isSchema(schema)) throw new TypeError('`array.of()` sub-schema must be a valid yup schema not: ' + printValue(schema)); // FIXME(ts):\n\n next.innerType = schema;\n return next;\n }\n\n length(length, message = locale.length) {\n return this.test({\n message,\n name: 'length',\n exclusive: true,\n params: {\n length\n },\n\n test(value) {\n return isAbsent(value) || value.length === this.resolve(length);\n }\n\n });\n }\n\n min(min, message) {\n message = message || locale.min;\n return this.test({\n message,\n name: 'min',\n exclusive: true,\n params: {\n min\n },\n\n // FIXME(ts): Array<typeof T>\n test(value) {\n return isAbsent(value) || value.length >= this.resolve(min);\n }\n\n });\n }\n\n max(max, message) {\n message = message || locale.max;\n return this.test({\n message,\n name: 'max',\n exclusive: true,\n params: {\n max\n },\n\n test(value) {\n return isAbsent(value) || value.length <= this.resolve(max);\n }\n\n });\n }\n\n ensure() {\n return this.default(() => []).transform((val, original) => {\n // We don't want to return `null` for nullable schema\n if (this._typeCheck(val)) return val;\n return original == null ? [] : [].concat(original);\n });\n }\n\n compact(rejector) {\n let reject = !rejector ? v => !!v : (v, i, a) => !rejector(v, i, a);\n return this.transform(values => values != null ? values.filter(reject) : values);\n }\n\n describe() {\n let base = super.describe();\n if (this.innerType) base.innerType = this.innerType.describe();\n return base;\n }\n\n nullable(isNullable = true) {\n return super.nullable(isNullable);\n }\n\n defined() {\n return super.defined();\n }\n\n required(msg) {\n return super.required(msg);\n }\n\n}\ncreate.prototype = ArraySchema.prototype; //\n// Interfaces\n//", "import locale from './locale';\nexport default function setLocale(custom) {\n Object.keys(custom).forEach(type => {\n // @ts-ignore\n Object.keys(custom[type]).forEach(method => {\n // @ts-ignore\n locale[type][method] = custom[type][method];\n });\n });\n}", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useState } from \"preact/hooks\";\n\n/**\n * This component is used when a component wants one child to have a trigger for\n * an action (a button) and other child have the action implemented (like\n * gathering information with a form). The difference with other approaches is\n * that in this case the parent component is not holding the state.\n *\n * It will return a subscriber and activator.\n *\n * The activator may be undefined, if it is undefined it is indicating that the\n * subscriber is not ready to be called.\n *\n * The subscriber will receive a function (the listener) that will be call when the\n * activator runs. The listener must return the collected information.\n *\n * As a result, when the activator is triggered by a child component, the\n * @action function is called receives the information from the listener defined by other\n * child component\n *\n * @param action from <T> to <R>\n * @returns activator and subscriber, undefined activator means that there is not subscriber\n */\n\nexport function useListener<T, R = any>(\n action: (r: T) => Promise<R>,\n): [undefined | (() => Promise<R>), (listener?: () => T) => void] {\n type RunnerHandler = { toBeRan?: () => Promise<R> };\n const [state, setState] = useState<RunnerHandler>({});\n\n /**\n * subscriber will receive a method that will be call when the activator runs\n *\n * @param listener function to be run when the activator runs\n */\n const subscriber = (listener?: () => T) => {\n if (listener) {\n setState({\n toBeRan: () => {\n const whatWeGetFromTheListener = listener();\n return action(whatWeGetFromTheListener);\n },\n });\n } else {\n setState({\n toBeRan: undefined,\n });\n }\n };\n\n /**\n * activator will call runner if there is someone subscribed\n */\n const activator = state.toBeRan\n ? async () => {\n if (state.toBeRan) {\n return state.toBeRan();\n }\n return Promise.reject();\n }\n : undefined;\n\n return [activator, subscriber];\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { isAfter, isFuture } from \"date-fns\";\nimport * as yup from \"yup\";\nimport { AMOUNT_REGEX, PAYTO_REGEX } from \"../utils/constants.js\";\n\nyup.setLocale({\n mixed: {\n default: \"field_invalid\",\n },\n number: {\n min: ({ min }: any) => ({ key: \"field_too_short\", values: { min } }),\n max: ({ max }: any) => ({ key: \"field_too_big\", values: { max } }),\n },\n});\n\nfunction listOfPayToUrisAreValid(values?: (string | undefined)[]): boolean {\n return !!values && values.every((v) => v && PAYTO_REGEX.test(v));\n}\n\nfunction currencyWithAmountIsValid(value?: string): boolean {\n return !!value && AMOUNT_REGEX.test(value);\n}\nfunction currencyGreaterThan0(value?: string) {\n if (value) {\n try {\n const [, amount] = value.split(\":\");\n const intAmount = parseInt(amount, 10);\n return intAmount > 0;\n } catch {\n return false;\n }\n }\n return true;\n}\n\nexport const InstanceSchema = yup.object().shape({\n id: yup.string().required().meta({ type: \"url\" }),\n name: yup.string().required(),\n auth: yup.object().shape({\n method: yup.string().matches(/^(external|token)$/),\n token: yup.string().optional().nullable(),\n }),\n payto_uris: yup\n .array()\n .of(yup.string())\n .min(1)\n .meta({ type: \"array\" })\n .test(\"payto\", \"{path} is not valid\", listOfPayToUrisAreValid),\n default_max_deposit_fee: yup\n .string()\n .required()\n .test(\"amount\", \"the amount is not valid\", currencyWithAmountIsValid)\n .meta({ type: \"amount\" }),\n default_max_wire_fee: yup\n .string()\n .required()\n .test(\"amount\", \"{path} is not valid\", currencyWithAmountIsValid)\n .meta({ type: \"amount\" }),\n default_wire_fee_amortization: yup.number().required(),\n address: yup\n .object()\n .shape({\n country: yup.string().optional(),\n address_lines: yup.array().of(yup.string()).max(7).optional(),\n building_number: yup.string().optional(),\n building_name: yup.string().optional(),\n street: yup.string().optional(),\n post_code: yup.string().optional(),\n town_location: yup.string().optional(),\n town: yup.string(),\n district: yup.string().optional(),\n country_subdivision: yup.string().optional(),\n })\n .meta({ type: \"group\" }),\n jurisdiction: yup\n .object()\n .shape({\n country: yup.string().optional(),\n address_lines: yup.array().of(yup.string()).max(7).optional(),\n building_number: yup.string().optional(),\n building_name: yup.string().optional(),\n street: yup.string().optional(),\n post_code: yup.string().optional(),\n town_location: yup.string().optional(),\n town: yup.string(),\n district: yup.string().optional(),\n country_subdivision: yup.string().optional(),\n })\n .meta({ type: \"group\" }),\n // default_pay_delay: yup.object()\n // .shape({ d_us: yup.number() })\n // .required()\n // .meta({ type: 'duration' }),\n // .transform(numberToDuration),\n default_wire_transfer_delay: yup\n .object()\n .shape({ d_us: yup.number() })\n .required()\n .meta({ type: \"duration\" }),\n // .transform(numberToDuration),\n});\n\nexport const InstanceUpdateSchema = InstanceSchema.clone().omit([\"id\"]);\nexport const InstanceCreateSchema = InstanceSchema.clone();\n\nexport const AuthorizeTipSchema = yup.object().shape({\n justification: yup.string().required(),\n amount: yup\n .string()\n .required()\n .test(\"amount\", \"the amount is not valid\", currencyWithAmountIsValid)\n .test(\"amount_positive\", \"the amount is not valid\", currencyGreaterThan0),\n next_url: yup.string().required(),\n});\n\nconst stringIsValidJSON = (value?: string) => {\n const p = value?.trim();\n if (!p) return true;\n try {\n JSON.parse(p);\n return true;\n } catch {\n return false;\n }\n};\n\nexport const OrderCreateSchema = yup.object().shape({\n pricing: yup\n .object()\n .required()\n .shape({\n summary: yup.string().ensure().required(),\n order_price: yup\n .string()\n .ensure()\n .required()\n .test(\"amount\", \"the amount is not valid\", currencyWithAmountIsValid)\n .test(\n \"amount_positive\",\n \"the amount should be greater than 0\",\n currencyGreaterThan0,\n ),\n }),\n extra: yup.string().test(\"extra\", \"is not a JSON format\", stringIsValidJSON),\n payments: yup\n .object()\n .required()\n .shape({\n refund_deadline: yup\n .date()\n .test(\"future\", \"should be in the future\", (d) =>\n d ? isFuture(d) : true,\n ),\n pay_deadline: yup\n .date()\n .test(\"future\", \"should be in the future\", (d) =>\n d ? isFuture(d) : true,\n ),\n auto_refund_deadline: yup\n .date()\n .test(\"future\", \"should be in the future\", (d) =>\n d ? isFuture(d) : true,\n ),\n delivery_date: yup\n .date()\n .test(\"future\", \"should be in the future\", (d) =>\n d ? isFuture(d) : true,\n ),\n })\n .test(\"payment\", \"dates\", (d) => {\n if (\n d.pay_deadline &&\n d.refund_deadline &&\n isAfter(d.refund_deadline, d.pay_deadline)\n ) {\n return new yup.ValidationError(\n \"pay deadline should be greater than refund\",\n \"asd\",\n \"payments.pay_deadline\",\n );\n }\n return true;\n }),\n});\n\nexport const ProductCreateSchema = yup.object().shape({\n product_id: yup.string().ensure().required(),\n description: yup.string().required(),\n unit: yup.string().ensure().required(),\n price: yup\n .string()\n .required()\n .test(\"amount\", \"the amount is not valid\", currencyWithAmountIsValid),\n stock: yup.object({}).optional(),\n minimum_age: yup.number().optional().min(0),\n});\n\nexport const ProductUpdateSchema = yup.object().shape({\n description: yup.string().required(),\n price: yup\n .string()\n .required()\n .test(\"amount\", \"the amount is not valid\", currencyWithAmountIsValid),\n stock: yup.object({}).optional(),\n minimum_age: yup.number().optional().min(0),\n});\n\nexport const TaxSchema = yup.object().shape({\n name: yup.string().required().ensure(),\n tax: yup\n .string()\n .required()\n .test(\"amount\", \"the amount is not valid\", currencyWithAmountIsValid),\n});\n\nexport const NonInventoryProductSchema = yup.object().shape({\n quantity: yup.number().required().positive(),\n description: yup.string().required(),\n unit: yup.string().ensure().required(),\n price: yup\n .string()\n .required()\n .test(\"amount\", \"the amount is not valid\", currencyWithAmountIsValid),\n});\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { useCallback, useState } from \"preact/hooks\";\nimport * as yup from \"yup\";\nimport { MerchantBackend } from \"../../declaration.js\";\nimport { TaxSchema as schema } from \"../../schemas/index.js\";\nimport { FormErrors, FormProvider } from \"./FormProvider.js\";\nimport { Input } from \"./Input.js\";\nimport { InputGroup } from \"./InputGroup.js\";\nimport { InputProps, useField } from \"./useField.js\";\n\nexport interface Props<T> extends InputProps<T> {\n isValid?: (e: any) => boolean;\n}\n\ntype Entity = MerchantBackend.Tax;\nexport function InputTaxes<T>({\n name,\n readonly,\n label,\n}: Props<keyof T>): VNode {\n const { value: taxes, onChange } = useField<T>(name);\n\n const [value, valueHandler] = useState<Partial<Entity>>({});\n // const [errors, setErrors] = useState<FormErrors<Entity>>({})\n\n let errors: FormErrors<Entity> = {};\n\n try {\n schema.validateSync(value, { abortEarly: false });\n } catch (err) {\n if (err instanceof yup.ValidationError) {\n const yupErrors = err.inner as yup.ValidationError[];\n errors = yupErrors.reduce(\n (prev, cur) =>\n !cur.path ? prev : { ...prev, [cur.path]: cur.message },\n {},\n );\n }\n }\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n\n const submit = useCallback((): void => {\n onChange([value as any, ...taxes] as any);\n valueHandler({});\n }, [value]);\n\n const { i18n } = useTranslationContext();\n\n //FIXME: translating plural singular\n return (\n <InputGroup\n name=\"tax\"\n label={label}\n alternative={\n taxes.length > 0 && (\n <p>This product has {taxes.length} applicable taxes configured.</p>\n )\n }\n >\n <FormProvider<Entity>\n name=\"tax\"\n errors={errors}\n object={value}\n valueHandler={valueHandler}\n >\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\" />\n <div class=\"field-body\" style={{ display: \"block\" }}>\n {taxes.map((v: any, i: number) => (\n <div\n key={i}\n class=\"tags has-addons mt-3 mb-0 mr-3\"\n style={{ flexWrap: \"nowrap\" }}\n >\n <span\n class=\"tag is-medium is-info mb-0\"\n style={{ maxWidth: \"90%\" }}\n >\n <b>{v.tax}</b>: {v.name}\n </span>\n <a\n class=\"tag is-medium is-danger is-delete mb-0\"\n onClick={() => {\n onChange(taxes.filter((f: any) => f !== v) as any);\n valueHandler(v);\n }}\n />\n </div>\n ))}\n {!taxes.length && i18n.str`No taxes configured for this product.`}\n </div>\n </div>\n\n <Input<Entity>\n name=\"tax\"\n label={i18n.str`Amount`}\n tooltip={i18n.str`Taxes can be in currencies that differ from the main currency used by the merchant.`}\n >\n <i18n.Translate>\n Enter currency and value separated with a colon, e.g.\n &quot;USD:2.3&quot;.\n </i18n.Translate>\n </Input>\n\n <Input<Entity>\n name=\"name\"\n label={i18n.str`Description`}\n tooltip={i18n.str`Legal name of the tax, e.g. VAT or import duties.`}\n />\n\n <div class=\"buttons is-right mt-5\">\n <button\n class=\"button is-info\"\n data-tooltip={i18n.str`add tax to the tax list`}\n disabled={hasErrors}\n onClick={submit}\n >\n <i18n.Translate>Add</i18n.Translate>\n </button>\n </div>\n </FormProvider>\n </InputGroup>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useCallback, useEffect, useState } from \"preact/hooks\";\nimport * as yup from \"yup\";\nimport { MerchantBackend } from \"../../declaration.js\";\nimport { useListener } from \"../../hooks/listener.js\";\nimport { NonInventoryProductSchema as schema } from \"../../schemas/index.js\";\nimport { FormErrors, FormProvider } from \"../form/FormProvider.js\";\nimport { Input } from \"../form/Input.js\";\nimport { InputCurrency } from \"../form/InputCurrency.js\";\nimport { InputImage } from \"../form/InputImage.js\";\nimport { InputNumber } from \"../form/InputNumber.js\";\nimport { InputTaxes } from \"../form/InputTaxes.js\";\n\ntype Entity = MerchantBackend.Product;\n\ninterface Props {\n onAddProduct: (p: Entity) => Promise<void>;\n productToEdit?: Entity;\n}\nexport function NonInventoryProductFrom({\n productToEdit,\n onAddProduct,\n}: Props): VNode {\n const [showCreateProduct, setShowCreateProduct] = useState(false);\n\n const isEditing = !!productToEdit;\n\n useEffect(() => {\n setShowCreateProduct(isEditing);\n }, [isEditing]);\n\n const [submitForm, addFormSubmitter] = useListener<\n Partial<MerchantBackend.Product> | undefined\n >((result) => {\n if (result) {\n setShowCreateProduct(false);\n return onAddProduct({\n quantity: result.quantity || 0,\n taxes: result.taxes || [],\n description: result.description || \"\",\n image: result.image || \"\",\n price: result.price || \"\",\n unit: result.unit || \"\",\n });\n }\n return Promise.resolve();\n });\n\n const { i18n } = useTranslationContext();\n\n return (\n <Fragment>\n <div class=\"buttons\">\n <button\n class=\"button is-success\"\n data-tooltip={i18n.str`describe and add a product that is not in the inventory list`}\n onClick={() => setShowCreateProduct(true)}\n >\n <i18n.Translate>Add custom product</i18n.Translate>\n </button>\n </div>\n {showCreateProduct && (\n <div class=\"modal is-active\">\n <div\n class=\"modal-background \"\n onClick={() => setShowCreateProduct(false)}\n />\n <div class=\"modal-card\">\n <header class=\"modal-card-head\">\n <p class=\"modal-card-title\">{i18n.str`Complete information of the product`}</p>\n <button\n class=\"delete \"\n aria-label=\"close\"\n onClick={() => setShowCreateProduct(false)}\n />\n </header>\n <section class=\"modal-card-body\">\n <ProductForm\n initial={productToEdit}\n onSubscribe={addFormSubmitter}\n />\n </section>\n <footer class=\"modal-card-foot\">\n <div class=\"buttons is-right\" style={{ width: \"100%\" }}>\n <button\n class=\"button \"\n onClick={() => setShowCreateProduct(false)}\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n <button\n class=\"button is-info \"\n disabled={!submitForm}\n onClick={submitForm}\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </button>\n </div>\n </footer>\n </div>\n <button\n class=\"modal-close is-large \"\n aria-label=\"close\"\n onClick={() => setShowCreateProduct(false)}\n />\n </div>\n )}\n </Fragment>\n );\n}\n\ninterface ProductProps {\n onSubscribe: (c?: () => Entity | undefined) => void;\n initial?: Partial<Entity>;\n}\n\ninterface NonInventoryProduct {\n quantity: number;\n description: string;\n unit: string;\n price: string;\n image: string;\n taxes: MerchantBackend.Tax[];\n}\n\nexport function ProductForm({ onSubscribe, initial }: ProductProps): VNode {\n const [value, valueHandler] = useState<Partial<NonInventoryProduct>>({\n taxes: [],\n ...initial,\n });\n let errors: FormErrors<Entity> = {};\n try {\n schema.validateSync(value, { abortEarly: false });\n } catch (err) {\n if (err instanceof yup.ValidationError) {\n const yupErrors = err.inner as yup.ValidationError[];\n errors = yupErrors.reduce(\n (prev, cur) =>\n !cur.path ? prev : { ...prev, [cur.path]: cur.message },\n {},\n );\n }\n }\n\n const submit = useCallback((): Entity | undefined => {\n return value as MerchantBackend.Product;\n }, [value]);\n\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n\n useEffect(() => {\n onSubscribe(hasErrors ? undefined : submit);\n }, [submit, hasErrors]);\n\n const { i18n } = useTranslationContext();\n\n return (\n <div>\n <FormProvider<NonInventoryProduct>\n name=\"product\"\n errors={errors}\n object={value}\n valueHandler={valueHandler}\n >\n <InputImage<NonInventoryProduct>\n name=\"image\"\n label={i18n.str`Image`}\n tooltip={i18n.str`photo of the product`}\n />\n <Input<NonInventoryProduct>\n name=\"description\"\n inputType=\"multiline\"\n label={i18n.str`Description`}\n tooltip={i18n.str`full product description`}\n />\n <Input<NonInventoryProduct>\n name=\"unit\"\n label={i18n.str`Unit`}\n tooltip={i18n.str`name of the product unit`}\n />\n <InputCurrency<NonInventoryProduct>\n name=\"price\"\n label={i18n.str`Price`}\n tooltip={i18n.str`amount in the current currency`}\n />\n\n <InputNumber<NonInventoryProduct>\n name=\"quantity\"\n label={i18n.str`Quantity`}\n tooltip={i18n.str`how many products will be added`}\n />\n\n <InputTaxes<NonInventoryProduct> name=\"taxes\" label={i18n.str`Taxes`} />\n </FormProvider>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\nimport { Amounts } from \"@gnu-taler/taler-util\";\nimport { h, VNode } from \"preact\";\nimport emptyImage from \"../../assets/empty.png\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { MerchantBackend } from \"../../declaration.js\";\n\ninterface Props {\n list: MerchantBackend.Product[];\n actions?: {\n name: string;\n tooltip: string;\n handler: (d: MerchantBackend.Product, index: number) => void;\n }[];\n}\nexport function ProductList({ list, actions = [] }: Props): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"table-container\">\n <table class=\"table is-fullwidth is-striped is-hoverable is-fullwidth\">\n <thead>\n <tr>\n <th>\n <i18n.Translate>image</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>description</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>quantity</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>unit price</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>total price</i18n.Translate>\n </th>\n <th />\n </tr>\n </thead>\n <tbody>\n {list.map((entry, index) => {\n const unitPrice = !entry.price ? \"0\" : entry.price;\n const totalPrice = !entry.price\n ? \"0\"\n : Amounts.stringify(\n Amounts.mult(\n Amounts.parseOrThrow(entry.price),\n entry.quantity,\n ).amount,\n );\n\n return (\n <tr key={index}>\n <td>\n <img\n style={{ height: 32, width: 32 }}\n src={entry.image ? entry.image : emptyImage}\n />\n </td>\n <td>{entry.description}</td>\n <td>\n {entry.quantity === 0\n ? \"--\"\n : `${entry.quantity} ${entry.unit}`}\n </td>\n <td>{unitPrice}</td>\n <td>{totalPrice}</td>\n <td class=\"is-actions-cell right-sticky\">\n {actions.map((a, i) => {\n return (\n <div key={i} class=\"buttons is-right\">\n <button\n class=\"button is-small is-danger has-tooltip-left\"\n data-tooltip={a.tooltip}\n type=\"button\"\n onClick={() => a.handler(entry, index)}\n >\n {a.name}\n </button>\n </div>\n );\n })}\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\nimport {\n amountFractionalBase,\n AmountJson,\n Amounts,\n} from \"@gnu-taler/taler-util\";\nimport { MerchantBackend } from \"../declaration.js\";\n\n/**\n * merge refund with the same description and a difference less than one minute\n * @param prev list of refunds that will hold the merged refunds\n * @param cur new refund to add to the list\n * @returns list with the new refund, may be merged with the last\n */\nexport function mergeRefunds(\n prev: MerchantBackend.Orders.RefundDetails[],\n cur: MerchantBackend.Orders.RefundDetails,\n): MerchantBackend.Orders.RefundDetails[] {\n let tail;\n\n if (\n prev.length === 0 || //empty list\n cur.timestamp.t_s === \"never\" || //current does not have timestamp\n (tail = prev[prev.length - 1]).timestamp.t_s === \"never\" || // last does not have timestamp\n cur.reason !== tail.reason || //different reason\n cur.pending !== tail.pending || //different pending state\n Math.abs(cur.timestamp.t_s - tail.timestamp.t_s) > 1000 * 60\n ) {\n //more than 1 minute difference\n\n //can't merge refunds, they are different or to distant in time\n prev.push(cur);\n return prev;\n }\n\n const a = Amounts.parseOrThrow(tail.amount);\n const b = Amounts.parseOrThrow(cur.amount);\n const r = Amounts.add(a, b).amount;\n\n prev[prev.length - 1] = {\n ...tail,\n amount: Amounts.stringify(r),\n };\n\n return prev;\n}\n\nexport const rate = (one: string, two: string): number => {\n const a = Amounts.parseOrThrow(one);\n const b = Amounts.parseOrThrow(two);\n const af = toFloat(a);\n const bf = toFloat(b);\n if (bf === 0) return 0;\n return af / bf;\n};\n\nfunction toFloat(amount: AmountJson): number {\n return amount.value + amount.fraction / amountFractionalBase;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { Amounts } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { add, isAfter, isBefore, isFuture } from \"date-fns\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport {\n FormErrors,\n FormProvider,\n} from \"../../../../components/form/FormProvider.js\";\nimport { Input } from \"../../../../components/form/Input.js\";\nimport { InputBoolean } from \"../../../../components/form/InputBoolean.js\";\nimport { InputCurrency } from \"../../../../components/form/InputCurrency.js\";\nimport { InputDate } from \"../../../../components/form/InputDate.js\";\nimport { InputGroup } from \"../../../../components/form/InputGroup.js\";\nimport { InputLocation } from \"../../../../components/form/InputLocation.js\";\nimport { InputNumber } from \"../../../../components/form/InputNumber.js\";\nimport { InventoryProductForm } from \"../../../../components/product/InventoryProductForm.js\";\nimport { NonInventoryProductFrom } from \"../../../../components/product/NonInventoryProductForm.js\";\nimport { ProductList } from \"../../../../components/product/ProductList.js\";\nimport { useConfigContext } from \"../../../../context/config.js\";\nimport { Duration, MerchantBackend, WithId } from \"../../../../declaration.js\";\nimport { OrderCreateSchema as schema } from \"../../../../schemas/index.js\";\nimport { rate } from \"../../../../utils/amount.js\";\nimport { undefinedIfEmpty } from \"../../../../utils/table.js\";\n\ninterface Props {\n onCreate: (d: MerchantBackend.Orders.PostOrderRequest) => void;\n onBack?: () => void;\n instanceConfig: InstanceConfig;\n instanceInventory: (MerchantBackend.Products.ProductDetail & WithId)[];\n}\ninterface InstanceConfig {\n default_max_wire_fee: string;\n default_max_deposit_fee: string;\n default_wire_fee_amortization: number;\n default_pay_delay: Duration;\n}\n\nfunction with_defaults(config: InstanceConfig): Partial<Entity> {\n const defaultPayDeadline =\n !config.default_pay_delay || config.default_pay_delay.d_us === \"forever\"\n ? undefined\n : add(new Date(), {\n seconds: config.default_pay_delay.d_us / (1000 * 1000),\n });\n\n return {\n inventoryProducts: {},\n products: [],\n pricing: {},\n payments: {\n max_wire_fee: config.default_max_wire_fee,\n max_fee: config.default_max_deposit_fee,\n wire_fee_amortization: config.default_wire_fee_amortization,\n pay_deadline: defaultPayDeadline,\n refund_deadline: defaultPayDeadline,\n createToken: true,\n },\n shipping: {},\n extra: \"\",\n };\n}\n\ninterface ProductAndQuantity {\n product: MerchantBackend.Products.ProductDetail & WithId;\n quantity: number;\n}\nexport interface ProductMap {\n [id: string]: ProductAndQuantity;\n}\n\ninterface Pricing {\n products_price: string;\n order_price: string;\n summary: string;\n}\ninterface Shipping {\n delivery_date?: Date;\n delivery_location?: MerchantBackend.Location;\n fullfilment_url?: string;\n}\ninterface Payments {\n refund_deadline?: Date;\n pay_deadline?: Date;\n wire_transfer_deadline?: Date;\n auto_refund_deadline?: Date;\n max_fee?: string;\n max_wire_fee?: string;\n wire_fee_amortization?: number;\n createToken: boolean;\n minimum_age?: number;\n}\ninterface Entity {\n inventoryProducts: ProductMap;\n products: MerchantBackend.Product[];\n pricing: Partial<Pricing>;\n payments: Partial<Payments>;\n shipping: Partial<Shipping>;\n extra: string;\n}\n\nconst stringIsValidJSON = (value: string) => {\n try {\n JSON.parse(value.trim());\n return true;\n } catch {\n return false;\n }\n};\n\nexport function CreatePage({\n onCreate,\n onBack,\n instanceConfig,\n instanceInventory,\n}: Props): VNode {\n const [value, valueHandler] = useState(with_defaults(instanceConfig));\n const config = useConfigContext();\n const zero = Amounts.zeroOfCurrency(config.currency);\n\n const inventoryList = Object.values(value.inventoryProducts || {});\n const productList = Object.values(value.products || {});\n\n const { i18n } = useTranslationContext();\n\n const errors: FormErrors<Entity> = {\n pricing: undefinedIfEmpty({\n summary: !value.pricing?.summary ? i18n.str`required` : undefined,\n order_price: !value.pricing?.order_price\n ? i18n.str`required`\n : Amounts.isZero(value.pricing.order_price)\n ? i18n.str`must be greater than 0`\n : undefined,\n }),\n extra:\n value.extra && !stringIsValidJSON(value.extra)\n ? i18n.str`not a valid json`\n : undefined,\n payments: undefinedIfEmpty({\n refund_deadline: !value.payments?.refund_deadline\n ? undefined\n : !isFuture(value.payments.refund_deadline)\n ? i18n.str`should be in the future`\n : value.payments.pay_deadline &&\n isBefore(value.payments.refund_deadline, value.payments.pay_deadline)\n ? i18n.str`refund deadline cannot be before pay deadline`\n : value.payments.wire_transfer_deadline &&\n isBefore(\n value.payments.wire_transfer_deadline,\n value.payments.refund_deadline,\n )\n ? i18n.str`wire transfer deadline cannot be before refund deadline`\n : undefined,\n pay_deadline: !value.payments?.pay_deadline\n ? undefined\n : !isFuture(value.payments.pay_deadline)\n ? i18n.str`should be in the future`\n : value.payments.wire_transfer_deadline &&\n isBefore(\n value.payments.wire_transfer_deadline,\n value.payments.pay_deadline,\n )\n ? i18n.str`wire transfer deadline cannot be before pay deadline`\n : undefined,\n auto_refund_deadline: !value.payments?.auto_refund_deadline\n ? undefined\n : !isFuture(value.payments.auto_refund_deadline)\n ? i18n.str`should be in the future`\n : !value.payments?.refund_deadline\n ? i18n.str`should have a refund deadline`\n : !isAfter(\n value.payments.refund_deadline,\n value.payments.auto_refund_deadline,\n )\n ? i18n.str`auto refund cannot be after refund deadline`\n : undefined,\n }),\n shipping: undefinedIfEmpty({\n delivery_date: !value.shipping?.delivery_date\n ? undefined\n : !isFuture(value.shipping.delivery_date)\n ? i18n.str`should be in the future`\n : undefined,\n }),\n };\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n\n const submit = (): void => {\n const order = schema.cast(value);\n if (!value.payments) return;\n if (!value.shipping) return;\n\n const request: MerchantBackend.Orders.PostOrderRequest = {\n order: {\n amount: order.pricing.order_price,\n summary: order.pricing.summary,\n products: productList,\n extra: value.extra,\n pay_deadline: value.payments.pay_deadline\n ? {\n t_s: Math.floor(value.payments.pay_deadline.getTime() / 1000),\n }\n : undefined,\n wire_transfer_deadline: value.payments.wire_transfer_deadline\n ? {\n t_s: Math.floor(\n value.payments.wire_transfer_deadline.getTime() / 1000,\n ),\n }\n : undefined,\n refund_deadline: value.payments.refund_deadline\n ? {\n t_s: Math.floor(value.payments.refund_deadline.getTime() / 1000),\n }\n : undefined,\n auto_refund: value.payments.auto_refund_deadline\n ? {\n d_us: Math.floor(\n value.payments.auto_refund_deadline.getTime() * 1000,\n ),\n }\n : undefined,\n wire_fee_amortization: value.payments.wire_fee_amortization as number,\n max_fee: value.payments.max_fee as string,\n max_wire_fee: value.payments.max_wire_fee as string,\n\n delivery_date: value.shipping.delivery_date\n ? { t_s: value.shipping.delivery_date.getTime() / 1000 }\n : undefined,\n delivery_location: value.shipping.delivery_location,\n fulfillment_url: value.shipping.fullfilment_url,\n minimum_age: value.payments.minimum_age,\n },\n inventory_products: inventoryList.map((p) => ({\n product_id: p.product.id,\n quantity: p.quantity,\n })),\n create_token: value.payments.createToken,\n };\n\n onCreate(request);\n };\n\n const addProductToTheInventoryList = (\n product: MerchantBackend.Products.ProductDetail & WithId,\n quantity: number,\n ) => {\n valueHandler((v) => {\n const inventoryProducts = { ...v.inventoryProducts };\n inventoryProducts[product.id] = { product, quantity };\n return { ...v, inventoryProducts };\n });\n };\n\n const removeProductFromTheInventoryList = (id: string) => {\n valueHandler((v) => {\n const inventoryProducts = { ...v.inventoryProducts };\n delete inventoryProducts[id];\n return { ...v, inventoryProducts };\n });\n };\n\n const addNewProduct = async (product: MerchantBackend.Product) => {\n return valueHandler((v) => {\n const products = v.products ? [...v.products, product] : [];\n return { ...v, products };\n });\n };\n\n const removeFromNewProduct = (index: number) => {\n valueHandler((v) => {\n const products = v.products ? [...v.products] : [];\n products.splice(index, 1);\n return { ...v, products };\n });\n };\n\n const [editingProduct, setEditingProduct] = useState<\n MerchantBackend.Product | undefined\n >(undefined);\n\n const totalPriceInventory = inventoryList.reduce((prev, cur) => {\n const p = Amounts.parseOrThrow(cur.product.price);\n return Amounts.add(prev, Amounts.mult(p, cur.quantity).amount).amount;\n }, zero);\n\n const totalPriceProducts = productList.reduce((prev, cur) => {\n if (!cur.price) return zero;\n const p = Amounts.parseOrThrow(cur.price);\n return Amounts.add(prev, Amounts.mult(p, cur.quantity).amount).amount;\n }, zero);\n\n const hasProducts = inventoryList.length > 0 || productList.length > 0;\n const totalPrice = Amounts.add(totalPriceInventory, totalPriceProducts);\n\n const totalAsString = Amounts.stringify(totalPrice.amount);\n const allProducts = productList.concat(inventoryList.map(asProduct));\n\n useEffect(() => {\n valueHandler((v) => {\n return {\n ...v,\n pricing: {\n ...v.pricing,\n products_price: hasProducts ? totalAsString : undefined,\n order_price: hasProducts ? totalAsString : undefined,\n },\n };\n });\n }, [hasProducts, totalAsString]);\n\n const discountOrRise = rate(\n value.pricing?.order_price || `${config.currency}:0`,\n totalAsString,\n );\n\n const minAgeByProducts = allProducts.reduce(\n (cur, prev) =>\n !prev.minimum_age || cur > prev.minimum_age ? cur : prev.minimum_age,\n 0,\n );\n return (\n <div>\n <section class=\"section is-main-section\">\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-four-fifths\">\n {/* // FIXME: translating plural singular */}\n <InputGroup\n name=\"inventory_products\"\n label={i18n.str`Manage products in order`}\n alternative={\n allProducts.length > 0 && (\n <p>\n {allProducts.length} products with a total price of{\" \"}\n {totalAsString}.\n </p>\n )\n }\n tooltip={i18n.str`Manage list of products in the order.`}\n >\n <InventoryProductForm\n currentProducts={value.inventoryProducts || {}}\n onAddProduct={addProductToTheInventoryList}\n inventory={instanceInventory}\n />\n\n <NonInventoryProductFrom\n productToEdit={editingProduct}\n onAddProduct={(p) => {\n setEditingProduct(undefined);\n return addNewProduct(p);\n }}\n />\n\n {allProducts.length > 0 && (\n <ProductList\n list={allProducts}\n actions={[\n {\n name: i18n.str`Remove`,\n tooltip: i18n.str`Remove this product from the order.`,\n handler: (e, index) => {\n if (e.product_id) {\n removeProductFromTheInventoryList(e.product_id);\n } else {\n removeFromNewProduct(index);\n setEditingProduct(e);\n }\n },\n },\n ]}\n />\n )}\n </InputGroup>\n\n <FormProvider<Entity>\n errors={errors}\n object={value}\n valueHandler={valueHandler as any}\n >\n {hasProducts ? (\n <Fragment>\n <InputCurrency\n name=\"pricing.products_price\"\n label={i18n.str`Total price`}\n readonly\n tooltip={i18n.str`total product price added up`}\n />\n <InputCurrency\n name=\"pricing.order_price\"\n label={i18n.str`Total price`}\n addonAfter={\n discountOrRise > 0 &&\n (discountOrRise < 1\n ? `discount of %${Math.round(\n (1 - discountOrRise) * 100,\n )}`\n : `rise of %${Math.round((discountOrRise - 1) * 100)}`)\n }\n tooltip={i18n.str`Amount to be paid by the customer`}\n />\n </Fragment>\n ) : (\n <InputCurrency\n name=\"pricing.order_price\"\n label={i18n.str`Order price`}\n tooltip={i18n.str`final order price`}\n />\n )}\n\n <Input\n name=\"pricing.summary\"\n inputType=\"multiline\"\n label={i18n.str`Summary`}\n tooltip={i18n.str`Title of the order to be shown to the customer`}\n />\n\n <InputGroup\n name=\"shipping\"\n label={i18n.str`Shipping and Fulfillment`}\n initialActive\n >\n <InputDate\n name=\"shipping.delivery_date\"\n label={i18n.str`Delivery date`}\n tooltip={i18n.str`Deadline for physical delivery assured by the merchant.`}\n />\n {value.shipping?.delivery_date && (\n <InputGroup\n name=\"shipping.delivery_location\"\n label={i18n.str`Location`}\n tooltip={i18n.str`address where the products will be delivered`}\n >\n <InputLocation name=\"shipping.delivery_location\" />\n </InputGroup>\n )}\n <Input\n name=\"shipping.fullfilment_url\"\n label={i18n.str`Fulfillment URL`}\n tooltip={i18n.str`URL to which the user will be redirected after successful payment.`}\n />\n </InputGroup>\n\n <InputGroup\n name=\"payments\"\n label={i18n.str`Taler payment options`}\n tooltip={i18n.str`Override default Taler payment settings for this order`}\n >\n <InputDate\n name=\"payments.pay_deadline\"\n label={i18n.str`Payment deadline`}\n tooltip={i18n.str`Deadline for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline.`}\n />\n <InputDate\n name=\"payments.refund_deadline\"\n label={i18n.str`Refund deadline`}\n tooltip={i18n.str`Time until which the order can be refunded by the merchant.`}\n />\n <InputDate\n name=\"payments.wire_transfer_deadline\"\n label={i18n.str`Wire transfer deadline`}\n tooltip={i18n.str`Deadline for the exchange to make the wire transfer.`}\n />\n <InputDate\n name=\"payments.auto_refund_deadline\"\n label={i18n.str`Auto-refund deadline`}\n tooltip={i18n.str`Time until which the wallet will automatically check for refunds without user interaction.`}\n />\n\n <InputCurrency\n name=\"payments.max_fee\"\n label={i18n.str`Maximum deposit fee`}\n tooltip={i18n.str`Maximum deposit fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.`}\n />\n <InputCurrency\n name=\"payments.max_wire_fee\"\n label={i18n.str`Maximum wire fee`}\n tooltip={i18n.str`Maximum aggregate wire fees the merchant is willing to cover for this order. Wire fees exceeding this amount are to be covered by the customers.`}\n />\n <InputNumber\n name=\"payments.wire_fee_amortization\"\n label={i18n.str`Wire fee amortization`}\n tooltip={i18n.str`Factor by which wire fees exceeding the above threshold are divided to determine the share of excess wire fees to be paid explicitly by the consumer.`}\n />\n <InputBoolean\n name=\"payments.createToken\"\n label={i18n.str`Create token`}\n tooltip={i18n.str`Uncheck this option if the merchant backend generated an order ID with enough entropy to prevent adversarial claims.`}\n />\n <InputNumber\n name=\"payments.minimum_age\"\n label={i18n.str`Minimum age required`}\n tooltip={i18n.str`Any value greater than 0 will limit the coins able be used to pay this contract. If empty the age restriction will be defined by the products`}\n help={\n minAgeByProducts > 0\n ? i18n.str`Min age defined by the producs is ${minAgeByProducts}`\n : undefined\n }\n />\n </InputGroup>\n\n <InputGroup\n name=\"extra\"\n label={i18n.str`Additional information`}\n tooltip={i18n.str`Custom information to be included in the contract for this order.`}\n >\n <Input\n name=\"extra\"\n inputType=\"multiline\"\n label={`Value`}\n tooltip={i18n.str`You must enter a value in JavaScript Object Notation (JSON).`}\n />\n </InputGroup>\n </FormProvider>\n\n <div class=\"buttons is-right mt-5\">\n {onBack && (\n <button class=\"button\" onClick={onBack}>\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n )}\n <button\n class=\"button is-success\"\n onClick={submit}\n disabled={hasErrors}\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </button>\n </div>\n </div>\n <div class=\"column\" />\n </div>\n </section>\n </div>\n );\n}\n\nfunction asProduct(p: ProductAndQuantity): MerchantBackend.Product {\n return {\n product_id: p.product.id,\n image: p.product.image,\n price: p.product.price,\n unit: p.product.unit,\n quantity: p.quantity,\n description: p.product.description,\n taxes: p.product.taxes,\n minimum_age: p.product.minimum_age,\n };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { HttpError } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport { useInstanceDetails } from \"../../../../hooks/instance.js\";\nimport { useOrderAPI } from \"../../../../hooks/order.js\";\nimport { useInstanceProducts } from \"../../../../hooks/product.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { CreatePage } from \"./CreatePage.js\";\n\nexport type Entity = {\n request: MerchantBackend.Orders.PostOrderRequest;\n response: MerchantBackend.Orders.PostOrderResponse;\n};\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n onUnauthorized: () => VNode;\n onNotFound: () => VNode;\n onLoadError: (error: HttpError<MerchantBackend.ErrorDetail>) => VNode;\n}\nexport default function OrderCreate({\n onConfirm,\n onBack,\n onLoadError,\n onNotFound,\n onUnauthorized,\n}: Props): VNode {\n const { createOrder } = useOrderAPI();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n\n const detailsResult = useInstanceDetails();\n const inventoryResult = useInstanceProducts();\n\n if (detailsResult.clientError && detailsResult.isUnauthorized)\n return onUnauthorized();\n if (detailsResult.clientError && detailsResult.isNotfound)\n return onNotFound();\n if (detailsResult.loading) return <Loading />;\n if (!detailsResult.ok) return onLoadError(detailsResult);\n\n if (inventoryResult.clientError && inventoryResult.isUnauthorized)\n return onUnauthorized();\n if (inventoryResult.clientError && inventoryResult.isNotfound)\n return onNotFound();\n if (inventoryResult.loading) return <Loading />;\n if (!inventoryResult.ok) return onLoadError(inventoryResult);\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n\n <CreatePage\n onBack={onBack}\n onCreate={(request: MerchantBackend.Orders.PostOrderRequest) => {\n createOrder(request)\n .then(onConfirm)\n .catch((error) => {\n setNotif({\n message: \"could not create order\",\n type: \"ERROR\",\n description: error.message,\n });\n });\n }}\n instanceConfig={detailsResult.data}\n instanceInventory={inventoryResult.data}\n />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { ComponentChildren, h, VNode } from \"preact\";\nimport { useField, InputProps } from \"./useField.js\";\n\ninterface Props<T> extends InputProps<T> {\n inputType?: \"text\" | \"number\" | \"multiline\" | \"password\";\n expand?: boolean;\n side?: ComponentChildren;\n children: ComponentChildren;\n}\n\nexport function TextField<T>({\n name,\n tooltip,\n label,\n expand,\n help,\n children,\n side,\n}: Props<keyof T>): VNode {\n const { error } = useField<T>(name);\n return (\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">\n {label}\n {tooltip && (\n <span class=\"icon has-tooltip-right\" data-tooltip={tooltip}>\n <i class=\"mdi mdi-information\" />\n </span>\n )}\n </label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n <p\n class={\n expand\n ? \"control is-expanded has-icons-right\"\n : \"control has-icons-right\"\n }\n >\n {children}\n {help}\n </p>\n {error && <p class=\"help is-danger\">{error}</p>}\n </div>\n {side}\n </div>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { Amounts } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { format } from \"date-fns\";\nimport { h, VNode } from \"preact\";\nimport { StateUpdater, useState } from \"preact/hooks\";\nimport {\n FormErrors,\n FormProvider,\n} from \"../../../../components/form/FormProvider.js\";\nimport { Input } from \"../../../../components/form/Input.js\";\nimport { InputCurrency } from \"../../../../components/form/InputCurrency.js\";\nimport { InputGroup } from \"../../../../components/form/InputGroup.js\";\nimport { InputSelector } from \"../../../../components/form/InputSelector.js\";\nimport { ConfirmModal } from \"../../../../components/modal/index.js\";\nimport { useConfigContext } from \"../../../../context/config.js\";\nimport { MerchantBackend, WithId } from \"../../../../declaration.js\";\nimport { mergeRefunds } from \"../../../../utils/amount.js\";\n\ntype Entity = MerchantBackend.Orders.OrderHistoryEntry & WithId;\ninterface Props {\n orders: Entity[];\n onRefund: (value: Entity) => void;\n onCopyURL: (id: string) => void;\n onCreate: () => void;\n onSelect: (order: Entity) => void;\n onLoadMoreBefore?: () => void;\n hasMoreBefore?: boolean;\n hasMoreAfter?: boolean;\n onLoadMoreAfter?: () => void;\n}\n\nexport function CardTable({\n orders,\n onCreate,\n onRefund,\n onCopyURL,\n onSelect,\n onLoadMoreAfter,\n onLoadMoreBefore,\n hasMoreAfter,\n hasMoreBefore,\n}: Props): VNode {\n const [rowSelection, rowSelectionHandler] = useState<string[]>([]);\n\n const { i18n } = useTranslationContext();\n\n return (\n <div class=\"card has-table\">\n <header class=\"card-header\">\n <p class=\"card-header-title\">\n <span class=\"icon\">\n <i class=\"mdi mdi-cash-register\" />\n </span>\n <i18n.Translate>Orders</i18n.Translate>\n </p>\n\n <div class=\"card-header-icon\" aria-label=\"more options\" />\n\n <div class=\"card-header-icon\" aria-label=\"more options\">\n <span class=\"has-tooltip-left\" data-tooltip={i18n.str`create order`}>\n <button class=\"button is-info\" type=\"button\" onClick={onCreate}>\n <span class=\"icon is-small\">\n <i class=\"mdi mdi-plus mdi-36px\" />\n </span>\n </button>\n </span>\n </div>\n </header>\n <div class=\"card-content\">\n <div class=\"b-table has-pagination\">\n <div class=\"table-wrapper has-mobile-cards\">\n {orders.length > 0 ? (\n <Table\n instances={orders}\n onSelect={onSelect}\n onRefund={onRefund}\n onCopyURL={(o) => onCopyURL(o.id)}\n rowSelection={rowSelection}\n rowSelectionHandler={rowSelectionHandler}\n onLoadMoreAfter={onLoadMoreAfter}\n onLoadMoreBefore={onLoadMoreBefore}\n hasMoreAfter={hasMoreAfter}\n hasMoreBefore={hasMoreBefore}\n />\n ) : (\n <EmptyTable />\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\ninterface TableProps {\n rowSelection: string[];\n instances: Entity[];\n onRefund: (id: Entity) => void;\n onCopyURL: (id: Entity) => void;\n onSelect: (id: Entity) => void;\n rowSelectionHandler: StateUpdater<string[]>;\n onLoadMoreBefore?: () => void;\n hasMoreBefore?: boolean;\n hasMoreAfter?: boolean;\n onLoadMoreAfter?: () => void;\n}\n\nfunction Table({\n instances,\n onSelect,\n onRefund,\n onCopyURL,\n onLoadMoreAfter,\n onLoadMoreBefore,\n hasMoreAfter,\n hasMoreBefore,\n}: TableProps): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"table-container\">\n {onLoadMoreBefore && (\n <button\n class=\"button is-fullwidth\"\n disabled={!hasMoreBefore}\n onClick={onLoadMoreBefore}\n >\n <i18n.Translate>load newer orders</i18n.Translate>\n </button>\n )}\n <table class=\"table is-striped is-hoverable is-fullwidth\">\n <thead>\n <tr>\n <th style={{ minWidth: 100 }}>\n <i18n.Translate>Date</i18n.Translate>\n </th>\n <th style={{ minWidth: 100 }}>\n <i18n.Translate>Amount</i18n.Translate>\n </th>\n <th style={{ minWidth: 400 }}>\n <i18n.Translate>Summary</i18n.Translate>\n </th>\n <th style={{ minWidth: 50 }} />\n </tr>\n </thead>\n <tbody>\n {instances.map((i) => {\n return (\n <tr key={i.id}>\n <td\n onClick={(): void => onSelect(i)}\n style={{ cursor: \"pointer\" }}\n >\n {i.timestamp.t_s === \"never\"\n ? \"never\"\n : format(\n new Date(i.timestamp.t_s * 1000),\n \"yyyy/MM/dd HH:mm:ss\",\n )}\n </td>\n <td\n onClick={(): void => onSelect(i)}\n style={{ cursor: \"pointer\" }}\n >\n {i.amount}\n </td>\n <td\n onClick={(): void => onSelect(i)}\n style={{ cursor: \"pointer\" }}\n >\n {i.summary}\n </td>\n <td class=\"is-actions-cell right-sticky\">\n <div class=\"buttons is-right\">\n {i.refundable && (\n <button\n class=\"button is-small is-danger jb-modal\"\n type=\"button\"\n onClick={(): void => onRefund(i)}\n >\n <i18n.Translate>Refund</i18n.Translate>\n </button>\n )}\n {!i.paid && (\n <button\n class=\"button is-small is-info jb-modal\"\n type=\"button\"\n onClick={(): void => onCopyURL(i)}\n >\n <i18n.Translate>copy url</i18n.Translate>\n </button>\n )}\n </div>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n {onLoadMoreAfter && (\n <button\n class=\"button is-fullwidth\"\n disabled={!hasMoreAfter}\n onClick={onLoadMoreAfter}\n >\n <i18n.Translate>load older orders</i18n.Translate>\n </button>\n )}\n </div>\n );\n}\n\nfunction EmptyTable(): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"content has-text-grey has-text-centered\">\n <p>\n <span class=\"icon is-large\">\n <i class=\"mdi mdi-emoticon-sad mdi-48px\" />\n </span>\n </p>\n <p>\n <i18n.Translate>\n No orders have been found matching your query!\n </i18n.Translate>\n </p>\n </div>\n );\n}\n\ninterface RefundModalProps {\n onCancel: () => void;\n onConfirm: (value: MerchantBackend.Orders.RefundRequest) => void;\n order: MerchantBackend.Orders.MerchantOrderStatusResponse;\n}\n\nexport function RefundModal({\n order,\n onCancel,\n onConfirm,\n}: RefundModalProps): VNode {\n type State = { mainReason?: string; description?: string; refund?: string };\n const [form, setValue] = useState<State>({});\n const { i18n } = useTranslationContext();\n // const [errors, setErrors] = useState<FormErrors<State>>({});\n\n const refunds = (\n order.order_status === \"paid\" ? order.refund_details : []\n ).reduce(mergeRefunds, []);\n\n const config = useConfigContext();\n const totalRefunded = refunds\n .map((r) => r.amount)\n .reduce(\n (p, c) => Amounts.add(p, Amounts.parseOrThrow(c)).amount,\n Amounts.zeroOfCurrency(config.currency),\n );\n const orderPrice =\n order.order_status === \"paid\"\n ? Amounts.parseOrThrow(order.contract_terms.amount)\n : undefined;\n const totalRefundable = !orderPrice\n ? Amounts.zeroOfCurrency(totalRefunded.currency)\n : refunds.length\n ? Amounts.sub(orderPrice, totalRefunded).amount\n : orderPrice;\n\n const isRefundable = Amounts.isNonZero(totalRefundable);\n const duplicatedText = i18n.str`duplicated`;\n\n const errors: FormErrors<State> = {\n mainReason: !form.mainReason ? i18n.str`required` : undefined,\n description:\n !form.description && form.mainReason !== duplicatedText\n ? i18n.str`required`\n : undefined,\n refund: !form.refund\n ? i18n.str`required`\n : !Amounts.parse(form.refund)\n ? i18n.str`invalid format`\n : Amounts.cmp(totalRefundable, Amounts.parse(form.refund)!) === -1\n ? i18n.str`this value exceed the refundable amount`\n : undefined,\n };\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n\n const validateAndConfirm = () => {\n try {\n if (!form.refund) return;\n onConfirm({\n refund: Amounts.stringify(\n Amounts.add(Amounts.parse(form.refund)!, totalRefunded).amount,\n ),\n reason:\n form.description === undefined\n ? form.mainReason || \"\"\n : `${form.mainReason}: ${form.description}`,\n });\n } catch (err) {\n console.log(err);\n }\n };\n\n //FIXME: parameters in the translation\n return (\n <ConfirmModal\n description=\"refund\"\n danger\n active\n disabled={!isRefundable || hasErrors}\n onCancel={onCancel}\n onConfirm={validateAndConfirm}\n >\n {refunds.length > 0 && (\n <div class=\"columns\">\n <div class=\"column is-12\">\n <InputGroup\n name=\"asd\"\n label={`${Amounts.stringify(totalRefunded)} was already refunded`}\n >\n <table class=\"table is-fullwidth\">\n <thead>\n <tr>\n <th>\n <i18n.Translate>date</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>amount</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>reason</i18n.Translate>\n </th>\n </tr>\n </thead>\n <tbody>\n {refunds.map((r) => {\n return (\n <tr key={r.timestamp.t_s}>\n <td>\n {r.timestamp.t_s === \"never\"\n ? \"never\"\n : format(\n new Date(r.timestamp.t_s * 1000),\n \"yyyy-MM-dd HH:mm:ss\",\n )}\n </td>\n <td>{r.amount}</td>\n <td>{r.reason}</td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </InputGroup>\n </div>\n </div>\n )}\n\n {isRefundable && (\n <FormProvider<State>\n errors={errors}\n object={form}\n valueHandler={(d) => setValue(d as any)}\n >\n <InputCurrency<State>\n name=\"refund\"\n label={i18n.str`Refund`}\n tooltip={i18n.str`amount to be refunded`}\n >\n <i18n.Translate>Max refundable:</i18n.Translate>{\" \"}\n {Amounts.stringify(totalRefundable)}\n </InputCurrency>\n <InputSelector\n name=\"mainReason\"\n label={i18n.str`Reason`}\n values={[\n i18n.str`Choose one...`,\n duplicatedText,\n i18n.str`requested by the customer`,\n i18n.str`other`,\n ]}\n tooltip={i18n.str`why this order is being refunded`}\n />\n {form.mainReason && form.mainReason !== duplicatedText ? (\n <Input<State>\n label={i18n.str`Description`}\n name=\"description\"\n tooltip={i18n.str`more information to give context`}\n />\n ) : undefined}\n </FormProvider>\n )}\n </ConfirmModal>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\nimport { format } from \"date-fns\";\nimport { h } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\n\ninterface Props {\n events: Event[];\n}\n\nexport function Timeline({ events: e }: Props) {\n const events = [...e];\n events.push({\n when: new Date(),\n description: \"now\",\n type: \"now\",\n });\n\n events.sort((a, b) => a.when.getTime() - b.when.getTime());\n\n const [state, setState] = useState(events);\n useEffect(() => {\n const handle = setTimeout(() => {\n const eventsWithoutNow = state.filter((e) => e.type !== \"now\");\n eventsWithoutNow.push({\n when: new Date(),\n description: \"now\",\n type: \"now\",\n });\n setState(eventsWithoutNow);\n }, 1000);\n return () => {\n clearTimeout(handle);\n };\n });\n return (\n <div class=\"timeline\">\n {events.map((e, i) => {\n return (\n <div key={i} class=\"timeline-item\">\n {(() => {\n switch (e.type) {\n case \"deadline\":\n return (\n <div class=\"timeline-marker is-icon \">\n <i class=\"mdi mdi-flag\" />\n </div>\n );\n case \"delivery\":\n return (\n <div class=\"timeline-marker is-icon \">\n <i class=\"mdi mdi-delivery\" />\n </div>\n );\n case \"start\":\n return (\n <div class=\"timeline-marker is-icon is-success\">\n <i class=\"mdi mdi-flag \" />\n </div>\n );\n case \"wired\":\n return (\n <div class=\"timeline-marker is-icon is-success\">\n <i class=\"mdi mdi-cash\" />\n </div>\n );\n case \"wired-range\":\n return (\n <div class=\"timeline-marker is-icon is-success\">\n <i class=\"mdi mdi-cash\" />\n </div>\n );\n case \"refund\":\n return (\n <div class=\"timeline-marker is-icon is-danger\">\n <i class=\"mdi mdi-cash\" />\n </div>\n );\n case \"refund-taken\":\n return (\n <div class=\"timeline-marker is-icon is-success\">\n <i class=\"mdi mdi-cash\" />\n </div>\n );\n case \"now\":\n return (\n <div class=\"timeline-marker is-icon is-info\">\n <i class=\"mdi mdi-clock\" />\n </div>\n );\n }\n })()}\n <div class=\"timeline-content\">\n <p class=\"heading\">{format(e.when, \"yyyy/MM/dd HH:mm:ss\")}</p>\n <p>{e.description}</p>\n </div>\n </div>\n );\n })}\n </div>\n );\n}\nexport interface Event {\n when: Date;\n description: string;\n type:\n | \"start\"\n | \"refund\"\n | \"refund-taken\"\n | \"wired\"\n | \"wired-range\"\n | \"deadline\"\n | \"delivery\"\n | \"now\";\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { AmountJson, Amounts } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { format } from \"date-fns\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { FormProvider } from \"../../../../components/form/FormProvider.js\";\nimport { Input } from \"../../../../components/form/Input.js\";\nimport { InputCurrency } from \"../../../../components/form/InputCurrency.js\";\nimport { InputDate } from \"../../../../components/form/InputDate.js\";\nimport { InputDuration } from \"../../../../components/form/InputDuration.js\";\nimport { InputGroup } from \"../../../../components/form/InputGroup.js\";\nimport { InputLocation } from \"../../../../components/form/InputLocation.js\";\nimport { TextField } from \"../../../../components/form/TextField.js\";\nimport { ProductList } from \"../../../../components/product/ProductList.js\";\nimport { useBackendContext } from \"../../../../context/backend.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport { mergeRefunds } from \"../../../../utils/amount.js\";\nimport { RefundModal } from \"../list/Table.js\";\nimport { Event, Timeline } from \"./Timeline.js\";\n\ntype Entity = MerchantBackend.Orders.MerchantOrderStatusResponse;\ntype CT = MerchantBackend.ContractTerms;\n\ninterface Props {\n onBack: () => void;\n selected: Entity;\n id: string;\n onRefund: (id: string, value: MerchantBackend.Orders.RefundRequest) => void;\n}\n\ntype Paid = MerchantBackend.Orders.CheckPaymentPaidResponse & {\n refund_taken: string;\n};\ntype Unpaid = MerchantBackend.Orders.CheckPaymentUnpaidResponse;\ntype Claimed = MerchantBackend.Orders.CheckPaymentClaimedResponse;\n\nfunction ContractTerms({ value }: { value: CT }) {\n const { i18n } = useTranslationContext();\n\n return (\n <InputGroup name=\"contract_terms\" label={i18n.str`Contract Terms`}>\n <FormProvider<CT> object={value} valueHandler={null}>\n <Input<CT>\n readonly\n name=\"summary\"\n label={i18n.str`Summary`}\n tooltip={i18n.str`human-readable description of the whole purchase`}\n />\n <InputCurrency<CT>\n readonly\n name=\"amount\"\n label={i18n.str`Amount`}\n tooltip={i18n.str`total price for the transaction`}\n />\n {value.fulfillment_url && (\n <Input<CT>\n readonly\n name=\"fulfillment_url\"\n label={i18n.str`Fulfillment URL`}\n tooltip={i18n.str`URL for this purchase`}\n />\n )}\n <Input<CT>\n readonly\n name=\"max_fee\"\n label={i18n.str`Max fee`}\n tooltip={i18n.str`maximum total deposit fee accepted by the merchant for this contract`}\n />\n <Input<CT>\n readonly\n name=\"max_wire_fee\"\n label={i18n.str`Max wire fee`}\n tooltip={i18n.str`maximum wire fee accepted by the merchant`}\n />\n <Input<CT>\n readonly\n name=\"wire_fee_amortization\"\n label={i18n.str`Wire fee amortization`}\n tooltip={i18n.str`over how many customer transactions does the merchant expect to amortize wire fees on average`}\n />\n <InputDate<CT>\n readonly\n name=\"timestamp\"\n label={i18n.str`Created at`}\n tooltip={i18n.str`time when this contract was generated`}\n />\n <InputDate<CT>\n readonly\n name=\"refund_deadline\"\n label={i18n.str`Refund deadline`}\n tooltip={i18n.str`after this deadline has passed no refunds will be accepted`}\n />\n <InputDate<CT>\n readonly\n name=\"pay_deadline\"\n label={i18n.str`Payment deadline`}\n tooltip={i18n.str`after this deadline, the merchant won't accept payments for the contract`}\n />\n <InputDate<CT>\n readonly\n name=\"wire_transfer_deadline\"\n label={i18n.str`Wire transfer deadline`}\n tooltip={i18n.str`transfer deadline for the exchange`}\n />\n <InputDate<CT>\n readonly\n name=\"delivery_date\"\n label={i18n.str`Delivery date`}\n tooltip={i18n.str`time indicating when the order should be delivered`}\n />\n {value.delivery_date && (\n <InputGroup\n name=\"delivery_location\"\n label={i18n.str`Location`}\n tooltip={i18n.str`where the order will be delivered`}\n >\n <InputLocation name=\"payments.delivery_location\" />\n </InputGroup>\n )}\n <InputDuration<CT>\n readonly\n name=\"auto_refund\"\n label={i18n.str`Auto-refund delay`}\n tooltip={i18n.str`how long the wallet should try to get an automatic refund for the purchase`}\n />\n <Input<CT>\n readonly\n name=\"extra\"\n label={i18n.str`Extra info`}\n tooltip={i18n.str`extra data that is only interpreted by the merchant frontend`}\n />\n </FormProvider>\n </InputGroup>\n );\n}\n\nfunction ClaimedPage({\n id,\n order,\n}: {\n id: string;\n order: MerchantBackend.Orders.CheckPaymentClaimedResponse;\n}) {\n const events: Event[] = [];\n if (order.contract_terms.timestamp.t_s !== \"never\") {\n events.push({\n when: new Date(order.contract_terms.timestamp.t_s * 1000),\n description: \"order created\",\n type: \"start\",\n });\n }\n if (order.contract_terms.pay_deadline.t_s !== \"never\") {\n events.push({\n when: new Date(order.contract_terms.pay_deadline.t_s * 1000),\n description: \"pay deadline\",\n type: \"deadline\",\n });\n }\n if (order.contract_terms.refund_deadline.t_s !== \"never\") {\n events.push({\n when: new Date(order.contract_terms.refund_deadline.t_s * 1000),\n description: \"refund deadline\",\n type: \"deadline\",\n });\n }\n if (order.contract_terms.wire_transfer_deadline.t_s !== \"never\") {\n events.push({\n when: new Date(order.contract_terms.wire_transfer_deadline.t_s * 1000),\n description: \"wire deadline\",\n type: \"deadline\",\n });\n }\n if (\n order.contract_terms.delivery_date &&\n order.contract_terms.delivery_date.t_s !== \"never\"\n ) {\n events.push({\n when: new Date(order.contract_terms.delivery_date?.t_s * 1000),\n description: \"delivery\",\n type: \"delivery\",\n });\n }\n\n const [value, valueHandler] = useState<Partial<Claimed>>(order);\n const { i18n } = useTranslationContext();\n\n return (\n <div>\n <section class=\"section\">\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-10\">\n <section class=\"hero is-hero-bar\">\n <div class=\"hero-body\">\n <div class=\"level\">\n <div class=\"level-left\">\n <div class=\"level-item\">\n <i18n.Translate>Order</i18n.Translate> #{id}\n <div class=\"tag is-info ml-4\">\n <i18n.Translate>claimed</i18n.Translate>\n </div>\n </div>\n </div>\n </div>\n <div class=\"level\">\n <div class=\"level-left\">\n <div class=\"level-item\">\n <h1 class=\"title\">{order.contract_terms.amount}</h1>\n </div>\n </div>\n </div>\n\n <div class=\"level\">\n <div class=\"level-left\" style={{ maxWidth: \"100%\" }}>\n <div class=\"level-item\" style={{ maxWidth: \"100%\" }}>\n <div\n class=\"content\"\n style={{\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n }}\n >\n <p>\n <b>\n <i18n.Translate>claimed at</i18n.Translate>:\n </b>{\" \"}\n {format(\n new Date(order.contract_terms.timestamp.t_s * 1000),\n \"yyyy-MM-dd HH:mm:ss\",\n )}\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </section>\n\n <section class=\"section\">\n <div class=\"columns\">\n <div class=\"column is-4\">\n <div class=\"title\">\n <i18n.Translate>Timeline</i18n.Translate>\n </div>\n <Timeline events={events} />\n </div>\n <div class=\"column is-8\">\n <div class=\"title\">\n <i18n.Translate>Payment details</i18n.Translate>\n </div>\n <FormProvider<Claimed>\n object={value}\n valueHandler={valueHandler}\n >\n <Input\n name=\"contract_terms.summary\"\n readonly\n inputType=\"multiline\"\n label={i18n.str`Summary`}\n />\n <InputCurrency\n name=\"contract_terms.amount\"\n readonly\n label={i18n.str`Amount`}\n />\n <Input<Claimed>\n name=\"order_status\"\n readonly\n label={i18n.str`Order status`}\n />\n </FormProvider>\n </div>\n </div>\n </section>\n\n {order.contract_terms.products.length ? (\n <Fragment>\n <div class=\"title\">\n <i18n.Translate>Product list</i18n.Translate>\n </div>\n <ProductList list={order.contract_terms.products} />\n </Fragment>\n ) : undefined}\n\n {value.contract_terms && (\n <ContractTerms value={value.contract_terms} />\n )}\n </div>\n <div class=\"column\" />\n </div>\n </section>\n </div>\n );\n}\nfunction PaidPage({\n id,\n order,\n onRefund,\n}: {\n id: string;\n order: MerchantBackend.Orders.CheckPaymentPaidResponse;\n onRefund: (id: string) => void;\n}) {\n const events: Event[] = [];\n if (order.contract_terms.timestamp.t_s !== \"never\") {\n events.push({\n when: new Date(order.contract_terms.timestamp.t_s * 1000),\n description: \"order created\",\n type: \"start\",\n });\n }\n if (order.contract_terms.pay_deadline.t_s !== \"never\") {\n events.push({\n when: new Date(order.contract_terms.pay_deadline.t_s * 1000),\n description: \"pay deadline\",\n type: \"deadline\",\n });\n }\n if (order.contract_terms.refund_deadline.t_s !== \"never\") {\n events.push({\n when: new Date(order.contract_terms.refund_deadline.t_s * 1000),\n description: \"refund deadline\",\n type: \"deadline\",\n });\n }\n if (order.contract_terms.wire_transfer_deadline.t_s !== \"never\") {\n events.push({\n when: new Date(order.contract_terms.wire_transfer_deadline.t_s * 1000),\n description: \"wire deadline\",\n type: \"deadline\",\n });\n }\n if (\n order.contract_terms.delivery_date &&\n order.contract_terms.delivery_date.t_s !== \"never\"\n ) {\n if (order.contract_terms.delivery_date)\n events.push({\n when: new Date(order.contract_terms.delivery_date?.t_s * 1000),\n description: \"delivery\",\n type: \"delivery\",\n });\n }\n order.refund_details.reduce(mergeRefunds, []).forEach((e) => {\n if (e.timestamp.t_s !== \"never\") {\n events.push({\n when: new Date(e.timestamp.t_s * 1000),\n description: `refund: ${e.amount}: ${e.reason}`,\n type: e.pending ? \"refund\" : \"refund-taken\",\n });\n }\n });\n if (order.wire_details && order.wire_details.length) {\n if (order.wire_details.length > 1) {\n let last: MerchantBackend.Orders.TransactionWireTransfer | null = null;\n let first: MerchantBackend.Orders.TransactionWireTransfer | null = null;\n let total: AmountJson | null = null;\n\n order.wire_details.forEach((w) => {\n if (last === null || last.execution_time.t_s < w.execution_time.t_s) {\n last = w;\n }\n if (first === null || first.execution_time.t_s > w.execution_time.t_s) {\n first = w;\n }\n total =\n total === null\n ? Amounts.parseOrThrow(w.amount)\n : Amounts.add(total, Amounts.parseOrThrow(w.amount)).amount;\n });\n const last_time = last!.execution_time.t_s;\n if (last_time !== \"never\") {\n events.push({\n when: new Date(last_time * 1000),\n description: `wired ${Amounts.stringify(total!)}`,\n type: \"wired-range\",\n });\n }\n const first_time = first!.execution_time.t_s;\n if (first_time !== \"never\") {\n events.push({\n when: new Date(first_time * 1000),\n description: `wire transfer started...`,\n type: \"wired-range\",\n });\n }\n } else {\n order.wire_details.forEach((e) => {\n if (e.execution_time.t_s !== \"never\") {\n events.push({\n when: new Date(e.execution_time.t_s * 1000),\n description: `wired ${e.amount}`,\n type: \"wired\",\n });\n }\n });\n }\n }\n\n const [value, valueHandler] = useState<Partial<Paid>>(order);\n const { url } = useBackendContext();\n const refundHost = url.replace(/.*:\\/\\//, \"\"); // remove protocol part\n const proto = url.startsWith(\"http://\") ? \"taler+http\" : \"taler\";\n const refundurl = `${proto}://refund/${refundHost}/${order.contract_terms.order_id}/`;\n const refundable =\n new Date().getTime() < order.contract_terms.refund_deadline.t_s * 1000;\n const { i18n } = useTranslationContext();\n\n const amount = Amounts.parseOrThrow(order.contract_terms.amount);\n const refund_taken = order.refund_details.reduce((prev, cur) => {\n if (cur.pending) return prev;\n return Amounts.add(prev, Amounts.parseOrThrow(cur.amount)).amount;\n }, Amounts.zeroOfCurrency(amount.currency));\n value.refund_taken = Amounts.stringify(refund_taken);\n\n return (\n <div>\n <section class=\"section\">\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-10\">\n <section class=\"hero is-hero-bar\">\n <div class=\"hero-body\">\n <div class=\"level\">\n <div class=\"level-left\">\n <div class=\"level-item\">\n <i18n.Translate>Order</i18n.Translate> #{id}\n <div class=\"tag is-success ml-4\">\n <i18n.Translate>paid</i18n.Translate>\n </div>\n {order.wired ? (\n <div class=\"tag is-success ml-4\">\n <i18n.Translate>wired</i18n.Translate>\n </div>\n ) : null}\n {order.refunded ? (\n <div class=\"tag is-danger ml-4\">\n <i18n.Translate>refunded</i18n.Translate>\n </div>\n ) : null}\n </div>\n </div>\n </div>\n <div class=\"level\">\n <div class=\"level-left\">\n <div class=\"level-item\">\n <h1 class=\"title\">{order.contract_terms.amount}</h1>\n </div>\n </div>\n <div class=\"level-right\">\n <div class=\"level-item\">\n <h1 class=\"title\">\n <div class=\"buttons\">\n <span\n class=\"has-tooltip-left\"\n data-tooltip={\n refundable\n ? i18n.str`refund order`\n : i18n.str`not refundable`\n }\n >\n <button\n class=\"button is-danger\"\n disabled={!refundable}\n onClick={() => onRefund(id)}\n >\n <i18n.Translate>refund</i18n.Translate>\n </button>\n </span>\n </div>\n </h1>\n </div>\n </div>\n </div>\n\n <div class=\"level\">\n <div class=\"level-left\" style={{ maxWidth: \"100%\" }}>\n <div class=\"level-item\" style={{ maxWidth: \"100%\" }}>\n <div\n class=\"content\"\n style={{\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n // maxWidth: '100%',\n }}\n >\n <p>\n <a\n href={order.contract_terms.fulfillment_url}\n rel=\"nofollow\"\n target=\"new\"\n >\n {order.contract_terms.fulfillment_url}\n </a>\n </p>\n <p>\n {format(\n new Date(order.contract_terms.timestamp.t_s * 1000),\n \"yyyy/MM/dd HH:mm:ss\",\n )}\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </section>\n\n <section class=\"section\">\n <div class=\"columns\">\n <div class=\"column is-4\">\n <div class=\"title\">\n <i18n.Translate>Timeline</i18n.Translate>\n </div>\n <Timeline events={events} />\n </div>\n <div class=\"column is-8\">\n <div class=\"title\">\n <i18n.Translate>Payment details</i18n.Translate>\n </div>\n <FormProvider<Paid>\n object={value}\n valueHandler={valueHandler}\n >\n {/* <InputCurrency<Paid> name=\"deposit_total\" readonly label={i18n.str`Deposit total`} /> */}\n {order.refunded && (\n <InputCurrency<Paid>\n name=\"refund_amount\"\n readonly\n label={i18n.str`Refunded amount`}\n />\n )}\n {order.refunded && (\n <InputCurrency<Paid>\n name=\"refund_taken\"\n readonly\n label={i18n.str`Refund taken`}\n />\n )}\n <Input<Paid>\n name=\"order_status\"\n readonly\n label={i18n.str`Order status`}\n />\n <TextField<Paid>\n name=\"order_status_url\"\n label={i18n.str`Status URL`}\n >\n <a\n target=\"_blank\"\n rel=\"noreferrer\"\n href={order.order_status_url}\n >\n {order.order_status_url}\n </a>\n </TextField>\n {order.refunded && (\n <TextField<Paid>\n name=\"order_status_url\"\n label={i18n.str`Refund URI`}\n >\n <a target=\"_blank\" rel=\"noreferrer\" href={refundurl}>\n {refundurl}\n </a>\n </TextField>\n )}\n </FormProvider>\n </div>\n </div>\n </section>\n\n {order.contract_terms.products.length ? (\n <Fragment>\n <div class=\"title\">\n <i18n.Translate>Product list</i18n.Translate>\n </div>\n <ProductList list={order.contract_terms.products} />\n </Fragment>\n ) : undefined}\n\n {value.contract_terms && (\n <ContractTerms value={value.contract_terms} />\n )}\n </div>\n <div class=\"column\" />\n </div>\n </section>\n </div>\n );\n}\n\nfunction UnpaidPage({\n id,\n order,\n}: {\n id: string;\n order: MerchantBackend.Orders.CheckPaymentUnpaidResponse;\n}) {\n const [value, valueHandler] = useState<Partial<Unpaid>>(order);\n const { i18n } = useTranslationContext();\n return (\n <div>\n <section class=\"hero is-hero-bar\">\n <div class=\"hero-body\">\n <div class=\"level\">\n <div class=\"level-left\">\n <div class=\"level-item\">\n <h1 class=\"title\">\n <i18n.Translate>Order</i18n.Translate> #{id}\n </h1>\n </div>\n <div class=\"tag is-dark\">\n <i18n.Translate>unpaid</i18n.Translate>\n </div>\n </div>\n </div>\n\n <div class=\"level\">\n <div class=\"level-left\" style={{ maxWidth: \"100%\" }}>\n <div class=\"level-item\" style={{ maxWidth: \"100%\" }}>\n <div\n class=\"content\"\n style={{\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n }}\n >\n <p>\n <b>\n <i18n.Translate>pay at</i18n.Translate>:\n </b>{\" \"}\n <a\n href={order.order_status_url}\n rel=\"nofollow\"\n target=\"new\"\n >\n {order.order_status_url}\n </a>\n </p>\n <p>\n <b>\n <i18n.Translate>created at</i18n.Translate>:\n </b>{\" \"}\n {order.creation_time.t_s === \"never\"\n ? \"never\"\n : format(\n new Date(order.creation_time.t_s * 1000),\n \"yyyy-MM-dd HH:mm:ss\",\n )}\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </section>\n\n <section class=\"section is-main-section\">\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-four-fifths\">\n <FormProvider<Unpaid> object={value} valueHandler={valueHandler}>\n <Input<Unpaid>\n readonly\n name=\"summary\"\n label={i18n.str`Summary`}\n tooltip={i18n.str`human-readable description of the whole purchase`}\n />\n <InputCurrency<Unpaid>\n readonly\n name=\"total_amount\"\n label={i18n.str`Amount`}\n tooltip={i18n.str`total price for the transaction`}\n />\n <Input<Unpaid>\n name=\"order_status\"\n readonly\n label={i18n.str`Order status`}\n />\n <Input<Unpaid>\n name=\"order_status_url\"\n readonly\n label={i18n.str`Order status URL`}\n />\n <TextField<Unpaid>\n name=\"taler_pay_uri\"\n label={i18n.str`Payment URI`}\n >\n <a target=\"_blank\" rel=\"noreferrer\" href={value.taler_pay_uri}>\n {value.taler_pay_uri}\n </a>\n </TextField>\n </FormProvider>\n </div>\n <div class=\"column\" />\n </div>\n </section>\n </div>\n );\n}\n\nexport function DetailPage({ id, selected, onRefund, onBack }: Props): VNode {\n const [showRefund, setShowRefund] = useState<string | undefined>(undefined);\n const { i18n } = useTranslationContext();\n const DetailByStatus = function () {\n switch (selected.order_status) {\n case \"claimed\":\n return <ClaimedPage id={id} order={selected} />;\n case \"paid\":\n return <PaidPage id={id} order={selected} onRefund={setShowRefund} />;\n case \"unpaid\":\n return <UnpaidPage id={id} order={selected} />;\n default:\n return (\n <div>\n <i18n.Translate>\n Unknown order status. This is an error, please contact the\n administrator.\n </i18n.Translate>\n </div>\n );\n }\n };\n\n return (\n <Fragment>\n {DetailByStatus()}\n {showRefund && (\n <RefundModal\n order={selected}\n onCancel={() => setShowRefund(undefined)}\n onConfirm={(value) => {\n onRefund(showRefund, value);\n setShowRefund(undefined);\n }}\n />\n )}\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-four-fifths\">\n <div class=\"buttons is-right mt-5\">\n <button class=\"button\" onClick={onBack}>\n <i18n.Translate>Back</i18n.Translate>\n </button>\n </div>\n </div>\n <div class=\"column\" />\n </div>\n </Fragment>\n );\n}\n\nasync function copyToClipboard(text: string) {\n return navigator.clipboard.writeText(text);\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\nimport {\n useTranslationContext,\n HttpError,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport { useOrderAPI, useOrderDetails } from \"../../../../hooks/order.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { DetailPage } from \"./DetailPage.js\";\n\nexport interface Props {\n oid: string;\n\n onBack: () => void;\n onUnauthorized: () => VNode;\n onNotFound: () => VNode;\n onLoadError: (error: HttpError<MerchantBackend.ErrorDetail>) => VNode;\n}\n\nexport default function Update({\n oid,\n onBack,\n onLoadError,\n onNotFound,\n onUnauthorized,\n}: Props): VNode {\n const { refundOrder } = useOrderAPI();\n const result = useOrderDetails(oid);\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n\n const { i18n } = useTranslationContext();\n\n if (result.clientError && result.isUnauthorized) return onUnauthorized();\n if (result.clientError && result.isNotfound) return onNotFound();\n if (result.loading) return <Loading />;\n if (!result.ok) return onLoadError(result);\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n\n <DetailPage\n onBack={onBack}\n id={oid}\n onRefund={(id, value) =>\n refundOrder(id, value)\n .then(() =>\n setNotif({\n message: i18n.str`refund created successfully`,\n type: \"SUCCESS\",\n }),\n )\n .catch((error) =>\n setNotif({\n message: i18n.str`could not create the refund`,\n type: \"ERROR\",\n description: error.message,\n }),\n )\n }\n selected={result.data}\n />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { format } from \"date-fns\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { DatePicker } from \"../../../../components/picker/DatePicker.js\";\nimport { MerchantBackend, WithId } from \"../../../../declaration.js\";\nimport { CardTable } from \"./Table.js\";\n\nexport interface ListPageProps {\n errorOrderId: string | undefined;\n\n onShowAll: () => void;\n onShowPaid: () => void;\n onShowRefunded: () => void;\n onShowNotWired: () => void;\n onCopyURL: (id: string) => void;\n isAllActive: string;\n isPaidActive: string;\n isRefundedActive: string;\n isNotWiredActive: string;\n\n jumpToDate?: Date;\n onSelectDate: (date?: Date) => void;\n\n orders: (MerchantBackend.Orders.OrderHistoryEntry & WithId)[];\n onLoadMoreBefore?: () => void;\n hasMoreBefore?: boolean;\n hasMoreAfter?: boolean;\n onLoadMoreAfter?: () => void;\n\n onSelectOrder: (o: MerchantBackend.Orders.OrderHistoryEntry & WithId) => void;\n onRefundOrder: (o: MerchantBackend.Orders.OrderHistoryEntry & WithId) => void;\n onSearchOrderById: (id: string) => void;\n onCreate: () => void;\n}\n\nexport function ListPage({\n orders,\n errorOrderId,\n isAllActive,\n onSelectOrder,\n onRefundOrder,\n onSearchOrderById,\n jumpToDate,\n onCopyURL,\n onShowAll,\n onShowPaid,\n onShowRefunded,\n onShowNotWired,\n onSelectDate,\n isPaidActive,\n isRefundedActive,\n isNotWiredActive,\n onCreate,\n}: ListPageProps): VNode {\n const { i18n } = useTranslationContext();\n const dateTooltip = i18n.str`select date to show nearby orders`;\n const [pickDate, setPickDate] = useState(false);\n const [orderId, setOrderId] = useState<string>(\"\");\n\n return (\n <section class=\"section is-main-section\">\n <div class=\"level\">\n <div class=\"level-left\">\n <div class=\"level-item\">\n <div class=\"field has-addons\">\n <div class=\"control\">\n <input\n class={errorOrderId ? \"input is-danger\" : \"input\"}\n type=\"text\"\n value={orderId}\n onChange={(e) => setOrderId(e.currentTarget.value)}\n placeholder={i18n.str`order id`}\n />\n {errorOrderId && <p class=\"help is-danger\">{errorOrderId}</p>}\n </div>\n <span\n class=\"has-tooltip-bottom\"\n data-tooltip={i18n.str`jump to order with the given order ID`}\n >\n <button\n class=\"button\"\n onClick={(e) => onSearchOrderById(orderId)}\n >\n <span class=\"icon\">\n <i class=\"mdi mdi-arrow-right\" />\n </span>\n </button>\n </span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"columns\">\n <div class=\"column is-two-thirds\">\n <div class=\"tabs\" style={{ overflow: \"inherit\" }}>\n <ul>\n <li class={isAllActive}>\n <div\n class=\"has-tooltip-right\"\n data-tooltip={i18n.str`remove all filters`}\n >\n <a onClick={onShowAll}>\n <i18n.Translate>All</i18n.Translate>\n </a>\n </div>\n </li>\n <li class={isPaidActive}>\n <div\n class=\"has-tooltip-right\"\n data-tooltip={i18n.str`only show paid orders`}\n >\n <a onClick={onShowPaid}>\n <i18n.Translate>Paid</i18n.Translate>\n </a>\n </div>\n </li>\n <li class={isRefundedActive}>\n <div\n class=\"has-tooltip-right\"\n data-tooltip={i18n.str`only show orders with refunds`}\n >\n <a onClick={onShowRefunded}>\n <i18n.Translate>Refunded</i18n.Translate>\n </a>\n </div>\n </li>\n <li class={isNotWiredActive}>\n <div\n class=\"has-tooltip-left\"\n data-tooltip={i18n.str`only show orders where customers paid, but wire payments from payment provider are still pending`}\n >\n <a onClick={onShowNotWired}>\n <i18n.Translate>Not wired</i18n.Translate>\n </a>\n </div>\n </li>\n </ul>\n </div>\n </div>\n <div class=\"column \">\n <div class=\"buttons is-right\">\n <div class=\"field has-addons\">\n {jumpToDate && (\n <div class=\"control\">\n <a class=\"button\" onClick={() => onSelectDate(undefined)}>\n <span\n class=\"icon\"\n data-tooltip={i18n.str`clear date filter`}\n >\n <i class=\"mdi mdi-close\" />\n </span>\n </a>\n </div>\n )}\n <div class=\"control\">\n <span class=\"has-tooltip-top\" data-tooltip={dateTooltip}>\n <input\n class=\"input\"\n type=\"text\"\n readonly\n value={!jumpToDate ? \"\" : format(jumpToDate, \"yyyy/MM/dd\")}\n placeholder={i18n.str`date (YYYY/MM/DD)`}\n onClick={() => {\n setPickDate(true);\n }}\n />\n </span>\n </div>\n <div class=\"control\">\n <span class=\"has-tooltip-left\" data-tooltip={dateTooltip}>\n <a\n class=\"button\"\n onClick={() => {\n setPickDate(true);\n }}\n >\n <span class=\"icon\">\n <i class=\"mdi mdi-calendar\" />\n </span>\n </a>\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <DatePicker\n opened={pickDate}\n closeFunction={() => setPickDate(false)}\n dateReceiver={onSelectDate}\n />\n\n <CardTable\n orders={orders}\n onCreate={onCreate}\n onCopyURL={onCopyURL}\n onSelect={onSelectOrder}\n onRefund={onRefundOrder}\n />\n </section>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport {\n HttpError,\n useTranslationContext,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport {\n InstanceOrderFilter,\n useInstanceOrders,\n useOrderAPI,\n useOrderDetails,\n} from \"../../../../hooks/order.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { ListPage } from \"./ListPage.js\";\nimport { RefundModal } from \"./Table.js\";\n\ninterface Props {\n onUnauthorized: () => VNode;\n onLoadError: (error: HttpError<MerchantBackend.ErrorDetail>) => VNode;\n onNotFound: () => VNode;\n onSelect: (id: string) => void;\n onCreate: () => void;\n}\n\nexport default function OrderList({\n onUnauthorized,\n onLoadError,\n onCreate,\n onSelect,\n onNotFound,\n}: Props): VNode {\n const [filter, setFilter] = useState<InstanceOrderFilter>({});\n const [orderToBeRefunded, setOrderToBeRefunded] = useState<\n MerchantBackend.Orders.OrderHistoryEntry | undefined\n >(undefined);\n\n const setNewDate = (date?: Date): void =>\n setFilter((prev) => ({ ...prev, date }));\n\n const result = useInstanceOrders(filter, setNewDate);\n const { refundOrder, getPaymentURL } = useOrderAPI();\n\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n\n const { i18n } = useTranslationContext();\n const [errorOrderId, setErrorOrderId] = useState<string | undefined>(\n undefined,\n );\n\n if (result.clientError && result.isUnauthorized) return onUnauthorized();\n if (result.clientError && result.isNotfound) return onNotFound();\n if (result.loading) return <Loading />;\n if (!result.ok) return onLoadError(result);\n\n const isPaidActive = filter.paid === \"yes\" ? \"is-active\" : \"\";\n const isRefundedActive = filter.refunded === \"yes\" ? \"is-active\" : \"\";\n const isNotWiredActive = filter.wired === \"no\" ? \"is-active\" : \"\";\n const isAllActive =\n filter.paid === undefined &&\n filter.refunded === undefined &&\n filter.wired === undefined\n ? \"is-active\"\n : \"\";\n\n async function testIfOrderExistAndSelect(orderId: string): Promise<void> {\n if (!orderId) {\n setErrorOrderId(i18n.str`Enter an order id`);\n return;\n }\n try {\n await getPaymentURL(orderId);\n onSelect(orderId);\n setErrorOrderId(undefined);\n } catch {\n setErrorOrderId(i18n.str`order not found`);\n }\n }\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n\n <ListPage\n orders={result.data.orders.map((o) => ({ ...o, id: o.order_id }))}\n onLoadMoreBefore={result.loadMorePrev}\n hasMoreBefore={!result.isReachingStart}\n onLoadMoreAfter={result.loadMore}\n hasMoreAfter={!result.isReachingEnd}\n onSelectOrder={(order) => onSelect(order.id)}\n onRefundOrder={(value) => setOrderToBeRefunded(value)}\n errorOrderId={errorOrderId}\n isAllActive={isAllActive}\n isNotWiredActive={isNotWiredActive}\n isPaidActive={isPaidActive}\n isRefundedActive={isRefundedActive}\n jumpToDate={filter.date}\n onCopyURL={(id) =>\n getPaymentURL(id).then((resp) => copyToClipboard(resp.data))\n }\n onCreate={onCreate}\n onSearchOrderById={testIfOrderExistAndSelect}\n onSelectDate={setNewDate}\n onShowAll={() => setFilter({})}\n onShowPaid={() => setFilter({ paid: \"yes\" })}\n onShowRefunded={() => setFilter({ refunded: \"yes\" })}\n onShowNotWired={() => setFilter({ wired: \"no\" })}\n />\n\n {orderToBeRefunded && (\n <RefundModalForTable\n id={orderToBeRefunded.order_id}\n onCancel={() => setOrderToBeRefunded(undefined)}\n onConfirm={(value) =>\n refundOrder(orderToBeRefunded.order_id, value)\n .then(() =>\n setNotif({\n message: i18n.str`refund created successfully`,\n type: \"SUCCESS\",\n }),\n )\n .catch((error) =>\n setNotif({\n message: i18n.str`could not create the refund`,\n type: \"ERROR\",\n description: error.message,\n }),\n )\n .then(() => setOrderToBeRefunded(undefined))\n }\n onLoadError={(error) => {\n setNotif({\n message: i18n.str`could not create the refund`,\n type: \"ERROR\",\n description: error.message,\n });\n setOrderToBeRefunded(undefined);\n return <div />;\n }}\n onUnauthorized={onUnauthorized}\n onNotFound={() => {\n setNotif({\n message: i18n.str`could not get the order to refund`,\n type: \"ERROR\",\n // description: error.message\n });\n setOrderToBeRefunded(undefined);\n return <div />;\n }}\n />\n )}\n </Fragment>\n );\n}\n\ninterface RefundProps {\n id: string;\n onUnauthorized: () => VNode;\n onLoadError: (error: HttpError<MerchantBackend.ErrorDetail>) => VNode;\n onNotFound: () => VNode;\n onCancel: () => void;\n onConfirm: (m: MerchantBackend.Orders.RefundRequest) => void;\n}\n\nfunction RefundModalForTable({\n id,\n onUnauthorized,\n onLoadError,\n onNotFound,\n onConfirm,\n onCancel,\n}: RefundProps): VNode {\n const result = useOrderDetails(id);\n\n if (result.clientError && result.isUnauthorized) return onUnauthorized();\n if (result.clientError && result.isNotfound) return onNotFound();\n if (result.loading) return <Loading />;\n if (!result.ok) return onLoadError(result);\n\n return (\n <RefundModal\n order={result.data}\n onCancel={onCancel}\n onConfirm={onConfirm}\n />\n );\n}\n\nasync function copyToClipboard(text: string): Promise<void> {\n return navigator.clipboard.writeText(text);\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h } from \"preact\";\nimport { useLayoutEffect, useState } from \"preact/hooks\";\nimport { MerchantBackend, Timestamp } from \"../../declaration.js\";\nimport { FormErrors, FormProvider } from \"./FormProvider.js\";\nimport { InputDate } from \"./InputDate.js\";\nimport { InputGroup } from \"./InputGroup.js\";\nimport { InputLocation } from \"./InputLocation.js\";\nimport { InputNumber } from \"./InputNumber.js\";\nimport { InputProps, useField } from \"./useField.js\";\n\nexport interface Props<T> extends InputProps<T> {\n alreadyExist?: boolean;\n}\n\ntype Entity = Stock;\n\nexport interface Stock {\n current: number;\n lost: number;\n sold: number;\n address?: MerchantBackend.Location;\n nextRestock?: Timestamp;\n}\n\ninterface StockDelta {\n incoming: number;\n lost: number;\n}\n\nexport function InputStock<T>({\n name,\n tooltip,\n label,\n alreadyExist,\n}: Props<keyof T>) {\n const { error, value, onChange } = useField<T>(name);\n\n const [errors, setErrors] = useState<FormErrors<Entity>>({});\n\n const [formValue, valueHandler] = useState<Partial<Entity>>(value);\n const [addedStock, setAddedStock] = useState<StockDelta>({\n incoming: 0,\n lost: 0,\n });\n const { i18n } = useTranslationContext();\n\n useLayoutEffect(() => {\n if (!formValue) {\n onChange(undefined as any);\n } else {\n onChange({\n ...formValue,\n current: (formValue?.current || 0) + addedStock.incoming,\n lost: (formValue?.lost || 0) + addedStock.lost,\n } as any);\n }\n }, [formValue, addedStock]);\n\n if (!formValue) {\n return (\n <Fragment>\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">\n {label}\n {tooltip && (\n <span class=\"icon has-tooltip-right\" data-tooltip={tooltip}>\n <i class=\"mdi mdi-information\" />\n </span>\n )}\n </label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field has-addons\">\n {!alreadyExist ? (\n <button\n class=\"button\"\n data-tooltip={i18n.str`click here to configure the stock of the product, leave it as is and the backend will not control stock`}\n onClick={(): void => {\n valueHandler({\n current: 0,\n lost: 0,\n sold: 0,\n } as Stock as any);\n }}\n >\n <span>\n <i18n.Translate>Manage stock</i18n.Translate>\n </span>\n </button>\n ) : (\n <button\n class=\"button\"\n data-tooltip={i18n.str`this product has been configured without stock control`}\n disabled\n >\n <span>\n <i18n.Translate>Infinite</i18n.Translate>\n </span>\n </button>\n )}\n </div>\n </div>\n </div>\n </Fragment>\n );\n }\n\n const currentStock =\n (formValue.current || 0) - (formValue.lost || 0) - (formValue.sold || 0);\n\n const stockAddedErrors: FormErrors<typeof addedStock> = {\n lost:\n currentStock + addedStock.incoming < addedStock.lost\n ? i18n.str`lost cannot be greater than current and incoming (max ${\n currentStock + addedStock.incoming\n })`\n : undefined,\n };\n\n // const stockUpdateDescription = stockAddedErrors.lost ? '' : (\n // !!addedStock.incoming || !!addedStock.lost ?\n // i18n.str`current stock will change from ${currentStock} to ${currentStock + addedStock.incoming - addedStock.lost}` :\n // i18n.str`current stock will stay at ${currentStock}`\n // )\n\n return (\n <Fragment>\n <div class=\"card\">\n <header class=\"card-header\">\n <p class=\"card-header-title\">\n {label}\n {tooltip && (\n <span class=\"icon\" data-tooltip={tooltip}>\n <i class=\"mdi mdi-information\" />\n </span>\n )}\n </p>\n </header>\n <div class=\"card-content\">\n <FormProvider<Entity>\n name=\"stock\"\n errors={errors}\n object={formValue}\n valueHandler={valueHandler}\n >\n {alreadyExist ? (\n <Fragment>\n <FormProvider\n name=\"added\"\n errors={stockAddedErrors}\n object={addedStock}\n valueHandler={setAddedStock as any}\n >\n <InputNumber name=\"incoming\" label={i18n.str`Incoming`} />\n <InputNumber name=\"lost\" label={i18n.str`Lost`} />\n </FormProvider>\n\n {/* <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\" />\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n {stockUpdateDescription}\n </div>\n </div>\n </div> */}\n </Fragment>\n ) : (\n <InputNumber<Entity>\n name=\"current\"\n label={i18n.str`Current`}\n side={\n <button\n class=\"button is-danger\"\n data-tooltip={i18n.str`remove stock control for this product`}\n onClick={(): void => {\n valueHandler(undefined as any);\n }}\n >\n <span>\n <i18n.Translate>without stock</i18n.Translate>\n </span>\n </button>\n }\n />\n )}\n\n <InputDate<Entity>\n name=\"nextRestock\"\n label={i18n.str`Next restock`}\n withTimestampSupport\n />\n\n <InputGroup<Entity>\n name=\"address\"\n label={i18n.str`Delivery address`}\n >\n <InputLocation name=\"address\" />\n </InputGroup>\n </FormProvider>\n </div>\n </div>\n </Fragment>\n );\n}\n// (\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h } from \"preact\";\nimport { useCallback, useEffect, useState } from \"preact/hooks\";\nimport * as yup from \"yup\";\nimport { useBackendContext } from \"../../context/backend.js\";\nimport { MerchantBackend } from \"../../declaration.js\";\nimport {\n ProductCreateSchema as createSchema,\n ProductUpdateSchema as updateSchema,\n} from \"../../schemas/index.js\";\nimport { FormErrors, FormProvider } from \"../form/FormProvider.js\";\nimport { Input } from \"../form/Input.js\";\nimport { InputCurrency } from \"../form/InputCurrency.js\";\nimport { InputImage } from \"../form/InputImage.js\";\nimport { InputNumber } from \"../form/InputNumber.js\";\nimport { InputStock, Stock } from \"../form/InputStock.js\";\nimport { InputTaxes } from \"../form/InputTaxes.js\";\nimport { InputWithAddon } from \"../form/InputWithAddon.js\";\n\ntype Entity = MerchantBackend.Products.ProductDetail & { product_id: string };\n\ninterface Props {\n onSubscribe: (c?: () => Entity | undefined) => void;\n initial?: Partial<Entity>;\n alreadyExist?: boolean;\n}\n\nexport function ProductForm({ onSubscribe, initial, alreadyExist }: Props) {\n const [value, valueHandler] = useState<Partial<Entity & { stock: Stock }>>({\n address: {},\n description_i18n: {},\n taxes: [],\n next_restock: { t_s: \"never\" },\n price: \":0\",\n ...initial,\n stock:\n !initial || initial.total_stock === -1\n ? undefined\n : {\n current: initial.total_stock || 0,\n lost: initial.total_lost || 0,\n sold: initial.total_sold || 0,\n address: initial.address,\n nextRestock: initial.next_restock,\n },\n });\n let errors: FormErrors<Entity> = {};\n\n try {\n (alreadyExist ? updateSchema : createSchema).validateSync(value, {\n abortEarly: false,\n });\n } catch (err) {\n if (err instanceof yup.ValidationError) {\n const yupErrors = err.inner as yup.ValidationError[];\n errors = yupErrors.reduce(\n (prev, cur) =>\n !cur.path ? prev : { ...prev, [cur.path]: cur.message },\n {},\n );\n }\n }\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n\n const submit = useCallback((): Entity | undefined => {\n const stock: Stock = (value as any).stock;\n\n if (!stock) {\n value.total_stock = -1;\n } else {\n value.total_stock = stock.current;\n value.total_lost = stock.lost;\n value.next_restock =\n stock.nextRestock instanceof Date\n ? { t_s: stock.nextRestock.getTime() / 1000 }\n : stock.nextRestock;\n value.address = stock.address;\n }\n delete (value as any).stock;\n\n if (typeof value.minimum_age !== \"undefined\" && value.minimum_age < 1) {\n delete value.minimum_age;\n }\n\n return value as MerchantBackend.Products.ProductDetail & {\n product_id: string;\n };\n }, [value]);\n\n useEffect(() => {\n onSubscribe(hasErrors ? undefined : submit);\n }, [submit, hasErrors]);\n\n const backend = useBackendContext();\n const { i18n } = useTranslationContext();\n\n return (\n <div>\n <FormProvider<Entity>\n name=\"product\"\n errors={errors}\n object={value}\n valueHandler={valueHandler}\n >\n {alreadyExist ? undefined : (\n <InputWithAddon<Entity>\n name=\"product_id\"\n addonBefore={`${backend.url}/product/`}\n label={i18n.str`ID`}\n tooltip={i18n.str`product identification to use in URLs (for internal use only)`}\n />\n )}\n <InputImage<Entity>\n name=\"image\"\n label={i18n.str`Image`}\n tooltip={i18n.str`illustration of the product for customers`}\n />\n <Input<Entity>\n name=\"description\"\n inputType=\"multiline\"\n label={i18n.str`Description`}\n tooltip={i18n.str`product description for customers`}\n />\n <InputNumber<Entity>\n name=\"minimum_age\"\n label={i18n.str`Age restricted`}\n tooltip={i18n.str`is this product restricted for customer below certain age?`}\n />\n <Input<Entity>\n name=\"unit\"\n label={i18n.str`Unit`}\n tooltip={i18n.str`unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers`}\n />\n <InputCurrency<Entity>\n name=\"price\"\n label={i18n.str`Price`}\n tooltip={i18n.str`sale price for customers, including taxes, for above units of the product`}\n />\n <InputStock\n name=\"stock\"\n label={i18n.str`Stock`}\n alreadyExist={alreadyExist}\n tooltip={i18n.str`product inventory for products with finite supply (for internal use only)`}\n />\n <InputTaxes<Entity>\n name=\"taxes\"\n label={i18n.str`Taxes`}\n tooltip={i18n.str`taxes included in the product price, exposed to customers`}\n />\n </FormProvider>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { AsyncButton } from \"../../../../components/exception/AsyncButton.js\";\nimport { ProductForm } from \"../../../../components/product/ProductForm.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport { useListener } from \"../../../../hooks/listener.js\";\n\ntype Entity = MerchantBackend.Products.ProductAddDetail & {\n product_id: string;\n};\n\ninterface Props {\n onCreate: (d: Entity) => Promise<void>;\n onBack?: () => void;\n}\n\nexport function CreatePage({ onCreate, onBack }: Props): VNode {\n const [submitForm, addFormSubmitter] = useListener<Entity | undefined>(\n (result) => {\n if (result) return onCreate(result);\n return Promise.reject();\n },\n );\n\n const { i18n } = useTranslationContext();\n\n return (\n <div>\n <section class=\"section is-main-section\">\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-four-fifths\">\n <ProductForm onSubscribe={addFormSubmitter} />\n\n <div class=\"buttons is-right mt-5\">\n {onBack && (\n <button class=\"button\" onClick={onBack}>\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n )}\n <AsyncButton\n onClick={submitForm}\n data-tooltip={\n !submitForm\n ? i18n.str`Need to complete marked fields`\n : \"confirm operation\"\n }\n disabled={!submitForm}\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </AsyncButton>\n </div>\n </div>\n <div class=\"column\" />\n </div>\n </section>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport { useProductAPI } from \"../../../../hooks/product.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { CreatePage } from \"./CreatePage.js\";\n\nexport type Entity = MerchantBackend.Products.ProductAddDetail;\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n}\nexport default function CreateProduct({ onConfirm, onBack }: Props): VNode {\n const { createProduct } = useProductAPI();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { i18n } = useTranslationContext();\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n <CreatePage\n onBack={onBack}\n onCreate={(request: MerchantBackend.Products.ProductAddDetail) => {\n return createProduct(request)\n .then(() => onConfirm())\n .catch((error) => {\n setNotif({\n message: i18n.str`could not create product`,\n type: \"ERROR\",\n description: error.message,\n });\n });\n }}\n />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { Amounts } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { format } from \"date-fns\";\nimport { ComponentChildren, Fragment, h, VNode } from \"preact\";\nimport { StateUpdater, useState } from \"preact/hooks\";\nimport emptyImage from \"../../../../assets/empty.png\";\nimport {\n FormErrors,\n FormProvider,\n} from \"../../../../components/form/FormProvider.js\";\nimport { InputCurrency } from \"../../../../components/form/InputCurrency.js\";\nimport { InputNumber } from \"../../../../components/form/InputNumber.js\";\nimport { MerchantBackend, WithId } from \"../../../../declaration.js\";\n\ntype Entity = MerchantBackend.Products.ProductDetail & WithId;\n\ninterface Props {\n instances: Entity[];\n onDelete: (id: Entity) => void;\n onSelect: (product: Entity) => void;\n onUpdate: (\n id: string,\n data: MerchantBackend.Products.ProductPatchDetail,\n ) => Promise<void>;\n onCreate: () => void;\n selected?: boolean;\n}\n\nexport function CardTable({\n instances,\n onCreate,\n onSelect,\n onUpdate,\n onDelete,\n}: Props): VNode {\n const [rowSelection, rowSelectionHandler] = useState<string | undefined>(\n undefined,\n );\n const { i18n } = useTranslationContext();\n return (\n <div class=\"card has-table\">\n <header class=\"card-header\">\n <p class=\"card-header-title\">\n <span class=\"icon\">\n <i class=\"mdi mdi-shopping\" />\n </span>\n <i18n.Translate>Products</i18n.Translate>\n </p>\n <div class=\"card-header-icon\" aria-label=\"more options\">\n <span\n class=\"has-tooltip-left\"\n data-tooltip={i18n.str`add product to inventory`}\n >\n <button class=\"button is-info\" type=\"button\" onClick={onCreate}>\n <span class=\"icon is-small\">\n <i class=\"mdi mdi-plus mdi-36px\" />\n </span>\n </button>\n </span>\n </div>\n </header>\n <div class=\"card-content\">\n <div class=\"b-table has-pagination\">\n <div class=\"table-wrapper has-mobile-cards\">\n {instances.length > 0 ? (\n <Table\n instances={instances}\n onSelect={onSelect}\n onDelete={onDelete}\n onUpdate={onUpdate}\n rowSelection={rowSelection}\n rowSelectionHandler={rowSelectionHandler}\n />\n ) : (\n <EmptyTable />\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\ninterface TableProps {\n rowSelection: string | undefined;\n instances: Entity[];\n onSelect: (id: Entity) => void;\n onUpdate: (\n id: string,\n data: MerchantBackend.Products.ProductPatchDetail,\n ) => Promise<void>;\n onDelete: (id: Entity) => void;\n rowSelectionHandler: StateUpdater<string | undefined>;\n}\n\nfunction Table({\n rowSelection,\n rowSelectionHandler,\n instances,\n onSelect,\n onUpdate,\n onDelete,\n}: TableProps): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"table-container\">\n <table class=\"table is-fullwidth is-striped is-hoverable is-fullwidth\">\n <thead>\n <tr>\n <th>\n <i18n.Translate>Image</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Description</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Sell</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Taxes</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Profit</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Stock</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Sold</i18n.Translate>\n </th>\n <th />\n </tr>\n </thead>\n <tbody>\n {instances.map((i) => {\n const restStockInfo = !i.next_restock\n ? \"\"\n : i.next_restock.t_s === \"never\"\n ? \"never\"\n : `restock at ${format(\n new Date(i.next_restock.t_s * 1000),\n \"yyyy/MM/dd\",\n )}`;\n let stockInfo: ComponentChildren = \"\";\n if (i.total_stock < 0) {\n stockInfo = \"infinite\";\n } else {\n const totalStock = i.total_stock - i.total_lost - i.total_sold;\n stockInfo = (\n <label title={restStockInfo}>\n {totalStock} {i.unit}\n </label>\n );\n }\n\n const isFree = Amounts.isZero(Amounts.parseOrThrow(i.price));\n\n return (\n <Fragment key={i.id}>\n <tr key=\"info\">\n <td\n onClick={() =>\n rowSelection !== i.id && rowSelectionHandler(i.id)\n }\n style={{ cursor: \"pointer\" }}\n >\n <img\n src={i.image ? i.image : emptyImage}\n style={{\n border: \"solid black 1px\",\n width: 100,\n height: 100,\n }}\n />\n </td>\n <td\n onClick={() =>\n rowSelection !== i.id && rowSelectionHandler(i.id)\n }\n style={{ cursor: \"pointer\" }}\n >\n {i.description}\n </td>\n <td\n onClick={() =>\n rowSelection !== i.id && rowSelectionHandler(i.id)\n }\n style={{ cursor: \"pointer\" }}\n >\n {isFree ? i18n.str`free` : `${i.price} / ${i.unit}`}\n </td>\n <td\n onClick={() =>\n rowSelection !== i.id && rowSelectionHandler(i.id)\n }\n style={{ cursor: \"pointer\" }}\n >\n {sum(i.taxes)}\n </td>\n <td\n onClick={() =>\n rowSelection !== i.id && rowSelectionHandler(i.id)\n }\n style={{ cursor: \"pointer\" }}\n >\n {difference(i.price, sum(i.taxes))}\n </td>\n <td\n onClick={() =>\n rowSelection !== i.id && rowSelectionHandler(i.id)\n }\n style={{ cursor: \"pointer\" }}\n >\n {stockInfo}\n </td>\n <td\n onClick={() =>\n rowSelection !== i.id && rowSelectionHandler(i.id)\n }\n style={{ cursor: \"pointer\" }}\n >\n {i.total_sold} {i.unit}\n </td>\n <td class=\"is-actions-cell right-sticky\">\n <div class=\"buttons is-right\">\n <span\n class=\"has-tooltip-bottom\"\n data-tooltip={i18n.str`go to product update page`}\n >\n <button\n class=\"button is-small is-success \"\n type=\"button\"\n onClick={(): void => onSelect(i)}\n >\n <i18n.Translate>Update</i18n.Translate>\n </button>\n </span>\n <span\n class=\"has-tooltip-left\"\n data-tooltip={i18n.str`remove this product from the database`}\n >\n <button\n class=\"button is-small is-danger\"\n type=\"button\"\n onClick={(): void => onDelete(i)}\n >\n <i18n.Translate>Delete</i18n.Translate>\n </button>\n </span>\n </div>\n </td>\n </tr>\n {rowSelection === i.id && (\n <tr key=\"form\">\n <td colSpan={10}>\n <FastProductUpdateForm\n product={i}\n onUpdate={(prod) =>\n onUpdate(i.id, prod).then((r) =>\n rowSelectionHandler(undefined),\n )\n }\n onCancel={() => rowSelectionHandler(undefined)}\n />\n </td>\n </tr>\n )}\n </Fragment>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n}\n\ninterface FastProductUpdateFormProps {\n product: Entity;\n onUpdate: (\n data: MerchantBackend.Products.ProductPatchDetail,\n ) => Promise<void>;\n onCancel: () => void;\n}\ninterface FastProductUpdate {\n incoming: number;\n lost: number;\n price: string;\n}\ninterface UpdatePrice {\n price: string;\n}\n\nfunction FastProductWithInfiniteStockUpdateForm({\n product,\n onUpdate,\n onCancel,\n}: FastProductUpdateFormProps) {\n const [value, valueHandler] = useState<UpdatePrice>({ price: product.price });\n const { i18n } = useTranslationContext();\n\n return (\n <Fragment>\n <FormProvider<FastProductUpdate>\n name=\"added\"\n object={value}\n valueHandler={valueHandler as any}\n >\n <InputCurrency<FastProductUpdate>\n name=\"price\"\n label={i18n.str`Price`}\n tooltip={i18n.str`update the product with new price`}\n />\n </FormProvider>\n\n <div class=\"buttons is-right mt-5\">\n <button class=\"button\" onClick={onCancel}>\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n <span\n class=\"has-tooltip-left\"\n data-tooltip={i18n.str`update product with new price`}\n >\n <button\n class=\"button is-info\"\n onClick={() =>\n onUpdate({\n ...product,\n price: value.price,\n })\n }\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </button>\n </span>\n </div>\n </Fragment>\n );\n}\n\nfunction FastProductWithManagedStockUpdateForm({\n product,\n onUpdate,\n onCancel,\n}: FastProductUpdateFormProps) {\n const [value, valueHandler] = useState<FastProductUpdate>({\n incoming: 0,\n lost: 0,\n price: product.price,\n });\n\n const currentStock =\n product.total_stock - product.total_sold - product.total_lost;\n\n const errors: FormErrors<FastProductUpdate> = {\n lost:\n currentStock + value.incoming < value.lost\n ? `lost cannot be greater that current + incoming (max ${\n currentStock + value.incoming\n })`\n : undefined,\n };\n\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n const { i18n } = useTranslationContext();\n\n return (\n <Fragment>\n <FormProvider<FastProductUpdate>\n name=\"added\"\n errors={errors}\n object={value}\n valueHandler={valueHandler as any}\n >\n <InputNumber<FastProductUpdate>\n name=\"incoming\"\n label={i18n.str`Incoming`}\n tooltip={i18n.str`add more elements to the inventory`}\n />\n <InputNumber<FastProductUpdate>\n name=\"lost\"\n label={i18n.str`Lost`}\n tooltip={i18n.str`report elements lost in the inventory`}\n />\n <InputCurrency<FastProductUpdate>\n name=\"price\"\n label={i18n.str`Price`}\n tooltip={i18n.str`new price for the product`}\n />\n </FormProvider>\n\n <div class=\"buttons is-right mt-5\">\n <button class=\"button\" onClick={onCancel}>\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n <span\n class=\"has-tooltip-left\"\n data-tooltip={\n hasErrors\n ? i18n.str`the are value with errors`\n : i18n.str`update product with new stock and price`\n }\n >\n <button\n class=\"button is-info\"\n disabled={hasErrors}\n onClick={() =>\n onUpdate({\n ...product,\n total_stock: product.total_stock + value.incoming,\n total_lost: product.total_lost + value.lost,\n price: value.price,\n })\n }\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </button>\n </span>\n </div>\n </Fragment>\n );\n}\n\nfunction FastProductUpdateForm(props: FastProductUpdateFormProps) {\n return props.product.total_stock === -1 ? (\n <FastProductWithInfiniteStockUpdateForm {...props} />\n ) : (\n <FastProductWithManagedStockUpdateForm {...props} />\n );\n}\n\nfunction EmptyTable(): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"content has-text-grey has-text-centered\">\n <p>\n <span class=\"icon is-large\">\n <i class=\"mdi mdi-emoticon-sad mdi-48px\" />\n </span>\n </p>\n <p>\n <i18n.Translate>\n There is no products yet, add more pressing the + sign\n </i18n.Translate>\n </p>\n </div>\n );\n}\n\nfunction difference(price: string, tax: number) {\n if (!tax) return price;\n const ps = price.split(\":\");\n const p = parseInt(ps[1], 10);\n ps[1] = `${p - tax}`;\n return ps.join(\":\");\n}\nfunction sum(taxes: MerchantBackend.Tax[]) {\n return taxes.reduce((p, c) => p + parseInt(c.tax.split(\":\")[1], 10), 0);\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport {\n HttpError,\n useTranslationContext,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { MerchantBackend, WithId } from \"../../../../declaration.js\";\nimport {\n useInstanceProducts,\n useProductAPI,\n} from \"../../../../hooks/product.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { CardTable } from \"./Table.js\";\n\ninterface Props {\n onUnauthorized: () => VNode;\n onNotFound: () => VNode;\n onCreate: () => void;\n onSelect: (id: string) => void;\n onLoadError: (e: HttpError<MerchantBackend.ErrorDetail>) => VNode;\n}\nexport default function ProductList({\n onUnauthorized,\n onLoadError,\n onCreate,\n onSelect,\n onNotFound,\n}: Props): VNode {\n const result = useInstanceProducts();\n const { deleteProduct, updateProduct } = useProductAPI();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n\n const { i18n } = useTranslationContext();\n\n if (result.clientError && result.isUnauthorized) return onUnauthorized();\n if (result.clientError && result.isNotfound) return onNotFound();\n if (result.loading) return <Loading />;\n if (!result.ok) return onLoadError(result);\n\n return (\n <section class=\"section is-main-section\">\n <NotificationCard notification={notif} />\n\n <CardTable\n instances={result.data}\n onCreate={onCreate}\n onUpdate={(id, prod) =>\n updateProduct(id, prod)\n .then(() =>\n setNotif({\n message: i18n.str`product updated successfully`,\n type: \"SUCCESS\",\n }),\n )\n .catch((error) =>\n setNotif({\n message: i18n.str`could not update the product`,\n type: \"ERROR\",\n description: error.message,\n }),\n )\n }\n onSelect={(product) => onSelect(product.id)}\n onDelete={(prod: MerchantBackend.Products.ProductDetail & WithId) =>\n deleteProduct(prod.id)\n .then(() =>\n setNotif({\n message: i18n.str`product delete successfully`,\n type: \"SUCCESS\",\n }),\n )\n .catch((error) =>\n setNotif({\n message: i18n.str`could not delete the product`,\n type: \"ERROR\",\n description: error.message,\n }),\n )\n }\n />\n </section>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { AsyncButton } from \"../../../../components/exception/AsyncButton.js\";\nimport { ProductForm } from \"../../../../components/product/ProductForm.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport { useListener } from \"../../../../hooks/listener.js\";\n\ntype Entity = MerchantBackend.Products.ProductDetail & { product_id: string };\n\ninterface Props {\n onUpdate: (d: Entity) => Promise<void>;\n onBack?: () => void;\n product: Entity;\n}\n\nexport function UpdatePage({ product, onUpdate, onBack }: Props): VNode {\n const [submitForm, addFormSubmitter] = useListener<Entity | undefined>(\n (result) => {\n if (result) return onUpdate(result);\n return Promise.resolve();\n },\n );\n\n const { i18n } = useTranslationContext();\n\n return (\n <div>\n <section class=\"section\">\n <section class=\"hero is-hero-bar\">\n <div class=\"hero-body\">\n <div class=\"level\">\n <div class=\"level-left\">\n <div class=\"level-item\">\n <span class=\"is-size-4\">\n <i18n.Translate>Product id:</i18n.Translate>\n <b>{product.product_id}</b>\n </span>\n </div>\n </div>\n </div>\n </div>\n </section>\n <hr />\n\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-four-fifths\">\n <ProductForm\n initial={product}\n onSubscribe={addFormSubmitter}\n alreadyExist\n />\n\n <div class=\"buttons is-right mt-5\">\n {onBack && (\n <button class=\"button\" onClick={onBack}>\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n )}\n <AsyncButton\n onClick={submitForm}\n data-tooltip={\n !submitForm\n ? i18n.str`Need to complete marked fields`\n : \"confirm operation\"\n }\n disabled={!submitForm}\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </AsyncButton>\n </div>\n </div>\n <div class=\"column\" />\n </div>\n </section>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport {\n HttpError,\n useTranslationContext,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport { useProductAPI, useProductDetails } from \"../../../../hooks/product.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { UpdatePage } from \"./UpdatePage.js\";\n\nexport type Entity = MerchantBackend.Products.ProductAddDetail;\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n onUnauthorized: () => VNode;\n onNotFound: () => VNode;\n onLoadError: (e: HttpError<MerchantBackend.ErrorDetail>) => VNode;\n pid: string;\n}\nexport default function UpdateProduct({\n pid,\n onConfirm,\n onBack,\n onUnauthorized,\n onNotFound,\n onLoadError,\n}: Props): VNode {\n const { updateProduct } = useProductAPI();\n const result = useProductDetails(pid);\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n\n const { i18n } = useTranslationContext();\n\n if (result.clientError && result.isUnauthorized) return onUnauthorized();\n if (result.clientError && result.isNotfound) return onNotFound();\n if (result.loading) return <Loading />;\n if (!result.ok) return onLoadError(result);\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n <UpdatePage\n product={{ ...result.data, product_id: pid }}\n onBack={onBack}\n onUpdate={(data) => {\n return updateProduct(pid, data)\n .then(onConfirm)\n .catch((error) => {\n setNotif({\n message: i18n.str`could not create product`,\n type: \"ERROR\",\n description: error.message,\n });\n });\n }}\n />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\nimport {\n HttpResponse,\n HttpResponseOk,\n RequestError,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { MerchantBackend } from \"../declaration.js\";\nimport { useBackendInstanceRequest, useMatchMutate } from \"./backend.js\";\n\n// FIX default import https://github.com/microsoft/TypeScript/issues/49189\nimport _useSWR, { SWRHook, useSWRConfig } from \"swr\";\nconst useSWR = _useSWR as unknown as SWRHook;\n\nexport function useReservesAPI(): ReserveMutateAPI {\n const mutateAll = useMatchMutate();\n const { mutate } = useSWRConfig();\n const { request } = useBackendInstanceRequest();\n\n const createReserve = async (\n data: MerchantBackend.Tips.ReserveCreateRequest,\n ): Promise<\n HttpResponseOk<MerchantBackend.Tips.ReserveCreateConfirmation>\n > => {\n const res = await request<MerchantBackend.Tips.ReserveCreateConfirmation>(\n `/private/reserves`,\n {\n method: \"POST\",\n data,\n },\n );\n\n //evict reserve list query\n await mutateAll(/.*private\\/reserves.*/);\n\n return res;\n };\n\n const authorizeTipReserve = async (\n pub: string,\n data: MerchantBackend.Tips.TipCreateRequest,\n ): Promise<HttpResponseOk<MerchantBackend.Tips.TipCreateConfirmation>> => {\n const res = await request<MerchantBackend.Tips.TipCreateConfirmation>(\n `/private/reserves/${pub}/authorize-tip`,\n {\n method: \"POST\",\n data,\n },\n );\n\n //evict reserve details query\n await mutate([`/private/reserves/${pub}`]);\n\n return res;\n };\n\n const authorizeTip = async (\n data: MerchantBackend.Tips.TipCreateRequest,\n ): Promise<HttpResponseOk<MerchantBackend.Tips.TipCreateConfirmation>> => {\n const res = await request<MerchantBackend.Tips.TipCreateConfirmation>(\n `/private/tips`,\n {\n method: \"POST\",\n data,\n },\n );\n\n //evict all details query\n await mutateAll(/.*private\\/reserves\\/.*/);\n\n return res;\n };\n\n const deleteReserve = async (\n pub: string,\n ): Promise<HttpResponse<void, MerchantBackend.ErrorDetail>> => {\n const res = await request<void>(`/private/reserves/${pub}`, {\n method: \"DELETE\",\n });\n\n //evict reserve list query\n await mutateAll(/.*private\\/reserves.*/);\n\n return res;\n };\n\n return { createReserve, authorizeTip, authorizeTipReserve, deleteReserve };\n}\n\nexport interface ReserveMutateAPI {\n createReserve: (\n data: MerchantBackend.Tips.ReserveCreateRequest,\n ) => Promise<HttpResponseOk<MerchantBackend.Tips.ReserveCreateConfirmation>>;\n authorizeTipReserve: (\n id: string,\n data: MerchantBackend.Tips.TipCreateRequest,\n ) => Promise<HttpResponseOk<MerchantBackend.Tips.TipCreateConfirmation>>;\n authorizeTip: (\n data: MerchantBackend.Tips.TipCreateRequest,\n ) => Promise<HttpResponseOk<MerchantBackend.Tips.TipCreateConfirmation>>;\n deleteReserve: (\n id: string,\n ) => Promise<HttpResponse<void, MerchantBackend.ErrorDetail>>;\n}\n\nexport function useInstanceReserves(): HttpResponse<\n MerchantBackend.Tips.TippingReserveStatus,\n MerchantBackend.ErrorDetail\n> {\n const { fetcher } = useBackendInstanceRequest();\n\n const { data, error, isValidating } = useSWR<\n HttpResponseOk<MerchantBackend.Tips.TippingReserveStatus>,\n RequestError<MerchantBackend.ErrorDetail>\n >([`/private/reserves`], fetcher);\n\n if (isValidating) return { loading: true, data: data?.data };\n if (data) return data;\n if (error) return error.info;\n return { loading: true };\n}\n\nexport function useReserveDetails(\n reserveId: string,\n): HttpResponse<\n MerchantBackend.Tips.ReserveDetail,\n MerchantBackend.ErrorDetail\n> {\n const { reserveDetailFetcher } = useBackendInstanceRequest();\n\n const { data, error, isValidating } = useSWR<\n HttpResponseOk<MerchantBackend.Tips.ReserveDetail>,\n RequestError<MerchantBackend.ErrorDetail>\n >([`/private/reserves/${reserveId}`], reserveDetailFetcher, {\n refreshInterval: 0,\n refreshWhenHidden: false,\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n refreshWhenOffline: false,\n });\n\n if (isValidating) return { loading: true, data: data?.data };\n if (data) return data;\n if (error) return error.info;\n return { loading: true };\n}\n\nexport function useTipDetails(\n tipId: string,\n): HttpResponse<MerchantBackend.Tips.TipDetails, MerchantBackend.ErrorDetail> {\n const { tipsDetailFetcher } = useBackendInstanceRequest();\n\n const { data, error, isValidating } = useSWR<\n HttpResponseOk<MerchantBackend.Tips.TipDetails>,\n RequestError<MerchantBackend.ErrorDetail>\n >([`/private/tips/${tipId}`], tipsDetailFetcher, {\n refreshInterval: 0,\n refreshWhenHidden: false,\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n refreshWhenOffline: false,\n });\n\n if (isValidating) return { loading: true, data: data?.data };\n if (data) return data;\n if (error) return error.info;\n return { loading: true };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\nimport { h, VNode } from \"preact\";\nimport { useEffect, useRef } from \"preact/hooks\";\nimport qrcode from \"qrcode-generator\";\n\nexport function QR({ text }: { text: string }): VNode {\n const divRef = useRef<HTMLDivElement>(null);\n useEffect(() => {\n const qr = qrcode(0, \"L\");\n qr.addData(text);\n qr.make();\n if (divRef.current) {\n divRef.current.innerHTML = qr.createSvgTag({\n scalable: true,\n });\n }\n });\n\n return (\n <div\n style={{\n width: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n }}\n >\n <div\n style={{ width: \"50%\", minWidth: 200, maxWidth: 300 }}\n ref={divRef}\n />\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\nimport { parsePaytoUri, stringifyPaytoUri } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { QR } from \"../../../../components/exception/QR.js\";\nimport { CreatedSuccessfully as Template } from \"../../../../components/notifications/CreatedSuccessfully.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\n\ntype Entity = {\n request: MerchantBackend.Tips.ReserveCreateRequest;\n response: MerchantBackend.Tips.ReserveCreateConfirmation;\n};\n\ninterface Props {\n entity: Entity;\n onConfirm: () => void;\n onCreateAnother?: () => void;\n}\n\nexport function CreatedSuccessfully({\n entity,\n onConfirm,\n onCreateAnother,\n}: Props): VNode {\n const p = parsePaytoUri(entity.response.payto_uri);\n if (p) {\n p.params[\"message\"] = entity.response.reserve_pub;\n p.params[\"amount\"] = entity.request.initial_balance;\n }\n\n const link = !p ? entity.response.payto_uri : stringifyPaytoUri(p);\n const { i18n } = useTranslationContext();\n return (\n <Template onConfirm={onConfirm} onCreateAnother={onCreateAnother}>\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">Amount</label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n <p class=\"control\">\n <input\n readonly\n class=\"input\"\n value={entity.request.initial_balance}\n />\n </p>\n </div>\n </div>\n </div>\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">Exchange bank account</label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n <p class=\"control\">\n <input readonly class=\"input\" value={entity.response.payto_uri} />\n </p>\n </div>\n </div>\n </div>\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">Wire transfer subject</label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n <p class=\"control\">\n <input\n class=\"input\"\n readonly\n value={entity.response.reserve_pub}\n />\n </p>\n </div>\n </div>\n </div>\n <p class=\"is-size-5\">\n <i18n.Translate>\n To complete the setup of the reserve, you must now initiate a wire\n transfer using the given wire transfer subject and crediting the\n specified amount to the indicated account of the exchange.\n </i18n.Translate>\n </p>\n <p class=\"is-size-5\">\n <i18n.Translate>\n If your system supports RFC 8905, you can do this by opening this URI:\n </i18n.Translate>\n </p>\n <pre>\n <a target=\"_blank\" rel=\"noreferrer\" href={link}>\n {link}\n </a>\n </pre>\n <QR text={link} />\n </Template>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { StateUpdater, useEffect, useState } from \"preact/hooks\";\nimport { AsyncButton } from \"../../../../components/exception/AsyncButton.js\";\nimport {\n FormErrors,\n FormProvider,\n} from \"../../../../components/form/FormProvider.js\";\nimport { Input } from \"../../../../components/form/Input.js\";\nimport { InputCurrency } from \"../../../../components/form/InputCurrency.js\";\nimport { InputSelector } from \"../../../../components/form/InputSelector.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport {\n PAYTO_WIRE_METHOD_LOOKUP,\n URL_REGEX,\n} from \"../../../../utils/constants.js\";\n\ntype Entity = MerchantBackend.Tips.ReserveCreateRequest;\n\ninterface Props {\n onCreate: (d: Entity) => Promise<void>;\n onBack?: () => void;\n}\n\nenum Steps {\n EXCHANGE,\n WIRE_METHOD,\n}\n\ninterface ViewProps {\n step: Steps;\n setCurrentStep: (s: Steps) => void;\n reserve: Partial<Entity>;\n onBack?: () => void;\n submitForm: () => Promise<void>;\n setReserve: StateUpdater<Partial<Entity>>;\n}\nfunction ViewStep({\n step,\n setCurrentStep,\n reserve,\n onBack,\n submitForm,\n setReserve,\n}: ViewProps): VNode {\n const { i18n } = useTranslationContext();\n const [wireMethods, setWireMethods] = useState<Array<string>>([]);\n const [exchangeQueryError, setExchangeQueryError] = useState<\n string | undefined\n >(undefined);\n\n useEffect(() => {\n setExchangeQueryError(undefined);\n }, [reserve.exchange_url]);\n\n switch (step) {\n case Steps.EXCHANGE: {\n const errors: FormErrors<Entity> = {\n initial_balance: !reserve.initial_balance\n ? \"cannot be empty\"\n : !(parseInt(reserve.initial_balance.split(\":\")[1], 10) > 0)\n ? i18n.str`it should be greater than 0`\n : undefined,\n exchange_url: !reserve.exchange_url\n ? i18n.str`cannot be empty`\n : !URL_REGEX.test(reserve.exchange_url)\n ? i18n.str`must be a valid URL`\n : !exchangeQueryError\n ? undefined\n : exchangeQueryError,\n };\n\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n\n return (\n <Fragment>\n <FormProvider<Entity>\n object={reserve}\n errors={errors}\n valueHandler={setReserve}\n >\n <InputCurrency<Entity>\n name=\"initial_balance\"\n label={i18n.str`Initial balance`}\n tooltip={i18n.str`balance prior to deposit`}\n />\n <Input<Entity>\n name=\"exchange_url\"\n label={i18n.str`Exchange URL`}\n tooltip={i18n.str`URL of exchange`}\n />\n </FormProvider>\n\n <div class=\"buttons is-right mt-5\">\n {onBack && (\n <button class=\"button\" onClick={onBack}>\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n )}\n <AsyncButton\n class=\"has-tooltip-left\"\n onClick={() => {\n return fetch(`${reserve.exchange_url}wire`)\n .then((r) => r.json())\n .then((r) => {\n const wireMethods = r.accounts.map((a: any) => {\n const match = PAYTO_WIRE_METHOD_LOOKUP.exec(a.payto_uri);\n return (match && match[1]) || \"\";\n });\n setWireMethods(wireMethods);\n setCurrentStep(Steps.WIRE_METHOD);\n return;\n })\n .catch((r: any) => {\n setExchangeQueryError(r.message);\n });\n }}\n data-tooltip={\n hasErrors\n ? i18n.str`Need to complete marked fields`\n : \"confirm operation\"\n }\n disabled={hasErrors}\n >\n <i18n.Translate>Next</i18n.Translate>\n </AsyncButton>\n </div>\n </Fragment>\n );\n }\n\n case Steps.WIRE_METHOD: {\n const errors: FormErrors<Entity> = {\n wire_method: !reserve.wire_method\n ? i18n.str`cannot be empty`\n : undefined,\n };\n\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n return (\n <Fragment>\n <FormProvider<Entity>\n object={reserve}\n errors={errors}\n valueHandler={setReserve}\n >\n <InputCurrency<Entity>\n name=\"initial_balance\"\n label={i18n.str`Initial balance`}\n tooltip={i18n.str`balance prior to deposit`}\n readonly\n />\n <Input<Entity>\n name=\"exchange_url\"\n label={i18n.str`Exchange URL`}\n tooltip={i18n.str`URL of exchange`}\n readonly\n />\n <InputSelector<Entity>\n name=\"wire_method\"\n label={i18n.str`Wire method`}\n tooltip={i18n.str`method to use for wire transfer`}\n values={wireMethods}\n placeholder={i18n.str`Select one wire method`}\n />\n </FormProvider>\n <div class=\"buttons is-right mt-5\">\n {onBack && (\n <button\n class=\"button\"\n onClick={() => setCurrentStep(Steps.EXCHANGE)}\n >\n <i18n.Translate>Back</i18n.Translate>\n </button>\n )}\n <AsyncButton\n onClick={submitForm}\n data-tooltip={\n hasErrors\n ? i18n.str`Need to complete marked fields`\n : \"confirm operation\"\n }\n disabled={hasErrors}\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </AsyncButton>\n </div>\n </Fragment>\n );\n }\n }\n}\n\nexport function CreatePage({ onCreate, onBack }: Props): VNode {\n const [reserve, setReserve] = useState<Partial<Entity>>({});\n\n const submitForm = () => {\n return onCreate(reserve as Entity);\n };\n\n const [currentStep, setCurrentStep] = useState(Steps.EXCHANGE);\n\n return (\n <div>\n <section class=\"section is-main-section\">\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-four-fifths\">\n <div class=\"tabs is-toggle is-fullwidth is-small\">\n <ul>\n <li class={currentStep === Steps.EXCHANGE ? \"is-active\" : \"\"}>\n <a style={{ cursor: \"initial\" }}>\n <span>Step 1: Specify exchange</span>\n </a>\n </li>\n <li\n class={currentStep === Steps.WIRE_METHOD ? \"is-active\" : \"\"}\n >\n <a style={{ cursor: \"initial\" }}>\n <span>Step 2: Select wire method</span>\n </a>\n </li>\n </ul>\n </div>\n\n <ViewStep\n step={currentStep}\n reserve={reserve}\n setCurrentStep={setCurrentStep}\n setReserve={setReserve}\n submitForm={submitForm}\n onBack={onBack}\n />\n </div>\n <div class=\"column\" />\n </div>\n </section>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport { useReservesAPI } from \"../../../../hooks/reserves.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { CreatedSuccessfully } from \"./CreatedSuccessfully.js\";\nimport { CreatePage } from \"./CreatePage.js\";\ninterface Props {\n onBack: () => void;\n onConfirm: () => void;\n}\nexport default function CreateReserve({ onBack, onConfirm }: Props): VNode {\n const { createReserve } = useReservesAPI();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { i18n } = useTranslationContext();\n\n const [createdOk, setCreatedOk] = useState<\n | {\n request: MerchantBackend.Tips.ReserveCreateRequest;\n response: MerchantBackend.Tips.ReserveCreateConfirmation;\n }\n | undefined\n >(undefined);\n\n if (createdOk) {\n return <CreatedSuccessfully entity={createdOk} onConfirm={onConfirm} />;\n }\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n <CreatePage\n onBack={onBack}\n onCreate={(request: MerchantBackend.Tips.ReserveCreateRequest) => {\n return createReserve(request)\n .then((r) => setCreatedOk({ request, response: r.data }))\n .catch((error) => {\n setNotif({\n message: i18n.str`could not create reserve`,\n type: \"ERROR\",\n description: error.message,\n });\n });\n }}\n />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\nimport { format } from \"date-fns\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useBackendContext } from \"../../../../context/backend.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\n\ntype Entity = MerchantBackend.Tips.TipDetails;\n\ninterface Props {\n id: string;\n entity: Entity;\n amount: string;\n}\n\nexport function TipInfo({ id, amount, entity }: Props): VNode {\n const { url } = useBackendContext();\n const tipHost = url.replace(/.*:\\/\\//, \"\"); // remove protocol part\n const proto = url.startsWith(\"http://\") ? \"taler+http\" : \"taler\";\n const tipURL = `${proto}://tip/${tipHost}/${id}`;\n return (\n <Fragment>\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">Amount</label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n <p class=\"control\">\n <input readonly class=\"input\" value={amount} />\n </p>\n </div>\n </div>\n </div>\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">URL</label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\" style={{ overflowWrap: \"anywhere\" }}>\n <p class=\"control\">\n <a target=\"_blank\" rel=\"noreferrer\" href={tipURL}>\n {tipURL}\n </a>\n </p>\n </div>\n </div>\n </div>\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">Valid until</label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n <p class=\"control\">\n <input\n class=\"input\"\n readonly\n value={\n !entity.expiration || entity.expiration.t_s === \"never\"\n ? \"never\"\n : format(\n entity.expiration.t_s * 1000,\n \"yyyy/MM/dd HH:mm:ss\",\n )\n }\n />\n </p>\n </div>\n </div>\n </div>\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport {\n Amounts,\n parsePaytoUri,\n stringifyPaytoUri,\n} from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { format } from \"date-fns\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { QR } from \"../../../../components/exception/QR.js\";\nimport { FormProvider } from \"../../../../components/form/FormProvider.js\";\nimport { Input } from \"../../../../components/form/Input.js\";\nimport { InputCurrency } from \"../../../../components/form/InputCurrency.js\";\nimport { InputDate } from \"../../../../components/form/InputDate.js\";\nimport { TextField } from \"../../../../components/form/TextField.js\";\nimport { SimpleModal } from \"../../../../components/modal/index.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport { useTipDetails } from \"../../../../hooks/reserves.js\";\nimport { TipInfo } from \"./TipInfo.js\";\n\ntype Entity = MerchantBackend.Tips.ReserveDetail;\ntype CT = MerchantBackend.ContractTerms;\n\ninterface Props {\n onBack: () => void;\n selected: Entity;\n id: string;\n}\n\nexport function DetailPage({ id, selected, onBack }: Props): VNode {\n const { i18n } = useTranslationContext();\n const didExchangeAckTransfer = Amounts.isNonZero(\n Amounts.parseOrThrow(selected.exchange_initial_amount),\n );\n const p = parsePaytoUri(selected.payto_uri);\n if (p) {\n p.params[\"message\"] = id;\n p.params[\"amount\"] = selected.merchant_initial_amount;\n }\n\n const link = !p ? selected.payto_uri : stringifyPaytoUri(p);\n\n return (\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-four-fifths\">\n <div class=\"section main-section\">\n <FormProvider object={{ ...selected, id }} valueHandler={null}>\n <InputDate<Entity>\n name=\"creation_time\"\n label={i18n.str`Created at`}\n readonly\n />\n <InputDate<Entity>\n name=\"expiration_time\"\n label={i18n.str`Valid until`}\n readonly\n />\n <InputCurrency<Entity>\n name=\"merchant_initial_amount\"\n label={i18n.str`Created balance`}\n readonly\n />\n <TextField<Entity>\n name=\"exchange_url\"\n label={i18n.str`Exchange URL`}\n readonly\n >\n <a target=\"_blank\" rel=\"noreferrer\" href={selected.exchange_url}>\n {selected.exchange_url}\n </a>\n </TextField>\n\n {didExchangeAckTransfer && (\n <Fragment>\n <InputCurrency<Entity>\n name=\"exchange_initial_amount\"\n label={i18n.str`Exchange balance`}\n readonly\n />\n <InputCurrency<Entity>\n name=\"pickup_amount\"\n label={i18n.str`Picked up`}\n readonly\n />\n <InputCurrency<Entity>\n name=\"committed_amount\"\n label={i18n.str`Committed`}\n readonly\n />\n </Fragment>\n )}\n <Input<Entity>\n name=\"payto_uri\"\n label={i18n.str`Account address`}\n readonly\n />\n <Input name=\"id\" label={i18n.str`Subject`} readonly />\n </FormProvider>\n\n {didExchangeAckTransfer ? (\n <Fragment>\n <div class=\"card has-table\">\n <header class=\"card-header\">\n <p class=\"card-header-title\">\n <span class=\"icon\">\n <i class=\"mdi mdi-cash-register\" />\n </span>\n <i18n.Translate>Tips</i18n.Translate>\n </p>\n </header>\n <div class=\"card-content\">\n <div class=\"b-table has-pagination\">\n <div class=\"table-wrapper has-mobile-cards\">\n {selected.tips && selected.tips.length > 0 ? (\n <Table tips={selected.tips} />\n ) : (\n <EmptyTable />\n )}\n </div>\n </div>\n </div>\n </div>\n </Fragment>\n ) : (\n <Fragment>\n <p class=\"is-size-5\">\n <i18n.Translate>\n To complete the setup of the reserve, you must now initiate a\n wire transfer using the given wire transfer subject and\n crediting the specified amount to the indicated account of the\n exchange.\n </i18n.Translate>\n </p>\n <p class=\"is-size-5\">\n <i18n.Translate>\n If your system supports RFC 8905, you can do this by opening\n this URI:\n </i18n.Translate>\n </p>\n <pre>\n <a target=\"_blank\" rel=\"noreferrer\" href={link}>\n {link}\n </a>\n </pre>\n <QR text={link} />\n </Fragment>\n )}\n\n <div class=\"buttons is-right mt-5\">\n <button class=\"button\" onClick={onBack}>\n <i18n.Translate>Back</i18n.Translate>\n </button>\n </div>\n </div>\n </div>\n <div class=\"column\" />\n </div>\n );\n}\n\nfunction EmptyTable(): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"content has-text-grey has-text-centered\">\n <p>\n <span class=\"icon is-large\">\n <i class=\"mdi mdi-emoticon-sad mdi-48px\" />\n </span>\n </p>\n <p>\n <i18n.Translate>\n No tips has been authorized from this reserve\n </i18n.Translate>\n </p>\n </div>\n );\n}\n\ninterface TableProps {\n tips: MerchantBackend.Tips.TipStatusEntry[];\n}\n\nfunction Table({ tips }: TableProps): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"table-container\">\n <table class=\"table is-fullwidth is-striped is-hoverable is-fullwidth\">\n <thead>\n <tr>\n <th>\n <i18n.Translate>Authorized</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Picked up</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Reason</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Expiration</i18n.Translate>\n </th>\n </tr>\n </thead>\n <tbody>\n {tips.map((t, i) => {\n return <TipRow id={t.tip_id} key={i} entry={t} />;\n })}\n </tbody>\n </table>\n </div>\n );\n}\n\nfunction TipRow({\n id,\n entry,\n}: {\n id: string;\n entry: MerchantBackend.Tips.TipStatusEntry;\n}) {\n const [selected, setSelected] = useState(false);\n const result = useTipDetails(id);\n if (result.loading) {\n return (\n <tr>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n </tr>\n );\n }\n if (!result.ok) {\n return (\n <tr>\n <td>...</td> {/* authorized */}\n <td>{entry.total_amount}</td>\n <td>{entry.reason}</td>\n <td>...</td> {/* expired */}\n </tr>\n );\n }\n const info = result.data;\n function onSelect() {\n setSelected(true);\n }\n return (\n <Fragment>\n {selected && (\n <SimpleModal\n description=\"tip\"\n active\n onCancel={() => setSelected(false)}\n >\n <TipInfo id={id} amount={info.total_authorized} entity={info} />\n </SimpleModal>\n )}\n <tr>\n <td onClick={onSelect}>{info.total_authorized}</td>\n <td onClick={onSelect}>{info.total_picked_up}</td>\n <td onClick={onSelect}>{info.reason}</td>\n <td onClick={onSelect}>\n {info.expiration.t_s === \"never\"\n ? \"never\"\n : format(info.expiration.t_s * 1000, \"yyyy/MM/dd HH:mm:ss\")}\n </td>\n </tr>\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { HttpError } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport { useReserveDetails } from \"../../../../hooks/reserves.js\";\nimport { DetailPage } from \"./DetailPage.js\";\n\ninterface Props {\n rid: string;\n\n onUnauthorized: () => VNode;\n onLoadError: (error: HttpError<MerchantBackend.ErrorDetail>) => VNode;\n onNotFound: () => VNode;\n onDelete: () => void;\n onBack: () => void;\n}\nexport default function DetailReserve({\n rid,\n onUnauthorized,\n onLoadError,\n onNotFound,\n onBack,\n onDelete,\n}: Props): VNode {\n const result = useReserveDetails(rid);\n\n if (result.clientError && result.isUnauthorized) return onUnauthorized();\n if (result.clientError && result.isNotfound) return onNotFound();\n if (result.loading) return <Loading />;\n if (!result.ok) return onLoadError(result);\n return (\n <Fragment>\n <DetailPage selected={result.data} onBack={onBack} id={rid} />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\nimport { format } from \"date-fns\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { CreatedSuccessfully as Template } from \"../../../../components/notifications/CreatedSuccessfully.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\n\ntype Entity = MerchantBackend.Tips.TipCreateConfirmation;\n\ninterface Props {\n entity: Entity;\n request: MerchantBackend.Tips.TipCreateRequest;\n onConfirm: () => void;\n onCreateAnother?: () => void;\n}\n\nexport function CreatedSuccessfully({\n request,\n entity,\n onConfirm,\n onCreateAnother,\n}: Props): VNode {\n return (\n <Fragment>\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">Amount</label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n <p class=\"control\">\n <input readonly class=\"input\" value={request.amount} />\n </p>\n </div>\n </div>\n </div>\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">Justification</label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n <p class=\"control\">\n <input readonly class=\"input\" value={request.justification} />\n </p>\n </div>\n </div>\n </div>\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">URL</label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n <p class=\"control\">\n <input readonly class=\"input\" value={entity.tip_status_url} />\n </p>\n </div>\n </div>\n </div>\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">Valid until</label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n <p class=\"control\">\n <input\n class=\"input\"\n readonly\n value={\n !entity.tip_expiration ||\n entity.tip_expiration.t_s === \"never\"\n ? \"never\"\n : format(\n entity.tip_expiration.t_s * 1000,\n \"yyyy/MM/dd HH:mm:ss\",\n )\n }\n />\n </p>\n </div>\n </div>\n </div>\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport * as yup from \"yup\";\nimport {\n FormErrors,\n FormProvider,\n} from \"../../../../components/form/FormProvider.js\";\nimport { Input } from \"../../../../components/form/Input.js\";\nimport { InputCurrency } from \"../../../../components/form/InputCurrency.js\";\nimport {\n ConfirmModal,\n ContinueModal,\n} from \"../../../../components/modal/index.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport { AuthorizeTipSchema } from \"../../../../schemas/index.js\";\nimport { CreatedSuccessfully } from \"./CreatedSuccessfully.js\";\n\ninterface AuthorizeTipModalProps {\n onCancel: () => void;\n onConfirm: (value: MerchantBackend.Tips.TipCreateRequest) => void;\n tipAuthorized?: {\n response: MerchantBackend.Tips.TipCreateConfirmation;\n request: MerchantBackend.Tips.TipCreateRequest;\n };\n}\n\nexport function AuthorizeTipModal({\n onCancel,\n onConfirm,\n tipAuthorized,\n}: AuthorizeTipModalProps): VNode {\n // const result = useOrderDetails(id)\n type State = MerchantBackend.Tips.TipCreateRequest;\n const [form, setValue] = useState<Partial<State>>({});\n const { i18n } = useTranslationContext();\n\n // const [errors, setErrors] = useState<FormErrors<State>>({})\n let errors: FormErrors<State> = {};\n try {\n AuthorizeTipSchema.validateSync(form, { abortEarly: false });\n } catch (err) {\n if (err instanceof yup.ValidationError) {\n const yupErrors = err.inner as any[];\n errors = yupErrors.reduce(\n (prev, cur) =>\n !cur.path ? prev : { ...prev, [cur.path]: cur.message },\n {},\n );\n }\n }\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n\n const validateAndConfirm = () => {\n onConfirm(form as State);\n };\n if (tipAuthorized) {\n return (\n <ContinueModal description=\"tip\" active onConfirm={onCancel}>\n <CreatedSuccessfully\n entity={tipAuthorized.response}\n request={tipAuthorized.request}\n onConfirm={onCancel}\n />\n </ContinueModal>\n );\n }\n\n return (\n <ConfirmModal\n description=\"tip\"\n active\n onCancel={onCancel}\n disabled={hasErrors}\n onConfirm={validateAndConfirm}\n >\n <FormProvider<State>\n errors={errors}\n object={form}\n valueHandler={setValue}\n >\n <InputCurrency<State>\n name=\"amount\"\n label={i18n.str`Amount`}\n tooltip={i18n.str`amount of tip`}\n />\n <Input<State>\n name=\"justification\"\n label={i18n.str`Justification`}\n inputType=\"multiline\"\n tooltip={i18n.str`reason for the tip`}\n />\n <Input<State>\n name=\"next_url\"\n label={i18n.str`URL after tip`}\n tooltip={i18n.str`URL to visit after tip payment`}\n />\n </FormProvider>\n </ConfirmModal>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { format } from \"date-fns\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { MerchantBackend, WithId } from \"../../../../declaration.js\";\n\ntype Entity = MerchantBackend.Tips.ReserveStatusEntry & WithId;\n\ninterface Props {\n instances: Entity[];\n onNewTip: (id: Entity) => void;\n onSelect: (id: Entity) => void;\n onDelete: (id: Entity) => void;\n onCreate: () => void;\n}\n\nexport function CardTable({\n instances,\n onCreate,\n onSelect,\n onNewTip,\n onDelete,\n}: Props): VNode {\n const [withoutFunds, withFunds] = instances.reduce((prev, current) => {\n const amount = current.exchange_initial_amount;\n if (amount.endsWith(\":0\")) {\n prev[0] = prev[0].concat(current);\n } else {\n prev[1] = prev[1].concat(current);\n }\n return prev;\n }, new Array<Array<Entity>>([], []));\n\n const { i18n } = useTranslationContext();\n\n return (\n <Fragment>\n {withoutFunds.length > 0 && (\n <div class=\"card has-table\">\n <header class=\"card-header\">\n <p class=\"card-header-title\">\n <span class=\"icon\">\n <i class=\"mdi mdi-cash\" />\n </span>\n <i18n.Translate>Reserves not yet funded</i18n.Translate>\n </p>\n </header>\n <div class=\"card-content\">\n <div class=\"b-table has-pagination\">\n <div class=\"table-wrapper has-mobile-cards\">\n <TableWithoutFund\n instances={withoutFunds}\n onNewTip={onNewTip}\n onSelect={onSelect}\n onDelete={onDelete}\n />\n </div>\n </div>\n </div>\n </div>\n )}\n\n <div class=\"card has-table\">\n <header class=\"card-header\">\n <p class=\"card-header-title\">\n <span class=\"icon\">\n <i class=\"mdi mdi-cash\" />\n </span>\n <i18n.Translate>Reserves ready</i18n.Translate>\n </p>\n <div class=\"card-header-icon\" aria-label=\"more options\" />\n <div class=\"card-header-icon\" aria-label=\"more options\">\n <span\n class=\"has-tooltip-left\"\n data-tooltip={i18n.str`add new reserve`}\n >\n <button class=\"button is-info\" type=\"button\" onClick={onCreate}>\n <span class=\"icon is-small\">\n <i class=\"mdi mdi-plus mdi-36px\" />\n </span>\n </button>\n </span>\n </div>\n </header>\n <div class=\"card-content\">\n <div class=\"b-table has-pagination\">\n <div class=\"table-wrapper has-mobile-cards\">\n {withFunds.length > 0 ? (\n <Table\n instances={withFunds}\n onNewTip={onNewTip}\n onSelect={onSelect}\n onDelete={onDelete}\n />\n ) : (\n <EmptyTable />\n )}\n </div>\n </div>\n </div>\n </div>\n </Fragment>\n );\n}\ninterface TableProps {\n instances: Entity[];\n onNewTip: (id: Entity) => void;\n onDelete: (id: Entity) => void;\n onSelect: (id: Entity) => void;\n}\n\nfunction Table({ instances, onNewTip, onSelect, onDelete }: TableProps): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"table-container\">\n <table class=\"table is-fullwidth is-striped is-hoverable is-fullwidth\">\n <thead>\n <tr>\n <th>\n <i18n.Translate>Created at</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Expires at</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Initial</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Picked up</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Committed</i18n.Translate>\n </th>\n <th />\n </tr>\n </thead>\n <tbody>\n {instances.map((i) => {\n return (\n <tr key={i.id}>\n <td\n onClick={(): void => onSelect(i)}\n style={{ cursor: \"pointer\" }}\n >\n {i.creation_time.t_s === \"never\"\n ? \"never\"\n : format(i.creation_time.t_s * 1000, \"yyyy/MM/dd HH:mm:ss\")}\n </td>\n <td\n onClick={(): void => onSelect(i)}\n style={{ cursor: \"pointer\" }}\n >\n {i.expiration_time.t_s === \"never\"\n ? \"never\"\n : format(\n i.expiration_time.t_s * 1000,\n \"yyyy/MM/dd HH:mm:ss\",\n )}\n </td>\n <td\n onClick={(): void => onSelect(i)}\n style={{ cursor: \"pointer\" }}\n >\n {i.exchange_initial_amount}\n </td>\n <td\n onClick={(): void => onSelect(i)}\n style={{ cursor: \"pointer\" }}\n >\n {i.pickup_amount}\n </td>\n <td\n onClick={(): void => onSelect(i)}\n style={{ cursor: \"pointer\" }}\n >\n {i.committed_amount}\n </td>\n <td class=\"is-actions-cell right-sticky\">\n <div class=\"buttons is-right\">\n <button\n class=\"button is-small is-danger has-tooltip-left\"\n data-tooltip={i18n.str`delete selected reserve from the database`}\n type=\"button\"\n onClick={(): void => onDelete(i)}\n >\n Delete\n </button>\n <button\n class=\"button is-small is-info has-tooltip-left\"\n data-tooltip={i18n.str`authorize new tip from selected reserve`}\n type=\"button\"\n onClick={(): void => onNewTip(i)}\n >\n New Tip\n </button>\n </div>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n}\n\nfunction EmptyTable(): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"content has-text-grey has-text-centered\">\n <p>\n <span class=\"icon is-large\">\n <i class=\"mdi mdi-emoticon-sad mdi-48px\" />\n </span>\n </p>\n <p>\n <i18n.Translate>\n There is no ready reserves yet, add more pressing the + sign or fund\n them\n </i18n.Translate>\n </p>\n </div>\n );\n}\n\nfunction TableWithoutFund({\n instances,\n onSelect,\n onDelete,\n}: TableProps): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"table-container\">\n <table class=\"table is-fullwidth is-striped is-hoverable is-fullwidth\">\n <thead>\n <tr>\n <th>\n <i18n.Translate>Created at</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Expires at</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Expected Balance</i18n.Translate>\n </th>\n <th />\n </tr>\n </thead>\n <tbody>\n {instances.map((i) => {\n return (\n <tr key={i.id}>\n <td\n onClick={(): void => onSelect(i)}\n style={{ cursor: \"pointer\" }}\n >\n {i.creation_time.t_s === \"never\"\n ? \"never\"\n : format(i.creation_time.t_s * 1000, \"yyyy/MM/dd HH:mm:ss\")}\n </td>\n <td\n onClick={(): void => onSelect(i)}\n style={{ cursor: \"pointer\" }}\n >\n {i.expiration_time.t_s === \"never\"\n ? \"never\"\n : format(\n i.expiration_time.t_s * 1000,\n \"yyyy/MM/dd HH:mm:ss\",\n )}\n </td>\n <td\n onClick={(): void => onSelect(i)}\n style={{ cursor: \"pointer\" }}\n >\n {i.merchant_initial_amount}\n </td>\n <td class=\"is-actions-cell right-sticky\">\n <div class=\"buttons is-right\">\n <button\n class=\"button is-small is-danger jb-modal has-tooltip-left\"\n type=\"button\"\n data-tooltip={i18n.str`delete selected reserve from the database`}\n onClick={(): void => onDelete(i)}\n >\n Delete\n </button>\n </div>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport {\n HttpError,\n useTranslationContext,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport {\n useInstanceReserves,\n useReservesAPI,\n} from \"../../../../hooks/reserves.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { AuthorizeTipModal } from \"./AutorizeTipModal.js\";\nimport { CardTable } from \"./Table.js\";\n\ninterface Props {\n onUnauthorized: () => VNode;\n onLoadError: (e: HttpError<MerchantBackend.ErrorDetail>) => VNode;\n onSelect: (id: string) => void;\n onNotFound: () => VNode;\n onCreate: () => void;\n}\n\ninterface TipConfirmation {\n response: MerchantBackend.Tips.TipCreateConfirmation;\n request: MerchantBackend.Tips.TipCreateRequest;\n}\n\nexport default function ListTips({\n onUnauthorized,\n onLoadError,\n onNotFound,\n onSelect,\n onCreate,\n}: Props): VNode {\n const result = useInstanceReserves();\n const { deleteReserve, authorizeTipReserve } = useReservesAPI();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { i18n } = useTranslationContext();\n const [reserveForTip, setReserveForTip] = useState<string | undefined>(\n undefined,\n );\n const [tipAuthorized, setTipAuthorized] = useState<\n TipConfirmation | undefined\n >(undefined);\n\n if (result.clientError && result.isUnauthorized) return onUnauthorized();\n if (result.clientError && result.isNotfound) return onNotFound();\n if (result.loading) return <Loading />;\n if (!result.ok) return onLoadError(result);\n\n return (\n <section class=\"section is-main-section\">\n <NotificationCard notification={notif} />\n\n {reserveForTip && (\n <AuthorizeTipModal\n onCancel={() => {\n setReserveForTip(undefined);\n setTipAuthorized(undefined);\n }}\n tipAuthorized={tipAuthorized}\n onConfirm={async (request) => {\n try {\n const response = await authorizeTipReserve(\n reserveForTip,\n request,\n );\n setTipAuthorized({\n request,\n response: response.data,\n });\n } catch (error) {\n setNotif({\n message: i18n.str`could not create the tip`,\n type: \"ERROR\",\n description: error instanceof Error ? error.message : undefined,\n });\n setReserveForTip(undefined);\n }\n }}\n />\n )}\n\n <CardTable\n instances={result.data.reserves\n .filter((r) => r.active)\n .map((o) => ({ ...o, id: o.reserve_pub }))}\n onCreate={onCreate}\n onDelete={(reserve) => deleteReserve(reserve.reserve_pub)}\n onSelect={(reserve) => onSelect(reserve.id)}\n onNewTip={(reserve) => setReserveForTip(reserve.id)}\n />\n </section>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\nimport {\n HttpResponse,\n HttpResponseOk,\n HttpResponsePaginated,\n RequestError,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { MerchantBackend } from \"../declaration.js\";\nimport { MAX_RESULT_SIZE, PAGE_SIZE } from \"../utils/constants.js\";\nimport { useBackendInstanceRequest, useMatchMutate } from \"./backend.js\";\n\n// FIX default import https://github.com/microsoft/TypeScript/issues/49189\nimport _useSWR, { SWRHook } from \"swr\";\nconst useSWR = _useSWR as unknown as SWRHook;\n\nexport function useTemplateAPI(): TemplateAPI {\n const mutateAll = useMatchMutate();\n const { request } = useBackendInstanceRequest();\n\n const createTemplate = async (\n data: MerchantBackend.Template.TemplateAddDetails,\n ): Promise<HttpResponseOk<void>> => {\n const res = await request<void>(`/private/templates`, {\n method: \"POST\",\n data,\n });\n await mutateAll(/.*private\\/templates.*/);\n return res;\n };\n\n const updateTemplate = async (\n templateId: string,\n data: MerchantBackend.Template.TemplatePatchDetails,\n ): Promise<HttpResponseOk<void>> => {\n const res = await request<void>(`/private/templates/${templateId}`, {\n method: \"PATCH\",\n data,\n });\n await mutateAll(/.*private\\/templates.*/);\n return res;\n };\n\n const deleteTemplate = async (\n templateId: string,\n ): Promise<HttpResponseOk<void>> => {\n const res = await request<void>(`/private/templates/${templateId}`, {\n method: \"DELETE\",\n });\n await mutateAll(/.*private\\/templates.*/);\n return res;\n };\n\n const createOrderFromTemplate = async (\n templateId: string,\n data: MerchantBackend.Template.UsingTemplateDetails,\n ): Promise<\n HttpResponseOk<MerchantBackend.Template.UsingTemplateResponse>\n > => {\n const res = await request<MerchantBackend.Template.UsingTemplateResponse>(\n `/templates/${templateId}`,\n {\n method: \"POST\",\n data,\n },\n );\n await mutateAll(/.*private\\/templates.*/);\n return res;\n };\n\n return {\n createTemplate,\n updateTemplate,\n deleteTemplate,\n createOrderFromTemplate,\n };\n}\n\nexport interface TemplateAPI {\n createTemplate: (\n data: MerchantBackend.Template.TemplateAddDetails,\n ) => Promise<HttpResponseOk<void>>;\n updateTemplate: (\n id: string,\n data: MerchantBackend.Template.TemplatePatchDetails,\n ) => Promise<HttpResponseOk<void>>;\n deleteTemplate: (id: string) => Promise<HttpResponseOk<void>>;\n createOrderFromTemplate: (\n id: string,\n data: MerchantBackend.Template.UsingTemplateDetails,\n ) => Promise<HttpResponseOk<MerchantBackend.Template.UsingTemplateResponse>>;\n}\n\nexport interface InstanceTemplateFilter {\n //FIXME: add filter to the template list\n position?: string;\n}\n\nexport function useInstanceTemplates(\n args?: InstanceTemplateFilter,\n updatePosition?: (id: string) => void,\n): HttpResponsePaginated<\n MerchantBackend.Template.TemplateSummaryResponse,\n MerchantBackend.ErrorDetail\n> {\n const { templateFetcher } = useBackendInstanceRequest();\n\n // const [pageBefore, setPageBefore] = useState(1);\n const [pageAfter, setPageAfter] = useState(1);\n\n const totalAfter = pageAfter * PAGE_SIZE;\n // const totalBefore = args?.position !== undefined ? pageBefore * PAGE_SIZE : 0;\n\n /**\n * FIXME: this can be cleaned up a little\n *\n * the logic of double query should be inside the orderFetch so from the hook perspective and cache\n * is just one query and one error status\n */\n // const {\n // data: beforeData,\n // error: beforeError,\n // isValidating: loadingBefore,\n // } = useSWR<HttpResponseOk<MerchantBackend.Template.TemplateSummaryResponse>, HttpError>(\n // [\n // `/private/templates`,\n // token,\n // url,\n // args?.position,\n // totalBefore,\n // ],\n // templateFetcher,\n // );\n const {\n data: afterData,\n error: afterError,\n isValidating: loadingAfter,\n } = useSWR<\n HttpResponseOk<MerchantBackend.Template.TemplateSummaryResponse>,\n RequestError<MerchantBackend.ErrorDetail>\n >([`/private/templates`, args?.position, -totalAfter], templateFetcher);\n\n //this will save last result\n // const [lastBefore, setLastBefore] = useState<\n // HttpResponse<MerchantBackend.Template.TemplateSummaryResponse, MerchantBackend.ErrorDetail>\n // >({ loading: true });\n const [lastAfter, setLastAfter] = useState<\n HttpResponse<\n MerchantBackend.Template.TemplateSummaryResponse,\n MerchantBackend.ErrorDetail\n >\n >({ loading: true });\n useEffect(() => {\n if (afterData) setLastAfter(afterData);\n // if (beforeData) setLastBefore(beforeData);\n }, [afterData /*, beforeData*/]);\n\n // if (beforeError) return beforeError;\n if (afterError) return afterError.info;\n\n // if the query returns less that we ask, then we have reach the end or beginning\n const isReachingEnd =\n afterData && afterData.data.templates.length < totalAfter;\n const isReachingStart = false;\n // args?.position === undefined\n // ||\n // (beforeData && beforeData.data.templates.length < totalBefore);\n\n const pagination = {\n isReachingEnd,\n isReachingStart,\n loadMore: () => {\n if (!afterData || isReachingEnd) return;\n if (afterData.data.templates.length < MAX_RESULT_SIZE) {\n setPageAfter(pageAfter + 1);\n } else {\n const from = `${\n afterData.data.templates[afterData.data.templates.length - 1]\n .template_id\n }`;\n if (from && updatePosition) updatePosition(from);\n }\n },\n loadMorePrev: () => {\n // if (!beforeData || isReachingStart) return;\n // if (beforeData.data.templates.length < MAX_RESULT_SIZE) {\n // setPageBefore(pageBefore + 1);\n // } else if (beforeData) {\n // const from = `${beforeData.data.templates[beforeData.data.templates.length - 1]\n // .template_id\n // }`;\n // if (from && updatePosition) updatePosition(from);\n // }\n },\n };\n\n const templates = !afterData ? [] : (afterData || lastAfter).data.templates;\n // const templates =\n // !beforeData || !afterData\n // ? []\n // : (beforeData || lastBefore).data.templates\n // .slice()\n // .reverse()\n // .concat((afterData || lastAfter).data.templates);\n if (loadingAfter /* || loadingBefore */)\n return { loading: true, data: { templates } };\n if (/*beforeData &&*/ afterData) {\n return { ok: true, data: { templates }, ...pagination };\n }\n return { loading: true };\n}\n\nexport function useTemplateDetails(\n templateId: string,\n): HttpResponse<\n MerchantBackend.Template.TemplateDetails,\n MerchantBackend.ErrorDetail\n> {\n const { templateFetcher } = useBackendInstanceRequest();\n\n const { data, error, isValidating } = useSWR<\n HttpResponseOk<MerchantBackend.Template.TemplateDetails>,\n RequestError<MerchantBackend.ErrorDetail>\n >([`/private/templates/${templateId}`], templateFetcher, {\n refreshInterval: 0,\n refreshWhenHidden: false,\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n refreshWhenOffline: false,\n });\n\n if (isValidating) return { loading: true, data: data?.data };\n if (data) {\n const d = structuredClone(data);\n d.data.pos_algorithm = 1;\n return d;\n }\n if (error) return error.info;\n return { loading: true };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nconst encTable = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\";\n// base32 RFC 3548\nfunction encodeBase32(data: ArrayBuffer) {\n const dataBytes = new Uint8Array(data);\n let sb = \"\";\n const size = data.byteLength;\n let bitBuf = 0;\n let numBits = 0;\n let pos = 0;\n while (pos < size || numBits > 0) {\n if (pos < size && numBits < 5) {\n const d = dataBytes[pos++];\n bitBuf = (bitBuf << 8) | d;\n numBits += 8;\n }\n if (numBits < 5) {\n // zero-padding\n bitBuf = bitBuf << (5 - numBits);\n numBits = 5;\n }\n const v = (bitBuf >>> (numBits - 5)) & 31;\n sb += encTable[v];\n numBits -= 5;\n }\n return sb;\n}\n\nexport function randomBase32Key(): string {\n var buf = new Uint8Array(20);\n window.crypto.getRandomValues(buf);\n return encodeBase32(buf);\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { AsyncButton } from \"../../../../components/exception/AsyncButton.js\";\nimport {\n FormErrors,\n FormProvider,\n} from \"../../../../components/form/FormProvider.js\";\nimport { Input } from \"../../../../components/form/Input.js\";\nimport { InputCurrency } from \"../../../../components/form/InputCurrency.js\";\nimport { InputDuration } from \"../../../../components/form/InputDuration.js\";\nimport { InputNumber } from \"../../../../components/form/InputNumber.js\";\nimport { InputSelector } from \"../../../../components/form/InputSelector.js\";\nimport { InputWithAddon } from \"../../../../components/form/InputWithAddon.js\";\nimport { useBackendContext } from \"../../../../context/backend.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport { randomBase32Key } from \"../../../../utils/crypto.js\";\nimport { undefinedIfEmpty } from \"../../../../utils/table.js\";\n\ntype Entity = MerchantBackend.Template.TemplateAddDetails;\n\ninterface Props {\n onCreate: (d: Entity) => Promise<void>;\n onBack?: () => void;\n}\n\nconst algorithms = [\"0\", \"1\", \"2\"];\nconst algorithmsNames = [\n \"off\",\n \"30s 8d TOTP-SHA1 without amount\",\n \"30s 8d eTOTP-SHA1 with amount\",\n];\n\nexport function CreatePage({ onCreate, onBack }: Props): VNode {\n const { i18n } = useTranslationContext();\n const backend = useBackendContext();\n\n const [state, setState] = useState<Partial<Entity>>({\n template_contract: {\n minimum_age: 0,\n pay_duration: {\n d_us: 1000 * 1000 * 60 * 30, //30 min\n },\n },\n });\n\n const errors: FormErrors<Entity> = {\n template_id: !state.template_id ? i18n.str`should not be empty` : undefined,\n template_description: !state.template_description\n ? i18n.str`should not be empty`\n : undefined,\n template_contract: !state.template_contract\n ? undefined\n : undefinedIfEmpty({\n minimum_age:\n state.template_contract.minimum_age < 0\n ? i18n.str`should be greater that 0`\n : undefined,\n pay_duration: !state.template_contract.pay_duration\n ? i18n.str`can't be empty`\n : state.template_contract.pay_duration.d_us === \"forever\"\n ? undefined\n : state.template_contract.pay_duration.d_us < 1000 * 1000 //less than one second\n ? i18n.str`to short`\n : undefined,\n }),\n };\n\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n\n const submitForm = () => {\n if (hasErrors) return Promise.reject();\n return onCreate(state as any);\n };\n\n return (\n <div>\n <section class=\"section is-main-section\">\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-four-fifths\">\n <FormProvider\n object={state}\n valueHandler={setState}\n errors={errors}\n >\n <InputWithAddon<Entity>\n name=\"template_id\"\n addonBefore={`${backend.url}/instances/templates/`}\n label={i18n.str`Identifier`}\n tooltip={i18n.str`Name of the template in URLs.`}\n />\n <Input<Entity>\n name=\"template_description\"\n label={i18n.str`Description`}\n help=\"\"\n tooltip={i18n.str`Describe what this template stands for`}\n />\n <Input\n name=\"template_contract.summary\"\n inputType=\"multiline\"\n label={i18n.str`Fixed summary`}\n tooltip={i18n.str`If specified, this template will create order with the same summary`}\n />\n <InputCurrency\n name=\"template_contract.amount\"\n label={i18n.str`Fixed price`}\n tooltip={i18n.str`If specified, this template will create order with the same price`}\n />\n <InputNumber\n name=\"template_contract.minimum_age\"\n label={i18n.str`Minimum age`}\n help=\"\"\n tooltip={i18n.str`Is this contract restricted to some age?`}\n />\n <InputDuration\n name=\"template_contract.pay_duration\"\n label={i18n.str`Payment timeout`}\n help=\"\"\n tooltip={i18n.str`How much time has the customer to complete the payment once the order was created.`}\n />\n <InputSelector<Entity>\n name=\"pos_algorithm\"\n label={i18n.str`Veritifaction algorithm`}\n tooltip={i18n.str`Algorithm to use to verify transaction in offline mode`}\n values={algorithms}\n toStr={(v) => algorithmsNames[v]}\n convert={(v) => Number(v)}\n />\n {state.pos_algorithm && state.pos_algorithm > 0 ? (\n <Input<Entity>\n name=\"pos_key\"\n label={i18n.str`Point-of-sale key`}\n help=\"\"\n tooltip={i18n.str`Useful to validate the purchase`}\n side={\n <span data-tooltip={i18n.str`generate random secret key`}>\n <button\n class=\"button is-info mr-3\"\n onClick={(e) => {\n const pos_key = randomBase32Key();\n setState((s) => ({ ...s, pos_key }));\n }}\n >\n <i18n.Translate>random</i18n.Translate>\n </button>\n </span>\n }\n />\n ) : undefined}\n </FormProvider>\n\n <div class=\"buttons is-right mt-5\">\n {onBack && (\n <button class=\"button\" onClick={onBack}>\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n )}\n <AsyncButton\n disabled={hasErrors}\n data-tooltip={\n hasErrors\n ? i18n.str`Need to complete marked fields`\n : \"confirm operation\"\n }\n onClick={submitForm}\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </AsyncButton>\n </div>\n </div>\n <div class=\"column\" />\n </div>\n </section>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport { useTemplateAPI } from \"../../../../hooks/templates.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { CreatePage } from \"./CreatePage.js\";\n\nexport type Entity = MerchantBackend.Transfers.TransferInformation;\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n}\n\nexport default function CreateTransfer({ onConfirm, onBack }: Props): VNode {\n const { createTemplate } = useTemplateAPI();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { i18n } = useTranslationContext();\n\n return (\n <>\n <NotificationCard notification={notif} />\n <CreatePage\n onBack={onBack}\n onCreate={(request: MerchantBackend.Template.TemplateAddDetails) => {\n return createTemplate(request)\n .then(() => onConfirm())\n .catch((error) => {\n setNotif({\n message: i18n.str`could not inform template`,\n type: \"ERROR\",\n description: error.message,\n });\n });\n }}\n />\n </>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { AsyncButton } from \"../../../../components/exception/AsyncButton.js\";\nimport {\n FormErrors,\n FormProvider,\n} from \"../../../../components/form/FormProvider.js\";\nimport { Input } from \"../../../../components/form/Input.js\";\nimport { InputCurrency } from \"../../../../components/form/InputCurrency.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\n\ntype Entity = MerchantBackend.Template.UsingTemplateDetails;\n\ninterface Props {\n id: string;\n template: MerchantBackend.Template.TemplateDetails;\n onCreateOrder: (d: Entity) => Promise<void>;\n onBack?: () => void;\n}\n\nexport function UsePage({ id, template, onCreateOrder, onBack }: Props): VNode {\n const { i18n } = useTranslationContext();\n\n const [state, setState] = useState<Partial<Entity>>({\n amount: template.template_contract.amount,\n summary: template.template_contract.summary,\n });\n\n const errors: FormErrors<Entity> = {\n amount:\n !template.template_contract.amount && !state.amount\n ? i18n.str`Amount is required`\n : undefined,\n summary:\n !template.template_contract.summary && !state.summary\n ? i18n.str`Order summary is required`\n : undefined,\n };\n\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n\n const submitForm = () => {\n if (hasErrors) return Promise.reject();\n if (template.template_contract.amount) {\n delete state.amount;\n }\n if (template.template_contract.summary) {\n delete state.summary;\n }\n return onCreateOrder(state as any);\n };\n\n return (\n <div>\n <section class=\"section\">\n <section class=\"hero is-hero-bar\">\n <div class=\"hero-body\">\n <div class=\"level\">\n <div class=\"level-left\">\n <div class=\"level-item\">\n <span class=\"is-size-4\">\n <i18n.Translate>New order for template</i18n.Translate>:{\" \"}\n <b>{id}</b>\n </span>\n </div>\n </div>\n </div>\n </div>\n </section>\n </section>\n <section class=\"section is-main-section\">\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-four-fifths\">\n <FormProvider\n object={state}\n valueHandler={setState}\n errors={errors}\n >\n <InputCurrency<Entity>\n name=\"amount\"\n label={i18n.str`Amount`}\n readonly={!!template.template_contract.amount}\n tooltip={i18n.str`Amount of the order`}\n />\n <Input<Entity>\n name=\"summary\"\n inputType=\"multiline\"\n label={i18n.str`Order summary`}\n readonly={!!template.template_contract.summary}\n tooltip={i18n.str`Title of the order to be shown to the customer`}\n />\n </FormProvider>\n\n <div class=\"buttons is-right mt-5\">\n {onBack && (\n <button class=\"button\" onClick={onBack}>\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n )}\n <AsyncButton\n disabled={hasErrors}\n data-tooltip={\n hasErrors\n ? i18n.str`Need to complete marked fields`\n : \"confirm operation\"\n }\n onClick={submitForm}\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </AsyncButton>\n </div>\n </div>\n <div class=\"column\" />\n </div>\n </section>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport {\n HttpError,\n useTranslationContext,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport {\n useTemplateAPI,\n useTemplateDetails,\n} from \"../../../../hooks/templates.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { UsePage } from \"./UsePage.js\";\n\nexport type Entity = MerchantBackend.Transfers.TransferInformation;\ninterface Props {\n onBack?: () => void;\n onOrderCreated: (id: string) => void;\n onUnauthorized: () => VNode;\n onNotFound: () => VNode;\n onLoadError: (e: HttpError<MerchantBackend.ErrorDetail>) => VNode;\n tid: string;\n}\n\nexport default function TemplateUsePage({\n tid,\n onOrderCreated,\n onBack,\n onLoadError,\n onNotFound,\n onUnauthorized,\n}: Props): VNode {\n const { createOrderFromTemplate } = useTemplateAPI();\n const result = useTemplateDetails(tid);\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { i18n } = useTranslationContext();\n\n if (result.clientError && result.isUnauthorized) return onUnauthorized();\n if (result.clientError && result.isNotfound) return onNotFound();\n if (result.loading) return <Loading />;\n if (!result.ok) return onLoadError(result);\n\n return (\n <>\n <NotificationCard notification={notif} />\n <UsePage\n template={result.data}\n id={tid}\n onBack={onBack}\n onCreateOrder={(\n request: MerchantBackend.Template.UsingTemplateDetails,\n ) => {\n return createOrderFromTemplate(tid, request)\n .then((res) => onOrderCreated(res.data.order_id))\n .catch((error) => {\n setNotif({\n message: i18n.str`could not create order from template`,\n type: \"ERROR\",\n description: error.message,\n });\n });\n }}\n />\n </>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { buildPayto, classifyTalerUri } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { AsyncButton } from \"../../../../components/exception/AsyncButton.js\";\nimport { QR } from \"../../../../components/exception/QR.js\";\nimport {\n FormErrors,\n FormProvider,\n} from \"../../../../components/form/FormProvider.js\";\nimport { Input } from \"../../../../components/form/Input.js\";\nimport { InputCurrency } from \"../../../../components/form/InputCurrency.js\";\nimport { ConfirmModal } from \"../../../../components/modal/index.js\";\nimport { useBackendContext } from \"../../../../context/backend.js\";\nimport { useConfigContext } from \"../../../../context/config.js\";\nimport { useInstanceContext } from \"../../../../context/instance.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\n\ntype Entity = MerchantBackend.Template.UsingTemplateDetails;\n\ninterface Props {\n template: MerchantBackend.Template.TemplateDetails;\n id: string;\n onBack?: () => void;\n}\n\nexport function QrPage({ template, id: templateId, onBack }: Props): VNode {\n const { i18n } = useTranslationContext();\n const { url: backendUrl } = useBackendContext();\n const { id: instanceId } = useInstanceContext();\n const config = useConfigContext();\n const [setupTOTP, setSetupTOTP] = useState(false);\n\n const [state, setState] = useState<Partial<Entity>>({\n amount: template.template_contract.amount,\n summary: template.template_contract.summary,\n });\n\n const errors: FormErrors<Entity> = {};\n\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n\n const fixedAmount = !!template.template_contract.amount;\n const fixedSummary = !!template.template_contract.summary;\n\n const params = new URLSearchParams();\n if (!fixedAmount) {\n if (state.amount) {\n params.append(\"amount\", state.amount);\n } else {\n params.append(\"amount\", config.currency);\n }\n }\n if (!fixedSummary) {\n params.append(\"summary\", state.summary ?? \"\");\n }\n\n const paramsStr = fixedAmount && fixedSummary ? \"\" : \"?\" + params.toString();\n const merchantURL = new URL(backendUrl);\n\n const talerProto =\n merchantURL.protocol === \"http:\" ? \"taler+http:\" : \"taler:\";\n\n const payTemplateUri = `${talerProto}//pay-template/${merchantURL.hostname}/${templateId}${paramsStr}`;\n\n const issuer = encodeURIComponent(\n `${new URL(backendUrl).hostname}/${instanceId}`,\n );\n const oauthUri = !template.pos_algorithm\n ? undefined\n : template.pos_algorithm === 1\n ? `otpauth://totp/${issuer}:${templateId}?secret=${template.pos_key}&issuer=${issuer}&algorithm=SHA1&digits=8&period=30`\n : template.pos_algorithm === 2\n ? `otpauth://totp/${issuer}:${templateId}?secret=${template.pos_key}&issuer=${issuer}&algorithm=SHA1&digits=8&period=30`\n : undefined;\n return (\n <div>\n {oauthUri && (\n <ConfirmModal\n description=\"Setup TOTP\"\n active={setupTOTP}\n onConfirm={() => {\n setSetupTOTP(false);\n }}\n >\n <p>Scan this qr code with your TOTP device</p>\n <QR text={oauthUri} />\n <pre style={{ textAlign: \"center\" }}>\n <a href={oauthUri}>{oauthUri}</a>\n </pre>\n </ConfirmModal>\n )}\n <section class=\"section is-main-section\">\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-four-fifths\">\n <FormProvider\n object={state}\n valueHandler={setState}\n errors={errors}\n >\n <InputCurrency<Entity>\n name=\"amount\"\n label={i18n.str`Amount`}\n readonly={fixedAmount}\n tooltip={i18n.str`Amount of the order`}\n />\n <Input<Entity>\n name=\"summary\"\n inputType=\"multiline\"\n readonly={fixedSummary}\n label={i18n.str`Order summary`}\n tooltip={i18n.str`Title of the order to be shown to the customer`}\n />\n </FormProvider>\n\n <div class=\"buttons is-right mt-5\">\n {onBack && (\n <button class=\"button\" onClick={onBack}>\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n )}\n <button\n class=\"button is-info\"\n onClick={() => saveAsPDF(templateId)}\n >\n <i18n.Translate>Print</i18n.Translate>\n </button>\n {oauthUri && (\n <button\n class=\"button is-info\"\n onClick={() => setSetupTOTP(true)}\n >\n <i18n.Translate>Setup TOTP</i18n.Translate>\n </button>\n )}\n </div>\n </div>\n <div class=\"column\" />\n </div>\n </section>\n <section id=\"printThis\">\n <QR text={payTemplateUri} />\n <pre style={{ textAlign: \"center\" }}>\n <a href={payTemplateUri}>{payTemplateUri}</a>\n </pre>\n </section>\n </div>\n );\n}\n\nfunction saveAsPDF(name: string): void {\n const printWindow = window.open(\"\", \"\", \"height=400,width=800\");\n if (!printWindow) return;\n const divContents = document.getElementById(\"printThis\");\n if (!divContents) return;\n printWindow.document.write(\n `<html><head><title>Order template for ${name}</title><style>`,\n );\n printWindow.document.write(\"</style></head><body>&nbsp;</body></html>\");\n printWindow.document.close();\n printWindow.document.body.appendChild(divContents.cloneNode(true));\n printWindow.addEventListener(\"load\", () => {\n printWindow.print();\n printWindow.close();\n });\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport {\n HttpError,\n useTranslationContext,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport {\n useTemplateAPI,\n useTemplateDetails,\n} from \"../../../../hooks/templates.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { QrPage } from \"./QrPage.js\";\n\nexport type Entity = MerchantBackend.Transfers.TransferInformation;\ninterface Props {\n onBack?: () => void;\n onUnauthorized: () => VNode;\n onNotFound: () => VNode;\n onLoadError: (e: HttpError<MerchantBackend.ErrorDetail>) => VNode;\n tid: string;\n}\n\nexport default function TemplateQrPage({\n tid,\n onBack,\n onLoadError,\n onNotFound,\n onUnauthorized,\n}: Props): VNode {\n const result = useTemplateDetails(tid);\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n\n if (result.clientError && result.isUnauthorized) return onUnauthorized();\n if (result.clientError && result.isNotfound) return onNotFound();\n if (result.loading) return <Loading />;\n if (!result.ok) return onLoadError(result);\n\n return (\n <>\n <NotificationCard notification={notif} />\n <QrPage template={result.data} id={tid} onBack={onBack} />\n </>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { StateUpdater, useState } from \"preact/hooks\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\n\ntype Entity = MerchantBackend.Template.TemplateEntry;\n\ninterface Props {\n templates: Entity[];\n onDelete: (e: Entity) => void;\n onSelect: (e: Entity) => void;\n onNewOrder: (e: Entity) => void;\n onQR: (e: Entity) => void;\n onCreate: () => void;\n onLoadMoreBefore?: () => void;\n hasMoreBefore?: boolean;\n hasMoreAfter?: boolean;\n onLoadMoreAfter?: () => void;\n}\n\nexport function CardTable({\n templates,\n onCreate,\n onDelete,\n onSelect,\n onQR,\n onNewOrder,\n onLoadMoreAfter,\n onLoadMoreBefore,\n hasMoreAfter,\n hasMoreBefore,\n}: Props): VNode {\n const [rowSelection, rowSelectionHandler] = useState<string[]>([]);\n\n const { i18n } = useTranslationContext();\n\n return (\n <div class=\"card has-table\">\n <header class=\"card-header\">\n <p class=\"card-header-title\">\n <span class=\"icon\">\n <i class=\"mdi mdi-newspaper\" />\n </span>\n <i18n.Translate>Templates</i18n.Translate>\n </p>\n <div class=\"card-header-icon\" aria-label=\"more options\">\n <span\n class=\"has-tooltip-left\"\n data-tooltip={i18n.str`add new templates`}\n >\n <button class=\"button is-info\" type=\"button\" onClick={onCreate}>\n <span class=\"icon is-small\">\n <i class=\"mdi mdi-plus mdi-36px\" />\n </span>\n </button>\n </span>\n </div>\n </header>\n <div class=\"card-content\">\n <div class=\"b-table has-pagination\">\n <div class=\"table-wrapper has-mobile-cards\">\n {templates.length > 0 ? (\n <Table\n instances={templates}\n onDelete={onDelete}\n onSelect={onSelect}\n onNewOrder={onNewOrder}\n onQR={onQR}\n rowSelection={rowSelection}\n rowSelectionHandler={rowSelectionHandler}\n onLoadMoreAfter={onLoadMoreAfter}\n onLoadMoreBefore={onLoadMoreBefore}\n hasMoreAfter={hasMoreAfter}\n hasMoreBefore={hasMoreBefore}\n />\n ) : (\n <EmptyTable />\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\ninterface TableProps {\n rowSelection: string[];\n instances: Entity[];\n onDelete: (e: Entity) => void;\n onNewOrder: (e: Entity) => void;\n onQR: (e: Entity) => void;\n onSelect: (e: Entity) => void;\n rowSelectionHandler: StateUpdater<string[]>;\n onLoadMoreBefore?: () => void;\n hasMoreBefore?: boolean;\n hasMoreAfter?: boolean;\n onLoadMoreAfter?: () => void;\n}\n\nfunction toggleSelected<T>(id: T): (prev: T[]) => T[] {\n return (prev: T[]): T[] =>\n prev.indexOf(id) == -1 ? [...prev, id] : prev.filter((e) => e != id);\n}\n\nfunction Table({\n instances,\n onLoadMoreAfter,\n onDelete,\n onNewOrder,\n onQR,\n onSelect,\n onLoadMoreBefore,\n hasMoreAfter,\n hasMoreBefore,\n}: TableProps): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"table-container\">\n {onLoadMoreBefore && (\n <button\n class=\"button is-fullwidth\"\n data-tooltip={i18n.str`load more templates before the first one`}\n disabled={!hasMoreBefore}\n onClick={onLoadMoreBefore}\n >\n <i18n.Translate>load newer templates</i18n.Translate>\n </button>\n )}\n <table class=\"table is-fullwidth is-striped is-hoverable is-fullwidth\">\n <thead>\n <tr>\n <th>\n <i18n.Translate>ID</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Description</i18n.Translate>\n </th>\n <th />\n </tr>\n </thead>\n <tbody>\n {instances.map((i) => {\n return (\n <tr key={i.template_id}>\n <td\n onClick={(): void => onSelect(i)}\n style={{ cursor: \"pointer\" }}\n >\n {i.template_id}\n </td>\n <td\n onClick={(): void => onSelect(i)}\n style={{ cursor: \"pointer\" }}\n >\n {i.template_description}\n </td>\n <td class=\"is-actions-cell right-sticky\">\n <div class=\"buttons is-right\">\n <button\n class=\"button is-danger is-small has-tooltip-left\"\n data-tooltip={i18n.str`delete selected templates from the database`}\n onClick={() => onDelete(i)}\n >\n Delete\n </button>\n <button\n class=\"button is-info is-small has-tooltip-left\"\n data-tooltip={i18n.str`use template to create new order`}\n onClick={() => onNewOrder(i)}\n >\n New order\n </button>\n <button\n class=\"button is-info is-small has-tooltip-left\"\n data-tooltip={i18n.str`create qr code for the template`}\n onClick={() => onQR(i)}\n >\n QR\n </button>\n </div>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n {onLoadMoreAfter && (\n <button\n class=\"button is-fullwidth\"\n data-tooltip={i18n.str`load more templates after the last one`}\n disabled={!hasMoreAfter}\n onClick={onLoadMoreAfter}\n >\n <i18n.Translate>load older templates</i18n.Translate>\n </button>\n )}\n </div>\n );\n}\n\nfunction EmptyTable(): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"content has-text-grey has-text-centered\">\n <p>\n <span class=\"icon is-large\">\n <i class=\"mdi mdi-emoticon-sad mdi-48px\" />\n </span>\n </p>\n <p>\n <i18n.Translate>\n There is no templates yet, add more pressing the + sign\n </i18n.Translate>\n </p>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { h, VNode } from \"preact\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { CardTable } from \"./Table.js\";\n\nexport interface Props {\n templates: MerchantBackend.Template.TemplateEntry[];\n onLoadMoreBefore?: () => void;\n onLoadMoreAfter?: () => void;\n onCreate: () => void;\n onDelete: (e: MerchantBackend.Template.TemplateEntry) => void;\n onSelect: (e: MerchantBackend.Template.TemplateEntry) => void;\n onNewOrder: (e: MerchantBackend.Template.TemplateEntry) => void;\n onQR: (e: MerchantBackend.Template.TemplateEntry) => void;\n}\n\nexport function ListPage({\n templates,\n onCreate,\n onDelete,\n onSelect,\n onNewOrder,\n onQR,\n onLoadMoreBefore,\n onLoadMoreAfter,\n}: Props): VNode {\n const form = { payto_uri: \"\" };\n\n const { i18n } = useTranslationContext();\n return (\n <section class=\"section is-main-section\">\n <CardTable\n templates={templates.map((o) => ({\n ...o,\n id: String(o.template_id),\n }))}\n onQR={onQR}\n onCreate={onCreate}\n onDelete={onDelete}\n onSelect={onSelect}\n onNewOrder={onNewOrder}\n onLoadMoreBefore={onLoadMoreBefore}\n hasMoreBefore={!onLoadMoreBefore}\n onLoadMoreAfter={onLoadMoreAfter}\n hasMoreAfter={!onLoadMoreAfter}\n />\n </section>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport {\n HttpError,\n useTranslationContext,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport {\n useInstanceTemplates,\n useTemplateAPI,\n} from \"../../../../hooks/templates.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { ListPage } from \"./ListPage.js\";\n\ninterface Props {\n onUnauthorized: () => VNode;\n onLoadError: (error: HttpError<MerchantBackend.ErrorDetail>) => VNode;\n onNotFound: () => VNode;\n onCreate: () => void;\n onSelect: (id: string) => void;\n onNewOrder: (id: string) => void;\n onQR: (id: string) => void;\n}\n\nexport default function ListTemplates({\n onUnauthorized,\n onLoadError,\n onCreate,\n onQR,\n onSelect,\n onNewOrder,\n onNotFound,\n}: Props): VNode {\n const [position, setPosition] = useState<string | undefined>(undefined);\n const { i18n } = useTranslationContext();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { deleteTemplate } = useTemplateAPI();\n const result = useInstanceTemplates({ position }, (id) => setPosition(id));\n\n if (result.clientError && result.isUnauthorized) return onUnauthorized();\n if (result.clientError && result.isNotfound) return onNotFound();\n if (result.loading) return <Loading />;\n if (!result.ok) return onLoadError(result);\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n\n <ListPage\n templates={result.data.templates}\n onLoadMoreBefore={\n result.isReachingStart ? result.loadMorePrev : undefined\n }\n onLoadMoreAfter={result.isReachingEnd ? result.loadMore : undefined}\n onCreate={onCreate}\n onSelect={(e) => {\n onSelect(e.template_id);\n }}\n onNewOrder={(e) => {\n onNewOrder(e.template_id);\n }}\n onQR={(e) => {\n onQR(e.template_id);\n }}\n onDelete={(e: MerchantBackend.Template.TemplateEntry) =>\n deleteTemplate(e.template_id)\n .then(() =>\n setNotif({\n message: i18n.str`template delete successfully`,\n type: \"SUCCESS\",\n }),\n )\n .catch((error) =>\n setNotif({\n message: i18n.str`could not delete the template`,\n type: \"ERROR\",\n description: error.message,\n }),\n )\n }\n />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { AsyncButton } from \"../../../../components/exception/AsyncButton.js\";\nimport {\n FormErrors,\n FormProvider,\n} from \"../../../../components/form/FormProvider.js\";\nimport { Input } from \"../../../../components/form/Input.js\";\nimport { InputCurrency } from \"../../../../components/form/InputCurrency.js\";\nimport { InputDuration } from \"../../../../components/form/InputDuration.js\";\nimport { InputNumber } from \"../../../../components/form/InputNumber.js\";\nimport { InputSelector } from \"../../../../components/form/InputSelector.js\";\nimport { InputWithAddon } from \"../../../../components/form/InputWithAddon.js\";\nimport { useBackendContext } from \"../../../../context/backend.js\";\nimport { MerchantBackend, WithId } from \"../../../../declaration.js\";\nimport { randomBase32Key } from \"../../../../utils/crypto.js\";\nimport { undefinedIfEmpty } from \"../../../../utils/table.js\";\n\ntype Entity = MerchantBackend.Template.TemplatePatchDetails & WithId;\n\ninterface Props {\n onUpdate: (d: Entity) => Promise<void>;\n onBack?: () => void;\n template: Entity;\n}\n\nconst algorithms = [\"0\", \"1\", \"2\"];\nconst algorithmsNames = [\n \"off\",\n \"30s 8d TOTP-SHA1 without amount\",\n \"30s 8d eTOTP-SHA1 with amount\",\n];\n\nexport function UpdatePage({ template, onUpdate, onBack }: Props): VNode {\n const { i18n } = useTranslationContext();\n const backend = useBackendContext();\n\n const [state, setState] = useState<Partial<Entity>>(template);\n\n const errors: FormErrors<Entity> = {\n template_description: !state.template_description\n ? i18n.str`should not be empty`\n : undefined,\n template_contract: !state.template_contract\n ? undefined\n : undefinedIfEmpty({\n minimum_age:\n state.template_contract.minimum_age < 0\n ? i18n.str`should be greater that 0`\n : undefined,\n pay_duration: !state.template_contract.pay_duration\n ? i18n.str`can't be empty`\n : state.template_contract.pay_duration.d_us === \"forever\"\n ? undefined\n : state.template_contract.pay_duration.d_us < 1000 * 1000 // less than one second\n ? i18n.str`to short`\n : undefined,\n }),\n };\n\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n\n const submitForm = () => {\n if (hasErrors) return Promise.reject();\n return onUpdate(state as any);\n };\n\n return (\n <div>\n <section class=\"section\">\n <section class=\"hero is-hero-bar\">\n <div class=\"hero-body\">\n <div class=\"level\">\n <div class=\"level-left\">\n <div class=\"level-item\">\n <span class=\"is-size-4\">\n {backend.url}/instances/template/{template.id}\n </span>\n </div>\n </div>\n </div>\n </div>\n </section>\n <hr />\n\n <section class=\"section is-main-section\">\n <div class=\"columns\">\n <div class=\"column is-four-fifths\">\n <FormProvider\n object={state}\n valueHandler={setState}\n errors={errors}\n >\n <InputWithAddon<Entity>\n name=\"id\"\n addonBefore={`templates/`}\n readonly\n label={i18n.str`Identifier`}\n tooltip={i18n.str`Name of the template in URLs.`}\n />\n\n <Input<Entity>\n name=\"template_description\"\n label={i18n.str`Description`}\n help=\"\"\n tooltip={i18n.str`Describe what this template stands for`}\n />\n <Input\n name=\"template_contract.summary\"\n inputType=\"multiline\"\n label={i18n.str`Fixed summary`}\n tooltip={i18n.str`If specified, this template will create order with the same summary`}\n />\n <InputCurrency\n name=\"template_contract.amount\"\n label={i18n.str`Fixed price`}\n tooltip={i18n.str`If specified, this template will create order with the same price`}\n />\n <InputNumber\n name=\"template_contract.minimum_age\"\n label={i18n.str`Minimum age`}\n help=\"\"\n tooltip={i18n.str`Is this contract restricted to some age?`}\n />\n <InputDuration\n name=\"template_contract.pay_duration\"\n label={i18n.str`Payment timeout`}\n help=\"\"\n tooltip={i18n.str`How much time has the customer to complete the payment once the order was created.`}\n />\n <InputSelector<Entity>\n name=\"pos_algorithm\"\n label={i18n.str`Veritifaction algorithm`}\n tooltip={i18n.str`Algorithm to use to verify transaction in offline mode`}\n values={algorithms}\n toStr={(v) => algorithmsNames[v]}\n convert={(v) => Number(v)}\n />\n {state.pos_algorithm && state.pos_algorithm > 0 ? (\n <Input<Entity>\n name=\"pos_key\"\n label={i18n.str`Point-of-sale key`}\n help=\"\"\n tooltip={i18n.str`Useful to validate the purchase`}\n side={\n <span data-tooltip={i18n.str`generate random secret key`}>\n <button\n class=\"button is-info mr-3\"\n onClick={(e) => {\n const pos_key = randomBase32Key();\n setState((s) => ({ ...s, pos_key }));\n }}\n >\n <i18n.Translate>random</i18n.Translate>\n </button>\n </span>\n }\n />\n ) : undefined}\n </FormProvider>\n\n <div class=\"buttons is-right mt-5\">\n {onBack && (\n <button class=\"button\" onClick={onBack}>\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n )}\n <AsyncButton\n disabled={hasErrors}\n data-tooltip={\n hasErrors\n ? i18n.str`Need to complete marked fields`\n : \"confirm operation\"\n }\n onClick={submitForm}\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </AsyncButton>\n </div>\n </div>\n </div>\n </section>\n </section>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport {\n HttpError,\n useTranslationContext,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { MerchantBackend, WithId } from \"../../../../declaration.js\";\nimport {\n useTemplateAPI,\n useTemplateDetails,\n} from \"../../../../hooks/templates.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { UpdatePage } from \"./UpdatePage.js\";\n\nexport type Entity = MerchantBackend.Template.TemplatePatchDetails & WithId;\n\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n onUnauthorized: () => VNode;\n onNotFound: () => VNode;\n onLoadError: (e: HttpError<MerchantBackend.ErrorDetail>) => VNode;\n tid: string;\n}\nexport default function UpdateTemplate({\n tid,\n onConfirm,\n onBack,\n onUnauthorized,\n onNotFound,\n onLoadError,\n}: Props): VNode {\n const { updateTemplate } = useTemplateAPI();\n const result = useTemplateDetails(tid);\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n\n const { i18n } = useTranslationContext();\n\n if (result.clientError && result.isUnauthorized) return onUnauthorized();\n if (result.clientError && result.isNotfound) return onNotFound();\n if (result.loading) return <Loading />;\n if (!result.ok) return onLoadError(result);\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n <UpdatePage\n template={{ ...result.data, id: tid }}\n onBack={onBack}\n onUpdate={(data) => {\n return updateTemplate(tid, data)\n .then(onConfirm)\n .catch((error) => {\n setNotif({\n message: i18n.str`could not update template`,\n type: \"ERROR\",\n description: error.message,\n });\n });\n }}\n />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\nimport {\n HttpResponse,\n HttpResponseOk,\n HttpResponsePaginated,\n RequestError,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { MerchantBackend } from \"../declaration.js\";\nimport { MAX_RESULT_SIZE, PAGE_SIZE } from \"../utils/constants.js\";\nimport { useBackendInstanceRequest, useMatchMutate } from \"./backend.js\";\n\n// FIX default import https://github.com/microsoft/TypeScript/issues/49189\nimport _useSWR, { SWRHook } from \"swr\";\nconst useSWR = _useSWR as unknown as SWRHook;\n\nexport function useWebhookAPI(): WebhookAPI {\n const mutateAll = useMatchMutate();\n const { request } = useBackendInstanceRequest();\n\n const createWebhook = async (\n data: MerchantBackend.Webhooks.WebhookAddDetails,\n ): Promise<HttpResponseOk<void>> => {\n const res = await request<void>(`/private/webhooks`, {\n method: \"POST\",\n data,\n });\n await mutateAll(/.*private\\/webhooks.*/);\n return res;\n };\n\n const updateWebhook = async (\n webhookId: string,\n data: MerchantBackend.Webhooks.WebhookPatchDetails,\n ): Promise<HttpResponseOk<void>> => {\n const res = await request<void>(`/private/webhooks/${webhookId}`, {\n method: \"PATCH\",\n data,\n });\n await mutateAll(/.*private\\/webhooks.*/);\n return res;\n };\n\n const deleteWebhook = async (\n webhookId: string,\n ): Promise<HttpResponseOk<void>> => {\n const res = await request<void>(`/private/webhooks/${webhookId}`, {\n method: \"DELETE\",\n });\n await mutateAll(/.*private\\/webhooks.*/);\n return res;\n };\n\n return { createWebhook, updateWebhook, deleteWebhook };\n}\n\nexport interface WebhookAPI {\n createWebhook: (\n data: MerchantBackend.Webhooks.WebhookAddDetails,\n ) => Promise<HttpResponseOk<void>>;\n updateWebhook: (\n id: string,\n data: MerchantBackend.Webhooks.WebhookPatchDetails,\n ) => Promise<HttpResponseOk<void>>;\n deleteWebhook: (id: string) => Promise<HttpResponseOk<void>>;\n}\n\nexport interface InstanceWebhookFilter {\n //FIXME: add filter to the webhook list\n position?: string;\n}\n\nexport function useInstanceWebhooks(\n args?: InstanceWebhookFilter,\n updatePosition?: (id: string) => void,\n): HttpResponsePaginated<\n MerchantBackend.Webhooks.WebhookSummaryResponse,\n MerchantBackend.ErrorDetail\n> {\n const { webhookFetcher } = useBackendInstanceRequest();\n\n const [pageAfter, setPageAfter] = useState(1);\n\n const totalAfter = pageAfter * PAGE_SIZE;\n\n const {\n data: afterData,\n error: afterError,\n isValidating: loadingAfter,\n } = useSWR<\n HttpResponseOk<MerchantBackend.Webhooks.WebhookSummaryResponse>,\n RequestError<MerchantBackend.ErrorDetail>\n >([`/private/webhooks`, args?.position, -totalAfter], webhookFetcher);\n\n const [lastAfter, setLastAfter] = useState<\n HttpResponse<\n MerchantBackend.Webhooks.WebhookSummaryResponse,\n MerchantBackend.ErrorDetail\n >\n >({ loading: true });\n useEffect(() => {\n if (afterData) setLastAfter(afterData);\n }, [afterData]);\n\n if (afterError) return afterError.info;\n\n const isReachingEnd =\n afterData && afterData.data.webhooks.length < totalAfter;\n const isReachingStart = false;\n\n const pagination = {\n isReachingEnd,\n isReachingStart,\n loadMore: () => {\n if (!afterData || isReachingEnd) return;\n if (afterData.data.webhooks.length < MAX_RESULT_SIZE) {\n setPageAfter(pageAfter + 1);\n } else {\n const from = `${\n afterData.data.webhooks[afterData.data.webhooks.length - 1].webhook_id\n }`;\n if (from && updatePosition) updatePosition(from);\n }\n },\n loadMorePrev: () => {\n return;\n },\n };\n\n const webhooks = !afterData ? [] : (afterData || lastAfter).data.webhooks;\n\n if (loadingAfter) return { loading: true, data: { webhooks } };\n if (afterData) {\n return { ok: true, data: { webhooks }, ...pagination };\n }\n return { loading: true };\n}\n\nexport function useWebhookDetails(\n webhookId: string,\n): HttpResponse<\n MerchantBackend.Webhooks.WebhookDetails,\n MerchantBackend.ErrorDetail\n> {\n const { webhookFetcher } = useBackendInstanceRequest();\n\n const { data, error, isValidating } = useSWR<\n HttpResponseOk<MerchantBackend.Webhooks.WebhookDetails>,\n RequestError<MerchantBackend.ErrorDetail>\n >([`/private/webhooks/${webhookId}`], webhookFetcher, {\n refreshInterval: 0,\n refreshWhenHidden: false,\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n refreshWhenOffline: false,\n });\n\n if (isValidating) return { loading: true, data: data?.data };\n if (data) return data;\n if (error) return error.info;\n return { loading: true };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { AsyncButton } from \"../../../../components/exception/AsyncButton.js\";\nimport {\n FormErrors,\n FormProvider,\n} from \"../../../../components/form/FormProvider.js\";\nimport { Input } from \"../../../../components/form/Input.js\";\nimport { InputCurrency } from \"../../../../components/form/InputCurrency.js\";\nimport { InputDuration } from \"../../../../components/form/InputDuration.js\";\nimport { InputNumber } from \"../../../../components/form/InputNumber.js\";\nimport { useBackendContext } from \"../../../../context/backend.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\n\ntype Entity = MerchantBackend.Webhooks.WebhookAddDetails;\n\ninterface Props {\n onCreate: (d: Entity) => Promise<void>;\n onBack?: () => void;\n}\n\nconst validMethod = [\"GET\", \"POST\", \"PUT\", \"PATCH\", \"HEAD\"];\n\nexport function CreatePage({ onCreate, onBack }: Props): VNode {\n const { i18n } = useTranslationContext();\n\n const [state, setState] = useState<Partial<Entity>>({});\n\n const errors: FormErrors<Entity> = {\n webhook_id: !state.webhook_id ? i18n.str`required` : undefined,\n event_type: !state.event_type ? i18n.str`required` : undefined,\n http_method: !state.http_method\n ? i18n.str`required`\n : !validMethod.includes(state.http_method)\n ? i18n.str`should be one of '${validMethod.join(\", \")}'`\n : undefined,\n url: !state.url ? i18n.str`required` : undefined,\n };\n\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n\n const submitForm = () => {\n if (hasErrors) return Promise.reject();\n return onCreate(state as any);\n };\n\n return (\n <div>\n <section class=\"section is-main-section\">\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-four-fifths\">\n <FormProvider\n object={state}\n valueHandler={setState}\n errors={errors}\n >\n <Input<Entity>\n name=\"webhook_id\"\n label={i18n.str`ID`}\n tooltip={i18n.str`Webhook ID to use`}\n />\n <Input<Entity>\n name=\"event_type\"\n label={i18n.str`Event`}\n tooltip={i18n.str`The event of the webhook: why the webhook is used`}\n />\n <Input<Entity>\n name=\"http_method\"\n label={i18n.str`Method`}\n tooltip={i18n.str`Method used by the webhook`}\n />\n <Input<Entity>\n name=\"url\"\n label={i18n.str`URL`}\n tooltip={i18n.str`URL of the webhook where the customer will be redirected`}\n />\n <Input<Entity>\n name=\"header_template\"\n label={i18n.str`Header`}\n inputType=\"multiline\"\n tooltip={i18n.str`Header template of the webhook`}\n />\n <Input<Entity>\n name=\"body_template\"\n inputType=\"multiline\"\n label={i18n.str`Body`}\n tooltip={i18n.str`Body template by the webhook`}\n />\n </FormProvider>\n\n <div class=\"buttons is-right mt-5\">\n {onBack && (\n <button class=\"button\" onClick={onBack}>\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n )}\n <AsyncButton\n disabled={hasErrors}\n data-tooltip={\n hasErrors\n ? i18n.str`Need to complete marked fields`\n : \"confirm operation\"\n }\n onClick={submitForm}\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </AsyncButton>\n </div>\n </div>\n <div class=\"column\" />\n </div>\n </section>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport { useWebhookAPI } from \"../../../../hooks/webhooks.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { CreatePage } from \"./CreatePage.js\";\n\nexport type Entity = MerchantBackend.Webhooks.WebhookAddDetails;\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n}\n\nexport default function CreateWebhook({ onConfirm, onBack }: Props): VNode {\n const { createWebhook } = useWebhookAPI();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { i18n } = useTranslationContext();\n\n return (\n <>\n <NotificationCard notification={notif} />\n <CreatePage\n onBack={onBack}\n onCreate={(request: MerchantBackend.Webhooks.WebhookAddDetails) => {\n return createWebhook(request)\n .then(() => onConfirm())\n .catch((error) => {\n setNotif({\n message: i18n.str`could not inform template`,\n type: \"ERROR\",\n description: error.message,\n });\n });\n }}\n />\n </>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { StateUpdater, useState } from \"preact/hooks\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\n\ntype Entity = MerchantBackend.Webhooks.WebhookEntry;\n\ninterface Props {\n webhooks: Entity[];\n onDelete: (e: Entity) => void;\n onSelect: (e: Entity) => void;\n onCreate: () => void;\n onLoadMoreBefore?: () => void;\n hasMoreBefore?: boolean;\n hasMoreAfter?: boolean;\n onLoadMoreAfter?: () => void;\n}\n\nexport function CardTable({\n webhooks,\n onCreate,\n onDelete,\n onSelect,\n onLoadMoreAfter,\n onLoadMoreBefore,\n hasMoreAfter,\n hasMoreBefore,\n}: Props): VNode {\n const [rowSelection, rowSelectionHandler] = useState<string[]>([]);\n\n const { i18n } = useTranslationContext();\n\n return (\n <div class=\"card has-table\">\n <header class=\"card-header\">\n <p class=\"card-header-title\">\n <span class=\"icon\">\n <i class=\"mdi mdi-newspaper\" />\n </span>\n <i18n.Translate>Webhooks</i18n.Translate>\n </p>\n <div class=\"card-header-icon\" aria-label=\"more options\">\n <span\n class=\"has-tooltip-left\"\n data-tooltip={i18n.str`add new webhooks`}\n >\n <button class=\"button is-info\" type=\"button\" onClick={onCreate}>\n <span class=\"icon is-small\">\n <i class=\"mdi mdi-plus mdi-36px\" />\n </span>\n </button>\n </span>\n </div>\n </header>\n <div class=\"card-content\">\n <div class=\"b-table has-pagination\">\n <div class=\"table-wrapper has-mobile-cards\">\n {webhooks.length > 0 ? (\n <Table\n instances={webhooks}\n onDelete={onDelete}\n onSelect={onSelect}\n onNewOrder={(d) => {\n console.log(\"test\", d);\n }}\n rowSelection={rowSelection}\n rowSelectionHandler={rowSelectionHandler}\n onLoadMoreAfter={onLoadMoreAfter}\n onLoadMoreBefore={onLoadMoreBefore}\n hasMoreAfter={hasMoreAfter}\n hasMoreBefore={hasMoreBefore}\n />\n ) : (\n <EmptyTable />\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\ninterface TableProps {\n rowSelection: string[];\n instances: Entity[];\n onDelete: (e: Entity) => void;\n onNewOrder: (e: Entity) => void;\n onSelect: (e: Entity) => void;\n rowSelectionHandler: StateUpdater<string[]>;\n onLoadMoreBefore?: () => void;\n hasMoreBefore?: boolean;\n hasMoreAfter?: boolean;\n onLoadMoreAfter?: () => void;\n}\n\nfunction toggleSelected<T>(id: T): (prev: T[]) => T[] {\n return (prev: T[]): T[] =>\n prev.indexOf(id) == -1 ? [...prev, id] : prev.filter((e) => e != id);\n}\n\nfunction Table({\n instances,\n onLoadMoreAfter,\n onDelete,\n onNewOrder,\n onSelect,\n onLoadMoreBefore,\n hasMoreAfter,\n hasMoreBefore,\n}: TableProps): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"table-container\">\n {onLoadMoreBefore && (\n <button\n class=\"button is-fullwidth\"\n data-tooltip={i18n.str`load more webhooks before the first one`}\n disabled={!hasMoreBefore}\n onClick={onLoadMoreBefore}\n >\n <i18n.Translate>load newer webhooks</i18n.Translate>\n </button>\n )}\n <table class=\"table is-fullwidth is-striped is-hoverable is-fullwidth\">\n <thead>\n <tr>\n <th>\n <i18n.Translate>ID</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Event type</i18n.Translate>\n </th>\n <th />\n </tr>\n </thead>\n <tbody>\n {instances.map((i) => {\n return (\n <tr key={i.webhook_id}>\n <td\n onClick={(): void => onSelect(i)}\n style={{ cursor: \"pointer\" }}\n >\n {i.webhook_id}\n </td>\n <td\n onClick={(): void => onSelect(i)}\n style={{ cursor: \"pointer\" }}\n >\n {i.event_type}\n </td>\n <td class=\"is-actions-cell right-sticky\">\n <div class=\"buttons is-right\">\n <button\n class=\"button is-danger is-small has-tooltip-left\"\n data-tooltip={i18n.str`delete selected webhook from the database`}\n onClick={() => onDelete(i)}\n >\n Delete\n </button>\n {/* <button\n class=\"button is-info is-small has-tooltip-left\"\n data-tooltip={i18n.str`test webhook`}\n onClick={() => onNewOrder(i)}\n >\n Test\n </button> */}\n </div>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n {onLoadMoreAfter && (\n <button\n class=\"button is-fullwidth\"\n data-tooltip={i18n.str`load more webhooks after the last one`}\n disabled={!hasMoreAfter}\n onClick={onLoadMoreAfter}\n >\n <i18n.Translate>load older webhooks</i18n.Translate>\n </button>\n )}\n </div>\n );\n}\n\nfunction EmptyTable(): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"content has-text-grey has-text-centered\">\n <p>\n <span class=\"icon is-large\">\n <i class=\"mdi mdi-emoticon-sad mdi-48px\" />\n </span>\n </p>\n <p>\n <i18n.Translate>\n There is no webhooks yet, add more pressing the + sign\n </i18n.Translate>\n </p>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { h, VNode } from \"preact\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { CardTable } from \"./Table.js\";\n\nexport interface Props {\n webhooks: MerchantBackend.Webhooks.WebhookEntry[];\n onLoadMoreBefore?: () => void;\n onLoadMoreAfter?: () => void;\n onCreate: () => void;\n onDelete: (e: MerchantBackend.Webhooks.WebhookEntry) => void;\n onSelect: (e: MerchantBackend.Webhooks.WebhookEntry) => void;\n}\n\nexport function ListPage({\n webhooks,\n onCreate,\n onDelete,\n onSelect,\n onLoadMoreBefore,\n onLoadMoreAfter,\n}: Props): VNode {\n const form = { payto_uri: \"\" };\n\n const { i18n } = useTranslationContext();\n return (\n <section class=\"section is-main-section\">\n <CardTable\n webhooks={webhooks.map((o) => ({\n ...o,\n id: String(o.webhook_id),\n }))}\n onCreate={onCreate}\n onDelete={onDelete}\n onSelect={onSelect}\n onLoadMoreBefore={onLoadMoreBefore}\n hasMoreBefore={!onLoadMoreBefore}\n onLoadMoreAfter={onLoadMoreAfter}\n hasMoreAfter={!onLoadMoreAfter}\n />\n </section>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport {\n HttpError,\n useTranslationContext,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport {\n useInstanceWebhooks,\n useWebhookAPI,\n} from \"../../../../hooks/webhooks.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { ListPage } from \"./ListPage.js\";\n\ninterface Props {\n onUnauthorized: () => VNode;\n onLoadError: (error: HttpError<MerchantBackend.ErrorDetail>) => VNode;\n onNotFound: () => VNode;\n onCreate: () => void;\n onSelect: (id: string) => void;\n}\n\nexport default function ListWebhooks({\n onUnauthorized,\n onLoadError,\n onCreate,\n onSelect,\n onNotFound,\n}: Props): VNode {\n const [position, setPosition] = useState<string | undefined>(undefined);\n const { i18n } = useTranslationContext();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { deleteWebhook } = useWebhookAPI();\n const result = useInstanceWebhooks({ position }, (id) => setPosition(id));\n\n if (result.clientError && result.isUnauthorized) return onUnauthorized();\n if (result.clientError && result.isNotfound) return onNotFound();\n if (result.loading) return <Loading />;\n if (!result.ok) return onLoadError(result);\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n\n <ListPage\n webhooks={result.data.webhooks}\n onLoadMoreBefore={\n result.isReachingStart ? result.loadMorePrev : undefined\n }\n onLoadMoreAfter={result.isReachingEnd ? result.loadMore : undefined}\n onCreate={onCreate}\n onSelect={(e) => {\n onSelect(e.webhook_id);\n }}\n onDelete={(e: MerchantBackend.Webhooks.WebhookEntry) =>\n deleteWebhook(e.webhook_id)\n .then(() =>\n setNotif({\n message: i18n.str`webhook delete successfully`,\n type: \"SUCCESS\",\n }),\n )\n .catch((error) =>\n setNotif({\n message: i18n.str`could not delete the webhook`,\n type: \"ERROR\",\n description: error.message,\n }),\n )\n }\n />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { AsyncButton } from \"../../../../components/exception/AsyncButton.js\";\nimport {\n FormErrors,\n FormProvider,\n} from \"../../../../components/form/FormProvider.js\";\nimport { Input } from \"../../../../components/form/Input.js\";\nimport { useBackendContext } from \"../../../../context/backend.js\";\nimport { MerchantBackend, WithId } from \"../../../../declaration.js\";\n\ntype Entity = MerchantBackend.Webhooks.WebhookPatchDetails & WithId;\n\ninterface Props {\n onUpdate: (d: Entity) => Promise<void>;\n onBack?: () => void;\n webhook: Entity;\n}\nconst validMethod = [\"GET\", \"POST\", \"PUT\", \"PATCH\", \"HEAD\"];\n\nexport function UpdatePage({ webhook, onUpdate, onBack }: Props): VNode {\n const { i18n } = useTranslationContext();\n\n const [state, setState] = useState<Partial<Entity>>(webhook);\n\n const errors: FormErrors<Entity> = {\n event_type: !state.event_type ? i18n.str`required` : undefined,\n http_method: !state.http_method\n ? i18n.str`required`\n : !validMethod.includes(state.http_method)\n ? i18n.str`should be one of '${validMethod.join(\", \")}'`\n : undefined,\n url: !state.url ? i18n.str`required` : undefined,\n };\n\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n\n const submitForm = () => {\n if (hasErrors) return Promise.reject();\n return onUpdate(state as any);\n };\n\n return (\n <div>\n <section class=\"section\">\n <section class=\"hero is-hero-bar\">\n <div class=\"hero-body\">\n <div class=\"level\">\n <div class=\"level-left\">\n <div class=\"level-item\">\n <span class=\"is-size-4\">\n Webhook: <b>{webhook.id}</b>\n </span>\n </div>\n </div>\n </div>\n </div>\n </section>\n <hr />\n\n <section class=\"section is-main-section\">\n <div class=\"columns\">\n <div class=\"column is-four-fifths\">\n <FormProvider\n object={state}\n valueHandler={setState}\n errors={errors}\n >\n <Input<Entity>\n name=\"event_type\"\n label={i18n.str`Event`}\n tooltip={i18n.str`The event of the webhook: why the webhook is used`}\n />\n <Input<Entity>\n name=\"http_method\"\n label={i18n.str`Method`}\n tooltip={i18n.str`Method used by the webhook`}\n />\n <Input<Entity>\n name=\"url\"\n label={i18n.str`URL`}\n tooltip={i18n.str`URL of the webhook where the customer will be redirected`}\n />\n <Input<Entity>\n name=\"header_template\"\n label={i18n.str`Header`}\n inputType=\"multiline\"\n tooltip={i18n.str`Header template of the webhook`}\n />\n <Input<Entity>\n name=\"body_template\"\n inputType=\"multiline\"\n label={i18n.str`Body`}\n tooltip={i18n.str`Body template by the webhook`}\n />\n </FormProvider>\n\n <div class=\"buttons is-right mt-5\">\n {onBack && (\n <button class=\"button\" onClick={onBack}>\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n )}\n <AsyncButton\n disabled={hasErrors}\n data-tooltip={\n hasErrors\n ? i18n.str`Need to complete marked fields`\n : \"confirm operation\"\n }\n onClick={submitForm}\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </AsyncButton>\n </div>\n </div>\n </div>\n </section>\n </section>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport {\n HttpError,\n useTranslationContext,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { MerchantBackend, WithId } from \"../../../../declaration.js\";\nimport {\n useWebhookAPI,\n useWebhookDetails,\n} from \"../../../../hooks/webhooks.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { UpdatePage } from \"./UpdatePage.js\";\n\nexport type Entity = MerchantBackend.Webhooks.WebhookPatchDetails & WithId;\n\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n onUnauthorized: () => VNode;\n onNotFound: () => VNode;\n onLoadError: (e: HttpError<MerchantBackend.ErrorDetail>) => VNode;\n tid: string;\n}\nexport default function UpdateWebhook({\n tid,\n onConfirm,\n onBack,\n onUnauthorized,\n onNotFound,\n onLoadError,\n}: Props): VNode {\n const { updateWebhook } = useWebhookAPI();\n const result = useWebhookDetails(tid);\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n\n const { i18n } = useTranslationContext();\n\n if (result.clientError && result.isUnauthorized) return onUnauthorized();\n if (result.clientError && result.isNotfound) return onNotFound();\n if (result.loading) return <Loading />;\n if (!result.ok) return onLoadError(result);\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n <UpdatePage\n webhook={{ ...result.data, id: tid }}\n onBack={onBack}\n onUpdate={(data) => {\n return updateWebhook(tid, data)\n .then(onConfirm)\n .catch((error) => {\n setNotif({\n message: i18n.str`could not update template`,\n type: \"ERROR\",\n description: error.message,\n });\n });\n }}\n />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\nimport {\n HttpResponse,\n HttpResponseOk,\n HttpResponsePaginated,\n RequestError,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { MerchantBackend } from \"../declaration.js\";\nimport { MAX_RESULT_SIZE, PAGE_SIZE } from \"../utils/constants.js\";\nimport { useBackendInstanceRequest, useMatchMutate } from \"./backend.js\";\n\n// FIX default import https://github.com/microsoft/TypeScript/issues/49189\nimport _useSWR, { SWRHook } from \"swr\";\nconst useSWR = _useSWR as unknown as SWRHook;\n\nexport function useTransferAPI(): TransferAPI {\n const mutateAll = useMatchMutate();\n const { request } = useBackendInstanceRequest();\n\n const informTransfer = async (\n data: MerchantBackend.Transfers.TransferInformation,\n ): Promise<\n HttpResponseOk<MerchantBackend.Transfers.MerchantTrackTransferResponse>\n > => {\n const res =\n await request<MerchantBackend.Transfers.MerchantTrackTransferResponse>(\n `/private/transfers`,\n {\n method: \"POST\",\n data,\n },\n );\n\n await mutateAll(/.*private\\/transfers.*/);\n return res;\n };\n\n return { informTransfer };\n}\n\nexport interface TransferAPI {\n informTransfer: (\n data: MerchantBackend.Transfers.TransferInformation,\n ) => Promise<\n HttpResponseOk<MerchantBackend.Transfers.MerchantTrackTransferResponse>\n >;\n}\n\nexport interface InstanceTransferFilter {\n payto_uri?: string;\n verified?: \"yes\" | \"no\";\n position?: string;\n}\n\nexport function useInstanceTransfers(\n args?: InstanceTransferFilter,\n updatePosition?: (id: string) => void,\n): HttpResponsePaginated<\n MerchantBackend.Transfers.TransferList,\n MerchantBackend.ErrorDetail\n> {\n const { transferFetcher } = useBackendInstanceRequest();\n\n const [pageBefore, setPageBefore] = useState(1);\n const [pageAfter, setPageAfter] = useState(1);\n\n const totalAfter = pageAfter * PAGE_SIZE;\n const totalBefore = args?.position !== undefined ? pageBefore * PAGE_SIZE : 0;\n\n /**\n * FIXME: this can be cleaned up a little\n *\n * the logic of double query should be inside the orderFetch so from the hook perspective and cache\n * is just one query and one error status\n */\n const {\n data: beforeData,\n error: beforeError,\n isValidating: loadingBefore,\n } = useSWR<\n HttpResponseOk<MerchantBackend.Transfers.TransferList>,\n RequestError<MerchantBackend.ErrorDetail>\n >(\n [\n `/private/transfers`,\n args?.payto_uri,\n args?.verified,\n args?.position,\n totalBefore,\n ],\n transferFetcher,\n );\n const {\n data: afterData,\n error: afterError,\n isValidating: loadingAfter,\n } = useSWR<\n HttpResponseOk<MerchantBackend.Transfers.TransferList>,\n RequestError<MerchantBackend.ErrorDetail>\n >(\n [\n `/private/transfers`,\n args?.payto_uri,\n args?.verified,\n args?.position,\n -totalAfter,\n ],\n transferFetcher,\n );\n\n //this will save last result\n const [lastBefore, setLastBefore] = useState<\n HttpResponse<\n MerchantBackend.Transfers.TransferList,\n MerchantBackend.ErrorDetail\n >\n >({ loading: true });\n const [lastAfter, setLastAfter] = useState<\n HttpResponse<\n MerchantBackend.Transfers.TransferList,\n MerchantBackend.ErrorDetail\n >\n >({ loading: true });\n useEffect(() => {\n if (afterData) setLastAfter(afterData);\n if (beforeData) setLastBefore(beforeData);\n }, [afterData, beforeData]);\n\n if (beforeError) return beforeError.info;\n if (afterError) return afterError.info;\n\n // if the query returns less that we ask, then we have reach the end or beginning\n const isReachingEnd =\n afterData && afterData.data.transfers.length < totalAfter;\n const isReachingStart =\n args?.position === undefined ||\n (beforeData && beforeData.data.transfers.length < totalBefore);\n\n const pagination = {\n isReachingEnd,\n isReachingStart,\n loadMore: () => {\n if (!afterData || isReachingEnd) return;\n if (afterData.data.transfers.length < MAX_RESULT_SIZE) {\n setPageAfter(pageAfter + 1);\n } else {\n const from = `${\n afterData.data.transfers[afterData.data.transfers.length - 1]\n .transfer_serial_id\n }`;\n if (from && updatePosition) updatePosition(from);\n }\n },\n loadMorePrev: () => {\n if (!beforeData || isReachingStart) return;\n if (beforeData.data.transfers.length < MAX_RESULT_SIZE) {\n setPageBefore(pageBefore + 1);\n } else if (beforeData) {\n const from = `${\n beforeData.data.transfers[beforeData.data.transfers.length - 1]\n .transfer_serial_id\n }`;\n if (from && updatePosition) updatePosition(from);\n }\n },\n };\n\n const transfers =\n !beforeData || !afterData\n ? []\n : (beforeData || lastBefore).data.transfers\n .slice()\n .reverse()\n .concat((afterData || lastAfter).data.transfers);\n if (loadingAfter || loadingBefore)\n return { loading: true, data: { transfers } };\n if (beforeData && afterData) {\n return { ok: true, data: { transfers }, ...pagination };\n }\n return { loading: true };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { AsyncButton } from \"../../../../components/exception/AsyncButton.js\";\nimport {\n FormErrors,\n FormProvider,\n} from \"../../../../components/form/FormProvider.js\";\nimport { Input } from \"../../../../components/form/Input.js\";\nimport { InputCurrency } from \"../../../../components/form/InputCurrency.js\";\nimport { InputSelector } from \"../../../../components/form/InputSelector.js\";\nimport { useConfigContext } from \"../../../../context/config.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport {\n CROCKFORD_BASE32_REGEX,\n URL_REGEX,\n} from \"../../../../utils/constants.js\";\n\ntype Entity = MerchantBackend.Transfers.TransferInformation;\n\ninterface Props {\n onCreate: (d: Entity) => Promise<void>;\n onBack?: () => void;\n accounts: string[];\n}\n\nexport function CreatePage({ accounts, onCreate, onBack }: Props): VNode {\n const { i18n } = useTranslationContext();\n const { currency } = useConfigContext();\n\n const [state, setState] = useState<Partial<Entity>>({\n wtid: \"\",\n // payto_uri: ,\n // exchange_url: 'http://exchange.taler:8081/',\n credit_amount: ``,\n });\n\n const errors: FormErrors<Entity> = {\n wtid: !state.wtid\n ? i18n.str`cannot be empty`\n : !CROCKFORD_BASE32_REGEX.test(state.wtid)\n ? i18n.str`check the id, does not look valid`\n : state.wtid.length !== 52\n ? i18n.str`should have 52 characters, current ${state.wtid.length}`\n : undefined,\n payto_uri: !state.payto_uri ? i18n.str`cannot be empty` : undefined,\n credit_amount: !state.credit_amount ? i18n.str`cannot be empty` : undefined,\n exchange_url: !state.exchange_url\n ? i18n.str`cannot be empty`\n : !URL_REGEX.test(state.exchange_url)\n ? i18n.str`URL doesn't have the right format`\n : undefined,\n };\n\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n\n const submitForm = () => {\n if (hasErrors) return Promise.reject();\n return onCreate(state as any);\n };\n\n return (\n <div>\n <section class=\"section is-main-section\">\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-four-fifths\">\n <FormProvider\n object={state}\n valueHandler={setState}\n errors={errors}\n >\n <InputSelector\n name=\"payto_uri\"\n label={i18n.str`Credited bank account`}\n values={accounts}\n placeholder={i18n.str`Select one account`}\n tooltip={i18n.str`Bank account of the merchant where the payment was received`}\n />\n <Input<Entity>\n name=\"wtid\"\n label={i18n.str`Wire transfer ID`}\n help=\"\"\n tooltip={i18n.str`unique identifier of the wire transfer used by the exchange, must be 52 characters long`}\n />\n <Input<Entity>\n name=\"exchange_url\"\n label={i18n.str`Exchange URL`}\n tooltip={i18n.str`Base URL of the exchange that made the transfer, should have been in the wire transfer subject`}\n help=\"http://exchange.taler:8081/\"\n />\n <InputCurrency<Entity>\n name=\"credit_amount\"\n label={i18n.str`Amount credited`}\n tooltip={i18n.str`Actual amount that was wired to the merchant's bank account`}\n />\n </FormProvider>\n\n <div class=\"buttons is-right mt-5\">\n {onBack && (\n <button class=\"button\" onClick={onBack}>\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n )}\n <AsyncButton\n disabled={hasErrors}\n data-tooltip={\n hasErrors\n ? i18n.str`Need to complete marked fields`\n : \"confirm operation\"\n }\n onClick={submitForm}\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </AsyncButton>\n </div>\n </div>\n <div class=\"column\" />\n </div>\n </section>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport { useInstanceDetails } from \"../../../../hooks/instance.js\";\nimport { useTransferAPI } from \"../../../../hooks/transfer.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { CreatePage } from \"./CreatePage.js\";\n\nexport type Entity = MerchantBackend.Transfers.TransferInformation;\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n}\n\nexport default function CreateTransfer({ onConfirm, onBack }: Props): VNode {\n const { informTransfer } = useTransferAPI();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { i18n } = useTranslationContext();\n const instance = useInstanceDetails();\n const accounts = !instance.ok\n ? []\n : instance.data.accounts.map((a) => a.payto_uri);\n\n return (\n <>\n <NotificationCard notification={notif} />\n <CreatePage\n onBack={onBack}\n accounts={accounts}\n onCreate={(request: MerchantBackend.Transfers.TransferInformation) => {\n return informTransfer(request)\n .then(() => onConfirm())\n .catch((error) => {\n setNotif({\n message: i18n.str`could not inform transfer`,\n type: \"ERROR\",\n description: error.message,\n });\n });\n }}\n />\n </>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { format } from \"date-fns\";\nimport { h, VNode } from \"preact\";\nimport { StateUpdater, useState } from \"preact/hooks\";\nimport { MerchantBackend, WithId } from \"../../../../declaration.js\";\n\ntype Entity = MerchantBackend.Transfers.TransferDetails & WithId;\n\ninterface Props {\n transfers: Entity[];\n onDelete: (id: Entity) => void;\n onCreate: () => void;\n accounts: string[];\n onLoadMoreBefore?: () => void;\n hasMoreBefore?: boolean;\n hasMoreAfter?: boolean;\n onLoadMoreAfter?: () => void;\n}\n\nexport function CardTable({\n transfers,\n onCreate,\n onDelete,\n onLoadMoreAfter,\n onLoadMoreBefore,\n hasMoreAfter,\n hasMoreBefore,\n}: Props): VNode {\n const [rowSelection, rowSelectionHandler] = useState<string[]>([]);\n\n const { i18n } = useTranslationContext();\n\n return (\n <div class=\"card has-table\">\n <header class=\"card-header\">\n <p class=\"card-header-title\">\n <span class=\"icon\">\n <i class=\"mdi mdi-bank\" />\n </span>\n <i18n.Translate>Transfers</i18n.Translate>\n </p>\n <div class=\"card-header-icon\" aria-label=\"more options\">\n <span\n class=\"has-tooltip-left\"\n data-tooltip={i18n.str`add new transfer`}\n >\n <button class=\"button is-info\" type=\"button\" onClick={onCreate}>\n <span class=\"icon is-small\">\n <i class=\"mdi mdi-plus mdi-36px\" />\n </span>\n </button>\n </span>\n </div>\n </header>\n <div class=\"card-content\">\n <div class=\"b-table has-pagination\">\n <div class=\"table-wrapper has-mobile-cards\">\n {transfers.length > 0 ? (\n <Table\n instances={transfers}\n onDelete={onDelete}\n rowSelection={rowSelection}\n rowSelectionHandler={rowSelectionHandler}\n onLoadMoreAfter={onLoadMoreAfter}\n onLoadMoreBefore={onLoadMoreBefore}\n hasMoreAfter={hasMoreAfter}\n hasMoreBefore={hasMoreBefore}\n />\n ) : (\n <EmptyTable />\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\ninterface TableProps {\n rowSelection: string[];\n instances: Entity[];\n onDelete: (id: Entity) => void;\n rowSelectionHandler: StateUpdater<string[]>;\n onLoadMoreBefore?: () => void;\n hasMoreBefore?: boolean;\n hasMoreAfter?: boolean;\n onLoadMoreAfter?: () => void;\n}\n\nfunction toggleSelected<T>(id: T): (prev: T[]) => T[] {\n return (prev: T[]): T[] =>\n prev.indexOf(id) == -1 ? [...prev, id] : prev.filter((e) => e != id);\n}\n\nfunction Table({\n instances,\n onLoadMoreAfter,\n onDelete,\n onLoadMoreBefore,\n hasMoreAfter,\n hasMoreBefore,\n}: TableProps): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"table-container\">\n {onLoadMoreBefore && (\n <button\n class=\"button is-fullwidth\"\n data-tooltip={i18n.str`load more transfers before the first one`}\n disabled={!hasMoreBefore}\n onClick={onLoadMoreBefore}\n >\n <i18n.Translate>load newer transfers</i18n.Translate>\n </button>\n )}\n <table class=\"table is-fullwidth is-striped is-hoverable is-fullwidth\">\n <thead>\n <tr>\n <th>\n <i18n.Translate>ID</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Credit</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Address</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Exchange URL</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Confirmed</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Verified</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Executed at</i18n.Translate>\n </th>\n <th />\n </tr>\n </thead>\n <tbody>\n {instances.map((i) => {\n return (\n <tr key={i.id}>\n <td>{i.id}</td>\n <td>{i.credit_amount}</td>\n <td>{i.payto_uri}</td>\n <td>{i.exchange_url}</td>\n <td>{i.confirmed ? i18n.str`yes` : i18n.str`no`}</td>\n <td>{i.verified ? i18n.str`yes` : i18n.str`no`}</td>\n <td>\n {i.execution_time\n ? i.execution_time.t_s == \"never\"\n ? i18n.str`never`\n : format(\n i.execution_time.t_s * 1000,\n \"yyyy/MM/dd HH:mm:ss\",\n )\n : i18n.str`unknown`}\n </td>\n <td>\n {i.verified === undefined ? (\n <button\n class=\"button is-danger is-small has-tooltip-left\"\n data-tooltip={i18n.str`delete selected transfer from the database`}\n onClick={() => onDelete(i)}\n >\n Delete\n </button>\n ) : undefined}\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n {onLoadMoreAfter && (\n <button\n class=\"button is-fullwidth\"\n data-tooltip={i18n.str`load more transfer after the last one`}\n disabled={!hasMoreAfter}\n onClick={onLoadMoreAfter}\n >\n <i18n.Translate>load older transfers</i18n.Translate>\n </button>\n )}\n </div>\n );\n}\n\nfunction EmptyTable(): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"content has-text-grey has-text-centered\">\n <p>\n <span class=\"icon is-large\">\n <i class=\"mdi mdi-emoticon-sad mdi-48px\" />\n </span>\n </p>\n <p>\n <i18n.Translate>\n There is no transfer yet, add more pressing the + sign\n </i18n.Translate>\n </p>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { FormProvider } from \"../../../../components/form/FormProvider.js\";\nimport { InputSelector } from \"../../../../components/form/InputSelector.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport { CardTable } from \"./Table.js\";\n\nexport interface Props {\n transfers: MerchantBackend.Transfers.TransferDetails[];\n onLoadMoreBefore?: () => void;\n onLoadMoreAfter?: () => void;\n onShowAll: () => void;\n onShowVerified: () => void;\n onShowUnverified: () => void;\n isVerifiedTransfers?: boolean;\n isNonVerifiedTransfers?: boolean;\n isAllTransfers?: boolean;\n accounts: string[];\n onChangePayTo: (p?: string) => void;\n payTo?: string;\n onCreate: () => void;\n onDelete: () => void;\n}\n\nexport function ListPage({\n payTo,\n onChangePayTo,\n transfers,\n onCreate,\n onDelete,\n accounts,\n onLoadMoreBefore,\n onLoadMoreAfter,\n isAllTransfers,\n isNonVerifiedTransfers,\n isVerifiedTransfers,\n onShowAll,\n onShowUnverified,\n onShowVerified,\n}: Props): VNode {\n const form = { payto_uri: payTo };\n\n const { i18n } = useTranslationContext();\n return (\n <section class=\"section is-main-section\">\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-10\">\n <FormProvider\n object={form}\n valueHandler={(updater) => onChangePayTo(updater(form).payto_uri)}\n >\n <InputSelector\n name=\"payto_uri\"\n label={i18n.str`Address`}\n values={accounts}\n placeholder={i18n.str`Select one account`}\n tooltip={i18n.str`filter by account address`}\n />\n </FormProvider>\n </div>\n <div class=\"column\" />\n </div>\n <div class=\"tabs\">\n <ul>\n <li class={isAllTransfers ? \"is-active\" : \"\"}>\n <div\n class=\"has-tooltip-right\"\n data-tooltip={i18n.str`remove all filters`}\n >\n <a onClick={onShowAll}>\n <i18n.Translate>All</i18n.Translate>\n </a>\n </div>\n </li>\n <li class={isVerifiedTransfers ? \"is-active\" : \"\"}>\n <div\n class=\"has-tooltip-right\"\n data-tooltip={i18n.str`only show wire transfers confirmed by the merchant`}\n >\n <a onClick={onShowVerified}>\n <i18n.Translate>Verified</i18n.Translate>\n </a>\n </div>\n </li>\n <li class={isNonVerifiedTransfers ? \"is-active\" : \"\"}>\n <div\n class=\"has-tooltip-right\"\n data-tooltip={i18n.str`only show wire transfers claimed by the exchange`}\n >\n <a onClick={onShowUnverified}>\n <i18n.Translate>Unverified</i18n.Translate>\n </a>\n </div>\n </li>\n </ul>\n </div>\n <CardTable\n transfers={transfers.map((o) => ({\n ...o,\n id: String(o.transfer_serial_id),\n }))}\n accounts={accounts}\n onCreate={onCreate}\n onDelete={onDelete}\n onLoadMoreBefore={onLoadMoreBefore}\n hasMoreBefore={!onLoadMoreBefore}\n onLoadMoreAfter={onLoadMoreAfter}\n hasMoreAfter={!onLoadMoreAfter}\n />\n </section>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { HttpError } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport { useInstanceDetails } from \"../../../../hooks/instance.js\";\nimport { useInstanceTransfers } from \"../../../../hooks/transfer.js\";\nimport { ListPage } from \"./ListPage.js\";\n\ninterface Props {\n onUnauthorized: () => VNode;\n onLoadError: (error: HttpError<MerchantBackend.ErrorDetail>) => VNode;\n onNotFound: () => VNode;\n onCreate: () => void;\n}\ninterface Form {\n verified?: \"yes\" | \"no\";\n payto_uri?: string;\n}\n\nexport default function ListTransfer({\n onUnauthorized,\n onLoadError,\n onCreate,\n onNotFound,\n}: Props): VNode {\n const [form, setForm] = useState<Form>({ payto_uri: \"\" });\n const setFilter = (s?: \"yes\" | \"no\") => setForm({ ...form, verified: s });\n\n const [position, setPosition] = useState<string | undefined>(undefined);\n\n const instance = useInstanceDetails();\n const accounts = !instance.ok\n ? []\n : instance.data.accounts.map((a) => a.payto_uri);\n\n const isVerifiedTransfers = form.verified === \"yes\";\n const isNonVerifiedTransfers = form.verified === \"no\";\n const isAllTransfers = form.verified === undefined;\n\n const result = useInstanceTransfers(\n {\n position,\n payto_uri: form.payto_uri === \"\" ? undefined : form.payto_uri,\n verified: form.verified,\n },\n (id) => setPosition(id),\n );\n\n if (result.clientError && result.isUnauthorized) return onUnauthorized();\n if (result.clientError && result.isNotfound) return onNotFound();\n if (result.loading) return <Loading />;\n if (!result.ok) return onLoadError(result);\n\n return (\n <ListPage\n accounts={accounts}\n transfers={result.data.transfers}\n onLoadMoreBefore={\n result.isReachingStart ? result.loadMorePrev : undefined\n }\n onLoadMoreAfter={result.isReachingEnd ? result.loadMore : undefined}\n onCreate={onCreate}\n onDelete={() => {\n null;\n }}\n // position={position} setPosition={setPosition}\n onShowAll={() => setFilter(undefined)}\n onShowUnverified={() => setFilter(\"no\")}\n onShowVerified={() => setFilter(\"yes\")}\n isAllTransfers={isAllTransfers}\n isVerifiedTransfers={isVerifiedTransfers}\n isNonVerifiedTransfers={isNonVerifiedTransfers}\n payTo={form.payto_uri}\n onChangePayTo={(p) => setForm((v) => ({ ...v, payto_uri: p }))}\n />\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { Amounts } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { AsyncButton } from \"../../../components/exception/AsyncButton.js\";\nimport {\n FormErrors,\n FormProvider,\n} from \"../../../components/form/FormProvider.js\";\nimport { DefaultInstanceFormFields } from \"../../../components/instance/DefaultInstanceFormFields.js\";\nimport { UpdateTokenModal } from \"../../../components/modal/index.js\";\nimport { useInstanceContext } from \"../../../context/instance.js\";\nimport { MerchantBackend } from \"../../../declaration.js\";\nimport { PAYTO_REGEX } from \"../../../utils/constants.js\";\nimport { undefinedIfEmpty } from \"../../../utils/table.js\";\n\ntype Entity = MerchantBackend.Instances.InstanceReconfigurationMessage & {\n auth_token?: string;\n};\n\n//MerchantBackend.Instances.InstanceAuthConfigurationMessage\ninterface Props {\n onUpdate: (d: Entity) => void;\n onChangeAuth: (\n d: MerchantBackend.Instances.InstanceAuthConfigurationMessage,\n ) => Promise<void>;\n selected: MerchantBackend.Instances.QueryInstancesResponse;\n isLoading: boolean;\n onBack: () => void;\n}\n\nfunction convert(\n from: MerchantBackend.Instances.QueryInstancesResponse,\n): Entity {\n const { accounts, ...rest } = from;\n const payto_uris = accounts.filter((a) => a.active).map((a) => a.payto_uri);\n const defaults = {\n default_wire_fee_amortization: 1,\n default_pay_delay: { d_us: 2 * 1000 * 1000 * 60 * 60 }, //two hours\n default_wire_transfer_delay: { d_us: 2 * 1000 * 1000 * 60 * 60 * 2 }, //two hours\n };\n return { ...defaults, ...rest, payto_uris };\n}\n\nfunction getTokenValuePart(t?: string): string | undefined {\n if (!t) return t;\n const match = /secret-token:(.*)/.exec(t);\n if (!match || !match[1]) return undefined;\n return match[1];\n}\n\nexport function UpdatePage({\n onUpdate,\n onChangeAuth,\n selected,\n onBack,\n}: Props): VNode {\n const { id, token } = useInstanceContext();\n const currentTokenValue = getTokenValuePart(token);\n\n function updateToken(token: string | undefined | null) {\n const value =\n token && token.startsWith(\"secret-token:\")\n ? token.substring(\"secret-token:\".length)\n : token;\n\n if (!token) {\n onChangeAuth({ method: \"external\" });\n } else {\n onChangeAuth({ method: \"token\", token: `secret-token:${value}` });\n }\n }\n\n const [value, valueHandler] = useState<Partial<Entity>>(convert(selected));\n\n const { i18n } = useTranslationContext();\n\n const errors: FormErrors<Entity> = {\n name: !value.name ? i18n.str`required` : undefined,\n payto_uris:\n !value.payto_uris || !value.payto_uris.length\n ? i18n.str`required`\n : undefinedIfEmpty(\n value.payto_uris.map((p) => {\n return !PAYTO_REGEX.test(p) ? i18n.str`is not valid` : undefined;\n }),\n ),\n default_max_deposit_fee: !value.default_max_deposit_fee\n ? i18n.str`required`\n : !Amounts.parse(value.default_max_deposit_fee)\n ? i18n.str`invalid format`\n : undefined,\n default_max_wire_fee: !value.default_max_wire_fee\n ? i18n.str`required`\n : !Amounts.parse(value.default_max_wire_fee)\n ? i18n.str`invalid format`\n : undefined,\n default_wire_fee_amortization:\n value.default_wire_fee_amortization === undefined\n ? i18n.str`required`\n : isNaN(value.default_wire_fee_amortization)\n ? i18n.str`is not a number`\n : value.default_wire_fee_amortization < 1\n ? i18n.str`must be 1 or greater`\n : undefined,\n default_pay_delay: !value.default_pay_delay\n ? i18n.str`required`\n : undefined,\n default_wire_transfer_delay: !value.default_wire_transfer_delay\n ? i18n.str`required`\n : undefined,\n address: undefinedIfEmpty({\n address_lines:\n value.address?.address_lines && value.address?.address_lines.length > 7\n ? i18n.str`max 7 lines`\n : undefined,\n }),\n jurisdiction: undefinedIfEmpty({\n address_lines:\n value.address?.address_lines && value.address?.address_lines.length > 7\n ? i18n.str`max 7 lines`\n : undefined,\n }),\n };\n\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n const submit = async (): Promise<void> => {\n await onUpdate(value as Entity);\n };\n const [active, setActive] = useState(false);\n\n return (\n <div>\n <section class=\"section\">\n <section class=\"hero is-hero-bar\">\n <div class=\"hero-body\">\n <div class=\"level\">\n <div class=\"level-left\">\n <div class=\"level-item\">\n <span class=\"is-size-4\">\n <i18n.Translate>Instance id</i18n.Translate>: <b>{id}</b>\n </span>\n </div>\n </div>\n <div class=\"level-right\">\n <div class=\"level-item\">\n <h1 class=\"title\">\n <button\n class=\"button is-danger\"\n data-tooltip={i18n.str`Change the authorization method use for this instance.`}\n onClick={(): void => {\n setActive(!active);\n }}\n >\n <div class=\"icon is-left\">\n <i class=\"mdi mdi-lock-reset\" />\n </div>\n <span>\n <i18n.Translate>Manage access token</i18n.Translate>\n </span>\n </button>\n </h1>\n </div>\n </div>\n </div>\n </div>\n </section>\n\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-four-fifths\">\n {active && (\n <UpdateTokenModal\n oldToken={currentTokenValue}\n onCancel={() => {\n setActive(false);\n }}\n onClear={() => {\n updateToken(null);\n setActive(false);\n }}\n onConfirm={(newToken) => {\n updateToken(newToken);\n setActive(false);\n }}\n />\n )}\n </div>\n <div class=\"column\" />\n </div>\n <hr />\n\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-four-fifths\">\n <FormProvider<Entity>\n errors={errors}\n object={value}\n valueHandler={valueHandler}\n >\n <DefaultInstanceFormFields showId={false} />\n </FormProvider>\n\n <div class=\"buttons is-right mt-4\">\n <button\n class=\"button\"\n onClick={onBack}\n data-tooltip=\"cancel operation\"\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n\n <AsyncButton\n onClick={submit}\n data-tooltip={\n hasErrors\n ? i18n.str`Need to complete marked fields`\n : \"confirm operation\"\n }\n disabled={hasErrors}\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </AsyncButton>\n </div>\n </div>\n <div class=\"column\" />\n </div>\n </section>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\nimport {\n HttpError,\n HttpResponse,\n useTranslationContext,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { Loading } from \"../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../components/menu/index.js\";\nimport { useInstanceContext } from \"../../../context/instance.js\";\nimport { MerchantBackend } from \"../../../declaration.js\";\nimport {\n useInstanceAPI,\n useInstanceDetails,\n useManagedInstanceDetails,\n useManagementAPI,\n} from \"../../../hooks/instance.js\";\nimport { Notification } from \"../../../utils/types.js\";\nimport { UpdatePage } from \"./UpdatePage.js\";\n\nexport interface Props {\n onBack: () => void;\n onConfirm: () => void;\n\n onUnauthorized: () => VNode;\n onNotFound: () => VNode;\n onLoadError: (e: HttpError<MerchantBackend.ErrorDetail>) => VNode;\n onUpdateError: (e: HttpError<MerchantBackend.ErrorDetail>) => void;\n}\n\nexport default function Update(props: Props): VNode {\n const { updateInstance, clearToken, setNewToken } = useInstanceAPI();\n const result = useInstanceDetails();\n return CommonUpdate(props, result, updateInstance, clearToken, setNewToken);\n}\n\nexport function AdminUpdate(props: Props & { instanceId: string }): VNode {\n const { updateInstance, clearToken, setNewToken } = useManagementAPI(\n props.instanceId,\n );\n const result = useManagedInstanceDetails(props.instanceId);\n return CommonUpdate(props, result, updateInstance, clearToken, setNewToken);\n}\n\nfunction CommonUpdate(\n {\n onBack,\n onConfirm,\n onLoadError,\n onNotFound,\n onUpdateError,\n onUnauthorized,\n }: Props,\n result: HttpResponse<\n MerchantBackend.Instances.QueryInstancesResponse,\n MerchantBackend.ErrorDetail\n >,\n updateInstance: any,\n clearToken: any,\n setNewToken: any,\n): VNode {\n const { changeToken } = useInstanceContext();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { i18n } = useTranslationContext();\n\n if (result.clientError && result.isUnauthorized) return onUnauthorized();\n if (result.clientError && result.isNotfound) return onNotFound();\n if (result.loading) return <Loading />;\n if (!result.ok) return onLoadError(result);\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n <UpdatePage\n onBack={onBack}\n isLoading={false}\n selected={result.data}\n onUpdate={(\n d: MerchantBackend.Instances.InstanceReconfigurationMessage,\n ): Promise<void> => {\n return updateInstance(d)\n .then(onConfirm)\n .catch((error: Error) =>\n setNotif({\n message: i18n.str`Failed to create instance`,\n type: \"ERROR\",\n description: error.message,\n }),\n );\n }}\n onChangeAuth={(\n d: MerchantBackend.Instances.InstanceAuthConfigurationMessage,\n ): Promise<void> => {\n const apiCall =\n d.method === \"external\" ? clearToken() : setNewToken(d.token!);\n return apiCall\n .then(() => changeToken(d.token))\n .then(onConfirm)\n .catch(onUpdateError);\n }}\n />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { useBackendContext } from \"../../context/backend.js\";\nimport { useInstanceContext } from \"../../context/instance.js\";\nimport { Notification } from \"../../utils/types.js\";\n\ninterface Props {\n withMessage?: Notification;\n onConfirm: (backend: string, token?: string) => void;\n}\n\nfunction getTokenValuePart(t?: string): string | undefined {\n if (!t) return t;\n const match = /secret-token:(.*)/.exec(t);\n if (!match || !match[1]) return undefined;\n return match[1];\n}\n\nfunction normalizeToken(r: string | undefined): string | undefined {\n return r ? `secret-token:${encodeURIComponent(r)}` : undefined;\n}\n\nfunction cleanUp(s: string): string {\n let result = s;\n if (result.indexOf(\"webui/\") !== -1) {\n result = result.substring(0, result.indexOf(\"webui/\"));\n }\n return result;\n}\n\nexport function LoginModal({ onConfirm, withMessage }: Props): VNode {\n const { url: backendUrl, token: baseToken } = useBackendContext();\n const { admin, token: instanceToken } = useInstanceContext();\n const currentToken = getTokenValuePart(\n !admin ? baseToken : instanceToken || \"\",\n );\n const [token, setToken] = useState(currentToken);\n\n const [url, setURL] = useState(cleanUp(backendUrl));\n const { i18n } = useTranslationContext();\n\n return (\n <div class=\"columns is-centered\" style={{ margin: \"auto\" }}>\n <div class=\"column is-two-thirds \">\n <div class=\"modal-card\" style={{ width: \"100%\", margin: 0 }}>\n <header\n class=\"modal-card-head\"\n style={{ border: \"1px solid\", borderBottom: 0 }}\n >\n <p class=\"modal-card-title\">{i18n.str`Login required`}</p>\n </header>\n <section\n class=\"modal-card-body\"\n style={{ border: \"1px solid\", borderTop: 0, borderBottom: 0 }}\n >\n <i18n.Translate>Please enter your access token.</i18n.Translate>\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">URL</label>\n </div>\n <div class=\"field-body\">\n <div class=\"field\">\n <p class=\"control is-expanded\">\n <input\n class=\"input\"\n type=\"text\"\n placeholder=\"set new url\"\n name=\"id\"\n value={url}\n onKeyPress={(e) =>\n e.keyCode === 13\n ? onConfirm(url, normalizeToken(token))\n : null\n }\n onInput={(e): void => setURL(e?.currentTarget.value)}\n />\n </p>\n </div>\n </div>\n </div>\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">\n <i18n.Translate>Access Token</i18n.Translate>\n </label>\n </div>\n <div class=\"field-body\">\n <div class=\"field\">\n <p class=\"control is-expanded\">\n <input\n class=\"input\"\n type=\"password\"\n placeholder={\"set new access token\"}\n name=\"token\"\n onKeyPress={(e) =>\n e.keyCode === 13\n ? onConfirm(url, normalizeToken(token))\n : null\n }\n value={token}\n onInput={(e): void => setToken(e?.currentTarget.value)}\n />\n </p>\n </div>\n </div>\n </div>\n </section>\n <footer\n class=\"modal-card-foot \"\n style={{\n justifyContent: \"flex-end\",\n border: \"1px solid\",\n borderTop: 0,\n }}\n >\n <button\n class=\"button is-info\"\n onClick={(): void => {\n onConfirm(url, normalizeToken(token));\n }}\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </button>\n </footer>\n </div>\n </div>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { h, VNode } from \"preact\";\nimport { LoginModal } from \"../../components/exception/login.js\";\n\ninterface Props {\n onConfirm: (url: string, token?: string) => void;\n}\nexport default function LoginPage({ onConfirm }: Props): VNode {\n return <LoginModal onConfirm={onConfirm} />;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { h, VNode } from \"preact\";\nimport { Link } from \"preact-router\";\n\nexport default function NotFoundPage(): VNode {\n return (\n <div>\n <h1>Error 404</h1>\n <p>That page doesn&apos;t exist.</p>\n <Link href=\"/\">\n <h4>Back to Home</h4>\n </Link>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport {\n useTranslationContext,\n HttpError,\n ErrorType,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { format } from \"date-fns\";\nimport { Fragment, FunctionComponent, h, VNode } from \"preact\";\nimport { Route, route, Router } from \"preact-router\";\nimport { useCallback, useEffect, useMemo, useState } from \"preact/hooks\";\nimport { Loading } from \"./components/exception/loading.js\";\nimport { Menu, NotificationCard } from \"./components/menu/index.js\";\nimport { useBackendContext } from \"./context/backend.js\";\nimport { InstanceContextProvider } from \"./context/instance.js\";\nimport {\n useBackendDefaultToken,\n useBackendInstanceToken,\n useLocalStorage,\n} from \"./hooks/index.js\";\nimport { useInstanceKYCDetails } from \"./hooks/instance.js\";\nimport InstanceCreatePage from \"./paths/admin/create/index.js\";\nimport InstanceListPage from \"./paths/admin/list/index.js\";\nimport ListKYCPage from \"./paths/instance/kyc/list/index.js\";\nimport OrderCreatePage from \"./paths/instance/orders/create/index.js\";\nimport OrderDetailsPage from \"./paths/instance/orders/details/index.js\";\nimport OrderListPage from \"./paths/instance/orders/list/index.js\";\nimport ProductCreatePage from \"./paths/instance/products/create/index.js\";\nimport ProductListPage from \"./paths/instance/products/list/index.js\";\nimport ProductUpdatePage from \"./paths/instance/products/update/index.js\";\nimport ReservesCreatePage from \"./paths/instance/reserves/create/index.js\";\nimport ReservesDetailsPage from \"./paths/instance/reserves/details/index.js\";\nimport ReservesListPage from \"./paths/instance/reserves/list/index.js\";\nimport TemplateCreatePage from \"./paths/instance/templates/create/index.js\";\nimport TemplateUsePage from \"./paths/instance/templates/use/index.js\";\nimport TemplateQrPage from \"./paths/instance/templates/qr/index.js\";\nimport TemplateListPage from \"./paths/instance/templates/list/index.js\";\nimport TemplateUpdatePage from \"./paths/instance/templates/update/index.js\";\nimport WebhookCreatePage from \"./paths/instance/webhooks/create/index.js\";\nimport WebhookListPage from \"./paths/instance/webhooks/list/index.js\";\nimport WebhookUpdatePage from \"./paths/instance/webhooks/update/index.js\";\nimport TransferCreatePage from \"./paths/instance/transfers/create/index.js\";\nimport TransferListPage from \"./paths/instance/transfers/list/index.js\";\nimport InstanceUpdatePage, {\n AdminUpdate as InstanceAdminUpdatePage,\n Props as InstanceUpdatePageProps,\n} from \"./paths/instance/update/index.js\";\nimport LoginPage from \"./paths/login/index.js\";\nimport NotFoundPage from \"./paths/notfound/index.js\";\nimport { Notification } from \"./utils/types.js\";\nimport { MerchantBackend } from \"./declaration.js\";\n\nexport enum InstancePaths {\n // details = '/',\n error = \"/error\",\n update = \"/update\",\n\n product_list = \"/products\",\n product_update = \"/product/:pid/update\",\n product_new = \"/product/new\",\n\n order_list = \"/orders\",\n order_new = \"/order/new\",\n order_details = \"/order/:oid/details\",\n\n reserves_list = \"/reserves\",\n reserves_details = \"/reserves/:rid/details\",\n reserves_new = \"/reserves/new\",\n\n kyc = \"/kyc\",\n\n transfers_list = \"/transfers\",\n transfers_new = \"/transfer/new\",\n\n templates_list = \"/templates\",\n templates_update = \"/templates/:tid/update\",\n templates_new = \"/templates/new\",\n templates_use = \"/templates/:tid/use\",\n templates_qr = \"/templates/:tid/qr\",\n\n webhooks_list = \"/webhooks\",\n webhooks_update = \"/webhooks/:tid/update\",\n webhooks_new = \"/webhooks/new\",\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst noop = () => {};\n\nexport enum AdminPaths {\n list_instances = \"/instances\",\n new_instance = \"/instance/new\",\n update_instance = \"/instance/:id/update\",\n}\n\nexport interface Props {\n id: string;\n admin?: boolean;\n path: string;\n setInstanceName: (s: string) => void;\n}\n\nexport function InstanceRoutes({\n id,\n admin,\n path,\n setInstanceName,\n}: Props): VNode {\n const [_, updateDefaultToken] = useBackendDefaultToken();\n const [token, updateToken] = useBackendInstanceToken(id);\n const {\n updateLoginStatus: changeBackend,\n addTokenCleaner,\n clearAllTokens,\n } = useBackendContext();\n const cleaner = useCallback(() => {\n updateToken(undefined);\n }, [id]);\n const { i18n } = useTranslationContext();\n\n type GlobalNotifState = (Notification & { to: string }) | undefined;\n const [globalNotification, setGlobalNotification] =\n useState<GlobalNotifState>(undefined);\n\n useEffect(() => {\n addTokenCleaner(cleaner);\n }, [addTokenCleaner, cleaner]);\n\n const changeToken = (token?: string) => {\n if (admin) {\n updateToken(token);\n } else {\n updateDefaultToken(token);\n }\n };\n const updateLoginStatus = (url: string, token?: string) => {\n changeBackend(url);\n if (!token) return;\n changeToken(token);\n };\n\n const value = useMemo(\n () => ({ id, token, admin, changeToken }),\n [id, token, admin],\n );\n\n function ServerErrorRedirectTo(to: InstancePaths | AdminPaths) {\n return function ServerErrorRedirectToImpl(\n error: HttpError<MerchantBackend.ErrorDetail>,\n ) {\n if (error.type === ErrorType.TIMEOUT) {\n setGlobalNotification({\n message: i18n.str`The request to the backend take too long and was cancelled`,\n description: i18n.str`Diagnostic from ${error.info?.url} is '${error.message}'`,\n type: \"ERROR\",\n to,\n });\n } else {\n setGlobalNotification({\n message: i18n.str`The backend reported a problem: HTTP status #${error.status}`,\n description: i18n.str`Diagnostic from ${error.info?.url} is '${error.message}'`,\n details:\n error.clientError || error.serverError\n ? error.error?.detail\n : undefined,\n type: \"ERROR\",\n to,\n });\n }\n return <Redirect to={to} />;\n };\n }\n\n const LoginPageAccessDenied = () => (\n <Fragment>\n <NotificationCard\n notification={{\n message: i18n.str`Access denied`,\n description: i18n.str`The access token provided is invalid.`,\n type: \"ERROR\",\n }}\n />\n <LoginPage onConfirm={updateLoginStatus} />\n </Fragment>\n );\n\n function IfAdminCreateDefaultOr<T>(Next: FunctionComponent<any>) {\n return function IfAdminCreateDefaultOrImpl(props?: T) {\n if (admin && id === \"default\") {\n return (\n <Fragment>\n <NotificationCard\n notification={{\n message: i18n.str`No 'default' instance configured yet.`,\n description: i18n.str`Create a 'default' instance to begin using the merchant backoffice.`,\n type: \"INFO\",\n }}\n />\n <InstanceCreatePage\n forceId=\"default\"\n onConfirm={() => {\n route(AdminPaths.list_instances);\n }}\n />\n </Fragment>\n );\n }\n if (props) {\n return <Next {...props} />;\n }\n return <Next />;\n };\n }\n\n const clearTokenAndGoToRoot = () => {\n clearAllTokens();\n route(\"/\");\n };\n\n return (\n <InstanceContextProvider value={value}>\n <Menu\n instance={id}\n admin={admin}\n path={path}\n onLogout={clearTokenAndGoToRoot}\n setInstanceName={setInstanceName}\n />\n <KycBanner />\n <NotificationCard notification={globalNotification} />\n\n <Router\n onChange={(e) => {\n const movingOutFromNotification =\n globalNotification && e.url !== globalNotification.to;\n if (movingOutFromNotification) {\n setGlobalNotification(undefined);\n }\n }}\n >\n <Route path=\"/\" component={Redirect} to={InstancePaths.order_list} />\n {/**\n * Admin pages\n */}\n {admin && (\n <Route\n path={AdminPaths.list_instances}\n component={InstanceListPage}\n onCreate={() => {\n route(AdminPaths.new_instance);\n }}\n onUpdate={(id: string): void => {\n route(`/instance/${id}/update`);\n }}\n setInstanceName={setInstanceName}\n onUnauthorized={LoginPageAccessDenied}\n onLoadError={ServerErrorRedirectTo(InstancePaths.error)}\n />\n )}\n {admin && (\n <Route\n path={AdminPaths.new_instance}\n component={InstanceCreatePage}\n onBack={() => route(AdminPaths.list_instances)}\n onConfirm={() => {\n route(AdminPaths.list_instances);\n }}\n />\n )}\n {admin && (\n <Route\n path={AdminPaths.update_instance}\n component={AdminInstanceUpdatePage}\n onBack={() => route(AdminPaths.list_instances)}\n onConfirm={() => {\n route(AdminPaths.list_instances);\n }}\n onUpdateError={ServerErrorRedirectTo(AdminPaths.list_instances)}\n onLoadError={ServerErrorRedirectTo(AdminPaths.list_instances)}\n onNotFound={NotFoundPage}\n />\n )}\n {/**\n * Update instance page\n */}\n <Route\n path={InstancePaths.update}\n component={InstanceUpdatePage}\n onBack={() => {\n route(`/`);\n }}\n onConfirm={() => {\n route(`/`);\n }}\n onUpdateError={noop}\n onNotFound={IfAdminCreateDefaultOr(NotFoundPage)}\n onUnauthorized={LoginPageAccessDenied}\n onLoadError={ServerErrorRedirectTo(InstancePaths.error)}\n />\n {/**\n * Product pages\n */}\n <Route\n path={InstancePaths.product_list}\n component={ProductListPage}\n onUnauthorized={LoginPageAccessDenied}\n onLoadError={ServerErrorRedirectTo(InstancePaths.update)}\n onCreate={() => {\n route(InstancePaths.product_new);\n }}\n onSelect={(id: string) => {\n route(InstancePaths.product_update.replace(\":pid\", id));\n }}\n onNotFound={IfAdminCreateDefaultOr(NotFoundPage)}\n />\n <Route\n path={InstancePaths.product_update}\n component={ProductUpdatePage}\n onUnauthorized={LoginPageAccessDenied}\n onLoadError={ServerErrorRedirectTo(InstancePaths.product_list)}\n onConfirm={() => {\n route(InstancePaths.product_list);\n }}\n onBack={() => {\n route(InstancePaths.product_list);\n }}\n onNotFound={IfAdminCreateDefaultOr(NotFoundPage)}\n />\n <Route\n path={InstancePaths.product_new}\n component={ProductCreatePage}\n onConfirm={() => {\n route(InstancePaths.product_list);\n }}\n onBack={() => {\n route(InstancePaths.product_list);\n }}\n />\n {/**\n * Order pages\n */}\n <Route\n path={InstancePaths.order_list}\n component={OrderListPage}\n onCreate={() => {\n route(InstancePaths.order_new);\n }}\n onSelect={(id: string) => {\n route(InstancePaths.order_details.replace(\":oid\", id));\n }}\n onUnauthorized={LoginPageAccessDenied}\n onLoadError={ServerErrorRedirectTo(InstancePaths.update)}\n onNotFound={IfAdminCreateDefaultOr(NotFoundPage)}\n />\n <Route\n path={InstancePaths.order_details}\n component={OrderDetailsPage}\n onUnauthorized={LoginPageAccessDenied}\n onLoadError={ServerErrorRedirectTo(InstancePaths.order_list)}\n onNotFound={IfAdminCreateDefaultOr(NotFoundPage)}\n onBack={() => {\n route(InstancePaths.order_list);\n }}\n />\n <Route\n path={InstancePaths.order_new}\n component={OrderCreatePage}\n onConfirm={() => {\n route(InstancePaths.order_list);\n }}\n onBack={() => {\n route(InstancePaths.order_list);\n }}\n />\n {/**\n * Transfer pages\n */}\n <Route\n path={InstancePaths.transfers_list}\n component={TransferListPage}\n onUnauthorized={LoginPageAccessDenied}\n onNotFound={IfAdminCreateDefaultOr(NotFoundPage)}\n onLoadError={ServerErrorRedirectTo(InstancePaths.update)}\n onCreate={() => {\n route(InstancePaths.transfers_new);\n }}\n />\n <Route\n path={InstancePaths.transfers_new}\n component={TransferCreatePage}\n onConfirm={() => {\n route(InstancePaths.transfers_list);\n }}\n onBack={() => {\n route(InstancePaths.transfers_list);\n }}\n />\n {/**\n * Webhooks pages\n */}\n <Route\n path={InstancePaths.webhooks_list}\n component={WebhookListPage}\n onUnauthorized={LoginPageAccessDenied}\n onNotFound={IfAdminCreateDefaultOr(NotFoundPage)}\n onLoadError={ServerErrorRedirectTo(InstancePaths.update)}\n onCreate={() => {\n route(InstancePaths.webhooks_new);\n }}\n onSelect={(id: string) => {\n route(InstancePaths.webhooks_update.replace(\":tid\", id));\n }}\n />\n <Route\n path={InstancePaths.webhooks_update}\n component={WebhookUpdatePage}\n onConfirm={() => {\n route(InstancePaths.webhooks_list);\n }}\n onUnauthorized={LoginPageAccessDenied}\n onLoadError={ServerErrorRedirectTo(InstancePaths.webhooks_list)}\n onNotFound={IfAdminCreateDefaultOr(NotFoundPage)}\n onBack={() => {\n route(InstancePaths.webhooks_list);\n }}\n />\n <Route\n path={InstancePaths.webhooks_new}\n component={WebhookCreatePage}\n onConfirm={() => {\n route(InstancePaths.webhooks_list);\n }}\n onBack={() => {\n route(InstancePaths.webhooks_list);\n }}\n />\n {/**\n * Templates pages\n */}\n <Route\n path={InstancePaths.templates_list}\n component={TemplateListPage}\n onUnauthorized={LoginPageAccessDenied}\n onNotFound={IfAdminCreateDefaultOr(NotFoundPage)}\n onLoadError={ServerErrorRedirectTo(InstancePaths.update)}\n onCreate={() => {\n route(InstancePaths.templates_new);\n }}\n onNewOrder={(id: string) => {\n route(InstancePaths.templates_use.replace(\":tid\", id));\n }}\n onQR={(id: string) => {\n route(InstancePaths.templates_qr.replace(\":tid\", id));\n }}\n onSelect={(id: string) => {\n route(InstancePaths.templates_update.replace(\":tid\", id));\n }}\n />\n <Route\n path={InstancePaths.templates_update}\n component={TemplateUpdatePage}\n onConfirm={() => {\n route(InstancePaths.templates_list);\n }}\n onUnauthorized={LoginPageAccessDenied}\n onLoadError={ServerErrorRedirectTo(InstancePaths.templates_list)}\n onNotFound={IfAdminCreateDefaultOr(NotFoundPage)}\n onBack={() => {\n route(InstancePaths.templates_list);\n }}\n />\n <Route\n path={InstancePaths.templates_new}\n component={TemplateCreatePage}\n onConfirm={() => {\n route(InstancePaths.templates_list);\n }}\n onBack={() => {\n route(InstancePaths.templates_list);\n }}\n />\n <Route\n path={InstancePaths.templates_use}\n component={TemplateUsePage}\n onOrderCreated={(id: string) => {\n route(InstancePaths.order_details.replace(\":oid\", id));\n }}\n onUnauthorized={LoginPageAccessDenied}\n onLoadError={ServerErrorRedirectTo(InstancePaths.templates_list)}\n onNotFound={IfAdminCreateDefaultOr(NotFoundPage)}\n onBack={() => {\n route(InstancePaths.templates_list);\n }}\n />\n <Route\n path={InstancePaths.templates_qr}\n component={TemplateQrPage}\n onUnauthorized={LoginPageAccessDenied}\n onLoadError={ServerErrorRedirectTo(InstancePaths.templates_list)}\n onNotFound={IfAdminCreateDefaultOr(NotFoundPage)}\n onBack={() => {\n route(InstancePaths.templates_list);\n }}\n />\n\n {/**\n * reserves pages\n */}\n <Route\n path={InstancePaths.reserves_list}\n component={ReservesListPage}\n onUnauthorized={LoginPageAccessDenied}\n onNotFound={IfAdminCreateDefaultOr(NotFoundPage)}\n onLoadError={ServerErrorRedirectTo(InstancePaths.update)}\n onSelect={(id: string) => {\n route(InstancePaths.reserves_details.replace(\":rid\", id));\n }}\n onCreate={() => {\n route(InstancePaths.reserves_new);\n }}\n />\n <Route\n path={InstancePaths.reserves_details}\n component={ReservesDetailsPage}\n onUnauthorized={LoginPageAccessDenied}\n onLoadError={ServerErrorRedirectTo(InstancePaths.reserves_list)}\n onNotFound={IfAdminCreateDefaultOr(NotFoundPage)}\n onBack={() => {\n route(InstancePaths.reserves_list);\n }}\n />\n <Route\n path={InstancePaths.reserves_new}\n component={ReservesCreatePage}\n onConfirm={() => {\n route(InstancePaths.reserves_list);\n }}\n onBack={() => {\n route(InstancePaths.reserves_list);\n }}\n />\n <Route path={InstancePaths.kyc} component={ListKYCPage} />\n {/**\n * Example pages\n */}\n <Route path=\"/loading\" component={Loading} />\n <Route default component={NotFoundPage} />\n </Router>\n </InstanceContextProvider>\n );\n}\n\nexport function Redirect({ to }: { to: string }): null {\n useEffect(() => {\n route(to, true);\n });\n return null;\n}\n\nfunction AdminInstanceUpdatePage({\n id,\n ...rest\n}: { id: string } & InstanceUpdatePageProps): VNode {\n const [token, changeToken] = useBackendInstanceToken(id);\n const { updateLoginStatus: changeBackend } = useBackendContext();\n const updateLoginStatus = (url: string, token?: string): void => {\n changeBackend(url);\n if (token) changeToken(token);\n };\n const value = useMemo(\n () => ({ id, token, admin: true, changeToken }),\n [id, token],\n );\n const { i18n } = useTranslationContext();\n\n return (\n <InstanceContextProvider value={value}>\n <InstanceAdminUpdatePage\n {...rest}\n instanceId={id}\n onLoadError={(error: HttpError<MerchantBackend.ErrorDetail>) => {\n const notif =\n error.type === ErrorType.TIMEOUT\n ? {\n message: i18n.str`The request to the backend take too long and was cancelled`,\n description: i18n.str`Diagnostic from ${error.info?.url} is '${error.message}'`,\n type: \"ERROR\" as const,\n }\n : {\n message: i18n.str`The backend reported a problem: HTTP status #${error.status}`,\n description: i18n.str`Diagnostic from ${error.info?.url} is '${error.message}'`,\n details:\n error.clientError || error.serverError\n ? error.error?.detail\n : undefined,\n type: \"ERROR\" as const,\n };\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n <LoginPage onConfirm={updateLoginStatus} />\n </Fragment>\n );\n }}\n onUnauthorized={() => {\n return (\n <Fragment>\n <NotificationCard\n notification={{\n message: i18n.str`Access denied`,\n description: i18n.str`The access token provided is invalid`,\n type: \"ERROR\",\n }}\n />\n <LoginPage onConfirm={updateLoginStatus} />\n </Fragment>\n );\n }}\n />\n </InstanceContextProvider>\n );\n}\n\nfunction KycBanner(): VNode {\n const kycStatus = useInstanceKYCDetails();\n const { i18n } = useTranslationContext();\n const today = format(new Date(), \"yyyy-MM-dd\");\n const [lastHide, setLastHide] = useLocalStorage(\"kyc-last-hide\");\n const hasBeenHidden = today === lastHide;\n const needsToBeShown = kycStatus.ok && kycStatus.data.type === \"redirect\";\n if (hasBeenHidden || !needsToBeShown) return <Fragment />;\n return (\n <NotificationCard\n notification={{\n type: \"WARN\",\n message: \"KYC verification needed\",\n description: (\n <div>\n <p>\n Some transfer are on hold until a KYC process is completed. Go to\n the KYC section in the left panel for more information\n </p>\n <div class=\"buttons is-right\">\n <button class=\"button\" onClick={() => setLastHide(today)}>\n <i18n.Translate>Hide for today</i18n.Translate>\n </button>\n </div>\n </div>\n ),\n }}\n />\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/*eslint quote-props: [\"error\", \"consistent\"]*/\nexport const strings: {[s: string]: any} = {};\n\nstrings['de'] = {\n \"domain\": \"messages\",\n \"locale_data\": {\n \"messages\": {\n \"\": {\n \"domain\": \"messages\",\n \"plural_forms\": \"nplurals=2; plural=(n != 1);\",\n \"lang\": \"\"\n },\n \"Cancel\": [\n \"\"\n ],\n \"%1$s\": [\n \"\"\n ],\n \"Continue\": [\n \"\"\n ],\n \"Clear\": [\n \"\"\n ],\n \"Confirm\": [\n \"\"\n ],\n \"is not the same as the current access token\": [\n \"\"\n ],\n \"cannot be empty\": [\n \"\"\n ],\n \"cannot be the same as the old token\": [\n \"\"\n ],\n \"is not the same\": [\n \"\"\n ],\n \"You are updating the access token from instance with id %1$s\": [\n \"\"\n ],\n \"Old access token\": [\n \"\"\n ],\n \"access token currently in use\": [\n \"\"\n ],\n \"New access token\": [\n \"\"\n ],\n \"next access token to be used\": [\n \"\"\n ],\n \"Repeat access token\": [\n \"\"\n ],\n \"confirm the same access token\": [\n \"\"\n ],\n \"Clearing the access token will mean public access to the instance\": [\n \"\"\n ],\n \"cannot be the same as the old access token\": [\n \"\"\n ],\n \"You are setting the access token for the new instance\": [\n \"\"\n ],\n \"With external authorization method no check will be done by the merchant backend\": [\n \"\"\n ],\n \"Set external authorization\": [\n \"\"\n ],\n \"Set access token\": [\n \"\"\n ],\n \"Operation in progress...\": [\n \"\"\n ],\n \"The operation will be automatically canceled after %1$s seconds\": [\n \"\"\n ],\n \"Instances\": [\n \"\"\n ],\n \"Delete\": [\n \"\"\n ],\n \"add new instance\": [\n \"\"\n ],\n \"ID\": [\n \"\"\n ],\n \"Name\": [\n \"\"\n ],\n \"Edit\": [\n \"\"\n ],\n \"Purge\": [\n \"\"\n ],\n \"There is no instances yet, add more pressing the + sign\": [\n \"\"\n ],\n \"Only show active instances\": [\n \"\"\n ],\n \"Active\": [\n \"\"\n ],\n \"Only show deleted instances\": [\n \"\"\n ],\n \"Deleted\": [\n \"\"\n ],\n \"Show all instances\": [\n \"\"\n ],\n \"All\": [\n \"\"\n ],\n \"Instance '%1$s' (ID: %2$s) has been deleted\": [\n \"\"\n ],\n \"Failed to delete instance\": [\n \"\"\n ],\n \"Instance '%1$s' (ID: %2$s) has been disabled\": [\n \"\"\n ],\n \"Failed to purge instance\": [\n \"\"\n ],\n \"Pending KYC verification\": [\n \"\"\n ],\n \"Timed out\": [\n \"\"\n ],\n \"Exchange\": [\n \"\"\n ],\n \"Target account\": [\n \"\"\n ],\n \"KYC URL\": [\n \"\"\n ],\n \"Code\": [\n \"\"\n ],\n \"Http Status\": [\n \"\"\n ],\n \"No pending kyc verification!\": [\n \"\"\n ],\n \"change value to unknown date\": [\n \"\"\n ],\n \"change value to empty\": [\n \"\"\n ],\n \"clear\": [\n \"\"\n ],\n \"change value to never\": [\n \"\"\n ],\n \"never\": [\n \"\"\n ],\n \"Country\": [\n \"\"\n ],\n \"Address\": [\n \"\"\n ],\n \"Building number\": [\n \"\"\n ],\n \"Building name\": [\n \"\"\n ],\n \"Street\": [\n \"\"\n ],\n \"Post code\": [\n \"\"\n ],\n \"Town location\": [\n \"\"\n ],\n \"Town\": [\n \"\"\n ],\n \"District\": [\n \"\"\n ],\n \"Country subdivision\": [\n \"\"\n ],\n \"Product id\": [\n \"\"\n ],\n \"Description\": [\n \"\"\n ],\n \"Product\": [\n \"\"\n ],\n \"search products by it's description or id\": [\n \"\"\n ],\n \"no products found with that description\": [\n \"\"\n ],\n \"You must enter a valid product identifier.\": [\n \"\"\n ],\n \"Quantity must be greater than 0!\": [\n \"\"\n ],\n \"This quantity exceeds remaining stock. Currently, only %1$s units remain unreserved in stock.\": [\n \"\"\n ],\n \"Quantity\": [\n \"\"\n ],\n \"how many products will be added\": [\n \"\"\n ],\n \"Add from inventory\": [\n \"\"\n ],\n \"Image should be smaller than 1 MB\": [\n \"\"\n ],\n \"Add\": [\n \"\"\n ],\n \"Remove\": [\n \"\"\n ],\n \"No taxes configured for this product.\": [\n \"\"\n ],\n \"Amount\": [\n \"\"\n ],\n \"Taxes can be in currencies that differ from the main currency used by the merchant.\": [\n \"\"\n ],\n \"Enter currency and value separated with a colon, e.g. &quot;USD:2.3&quot;.\": [\n \"\"\n ],\n \"Legal name of the tax, e.g. VAT or import duties.\": [\n \"\"\n ],\n \"add tax to the tax list\": [\n \"\"\n ],\n \"describe and add a product that is not in the inventory list\": [\n \"\"\n ],\n \"Add custom product\": [\n \"\"\n ],\n \"Complete information of the product\": [\n \"\"\n ],\n \"Image\": [\n \"\"\n ],\n \"photo of the product\": [\n \"\"\n ],\n \"full product description\": [\n \"\"\n ],\n \"Unit\": [\n \"\"\n ],\n \"name of the product unit\": [\n \"\"\n ],\n \"Price\": [\n \"\"\n ],\n \"amount in the current currency\": [\n \"\"\n ],\n \"Taxes\": [\n \"\"\n ],\n \"image\": [\n \"\"\n ],\n \"description\": [\n \"\"\n ],\n \"quantity\": [\n \"\"\n ],\n \"unit price\": [\n \"\"\n ],\n \"total price\": [\n \"\"\n ],\n \"required\": [\n \"\"\n ],\n \"must be greater than 0\": [\n \"\"\n ],\n \"not a valid json\": [\n \"\"\n ],\n \"should be in the future\": [\n \"\"\n ],\n \"refund deadline cannot be before pay deadline\": [\n \"\"\n ],\n \"wire transfer deadline cannot be before refund deadline\": [\n \"\"\n ],\n \"wire transfer deadline cannot be before pay deadline\": [\n \"\"\n ],\n \"should have a refund deadline\": [\n \"\"\n ],\n \"auto refund cannot be after refund deadline\": [\n \"\"\n ],\n \"Manage products in order\": [\n \"\"\n ],\n \"Manage list of products in the order.\": [\n \"\"\n ],\n \"Remove this product from the order.\": [\n \"\"\n ],\n \"Total price\": [\n \"\"\n ],\n \"total product price added up\": [\n \"\"\n ],\n \"Amount to be paid by the customer\": [\n \"\"\n ],\n \"Order price\": [\n \"\"\n ],\n \"final order price\": [\n \"\"\n ],\n \"Summary\": [\n \"\"\n ],\n \"Title of the order to be shown to the customer\": [\n \"\"\n ],\n \"Shipping and Fulfillment\": [\n \"\"\n ],\n \"Delivery date\": [\n \"\"\n ],\n \"Deadline for physical delivery assured by the merchant.\": [\n \"\"\n ],\n \"Location\": [\n \"\"\n ],\n \"address where the products will be delivered\": [\n \"\"\n ],\n \"Fulfillment URL\": [\n \"\"\n ],\n \"URL to which the user will be redirected after successful payment.\": [\n \"\"\n ],\n \"Taler payment options\": [\n \"\"\n ],\n \"Override default Taler payment settings for this order\": [\n \"\"\n ],\n \"Payment deadline\": [\n \"\"\n ],\n \"Deadline for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline.\": [\n \"\"\n ],\n \"Refund deadline\": [\n \"\"\n ],\n \"Time until which the order can be refunded by the merchant.\": [\n \"\"\n ],\n \"Wire transfer deadline\": [\n \"\"\n ],\n \"Deadline for the exchange to make the wire transfer.\": [\n \"\"\n ],\n \"Auto-refund deadline\": [\n \"\"\n ],\n \"Time until which the wallet will automatically check for refunds without user interaction.\": [\n \"\"\n ],\n \"Maximum deposit fee\": [\n \"\"\n ],\n \"Maximum deposit fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.\": [\n \"\"\n ],\n \"Maximum wire fee\": [\n \"\"\n ],\n \"Maximum aggregate wire fees the merchant is willing to cover for this order. Wire fees exceeding this amount are to be covered by the customers.\": [\n \"\"\n ],\n \"Wire fee amortization\": [\n \"\"\n ],\n \"Factor by which wire fees exceeding the above threshold are divided to determine the share of excess wire fees to be paid explicitly by the consumer.\": [\n \"\"\n ],\n \"Create token\": [\n \"\"\n ],\n \"Uncheck this option if the merchant backend generated an order ID with enough entropy to prevent adversarial claims.\": [\n \"\"\n ],\n \"Minimum age required\": [\n \"\"\n ],\n \"Any value greater than 0 will limit the coins able be used to pay this contract. If empty the age restriction will be defined by the products\": [\n \"\"\n ],\n \"Min age defined by the producs is %1$s\": [\n \"\"\n ],\n \"Additional information\": [\n \"\"\n ],\n \"Custom information to be included in the contract for this order.\": [\n \"\"\n ],\n \"You must enter a value in JavaScript Object Notation (JSON).\": [\n \"\"\n ],\n \"days\": [\n \"\"\n ],\n \"hours\": [\n \"\"\n ],\n \"minutes\": [\n \"\"\n ],\n \"seconds\": [\n \"\"\n ],\n \"forever\": [\n \"\"\n ],\n \"%1$sM\": [\n \"\"\n ],\n \"%1$sY\": [\n \"\"\n ],\n \"%1$sd\": [\n \"\"\n ],\n \"%1$sh\": [\n \"\"\n ],\n \"%1$smin\": [\n \"\"\n ],\n \"%1$ssec\": [\n \"\"\n ],\n \"Orders\": [\n \"\"\n ],\n \"create order\": [\n \"\"\n ],\n \"load newer orders\": [\n \"\"\n ],\n \"Date\": [\n \"\"\n ],\n \"Refund\": [\n \"\"\n ],\n \"copy url\": [\n \"\"\n ],\n \"load older orders\": [\n \"\"\n ],\n \"No orders have been found matching your query!\": [\n \"\"\n ],\n \"duplicated\": [\n \"\"\n ],\n \"invalid format\": [\n \"\"\n ],\n \"this value exceed the refundable amount\": [\n \"\"\n ],\n \"date\": [\n \"\"\n ],\n \"amount\": [\n \"\"\n ],\n \"reason\": [\n \"\"\n ],\n \"amount to be refunded\": [\n \"\"\n ],\n \"Max refundable:\": [\n \"\"\n ],\n \"Reason\": [\n \"\"\n ],\n \"Choose one...\": [\n \"\"\n ],\n \"requested by the customer\": [\n \"\"\n ],\n \"other\": [\n \"\"\n ],\n \"why this order is being refunded\": [\n \"\"\n ],\n \"more information to give context\": [\n \"\"\n ],\n \"Contract Terms\": [\n \"\"\n ],\n \"human-readable description of the whole purchase\": [\n \"\"\n ],\n \"total price for the transaction\": [\n \"\"\n ],\n \"URL for this purchase\": [\n \"\"\n ],\n \"Max fee\": [\n \"\"\n ],\n \"maximum total deposit fee accepted by the merchant for this contract\": [\n \"\"\n ],\n \"Max wire fee\": [\n \"\"\n ],\n \"maximum wire fee accepted by the merchant\": [\n \"\"\n ],\n \"over how many customer transactions does the merchant expect to amortize wire fees on average\": [\n \"\"\n ],\n \"Created at\": [\n \"\"\n ],\n \"time when this contract was generated\": [\n \"\"\n ],\n \"after this deadline has passed no refunds will be accepted\": [\n \"\"\n ],\n \"after this deadline, the merchant won't accept payments for the contract\": [\n \"\"\n ],\n \"transfer deadline for the exchange\": [\n \"\"\n ],\n \"time indicating when the order should be delivered\": [\n \"\"\n ],\n \"where the order will be delivered\": [\n \"\"\n ],\n \"Auto-refund delay\": [\n \"\"\n ],\n \"how long the wallet should try to get an automatic refund for the purchase\": [\n \"\"\n ],\n \"Extra info\": [\n \"\"\n ],\n \"extra data that is only interpreted by the merchant frontend\": [\n \"\"\n ],\n \"Order\": [\n \"\"\n ],\n \"claimed\": [\n \"\"\n ],\n \"claimed at\": [\n \"\"\n ],\n \"Timeline\": [\n \"\"\n ],\n \"Payment details\": [\n \"\"\n ],\n \"Order status\": [\n \"\"\n ],\n \"Product list\": [\n \"\"\n ],\n \"paid\": [\n \"\"\n ],\n \"wired\": [\n \"\"\n ],\n \"refunded\": [\n \"\"\n ],\n \"refund order\": [\n \"\"\n ],\n \"not refundable\": [\n \"\"\n ],\n \"refund\": [\n \"\"\n ],\n \"Refunded amount\": [\n \"\"\n ],\n \"Refund taken\": [\n \"\"\n ],\n \"Status URL\": [\n \"\"\n ],\n \"Refund URI\": [\n \"\"\n ],\n \"unpaid\": [\n \"\"\n ],\n \"pay at\": [\n \"\"\n ],\n \"created at\": [\n \"\"\n ],\n \"Order status URL\": [\n \"\"\n ],\n \"Payment URI\": [\n \"\"\n ],\n \"Unknown order status. This is an error, please contact the administrator.\": [\n \"\"\n ],\n \"Back\": [\n \"\"\n ],\n \"refund created successfully\": [\n \"\"\n ],\n \"could not create the refund\": [\n \"\"\n ],\n \"select date to show nearby orders\": [\n \"\"\n ],\n \"order id\": [\n \"\"\n ],\n \"jump to order with the given order ID\": [\n \"\"\n ],\n \"remove all filters\": [\n \"\"\n ],\n \"only show paid orders\": [\n \"\"\n ],\n \"Paid\": [\n \"\"\n ],\n \"only show orders with refunds\": [\n \"\"\n ],\n \"Refunded\": [\n \"\"\n ],\n \"only show orders where customers paid, but wire payments from payment provider are still pending\": [\n \"\"\n ],\n \"Not wired\": [\n \"\"\n ],\n \"clear date filter\": [\n \"\"\n ],\n \"date (YYYY/MM/DD)\": [\n \"\"\n ],\n \"Enter an order id\": [\n \"\"\n ],\n \"order not found\": [\n \"\"\n ],\n \"could not get the order to refund\": [\n \"\"\n ],\n \"Loading...\": [\n \"\"\n ],\n \"click here to configure the stock of the product, leave it as is and the backend will not control stock\": [\n \"\"\n ],\n \"Manage stock\": [\n \"\"\n ],\n \"this product has been configured without stock control\": [\n \"\"\n ],\n \"Infinite\": [\n \"\"\n ],\n \"lost cannot be greater than current and incoming (max %1$s)\": [\n \"\"\n ],\n \"Incoming\": [\n \"\"\n ],\n \"Lost\": [\n \"\"\n ],\n \"Current\": [\n \"\"\n ],\n \"remove stock control for this product\": [\n \"\"\n ],\n \"without stock\": [\n \"\"\n ],\n \"Next restock\": [\n \"\"\n ],\n \"Delivery address\": [\n \"\"\n ],\n \"product identification to use in URLs (for internal use only)\": [\n \"\"\n ],\n \"illustration of the product for customers\": [\n \"\"\n ],\n \"product description for customers\": [\n \"\"\n ],\n \"Age restricted\": [\n \"\"\n ],\n \"is this product restricted for customer below certain age?\": [\n \"\"\n ],\n \"unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers\": [\n \"\"\n ],\n \"sale price for customers, including taxes, for above units of the product\": [\n \"\"\n ],\n \"Stock\": [\n \"\"\n ],\n \"product inventory for products with finite supply (for internal use only)\": [\n \"\"\n ],\n \"taxes included in the product price, exposed to customers\": [\n \"\"\n ],\n \"Need to complete marked fields\": [\n \"\"\n ],\n \"could not create product\": [\n \"\"\n ],\n \"Products\": [\n \"\"\n ],\n \"add product to inventory\": [\n \"\"\n ],\n \"Sell\": [\n \"\"\n ],\n \"Profit\": [\n \"\"\n ],\n \"Sold\": [\n \"\"\n ],\n \"free\": [\n \"\"\n ],\n \"go to product update page\": [\n \"\"\n ],\n \"Update\": [\n \"\"\n ],\n \"remove this product from the database\": [\n \"\"\n ],\n \"update the product with new price\": [\n \"\"\n ],\n \"update product with new price\": [\n \"\"\n ],\n \"add more elements to the inventory\": [\n \"\"\n ],\n \"report elements lost in the inventory\": [\n \"\"\n ],\n \"new price for the product\": [\n \"\"\n ],\n \"the are value with errors\": [\n \"\"\n ],\n \"update product with new stock and price\": [\n \"\"\n ],\n \"There is no products yet, add more pressing the + sign\": [\n \"\"\n ],\n \"product updated successfully\": [\n \"\"\n ],\n \"could not update the product\": [\n \"\"\n ],\n \"product delete successfully\": [\n \"\"\n ],\n \"could not delete the product\": [\n \"\"\n ],\n \"Product id:\": [\n \"\"\n ],\n \"To complete the setup of the reserve, you must now initiate a wire transfer using the given wire transfer subject and crediting the specified amount to the indicated account of the exchange.\": [\n \"\"\n ],\n \"If your system supports RFC 8905, you can do this by opening this URI:\": [\n \"\"\n ],\n \"it should be greater than 0\": [\n \"\"\n ],\n \"must be a valid URL\": [\n \"\"\n ],\n \"Initial balance\": [\n \"\"\n ],\n \"balance prior to deposit\": [\n \"\"\n ],\n \"Exchange URL\": [\n \"\"\n ],\n \"URL of exchange\": [\n \"\"\n ],\n \"Next\": [\n \"\"\n ],\n \"Wire method\": [\n \"\"\n ],\n \"method to use for wire transfer\": [\n \"\"\n ],\n \"Select one wire method\": [\n \"\"\n ],\n \"could not create reserve\": [\n \"\"\n ],\n \"Valid until\": [\n \"\"\n ],\n \"Created balance\": [\n \"\"\n ],\n \"Exchange balance\": [\n \"\"\n ],\n \"Picked up\": [\n \"\"\n ],\n \"Committed\": [\n \"\"\n ],\n \"Account address\": [\n \"\"\n ],\n \"Subject\": [\n \"\"\n ],\n \"Tips\": [\n \"\"\n ],\n \"No tips has been authorized from this reserve\": [\n \"\"\n ],\n \"Authorized\": [\n \"\"\n ],\n \"Expiration\": [\n \"\"\n ],\n \"amount of tip\": [\n \"\"\n ],\n \"Justification\": [\n \"\"\n ],\n \"reason for the tip\": [\n \"\"\n ],\n \"URL after tip\": [\n \"\"\n ],\n \"URL to visit after tip payment\": [\n \"\"\n ],\n \"Reserves not yet funded\": [\n \"\"\n ],\n \"Reserves ready\": [\n \"\"\n ],\n \"add new reserve\": [\n \"\"\n ],\n \"Expires at\": [\n \"\"\n ],\n \"Initial\": [\n \"\"\n ],\n \"delete selected reserve from the database\": [\n \"\"\n ],\n \"authorize new tip from selected reserve\": [\n \"\"\n ],\n \"There is no ready reserves yet, add more pressing the + sign or fund them\": [\n \"\"\n ],\n \"Expected Balance\": [\n \"\"\n ],\n \"could not create the tip\": [\n \"\"\n ],\n \"should not be empty\": [\n \"\"\n ],\n \"should be greater that 0\": [\n \"\"\n ],\n \"can't be empty\": [\n \"\"\n ],\n \"to short\": [\n \"\"\n ],\n \"Identifier\": [\n \"\"\n ],\n \"Name of the template in URLs.\": [\n \"\"\n ],\n \"Describe what this template stands for\": [\n \"\"\n ],\n \"Order summary\": [\n \"\"\n ],\n \"Minimum age\": [\n \"\"\n ],\n \"Is this contract restricted to some age?\": [\n \"\"\n ],\n \"Payment timeout\": [\n \"\"\n ],\n \"How much time has the customer to complete the payment once the order was created.\": [\n \"\"\n ],\n \"Point-of-sale key\": [\n \"\"\n ],\n \"Useful to validate the purchase\": [\n \"\"\n ],\n \"could not inform template\": [\n \"\"\n ],\n \"Amount is required\": [\n \"\"\n ],\n \"Order summary is required\": [\n \"\"\n ],\n \"Amount of the order\": [\n \"\"\n ],\n \"could not create order from template\": [\n \"\"\n ],\n \"Templates\": [\n \"\"\n ],\n \"add new templates\": [\n \"\"\n ],\n \"load more templates before the first one\": [\n \"\"\n ],\n \"load newer templates\": [\n \"\"\n ],\n \"delete selected templates from the database\": [\n \"\"\n ],\n \"use template to create new order\": [\n \"\"\n ],\n \"load more templates after the last one\": [\n \"\"\n ],\n \"load older templates\": [\n \"\"\n ],\n \"There is no templates yet, add more pressing the + sign\": [\n \"\"\n ],\n \"template delete successfully\": [\n \"\"\n ],\n \"could not delete the template\": [\n \"\"\n ],\n \"could not update template\": [\n \"\"\n ],\n \"should be one of '%1$s'\": [\n \"\"\n ],\n \"Webhook ID to use\": [\n \"\"\n ],\n \"Event\": [\n \"\"\n ],\n \"The event of the webhook: why the webhook is used\": [\n \"\"\n ],\n \"Method\": [\n \"\"\n ],\n \"Method used by the webhook\": [\n \"\"\n ],\n \"URL\": [\n \"\"\n ],\n \"URL of the webhook where the customer will be redirected\": [\n \"\"\n ],\n \"Header\": [\n \"\"\n ],\n \"Header template of the webhook\": [\n \"\"\n ],\n \"Body\": [\n \"\"\n ],\n \"Body template by the webhook\": [\n \"\"\n ],\n \"Webhooks\": [\n \"\"\n ],\n \"add new webhooks\": [\n \"\"\n ],\n \"load more webhooks before the first one\": [\n \"\"\n ],\n \"load newer webhooks\": [\n \"\"\n ],\n \"Event type\": [\n \"\"\n ],\n \"delete selected webhook from the database\": [\n \"\"\n ],\n \"load more webhooks after the last one\": [\n \"\"\n ],\n \"load older webhooks\": [\n \"\"\n ],\n \"There is no webhooks yet, add more pressing the + sign\": [\n \"\"\n ],\n \"webhook delete successfully\": [\n \"\"\n ],\n \"could not delete the webhook\": [\n \"\"\n ],\n \"check the id, does not look valid\": [\n \"\"\n ],\n \"should have 52 characters, current %1$s\": [\n \"\"\n ],\n \"URL doesn't have the right format\": [\n \"\"\n ],\n \"Credited bank account\": [\n \"\"\n ],\n \"Select one account\": [\n \"\"\n ],\n \"Bank account of the merchant where the payment was received\": [\n \"\"\n ],\n \"Wire transfer ID\": [\n \"\"\n ],\n \"unique identifier of the wire transfer used by the exchange, must be 52 characters long\": [\n \"\"\n ],\n \"Base URL of the exchange that made the transfer, should have been in the wire transfer subject\": [\n \"\"\n ],\n \"Amount credited\": [\n \"\"\n ],\n \"Actual amount that was wired to the merchant's bank account\": [\n \"\"\n ],\n \"could not inform transfer\": [\n \"\"\n ],\n \"Transfers\": [\n \"\"\n ],\n \"add new transfer\": [\n \"\"\n ],\n \"load more transfers before the first one\": [\n \"\"\n ],\n \"load newer transfers\": [\n \"\"\n ],\n \"Credit\": [\n \"\"\n ],\n \"Confirmed\": [\n \"\"\n ],\n \"Verified\": [\n \"\"\n ],\n \"Executed at\": [\n \"\"\n ],\n \"yes\": [\n \"\"\n ],\n \"no\": [\n \"\"\n ],\n \"unknown\": [\n \"\"\n ],\n \"delete selected transfer from the database\": [\n \"\"\n ],\n \"load more transfer after the last one\": [\n \"\"\n ],\n \"load older transfers\": [\n \"\"\n ],\n \"There is no transfer yet, add more pressing the + sign\": [\n \"\"\n ],\n \"filter by account address\": [\n \"\"\n ],\n \"only show wire transfers confirmed by the merchant\": [\n \"\"\n ],\n \"only show wire transfers claimed by the exchange\": [\n \"\"\n ],\n \"Unverified\": [\n \"\"\n ],\n \"is not valid\": [\n \"\"\n ],\n \"is not a number\": [\n \"\"\n ],\n \"must be 1 or greater\": [\n \"\"\n ],\n \"max 7 lines\": [\n \"\"\n ],\n \"change authorization configuration\": [\n \"\"\n ],\n \"Need to complete marked fields and choose authorization method\": [\n \"\"\n ],\n \"This is not a valid bitcoin address.\": [\n \"\"\n ],\n \"This is not a valid Ethereum address.\": [\n \"\"\n ],\n \"IBAN numbers usually have more that 4 digits\": [\n \"\"\n ],\n \"IBAN numbers usually have less that 34 digits\": [\n \"\"\n ],\n \"IBAN country code not found\": [\n \"\"\n ],\n \"IBAN number is not valid, checksum is wrong\": [\n \"\"\n ],\n \"Target type\": [\n \"\"\n ],\n \"Method to use for wire transfer\": [\n \"\"\n ],\n \"Routing\": [\n \"\"\n ],\n \"Routing number.\": [\n \"\"\n ],\n \"Account\": [\n \"\"\n ],\n \"Account number.\": [\n \"\"\n ],\n \"Business Identifier Code.\": [\n \"\"\n ],\n \"Bank Account Number.\": [\n \"\"\n ],\n \"Unified Payment Interface.\": [\n \"\"\n ],\n \"Bitcoin protocol.\": [\n \"\"\n ],\n \"Ethereum protocol.\": [\n \"\"\n ],\n \"Interledger protocol.\": [\n \"\"\n ],\n \"Host\": [\n \"\"\n ],\n \"Bank host.\": [\n \"\"\n ],\n \"Bank account.\": [\n \"\"\n ],\n \"Bank account owner's name.\": [\n \"\"\n ],\n \"No accounts yet.\": [\n \"\"\n ],\n \"Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.\": [\n \"\"\n ],\n \"Business name\": [\n \"\"\n ],\n \"Legal name of the business represented by this instance.\": [\n \"\"\n ],\n \"Email\": [\n \"\"\n ],\n \"Contact email\": [\n \"\"\n ],\n \"Website URL\": [\n \"\"\n ],\n \"URL.\": [\n \"\"\n ],\n \"Logo\": [\n \"\"\n ],\n \"Logo image.\": [\n \"\"\n ],\n \"Bank account\": [\n \"\"\n ],\n \"URI specifying bank account for crediting revenue.\": [\n \"\"\n ],\n \"Default max deposit fee\": [\n \"\"\n ],\n \"Maximum deposit fees this merchant is willing to pay per order by default.\": [\n \"\"\n ],\n \"Default max wire fee\": [\n \"\"\n ],\n \"Maximum wire fees this merchant is willing to pay per wire transfer by default.\": [\n \"\"\n ],\n \"Default wire fee amortization\": [\n \"\"\n ],\n \"Number of orders excess wire transfer fees will be divided by to compute per order surcharge.\": [\n \"\"\n ],\n \"Physical location of the merchant.\": [\n \"\"\n ],\n \"Jurisdiction\": [\n \"\"\n ],\n \"Jurisdiction for legal disputes with the merchant.\": [\n \"\"\n ],\n \"Default payment delay\": [\n \"\"\n ],\n \"Time customers have to pay an order before the offer expires by default.\": [\n \"\"\n ],\n \"Default wire transfer delay\": [\n \"\"\n ],\n \"Maximum time an exchange is allowed to delay wiring funds to the merchant, enabling it to aggregate smaller payments into larger wire transfers and reducing wire fees.\": [\n \"\"\n ],\n \"Instance id\": [\n \"\"\n ],\n \"Change the authorization method use for this instance.\": [\n \"\"\n ],\n \"Manage access token\": [\n \"\"\n ],\n \"Failed to create instance\": [\n \"\"\n ],\n \"Login required\": [\n \"\"\n ],\n \"Please enter your access token.\": [\n \"\"\n ],\n \"Access Token\": [\n \"\"\n ],\n \"The request to the backend take too long and was cancelled\": [\n \"\"\n ],\n \"Diagnostic from %1$s is '%2$s'\": [\n \"\"\n ],\n \"The backend reported a problem: HTTP status #%1$s\": [\n \"\"\n ],\n \"Access denied\": [\n \"\"\n ],\n \"The access token provided is invalid.\": [\n \"\"\n ],\n \"No 'default' instance configured yet.\": [\n \"\"\n ],\n \"Create a 'default' instance to begin using the merchant backoffice.\": [\n \"\"\n ],\n \"The access token provided is invalid\": [\n \"\"\n ],\n \"Hide for today\": [\n \"\"\n ],\n \"Instance\": [\n \"\"\n ],\n \"Settings\": [\n \"\"\n ],\n \"Connection\": [\n \"\"\n ],\n \"New\": [\n \"\"\n ],\n \"List\": [\n \"\"\n ],\n \"Log out\": [\n \"\"\n ],\n \"Check your token is valid\": [\n \"\"\n ],\n \"Couldn't access the server.\": [\n \"\"\n ],\n \"Could not infer instance id from url %1$s\": [\n \"\"\n ],\n \"Server not found\": [\n \"\"\n ],\n \"Couldn't access the server\": [\n \"\"\n ],\n \"Got message %1$s from %2$s\": [\n \"\"\n ],\n \"Unexpected Error\": [\n \"\"\n ],\n \"The value %1$s is invalid for a payment url\": [\n \"\"\n ],\n \"add element to the list\": [\n \"\"\n ],\n \"add\": [\n \"\"\n ],\n \"Deleting\": [\n \"\"\n ],\n \"Changing\": [\n \"\"\n ],\n \"Order ID\": [\n \"\"\n ],\n \"Payment URL\": [\n \"\"\n ]\n }\n }\n};\n\nstrings['en'] = {\n \"domain\": \"messages\",\n \"locale_data\": {\n \"messages\": {\n \"\": {\n \"domain\": \"messages\",\n \"plural_forms\": \"nplurals=2; plural=(n != 1);\",\n \"lang\": \"\"\n },\n \"Cancel\": [\n \"\"\n ],\n \"%1$s\": [\n \"\"\n ],\n \"Continue\": [\n \"\"\n ],\n \"Clear\": [\n \"\"\n ],\n \"Confirm\": [\n \"\"\n ],\n \"is not the same as the current access token\": [\n \"\"\n ],\n \"cannot be empty\": [\n \"\"\n ],\n \"cannot be the same as the old token\": [\n \"\"\n ],\n \"is not the same\": [\n \"\"\n ],\n \"You are updating the access token from instance with id %1$s\": [\n \"\"\n ],\n \"Old access token\": [\n \"\"\n ],\n \"access token currently in use\": [\n \"\"\n ],\n \"New access token\": [\n \"\"\n ],\n \"next access token to be used\": [\n \"\"\n ],\n \"Repeat access token\": [\n \"\"\n ],\n \"confirm the same access token\": [\n \"\"\n ],\n \"Clearing the access token will mean public access to the instance\": [\n \"\"\n ],\n \"cannot be the same as the old access token\": [\n \"\"\n ],\n \"You are setting the access token for the new instance\": [\n \"\"\n ],\n \"With external authorization method no check will be done by the merchant backend\": [\n \"\"\n ],\n \"Set external authorization\": [\n \"\"\n ],\n \"Set access token\": [\n \"\"\n ],\n \"Operation in progress...\": [\n \"\"\n ],\n \"The operation will be automatically canceled after %1$s seconds\": [\n \"\"\n ],\n \"Instances\": [\n \"\"\n ],\n \"Delete\": [\n \"\"\n ],\n \"add new instance\": [\n \"\"\n ],\n \"ID\": [\n \"\"\n ],\n \"Name\": [\n \"\"\n ],\n \"Edit\": [\n \"\"\n ],\n \"Purge\": [\n \"\"\n ],\n \"There is no instances yet, add more pressing the + sign\": [\n \"\"\n ],\n \"Only show active instances\": [\n \"\"\n ],\n \"Active\": [\n \"\"\n ],\n \"Only show deleted instances\": [\n \"\"\n ],\n \"Deleted\": [\n \"\"\n ],\n \"Show all instances\": [\n \"\"\n ],\n \"All\": [\n \"\"\n ],\n \"Instance '%1$s' (ID: %2$s) has been deleted\": [\n \"\"\n ],\n \"Failed to delete instance\": [\n \"\"\n ],\n \"Instance '%1$s' (ID: %2$s) has been disabled\": [\n \"\"\n ],\n \"Failed to purge instance\": [\n \"\"\n ],\n \"Pending KYC verification\": [\n \"\"\n ],\n \"Timed out\": [\n \"\"\n ],\n \"Exchange\": [\n \"\"\n ],\n \"Target account\": [\n \"\"\n ],\n \"KYC URL\": [\n \"\"\n ],\n \"Code\": [\n \"\"\n ],\n \"Http Status\": [\n \"\"\n ],\n \"No pending kyc verification!\": [\n \"\"\n ],\n \"change value to unknown date\": [\n \"\"\n ],\n \"change value to empty\": [\n \"\"\n ],\n \"clear\": [\n \"\"\n ],\n \"change value to never\": [\n \"\"\n ],\n \"never\": [\n \"\"\n ],\n \"Country\": [\n \"\"\n ],\n \"Address\": [\n \"\"\n ],\n \"Building number\": [\n \"\"\n ],\n \"Building name\": [\n \"\"\n ],\n \"Street\": [\n \"\"\n ],\n \"Post code\": [\n \"\"\n ],\n \"Town location\": [\n \"\"\n ],\n \"Town\": [\n \"\"\n ],\n \"District\": [\n \"\"\n ],\n \"Country subdivision\": [\n \"\"\n ],\n \"Product id\": [\n \"\"\n ],\n \"Description\": [\n \"\"\n ],\n \"Product\": [\n \"\"\n ],\n \"search products by it's description or id\": [\n \"\"\n ],\n \"no products found with that description\": [\n \"\"\n ],\n \"You must enter a valid product identifier.\": [\n \"\"\n ],\n \"Quantity must be greater than 0!\": [\n \"\"\n ],\n \"This quantity exceeds remaining stock. Currently, only %1$s units remain unreserved in stock.\": [\n \"\"\n ],\n \"Quantity\": [\n \"\"\n ],\n \"how many products will be added\": [\n \"\"\n ],\n \"Add from inventory\": [\n \"\"\n ],\n \"Image should be smaller than 1 MB\": [\n \"\"\n ],\n \"Add\": [\n \"\"\n ],\n \"Remove\": [\n \"\"\n ],\n \"No taxes configured for this product.\": [\n \"\"\n ],\n \"Amount\": [\n \"\"\n ],\n \"Taxes can be in currencies that differ from the main currency used by the merchant.\": [\n \"\"\n ],\n \"Enter currency and value separated with a colon, e.g. &quot;USD:2.3&quot;.\": [\n \"\"\n ],\n \"Legal name of the tax, e.g. VAT or import duties.\": [\n \"\"\n ],\n \"add tax to the tax list\": [\n \"\"\n ],\n \"describe and add a product that is not in the inventory list\": [\n \"\"\n ],\n \"Add custom product\": [\n \"\"\n ],\n \"Complete information of the product\": [\n \"\"\n ],\n \"Image\": [\n \"\"\n ],\n \"photo of the product\": [\n \"\"\n ],\n \"full product description\": [\n \"\"\n ],\n \"Unit\": [\n \"\"\n ],\n \"name of the product unit\": [\n \"\"\n ],\n \"Price\": [\n \"\"\n ],\n \"amount in the current currency\": [\n \"\"\n ],\n \"Taxes\": [\n \"\"\n ],\n \"image\": [\n \"\"\n ],\n \"description\": [\n \"\"\n ],\n \"quantity\": [\n \"\"\n ],\n \"unit price\": [\n \"\"\n ],\n \"total price\": [\n \"\"\n ],\n \"required\": [\n \"\"\n ],\n \"must be greater than 0\": [\n \"\"\n ],\n \"not a valid json\": [\n \"\"\n ],\n \"should be in the future\": [\n \"\"\n ],\n \"refund deadline cannot be before pay deadline\": [\n \"\"\n ],\n \"wire transfer deadline cannot be before refund deadline\": [\n \"\"\n ],\n \"wire transfer deadline cannot be before pay deadline\": [\n \"\"\n ],\n \"should have a refund deadline\": [\n \"\"\n ],\n \"auto refund cannot be after refund deadline\": [\n \"\"\n ],\n \"Manage products in order\": [\n \"\"\n ],\n \"Manage list of products in the order.\": [\n \"\"\n ],\n \"Remove this product from the order.\": [\n \"\"\n ],\n \"Total price\": [\n \"\"\n ],\n \"total product price added up\": [\n \"\"\n ],\n \"Amount to be paid by the customer\": [\n \"\"\n ],\n \"Order price\": [\n \"\"\n ],\n \"final order price\": [\n \"\"\n ],\n \"Summary\": [\n \"\"\n ],\n \"Title of the order to be shown to the customer\": [\n \"\"\n ],\n \"Shipping and Fulfillment\": [\n \"\"\n ],\n \"Delivery date\": [\n \"\"\n ],\n \"Deadline for physical delivery assured by the merchant.\": [\n \"\"\n ],\n \"Location\": [\n \"\"\n ],\n \"address where the products will be delivered\": [\n \"\"\n ],\n \"Fulfillment URL\": [\n \"\"\n ],\n \"URL to which the user will be redirected after successful payment.\": [\n \"\"\n ],\n \"Taler payment options\": [\n \"\"\n ],\n \"Override default Taler payment settings for this order\": [\n \"\"\n ],\n \"Payment deadline\": [\n \"\"\n ],\n \"Deadline for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline.\": [\n \"\"\n ],\n \"Refund deadline\": [\n \"\"\n ],\n \"Time until which the order can be refunded by the merchant.\": [\n \"\"\n ],\n \"Wire transfer deadline\": [\n \"\"\n ],\n \"Deadline for the exchange to make the wire transfer.\": [\n \"\"\n ],\n \"Auto-refund deadline\": [\n \"\"\n ],\n \"Time until which the wallet will automatically check for refunds without user interaction.\": [\n \"\"\n ],\n \"Maximum deposit fee\": [\n \"\"\n ],\n \"Maximum deposit fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.\": [\n \"\"\n ],\n \"Maximum wire fee\": [\n \"\"\n ],\n \"Maximum aggregate wire fees the merchant is willing to cover for this order. Wire fees exceeding this amount are to be covered by the customers.\": [\n \"\"\n ],\n \"Wire fee amortization\": [\n \"\"\n ],\n \"Factor by which wire fees exceeding the above threshold are divided to determine the share of excess wire fees to be paid explicitly by the consumer.\": [\n \"\"\n ],\n \"Create token\": [\n \"\"\n ],\n \"Uncheck this option if the merchant backend generated an order ID with enough entropy to prevent adversarial claims.\": [\n \"\"\n ],\n \"Minimum age required\": [\n \"\"\n ],\n \"Any value greater than 0 will limit the coins able be used to pay this contract. If empty the age restriction will be defined by the products\": [\n \"\"\n ],\n \"Min age defined by the producs is %1$s\": [\n \"\"\n ],\n \"Additional information\": [\n \"\"\n ],\n \"Custom information to be included in the contract for this order.\": [\n \"\"\n ],\n \"You must enter a value in JavaScript Object Notation (JSON).\": [\n \"\"\n ],\n \"days\": [\n \"\"\n ],\n \"hours\": [\n \"\"\n ],\n \"minutes\": [\n \"\"\n ],\n \"seconds\": [\n \"\"\n ],\n \"forever\": [\n \"\"\n ],\n \"%1$sM\": [\n \"\"\n ],\n \"%1$sY\": [\n \"\"\n ],\n \"%1$sd\": [\n \"\"\n ],\n \"%1$sh\": [\n \"\"\n ],\n \"%1$smin\": [\n \"\"\n ],\n \"%1$ssec\": [\n \"\"\n ],\n \"Orders\": [\n \"\"\n ],\n \"create order\": [\n \"\"\n ],\n \"load newer orders\": [\n \"\"\n ],\n \"Date\": [\n \"\"\n ],\n \"Refund\": [\n \"\"\n ],\n \"copy url\": [\n \"\"\n ],\n \"load older orders\": [\n \"\"\n ],\n \"No orders have been found matching your query!\": [\n \"\"\n ],\n \"duplicated\": [\n \"\"\n ],\n \"invalid format\": [\n \"\"\n ],\n \"this value exceed the refundable amount\": [\n \"\"\n ],\n \"date\": [\n \"\"\n ],\n \"amount\": [\n \"\"\n ],\n \"reason\": [\n \"\"\n ],\n \"amount to be refunded\": [\n \"\"\n ],\n \"Max refundable:\": [\n \"\"\n ],\n \"Reason\": [\n \"\"\n ],\n \"Choose one...\": [\n \"\"\n ],\n \"requested by the customer\": [\n \"\"\n ],\n \"other\": [\n \"\"\n ],\n \"why this order is being refunded\": [\n \"\"\n ],\n \"more information to give context\": [\n \"\"\n ],\n \"Contract Terms\": [\n \"\"\n ],\n \"human-readable description of the whole purchase\": [\n \"\"\n ],\n \"total price for the transaction\": [\n \"\"\n ],\n \"URL for this purchase\": [\n \"\"\n ],\n \"Max fee\": [\n \"\"\n ],\n \"maximum total deposit fee accepted by the merchant for this contract\": [\n \"\"\n ],\n \"Max wire fee\": [\n \"\"\n ],\n \"maximum wire fee accepted by the merchant\": [\n \"\"\n ],\n \"over how many customer transactions does the merchant expect to amortize wire fees on average\": [\n \"\"\n ],\n \"Created at\": [\n \"\"\n ],\n \"time when this contract was generated\": [\n \"\"\n ],\n \"after this deadline has passed no refunds will be accepted\": [\n \"\"\n ],\n \"after this deadline, the merchant won't accept payments for the contract\": [\n \"\"\n ],\n \"transfer deadline for the exchange\": [\n \"\"\n ],\n \"time indicating when the order should be delivered\": [\n \"\"\n ],\n \"where the order will be delivered\": [\n \"\"\n ],\n \"Auto-refund delay\": [\n \"\"\n ],\n \"how long the wallet should try to get an automatic refund for the purchase\": [\n \"\"\n ],\n \"Extra info\": [\n \"\"\n ],\n \"extra data that is only interpreted by the merchant frontend\": [\n \"\"\n ],\n \"Order\": [\n \"\"\n ],\n \"claimed\": [\n \"\"\n ],\n \"claimed at\": [\n \"\"\n ],\n \"Timeline\": [\n \"\"\n ],\n \"Payment details\": [\n \"\"\n ],\n \"Order status\": [\n \"\"\n ],\n \"Product list\": [\n \"\"\n ],\n \"paid\": [\n \"\"\n ],\n \"wired\": [\n \"\"\n ],\n \"refunded\": [\n \"\"\n ],\n \"refund order\": [\n \"\"\n ],\n \"not refundable\": [\n \"\"\n ],\n \"refund\": [\n \"\"\n ],\n \"Refunded amount\": [\n \"\"\n ],\n \"Refund taken\": [\n \"\"\n ],\n \"Status URL\": [\n \"\"\n ],\n \"Refund URI\": [\n \"\"\n ],\n \"unpaid\": [\n \"\"\n ],\n \"pay at\": [\n \"\"\n ],\n \"created at\": [\n \"\"\n ],\n \"Order status URL\": [\n \"\"\n ],\n \"Payment URI\": [\n \"\"\n ],\n \"Unknown order status. This is an error, please contact the administrator.\": [\n \"\"\n ],\n \"Back\": [\n \"\"\n ],\n \"refund created successfully\": [\n \"\"\n ],\n \"could not create the refund\": [\n \"\"\n ],\n \"select date to show nearby orders\": [\n \"\"\n ],\n \"order id\": [\n \"\"\n ],\n \"jump to order with the given order ID\": [\n \"\"\n ],\n \"remove all filters\": [\n \"\"\n ],\n \"only show paid orders\": [\n \"\"\n ],\n \"Paid\": [\n \"\"\n ],\n \"only show orders with refunds\": [\n \"\"\n ],\n \"Refunded\": [\n \"\"\n ],\n \"only show orders where customers paid, but wire payments from payment provider are still pending\": [\n \"\"\n ],\n \"Not wired\": [\n \"\"\n ],\n \"clear date filter\": [\n \"\"\n ],\n \"date (YYYY/MM/DD)\": [\n \"\"\n ],\n \"Enter an order id\": [\n \"\"\n ],\n \"order not found\": [\n \"\"\n ],\n \"could not get the order to refund\": [\n \"\"\n ],\n \"Loading...\": [\n \"\"\n ],\n \"click here to configure the stock of the product, leave it as is and the backend will not control stock\": [\n \"\"\n ],\n \"Manage stock\": [\n \"\"\n ],\n \"this product has been configured without stock control\": [\n \"\"\n ],\n \"Infinite\": [\n \"\"\n ],\n \"lost cannot be greater than current and incoming (max %1$s)\": [\n \"\"\n ],\n \"Incoming\": [\n \"\"\n ],\n \"Lost\": [\n \"\"\n ],\n \"Current\": [\n \"\"\n ],\n \"remove stock control for this product\": [\n \"\"\n ],\n \"without stock\": [\n \"\"\n ],\n \"Next restock\": [\n \"\"\n ],\n \"Delivery address\": [\n \"\"\n ],\n \"product identification to use in URLs (for internal use only)\": [\n \"\"\n ],\n \"illustration of the product for customers\": [\n \"\"\n ],\n \"product description for customers\": [\n \"\"\n ],\n \"Age restricted\": [\n \"\"\n ],\n \"is this product restricted for customer below certain age?\": [\n \"\"\n ],\n \"unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers\": [\n \"\"\n ],\n \"sale price for customers, including taxes, for above units of the product\": [\n \"\"\n ],\n \"Stock\": [\n \"\"\n ],\n \"product inventory for products with finite supply (for internal use only)\": [\n \"\"\n ],\n \"taxes included in the product price, exposed to customers\": [\n \"\"\n ],\n \"Need to complete marked fields\": [\n \"\"\n ],\n \"could not create product\": [\n \"\"\n ],\n \"Products\": [\n \"\"\n ],\n \"add product to inventory\": [\n \"\"\n ],\n \"Sell\": [\n \"\"\n ],\n \"Profit\": [\n \"\"\n ],\n \"Sold\": [\n \"\"\n ],\n \"free\": [\n \"\"\n ],\n \"go to product update page\": [\n \"\"\n ],\n \"Update\": [\n \"\"\n ],\n \"remove this product from the database\": [\n \"\"\n ],\n \"update the product with new price\": [\n \"\"\n ],\n \"update product with new price\": [\n \"\"\n ],\n \"add more elements to the inventory\": [\n \"\"\n ],\n \"report elements lost in the inventory\": [\n \"\"\n ],\n \"new price for the product\": [\n \"\"\n ],\n \"the are value with errors\": [\n \"\"\n ],\n \"update product with new stock and price\": [\n \"\"\n ],\n \"There is no products yet, add more pressing the + sign\": [\n \"\"\n ],\n \"product updated successfully\": [\n \"\"\n ],\n \"could not update the product\": [\n \"\"\n ],\n \"product delete successfully\": [\n \"\"\n ],\n \"could not delete the product\": [\n \"\"\n ],\n \"Product id:\": [\n \"\"\n ],\n \"To complete the setup of the reserve, you must now initiate a wire transfer using the given wire transfer subject and crediting the specified amount to the indicated account of the exchange.\": [\n \"\"\n ],\n \"If your system supports RFC 8905, you can do this by opening this URI:\": [\n \"\"\n ],\n \"it should be greater than 0\": [\n \"\"\n ],\n \"must be a valid URL\": [\n \"\"\n ],\n \"Initial balance\": [\n \"\"\n ],\n \"balance prior to deposit\": [\n \"\"\n ],\n \"Exchange URL\": [\n \"\"\n ],\n \"URL of exchange\": [\n \"\"\n ],\n \"Next\": [\n \"\"\n ],\n \"Wire method\": [\n \"\"\n ],\n \"method to use for wire transfer\": [\n \"\"\n ],\n \"Select one wire method\": [\n \"\"\n ],\n \"could not create reserve\": [\n \"\"\n ],\n \"Valid until\": [\n \"\"\n ],\n \"Created balance\": [\n \"\"\n ],\n \"Exchange balance\": [\n \"\"\n ],\n \"Picked up\": [\n \"\"\n ],\n \"Committed\": [\n \"\"\n ],\n \"Account address\": [\n \"\"\n ],\n \"Subject\": [\n \"\"\n ],\n \"Tips\": [\n \"\"\n ],\n \"No tips has been authorized from this reserve\": [\n \"\"\n ],\n \"Authorized\": [\n \"\"\n ],\n \"Expiration\": [\n \"\"\n ],\n \"amount of tip\": [\n \"\"\n ],\n \"Justification\": [\n \"\"\n ],\n \"reason for the tip\": [\n \"\"\n ],\n \"URL after tip\": [\n \"\"\n ],\n \"URL to visit after tip payment\": [\n \"\"\n ],\n \"Reserves not yet funded\": [\n \"\"\n ],\n \"Reserves ready\": [\n \"\"\n ],\n \"add new reserve\": [\n \"\"\n ],\n \"Expires at\": [\n \"\"\n ],\n \"Initial\": [\n \"\"\n ],\n \"delete selected reserve from the database\": [\n \"\"\n ],\n \"authorize new tip from selected reserve\": [\n \"\"\n ],\n \"There is no ready reserves yet, add more pressing the + sign or fund them\": [\n \"\"\n ],\n \"Expected Balance\": [\n \"\"\n ],\n \"could not create the tip\": [\n \"\"\n ],\n \"should not be empty\": [\n \"\"\n ],\n \"should be greater that 0\": [\n \"\"\n ],\n \"can't be empty\": [\n \"\"\n ],\n \"to short\": [\n \"\"\n ],\n \"Identifier\": [\n \"\"\n ],\n \"Name of the template in URLs.\": [\n \"\"\n ],\n \"Describe what this template stands for\": [\n \"\"\n ],\n \"Order summary\": [\n \"\"\n ],\n \"Minimum age\": [\n \"\"\n ],\n \"Is this contract restricted to some age?\": [\n \"\"\n ],\n \"Payment timeout\": [\n \"\"\n ],\n \"How much time has the customer to complete the payment once the order was created.\": [\n \"\"\n ],\n \"Point-of-sale key\": [\n \"\"\n ],\n \"Useful to validate the purchase\": [\n \"\"\n ],\n \"could not inform template\": [\n \"\"\n ],\n \"Amount is required\": [\n \"\"\n ],\n \"Order summary is required\": [\n \"\"\n ],\n \"Amount of the order\": [\n \"\"\n ],\n \"could not create order from template\": [\n \"\"\n ],\n \"Templates\": [\n \"\"\n ],\n \"add new templates\": [\n \"\"\n ],\n \"load more templates before the first one\": [\n \"\"\n ],\n \"load newer templates\": [\n \"\"\n ],\n \"delete selected templates from the database\": [\n \"\"\n ],\n \"use template to create new order\": [\n \"\"\n ],\n \"load more templates after the last one\": [\n \"\"\n ],\n \"load older templates\": [\n \"\"\n ],\n \"There is no templates yet, add more pressing the + sign\": [\n \"\"\n ],\n \"template delete successfully\": [\n \"\"\n ],\n \"could not delete the template\": [\n \"\"\n ],\n \"could not update template\": [\n \"\"\n ],\n \"should be one of '%1$s'\": [\n \"\"\n ],\n \"Webhook ID to use\": [\n \"\"\n ],\n \"Event\": [\n \"\"\n ],\n \"The event of the webhook: why the webhook is used\": [\n \"\"\n ],\n \"Method\": [\n \"\"\n ],\n \"Method used by the webhook\": [\n \"\"\n ],\n \"URL\": [\n \"\"\n ],\n \"URL of the webhook where the customer will be redirected\": [\n \"\"\n ],\n \"Header\": [\n \"\"\n ],\n \"Header template of the webhook\": [\n \"\"\n ],\n \"Body\": [\n \"\"\n ],\n \"Body template by the webhook\": [\n \"\"\n ],\n \"Webhooks\": [\n \"\"\n ],\n \"add new webhooks\": [\n \"\"\n ],\n \"load more webhooks before the first one\": [\n \"\"\n ],\n \"load newer webhooks\": [\n \"\"\n ],\n \"Event type\": [\n \"\"\n ],\n \"delete selected webhook from the database\": [\n \"\"\n ],\n \"load more webhooks after the last one\": [\n \"\"\n ],\n \"load older webhooks\": [\n \"\"\n ],\n \"There is no webhooks yet, add more pressing the + sign\": [\n \"\"\n ],\n \"webhook delete successfully\": [\n \"\"\n ],\n \"could not delete the webhook\": [\n \"\"\n ],\n \"check the id, does not look valid\": [\n \"\"\n ],\n \"should have 52 characters, current %1$s\": [\n \"\"\n ],\n \"URL doesn't have the right format\": [\n \"\"\n ],\n \"Credited bank account\": [\n \"\"\n ],\n \"Select one account\": [\n \"\"\n ],\n \"Bank account of the merchant where the payment was received\": [\n \"\"\n ],\n \"Wire transfer ID\": [\n \"\"\n ],\n \"unique identifier of the wire transfer used by the exchange, must be 52 characters long\": [\n \"\"\n ],\n \"Base URL of the exchange that made the transfer, should have been in the wire transfer subject\": [\n \"\"\n ],\n \"Amount credited\": [\n \"\"\n ],\n \"Actual amount that was wired to the merchant's bank account\": [\n \"\"\n ],\n \"could not inform transfer\": [\n \"\"\n ],\n \"Transfers\": [\n \"\"\n ],\n \"add new transfer\": [\n \"\"\n ],\n \"load more transfers before the first one\": [\n \"\"\n ],\n \"load newer transfers\": [\n \"\"\n ],\n \"Credit\": [\n \"\"\n ],\n \"Confirmed\": [\n \"\"\n ],\n \"Verified\": [\n \"\"\n ],\n \"Executed at\": [\n \"\"\n ],\n \"yes\": [\n \"\"\n ],\n \"no\": [\n \"\"\n ],\n \"unknown\": [\n \"\"\n ],\n \"delete selected transfer from the database\": [\n \"\"\n ],\n \"load more transfer after the last one\": [\n \"\"\n ],\n \"load older transfers\": [\n \"\"\n ],\n \"There is no transfer yet, add more pressing the + sign\": [\n \"\"\n ],\n \"filter by account address\": [\n \"\"\n ],\n \"only show wire transfers confirmed by the merchant\": [\n \"\"\n ],\n \"only show wire transfers claimed by the exchange\": [\n \"\"\n ],\n \"Unverified\": [\n \"\"\n ],\n \"is not valid\": [\n \"\"\n ],\n \"is not a number\": [\n \"\"\n ],\n \"must be 1 or greater\": [\n \"\"\n ],\n \"max 7 lines\": [\n \"\"\n ],\n \"change authorization configuration\": [\n \"\"\n ],\n \"Need to complete marked fields and choose authorization method\": [\n \"\"\n ],\n \"This is not a valid bitcoin address.\": [\n \"\"\n ],\n \"This is not a valid Ethereum address.\": [\n \"\"\n ],\n \"IBAN numbers usually have more that 4 digits\": [\n \"\"\n ],\n \"IBAN numbers usually have less that 34 digits\": [\n \"\"\n ],\n \"IBAN country code not found\": [\n \"\"\n ],\n \"IBAN number is not valid, checksum is wrong\": [\n \"\"\n ],\n \"Target type\": [\n \"\"\n ],\n \"Method to use for wire transfer\": [\n \"\"\n ],\n \"Routing\": [\n \"\"\n ],\n \"Routing number.\": [\n \"\"\n ],\n \"Account\": [\n \"\"\n ],\n \"Account number.\": [\n \"\"\n ],\n \"Business Identifier Code.\": [\n \"\"\n ],\n \"Bank Account Number.\": [\n \"\"\n ],\n \"Unified Payment Interface.\": [\n \"\"\n ],\n \"Bitcoin protocol.\": [\n \"\"\n ],\n \"Ethereum protocol.\": [\n \"\"\n ],\n \"Interledger protocol.\": [\n \"\"\n ],\n \"Host\": [\n \"\"\n ],\n \"Bank host.\": [\n \"\"\n ],\n \"Bank account.\": [\n \"\"\n ],\n \"Bank account owner's name.\": [\n \"\"\n ],\n \"No accounts yet.\": [\n \"\"\n ],\n \"Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.\": [\n \"\"\n ],\n \"Business name\": [\n \"\"\n ],\n \"Legal name of the business represented by this instance.\": [\n \"\"\n ],\n \"Email\": [\n \"\"\n ],\n \"Contact email\": [\n \"\"\n ],\n \"Website URL\": [\n \"\"\n ],\n \"URL.\": [\n \"\"\n ],\n \"Logo\": [\n \"\"\n ],\n \"Logo image.\": [\n \"\"\n ],\n \"Bank account\": [\n \"\"\n ],\n \"URI specifying bank account for crediting revenue.\": [\n \"\"\n ],\n \"Default max deposit fee\": [\n \"\"\n ],\n \"Maximum deposit fees this merchant is willing to pay per order by default.\": [\n \"\"\n ],\n \"Default max wire fee\": [\n \"\"\n ],\n \"Maximum wire fees this merchant is willing to pay per wire transfer by default.\": [\n \"\"\n ],\n \"Default wire fee amortization\": [\n \"\"\n ],\n \"Number of orders excess wire transfer fees will be divided by to compute per order surcharge.\": [\n \"\"\n ],\n \"Physical location of the merchant.\": [\n \"\"\n ],\n \"Jurisdiction\": [\n \"\"\n ],\n \"Jurisdiction for legal disputes with the merchant.\": [\n \"\"\n ],\n \"Default payment delay\": [\n \"\"\n ],\n \"Time customers have to pay an order before the offer expires by default.\": [\n \"\"\n ],\n \"Default wire transfer delay\": [\n \"\"\n ],\n \"Maximum time an exchange is allowed to delay wiring funds to the merchant, enabling it to aggregate smaller payments into larger wire transfers and reducing wire fees.\": [\n \"\"\n ],\n \"Instance id\": [\n \"\"\n ],\n \"Change the authorization method use for this instance.\": [\n \"\"\n ],\n \"Manage access token\": [\n \"\"\n ],\n \"Failed to create instance\": [\n \"\"\n ],\n \"Login required\": [\n \"\"\n ],\n \"Please enter your access token.\": [\n \"\"\n ],\n \"Access Token\": [\n \"\"\n ],\n \"The request to the backend take too long and was cancelled\": [\n \"\"\n ],\n \"Diagnostic from %1$s is '%2$s'\": [\n \"\"\n ],\n \"The backend reported a problem: HTTP status #%1$s\": [\n \"\"\n ],\n \"Access denied\": [\n \"\"\n ],\n \"The access token provided is invalid.\": [\n \"\"\n ],\n \"No 'default' instance configured yet.\": [\n \"\"\n ],\n \"Create a 'default' instance to begin using the merchant backoffice.\": [\n \"\"\n ],\n \"The access token provided is invalid\": [\n \"\"\n ],\n \"Hide for today\": [\n \"\"\n ],\n \"Instance\": [\n \"\"\n ],\n \"Settings\": [\n \"\"\n ],\n \"Connection\": [\n \"\"\n ],\n \"New\": [\n \"\"\n ],\n \"List\": [\n \"\"\n ],\n \"Log out\": [\n \"\"\n ],\n \"Check your token is valid\": [\n \"\"\n ],\n \"Couldn't access the server.\": [\n \"\"\n ],\n \"Could not infer instance id from url %1$s\": [\n \"\"\n ],\n \"Server not found\": [\n \"\"\n ],\n \"Couldn't access the server\": [\n \"\"\n ],\n \"Got message %1$s from %2$s\": [\n \"\"\n ],\n \"Unexpected Error\": [\n \"\"\n ],\n \"The value %1$s is invalid for a payment url\": [\n \"\"\n ],\n \"add element to the list\": [\n \"\"\n ],\n \"add\": [\n \"\"\n ],\n \"Deleting\": [\n \"\"\n ],\n \"Changing\": [\n \"\"\n ],\n \"Order ID\": [\n \"\"\n ],\n \"Payment URL\": [\n \"\"\n ]\n }\n }\n};\n\nstrings['es'] = {\n \"domain\": \"messages\",\n \"locale_data\": {\n \"messages\": {\n \"\": {\n \"domain\": \"messages\",\n \"plural_forms\": \"nplurals=2; plural=n != 1;\",\n \"lang\": \"es\"\n },\n \"Cancel\": [\n \"Cancelar\"\n ],\n \"%1$s\": [\n \"%1$s\"\n ],\n \"Continue\": [\n \"Continuar\"\n ],\n \"Clear\": [\n \"Limpiar\"\n ],\n \"Confirm\": [\n \"Confirmar\"\n ],\n \"is not the same as the current access token\": [\n \"no es el mismo que el token de acceso actual\"\n ],\n \"cannot be empty\": [\n \"no puede ser vac\u00EDo\"\n ],\n \"cannot be the same as the old token\": [\n \"no puede ser igual al viejo token\"\n ],\n \"is not the same\": [\n \"no son iguales\"\n ],\n \"You are updating the access token from instance with id %1$s\": [\n \"Est\u00E1 actualizando el token de autorizaci\u00F3n para la instancia con id %1$s\"\n ],\n \"Old access token\": [\n \"Viejo token de acceso\"\n ],\n \"access token currently in use\": [\n \"\"\n ],\n \"New access token\": [\n \"Nuevo token\"\n ],\n \"next access token to be used\": [\n \"\"\n ],\n \"Repeat access token\": [\n \"\"\n ],\n \"confirm the same access token\": [\n \"\"\n ],\n \"Clearing the access token will mean public access to the instance\": [\n \"Limpiar el token de autorizaci\u00F3n significa acceso publico a la instancia\"\n ],\n \"cannot be the same as the old access token\": [\n \"no puede ser igual al anterior\"\n ],\n \"You are setting the access token for the new instance\": [\n \"\"\n ],\n \"With external authorization method no check will be done by the merchant backend\": [\n \"\"\n ],\n \"Set external authorization\": [\n \"Amortizaci\u00F3n de comisi\u00F3n de transferencia\"\n ],\n \"Set access token\": [\n \"\"\n ],\n \"Operation in progress...\": [\n \"\"\n ],\n \"The operation will be automatically canceled after %1$s seconds\": [\n \"\"\n ],\n \"Instances\": [\n \"Instancias\"\n ],\n \"Delete\": [\n \"Eliminar\"\n ],\n \"add new instance\": [\n \"no se pudo crear la instancia\"\n ],\n \"ID\": [\n \"ID\"\n ],\n \"Name\": [\n \"Nombre\"\n ],\n \"Edit\": [\n \"Editar\"\n ],\n \"Purge\": [\n \"\"\n ],\n \"There is no instances yet, add more pressing the + sign\": [\n \"No hay instancias todav\u00EDan, agregue mas presionando el signo +\"\n ],\n \"Only show active instances\": [\n \"no se pudo crear la instancia\"\n ],\n \"Active\": [\n \"\"\n ],\n \"Only show deleted instances\": [\n \"Sin instancia default\"\n ],\n \"Deleted\": [\n \"Eliminar\"\n ],\n \"Show all instances\": [\n \"Sin instancia default\"\n ],\n \"All\": [\n \"Todo\"\n ],\n \"Instance '%1$s' (ID: %2$s) has been deleted\": [\n \"\"\n ],\n \"Failed to delete instance\": [\n \"Sin instancia default\"\n ],\n \"Instance '%1$s' (ID: %2$s) has been disabled\": [\n \"\"\n ],\n \"Failed to purge instance\": [\n \"no se pudo crear la instancia\"\n ],\n \"Pending KYC verification\": [\n \"\"\n ],\n \"Timed out\": [\n \"\"\n ],\n \"Exchange\": [\n \"URL del Exchange\"\n ],\n \"Target account\": [\n \"\"\n ],\n \"KYC URL\": [\n \"\"\n ],\n \"Code\": [\n \"\"\n ],\n \"Http Status\": [\n \"\"\n ],\n \"No pending kyc verification!\": [\n \"\"\n ],\n \"change value to unknown date\": [\n \"\"\n ],\n \"change value to empty\": [\n \"no puede ser vac\u00EDo\"\n ],\n \"clear\": [\n \"Limpiar\"\n ],\n \"change value to never\": [\n \"\"\n ],\n \"never\": [\n \"nunca\"\n ],\n \"Country\": [\n \"Pa\u00EDs\"\n ],\n \"Address\": [\n \"Direcci\u00F3n\"\n ],\n \"Building number\": [\n \"N\u00FAmero de edificio\"\n ],\n \"Building name\": [\n \"Nombre de edificio\"\n ],\n \"Street\": [\n \"Calle\"\n ],\n \"Post code\": [\n \"C\u00F3digo postal\"\n ],\n \"Town location\": [\n \"Ubicaci\u00F3n de ciudad\"\n ],\n \"Town\": [\n \"Ciudad\"\n ],\n \"District\": [\n \"Distrito\"\n ],\n \"Country subdivision\": [\n \"Subdivisi\u00F3n de pa\u00EDs\"\n ],\n \"Product id\": [\n \"Id de producto\"\n ],\n \"Description\": [\n \"Descripcion\"\n ],\n \"Product\": [\n \"Productos\"\n ],\n \"search products by it's description or id\": [\n \"\"\n ],\n \"no products found with that description\": [\n \"No se encontraron productos\"\n ],\n \"You must enter a valid product identifier.\": [\n \"\"\n ],\n \"Quantity must be greater than 0!\": [\n \"Debe ser mayor a 0\"\n ],\n \"This quantity exceeds remaining stock. Currently, only %1$s units remain unreserved in stock.\": [\n \"\"\n ],\n \"Quantity\": [\n \"Cantidad\"\n ],\n \"how many products will be added\": [\n \"\"\n ],\n \"Add from inventory\": [\n \"\"\n ],\n \"Image should be smaller than 1 MB\": [\n \"La imagen debe ser mas chica que 1 MB\"\n ],\n \"Add\": [\n \"Agregar\"\n ],\n \"Remove\": [\n \"Eliminar\"\n ],\n \"No taxes configured for this product.\": [\n \"\"\n ],\n \"Amount\": [\n \"Monto\"\n ],\n \"Taxes can be in currencies that differ from the main currency used by the merchant.\": [\n \"\"\n ],\n \"Enter currency and value separated with a colon, e.g. &quot;USD:2.3&quot;.\": [\n \"Moneda y valor separado por dos puntos\"\n ],\n \"Legal name of the tax, e.g. VAT or import duties.\": [\n \"\"\n ],\n \"add tax to the tax list\": [\n \"\"\n ],\n \"describe and add a product that is not in the inventory list\": [\n \"\"\n ],\n \"Add custom product\": [\n \"\"\n ],\n \"Complete information of the product\": [\n \"no se pudo eliminar el producto\"\n ],\n \"Image\": [\n \"Imagen\"\n ],\n \"photo of the product\": [\n \"no se pudo crear el producto\"\n ],\n \"full product description\": [\n \"\"\n ],\n \"Unit\": [\n \"Unidad\"\n ],\n \"name of the product unit\": [\n \"No se encontraron productos\"\n ],\n \"Price\": [\n \"Precio\"\n ],\n \"amount in the current currency\": [\n \"\"\n ],\n \"Taxes\": [\n \"Impuesto\"\n ],\n \"image\": [\n \"Imagen\"\n ],\n \"description\": [\n \"Descripcion\"\n ],\n \"quantity\": [\n \"Cantidad\"\n ],\n \"unit price\": [\n \"Precio total\"\n ],\n \"total price\": [\n \"Precio total\"\n ],\n \"required\": [\n \"Login necesario\"\n ],\n \"must be greater than 0\": [\n \"Debe ser mayor a 0\"\n ],\n \"not a valid json\": [\n \"\"\n ],\n \"should be in the future\": [\n \"deber\u00EDan ser iguales\"\n ],\n \"refund deadline cannot be before pay deadline\": [\n \"\"\n ],\n \"wire transfer deadline cannot be before refund deadline\": [\n \"\"\n ],\n \"wire transfer deadline cannot be before pay deadline\": [\n \"\"\n ],\n \"should have a refund deadline\": [\n \"Plazo de reembolso autom\u00E1tico\"\n ],\n \"auto refund cannot be after refund deadline\": [\n \"Plazo de reembolso autom\u00E1tico\"\n ],\n \"Manage products in order\": [\n \"No se encontraron productos\"\n ],\n \"Manage list of products in the order.\": [\n \"\"\n ],\n \"Remove this product from the order.\": [\n \"\"\n ],\n \"Total price\": [\n \"Precio total\"\n ],\n \"total product price added up\": [\n \"\"\n ],\n \"Amount to be paid by the customer\": [\n \"pedido por el consumidor\"\n ],\n \"Order price\": [\n \"Precio de la orden\"\n ],\n \"final order price\": [\n \"Precio de la orden\"\n ],\n \"Summary\": [\n \"Resumen\"\n ],\n \"Title of the order to be shown to the customer\": [\n \"\"\n ],\n \"Shipping and Fulfillment\": [\n \"\"\n ],\n \"Delivery date\": [\n \"Fecha de entrega\"\n ],\n \"Deadline for physical delivery assured by the merchant.\": [\n \"\"\n ],\n \"Location\": [\n \"Ubicaci\u00F3n\"\n ],\n \"address where the products will be delivered\": [\n \"\"\n ],\n \"Fulfillment URL\": [\n \"URL de completitud\"\n ],\n \"URL to which the user will be redirected after successful payment.\": [\n \"\"\n ],\n \"Taler payment options\": [\n \"Opciones de pago\"\n ],\n \"Override default Taler payment settings for this order\": [\n \"\"\n ],\n \"Payment deadline\": [\n \"Plazo de pago\"\n ],\n \"Deadline for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline.\": [\n \"\"\n ],\n \"Refund deadline\": [\n \"Plazo de reembolso\"\n ],\n \"Time until which the order can be refunded by the merchant.\": [\n \"\"\n ],\n \"Wire transfer deadline\": [\n \"Retrazo de transferencia por omisi\u00F3n\"\n ],\n \"Deadline for the exchange to make the wire transfer.\": [\n \"\"\n ],\n \"Auto-refund deadline\": [\n \"Plazo de reembolso autom\u00E1tico\"\n ],\n \"Time until which the wallet will automatically check for refunds without user interaction.\": [\n \"\"\n ],\n \"Maximum deposit fee\": [\n \"Impuesto m\u00E1ximo de deposito por omisi\u00F3n\"\n ],\n \"Maximum deposit fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.\": [\n \"\"\n ],\n \"Maximum wire fee\": [\n \"Impuesto de transferencia m\u00E1ximo\"\n ],\n \"Maximum aggregate wire fees the merchant is willing to cover for this order. Wire fees exceeding this amount are to be covered by the customers.\": [\n \"\"\n ],\n \"Wire fee amortization\": [\n \"Amortizaci\u00F3n de comisi\u00F3n de transferencia\"\n ],\n \"Factor by which wire fees exceeding the above threshold are divided to determine the share of excess wire fees to be paid explicitly by the consumer.\": [\n \"\"\n ],\n \"Create token\": [\n \"Administrar token\"\n ],\n \"Uncheck this option if the merchant backend generated an order ID with enough entropy to prevent adversarial claims.\": [\n \"\"\n ],\n \"Minimum age required\": [\n \"Login necesario\"\n ],\n \"Any value greater than 0 will limit the coins able be used to pay this contract. If empty the age restriction will be defined by the products\": [\n \"\"\n ],\n \"Min age defined by the producs is %1$s\": [\n \"\"\n ],\n \"Additional information\": [\n \"Informaci\u00F3n extra\"\n ],\n \"Custom information to be included in the contract for this order.\": [\n \"\"\n ],\n \"You must enter a value in JavaScript Object Notation (JSON).\": [\n \"\"\n ],\n \"days\": [\n \"\"\n ],\n \"hours\": [\n \"\"\n ],\n \"minutes\": [\n \"\"\n ],\n \"seconds\": [\n \"\"\n ],\n \"forever\": [\n \"nunca\"\n ],\n \"%1$sM\": [\n \"\"\n ],\n \"%1$sY\": [\n \"\"\n ],\n \"%1$sd\": [\n \"\"\n ],\n \"%1$sh\": [\n \"\"\n ],\n \"%1$smin\": [\n \"\"\n ],\n \"%1$ssec\": [\n \"\"\n ],\n \"Orders\": [\n \"\u00D3rdenes\"\n ],\n \"create order\": [\n \"creado\"\n ],\n \"load newer orders\": [\n \"cargar nuevas ordenes\"\n ],\n \"Date\": [\n \"Fecha\"\n ],\n \"Refund\": [\n \"Devoluci\u00F3n\"\n ],\n \"copy url\": [\n \"copiar url\"\n ],\n \"load older orders\": [\n \"cargar viejas ordenes\"\n ],\n \"No orders have been found matching your query!\": [\n \"No se enconraron ordenes\"\n ],\n \"duplicated\": [\n \"duplicado\"\n ],\n \"invalid format\": [\n \"\"\n ],\n \"this value exceed the refundable amount\": [\n \"\"\n ],\n \"date\": [\n \"fecha\"\n ],\n \"amount\": [\n \"monto\"\n ],\n \"reason\": [\n \"raz\u00F3n\"\n ],\n \"amount to be refunded\": [\n \"No se pudo create el reembolso\"\n ],\n \"Max refundable:\": [\n \"M\u00E1ximo reembolzable:\"\n ],\n \"Reason\": [\n \"Raz\u00F3n\"\n ],\n \"Choose one...\": [\n \"\"\n ],\n \"requested by the customer\": [\n \"pedido por el consumidor\"\n ],\n \"other\": [\n \"otro\"\n ],\n \"why this order is being refunded\": [\n \"No se enconraron ordenes\"\n ],\n \"more information to give context\": [\n \"\"\n ],\n \"Contract Terms\": [\n \"\"\n ],\n \"human-readable description of the whole purchase\": [\n \"\"\n ],\n \"total price for the transaction\": [\n \"\"\n ],\n \"URL for this purchase\": [\n \"\"\n ],\n \"Max fee\": [\n \"M\u00E1xima comisi\u00F3n\"\n ],\n \"maximum total deposit fee accepted by the merchant for this contract\": [\n \"\"\n ],\n \"Max wire fee\": [\n \"Impuesto de transferencia m\u00E1ximo\"\n ],\n \"maximum wire fee accepted by the merchant\": [\n \"\"\n ],\n \"over how many customer transactions does the merchant expect to amortize wire fees on average\": [\n \"\"\n ],\n \"Created at\": [\n \"creado\"\n ],\n \"time when this contract was generated\": [\n \"\"\n ],\n \"after this deadline has passed no refunds will be accepted\": [\n \"\"\n ],\n \"after this deadline, the merchant won't accept payments for the contract\": [\n \"\"\n ],\n \"transfer deadline for the exchange\": [\n \"\"\n ],\n \"time indicating when the order should be delivered\": [\n \"\"\n ],\n \"where the order will be delivered\": [\n \"\"\n ],\n \"Auto-refund delay\": [\n \"Plazo de reembolso autom\u00E1tico\"\n ],\n \"how long the wallet should try to get an automatic refund for the purchase\": [\n \"\"\n ],\n \"Extra info\": [\n \"Informaci\u00F3n extra\"\n ],\n \"extra data that is only interpreted by the merchant frontend\": [\n \"\"\n ],\n \"Order\": [\n \"Orden\"\n ],\n \"claimed\": [\n \"reclamado\"\n ],\n \"claimed at\": [\n \"reclamado\"\n ],\n \"Timeline\": [\n \"Cronolog\u00EDa\"\n ],\n \"Payment details\": [\n \"Detalles de pago\"\n ],\n \"Order status\": [\n \"Estado de orden\"\n ],\n \"Product list\": [\n \"Lista de producto\"\n ],\n \"paid\": [\n \"pagados\"\n ],\n \"wired\": [\n \"transferido\"\n ],\n \"refunded\": [\n \"reembolzado\"\n ],\n \"refund order\": [\n \"reembolzado\"\n ],\n \"not refundable\": [\n \"M\u00E1ximo reembolzable:\"\n ],\n \"refund\": [\n \"reembolzar\"\n ],\n \"Refunded amount\": [\n \"Monto reembolzado\"\n ],\n \"Refund taken\": [\n \"Reembolzado\"\n ],\n \"Status URL\": [\n \"URL de estado de orden\"\n ],\n \"Refund URI\": [\n \"Devoluci\u00F3n\"\n ],\n \"unpaid\": [\n \"impago\"\n ],\n \"pay at\": [\n \"pagar en\"\n ],\n \"created at\": [\n \"creado\"\n ],\n \"Order status URL\": [\n \"URL de estado de orden\"\n ],\n \"Payment URI\": [\n \"URI de pago\"\n ],\n \"Unknown order status. This is an error, please contact the administrator.\": [\n \"Estado de orden desconocido. Esto es un error, por favor contacte a su administrador.\"\n ],\n \"Back\": [\n \"\"\n ],\n \"refund created successfully\": [\n \"reembolzo creado satisfactoriamente\"\n ],\n \"could not create the refund\": [\n \"No se pudo create el reembolso\"\n ],\n \"select date to show nearby orders\": [\n \"\"\n ],\n \"order id\": [\n \"ir a id de orden\"\n ],\n \"jump to order with the given order ID\": [\n \"\"\n ],\n \"remove all filters\": [\n \"\"\n ],\n \"only show paid orders\": [\n \"\"\n ],\n \"Paid\": [\n \"Pagado\"\n ],\n \"only show orders with refunds\": [\n \"No se pudo create el reembolso\"\n ],\n \"Refunded\": [\n \"Reembolzado\"\n ],\n \"only show orders where customers paid, but wire payments from payment provider are still pending\": [\n \"\"\n ],\n \"Not wired\": [\n \"No transferido\"\n ],\n \"clear date filter\": [\n \"\"\n ],\n \"date (YYYY/MM/DD)\": [\n \"\"\n ],\n \"Enter an order id\": [\n \"ir a id de orden\"\n ],\n \"order not found\": [\n \"Servidor no encontrado\"\n ],\n \"could not get the order to refund\": [\n \"No se pudo create el reembolso\"\n ],\n \"Loading...\": [\n \"Cargando...\"\n ],\n \"click here to configure the stock of the product, leave it as is and the backend will not control stock\": [\n \"\"\n ],\n \"Manage stock\": [\n \"Administrar stock\"\n ],\n \"this product has been configured without stock control\": [\n \"\"\n ],\n \"Infinite\": [\n \"Inifinito\"\n ],\n \"lost cannot be greater than current and incoming (max %1$s)\": [\n \"la p\u00E9rdida no puede ser mayor al stock actual + entrante (max %1$s )\"\n ],\n \"Incoming\": [\n \"Ingresando\"\n ],\n \"Lost\": [\n \"Perdido\"\n ],\n \"Current\": [\n \"Actual\"\n ],\n \"remove stock control for this product\": [\n \"\"\n ],\n \"without stock\": [\n \"sin stock\"\n ],\n \"Next restock\": [\n \"Pr\u00F3ximo reabastecimiento\"\n ],\n \"Delivery address\": [\n \"Direcci\u00F3n de entrega\"\n ],\n \"product identification to use in URLs (for internal use only)\": [\n \"\"\n ],\n \"illustration of the product for customers\": [\n \"\"\n ],\n \"product description for customers\": [\n \"\"\n ],\n \"Age restricted\": [\n \"\"\n ],\n \"is this product restricted for customer below certain age?\": [\n \"\"\n ],\n \"unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers\": [\n \"\"\n ],\n \"sale price for customers, including taxes, for above units of the product\": [\n \"\"\n ],\n \"Stock\": [\n \"Existencias\"\n ],\n \"product inventory for products with finite supply (for internal use only)\": [\n \"\"\n ],\n \"taxes included in the product price, exposed to customers\": [\n \"\"\n ],\n \"Need to complete marked fields\": [\n \"\"\n ],\n \"could not create product\": [\n \"no se pudo crear el producto\"\n ],\n \"Products\": [\n \"Productos\"\n ],\n \"add product to inventory\": [\n \"\"\n ],\n \"Sell\": [\n \"Venta\"\n ],\n \"Profit\": [\n \"Ganancia\"\n ],\n \"Sold\": [\n \"Vendido\"\n ],\n \"free\": [\n \"\"\n ],\n \"go to product update page\": [\n \"producto actualizado correctamente\"\n ],\n \"Update\": [\n \"Actualizar\"\n ],\n \"remove this product from the database\": [\n \"\"\n ],\n \"update the product with new price\": [\n \"\"\n ],\n \"update product with new price\": [\n \"\"\n ],\n \"add more elements to the inventory\": [\n \"\"\n ],\n \"report elements lost in the inventory\": [\n \"\"\n ],\n \"new price for the product\": [\n \"no se pudo actualizar el producto\"\n ],\n \"the are value with errors\": [\n \"\"\n ],\n \"update product with new stock and price\": [\n \"\"\n ],\n \"There is no products yet, add more pressing the + sign\": [\n \"No hay propinas todav\u00EDa, agregar mas presionando el signo +\"\n ],\n \"product updated successfully\": [\n \"producto actualizado correctamente\"\n ],\n \"could not update the product\": [\n \"no se pudo actualizar el producto\"\n ],\n \"product delete successfully\": [\n \"producto fue eliminado correctamente\"\n ],\n \"could not delete the product\": [\n \"no se pudo eliminar el producto\"\n ],\n \"Product id:\": [\n \"Id de producto\"\n ],\n \"To complete the setup of the reserve, you must now initiate a wire transfer using the given wire transfer subject and crediting the specified amount to the indicated account of the exchange.\": [\n \"\"\n ],\n \"If your system supports RFC 8905, you can do this by opening this URI:\": [\n \"\"\n ],\n \"it should be greater than 0\": [\n \"Debe ser mayor a 0\"\n ],\n \"must be a valid URL\": [\n \"\"\n ],\n \"Initial balance\": [\n \"Instancia\"\n ],\n \"balance prior to deposit\": [\n \"\"\n ],\n \"Exchange URL\": [\n \"URL del Exchange\"\n ],\n \"URL of exchange\": [\n \"\"\n ],\n \"Next\": [\n \"\"\n ],\n \"Wire method\": [\n \"\"\n ],\n \"method to use for wire transfer\": [\n \"no se pudo informar la transferencia\"\n ],\n \"Select one wire method\": [\n \"\"\n ],\n \"could not create reserve\": [\n \"No se pudo create el reembolso\"\n ],\n \"Valid until\": [\n \"\"\n ],\n \"Created balance\": [\n \"creado\"\n ],\n \"Exchange balance\": [\n \"Monto inicial\"\n ],\n \"Picked up\": [\n \"\"\n ],\n \"Committed\": [\n \"Monto confirmado\"\n ],\n \"Account address\": [\n \"Direcci\u00F3n de cuenta\"\n ],\n \"Subject\": [\n \"\"\n ],\n \"Tips\": [\n \"Propinas\"\n ],\n \"No tips has been authorized from this reserve\": [\n \"\"\n ],\n \"Authorized\": [\n \"Token de autorizaci\u00F3n\"\n ],\n \"Expiration\": [\n \"Informaci\u00F3n extra\"\n ],\n \"amount of tip\": [\n \"monto\"\n ],\n \"Justification\": [\n \"Jurisdicci\u00F3n\"\n ],\n \"reason for the tip\": [\n \"\"\n ],\n \"URL after tip\": [\n \"\"\n ],\n \"URL to visit after tip payment\": [\n \"\"\n ],\n \"Reserves not yet funded\": [\n \"Servidor no encontrado\"\n ],\n \"Reserves ready\": [\n \"\"\n ],\n \"add new reserve\": [\n \"cargar nuevas transferencias\"\n ],\n \"Expires at\": [\n \"\"\n ],\n \"Initial\": [\n \"\"\n ],\n \"delete selected reserve from the database\": [\n \"\"\n ],\n \"authorize new tip from selected reserve\": [\n \"\"\n ],\n \"There is no ready reserves yet, add more pressing the + sign or fund them\": [\n \"No hay transferencias todav\u00EDa, agregar mas presionando el signo +\"\n ],\n \"Expected Balance\": [\n \"Ejecutado en\"\n ],\n \"could not create the tip\": [\n \"No se pudo create el reembolso\"\n ],\n \"should not be empty\": [\n \"no puede ser vac\u00EDo\"\n ],\n \"should be greater that 0\": [\n \"Debe ser mayor a 0\"\n ],\n \"can't be empty\": [\n \"no puede ser vac\u00EDo\"\n ],\n \"to short\": [\n \"\"\n ],\n \"Identifier\": [\n \"\"\n ],\n \"Name of the template in URLs.\": [\n \"\"\n ],\n \"Describe what this template stands for\": [\n \"\"\n ],\n \"Order summary\": [\n \"Estado de orden\"\n ],\n \"Minimum age\": [\n \"\"\n ],\n \"Is this contract restricted to some age?\": [\n \"\"\n ],\n \"Payment timeout\": [\n \"Opciones de pago\"\n ],\n \"How much time has the customer to complete the payment once the order was created.\": [\n \"\"\n ],\n \"Point-of-sale key\": [\n \"\"\n ],\n \"Useful to validate the purchase\": [\n \"\"\n ],\n \"could not inform template\": [\n \"no se pudo informar la transferencia\"\n ],\n \"Amount is required\": [\n \"Login necesario\"\n ],\n \"Order summary is required\": [\n \"\"\n ],\n \"Amount of the order\": [\n \"\"\n ],\n \"could not create order from template\": [\n \"No se pudo create el reembolso\"\n ],\n \"Templates\": [\n \"\"\n ],\n \"add new templates\": [\n \"\"\n ],\n \"load more templates before the first one\": [\n \"\"\n ],\n \"load newer templates\": [\n \"cargar nuevas transferencias\"\n ],\n \"delete selected templates from the database\": [\n \"\"\n ],\n \"use template to create new order\": [\n \"\"\n ],\n \"load more templates after the last one\": [\n \"\"\n ],\n \"load older templates\": [\n \"cargar viejas transferencias\"\n ],\n \"There is no templates yet, add more pressing the + sign\": [\n \"No hay propinas todav\u00EDa, agregar mas presionando el signo +\"\n ],\n \"template delete successfully\": [\n \"producto fue eliminado correctamente\"\n ],\n \"could not delete the template\": [\n \"no se pudo eliminar el producto\"\n ],\n \"could not update template\": [\n \"no se pudo actualizar el producto\"\n ],\n \"should be one of '%1$s'\": [\n \"deber\u00EDan ser iguales\"\n ],\n \"Webhook ID to use\": [\n \"\"\n ],\n \"Event\": [\n \"\"\n ],\n \"The event of the webhook: why the webhook is used\": [\n \"\"\n ],\n \"Method\": [\n \"\"\n ],\n \"Method used by the webhook\": [\n \"\"\n ],\n \"URL\": [\n \"\"\n ],\n \"URL of the webhook where the customer will be redirected\": [\n \"\"\n ],\n \"Header\": [\n \"\"\n ],\n \"Header template of the webhook\": [\n \"\"\n ],\n \"Body\": [\n \"\"\n ],\n \"Body template by the webhook\": [\n \"\"\n ],\n \"Webhooks\": [\n \"\"\n ],\n \"add new webhooks\": [\n \"\"\n ],\n \"load more webhooks before the first one\": [\n \"\"\n ],\n \"load newer webhooks\": [\n \"cargar nuevas ordenes\"\n ],\n \"Event type\": [\n \"\"\n ],\n \"delete selected webhook from the database\": [\n \"\"\n ],\n \"load more webhooks after the last one\": [\n \"\"\n ],\n \"load older webhooks\": [\n \"cargar viejas ordenes\"\n ],\n \"There is no webhooks yet, add more pressing the + sign\": [\n \"No hay propinas todav\u00EDa, agregar mas presionando el signo +\"\n ],\n \"webhook delete successfully\": [\n \"producto fue eliminado correctamente\"\n ],\n \"could not delete the webhook\": [\n \"no se pudo eliminar el producto\"\n ],\n \"check the id, does not look valid\": [\n \"verificar el id, no parece v\u00E1lido\"\n ],\n \"should have 52 characters, current %1$s\": [\n \"deber\u00EDa tener 52 caracteres, actualmente %1$s\"\n ],\n \"URL doesn't have the right format\": [\n \"La URL no tiene el formato correcto\"\n ],\n \"Credited bank account\": [\n \"\"\n ],\n \"Select one account\": [\n \"\"\n ],\n \"Bank account of the merchant where the payment was received\": [\n \"\"\n ],\n \"Wire transfer ID\": [\n \"Id de transferencia\"\n ],\n \"unique identifier of the wire transfer used by the exchange, must be 52 characters long\": [\n \"\"\n ],\n \"Base URL of the exchange that made the transfer, should have been in the wire transfer subject\": [\n \"\"\n ],\n \"Amount credited\": [\n \"\"\n ],\n \"Actual amount that was wired to the merchant's bank account\": [\n \"\"\n ],\n \"could not inform transfer\": [\n \"no se pudo informar la transferencia\"\n ],\n \"Transfers\": [\n \"Transferencias\"\n ],\n \"add new transfer\": [\n \"cargar nuevas transferencias\"\n ],\n \"load more transfers before the first one\": [\n \"\"\n ],\n \"load newer transfers\": [\n \"cargar nuevas transferencias\"\n ],\n \"Credit\": [\n \"Cr\u00E9dito\"\n ],\n \"Confirmed\": [\n \"Confirmado\"\n ],\n \"Verified\": [\n \"Verificado\"\n ],\n \"Executed at\": [\n \"Ejecutado en\"\n ],\n \"yes\": [\n \"si\"\n ],\n \"no\": [\n \"no\"\n ],\n \"unknown\": [\n \"desconocido\"\n ],\n \"delete selected transfer from the database\": [\n \"\"\n ],\n \"load more transfer after the last one\": [\n \"\"\n ],\n \"load older transfers\": [\n \"cargar viejas transferencias\"\n ],\n \"There is no transfer yet, add more pressing the + sign\": [\n \"No hay transferencias todav\u00EDa, agregar mas presionando el signo +\"\n ],\n \"filter by account address\": [\n \"Direcci\u00F3n de cuenta\"\n ],\n \"only show wire transfers confirmed by the merchant\": [\n \"\"\n ],\n \"only show wire transfers claimed by the exchange\": [\n \"\"\n ],\n \"Unverified\": [\n \"Verificado\"\n ],\n \"is not valid\": [\n \"\"\n ],\n \"is not a number\": [\n \"N\u00FAmero de edificio\"\n ],\n \"must be 1 or greater\": [\n \"\"\n ],\n \"max 7 lines\": [\n \"\"\n ],\n \"change authorization configuration\": [\n \"\"\n ],\n \"Need to complete marked fields and choose authorization method\": [\n \"\"\n ],\n \"This is not a valid bitcoin address.\": [\n \"\"\n ],\n \"This is not a valid Ethereum address.\": [\n \"\"\n ],\n \"IBAN numbers usually have more that 4 digits\": [\n \"\"\n ],\n \"IBAN numbers usually have less that 34 digits\": [\n \"\"\n ],\n \"IBAN country code not found\": [\n \"\"\n ],\n \"IBAN number is not valid, checksum is wrong\": [\n \"\"\n ],\n \"Target type\": [\n \"\"\n ],\n \"Method to use for wire transfer\": [\n \"no se pudo informar la transferencia\"\n ],\n \"Routing\": [\n \"\"\n ],\n \"Routing number.\": [\n \"N\u00FAmero de edificio\"\n ],\n \"Account\": [\n \"Monto\"\n ],\n \"Account number.\": [\n \"Direcci\u00F3n de cuenta\"\n ],\n \"Business Identifier Code.\": [\n \"\"\n ],\n \"Bank Account Number.\": [\n \"\"\n ],\n \"Unified Payment Interface.\": [\n \"\"\n ],\n \"Bitcoin protocol.\": [\n \"\"\n ],\n \"Ethereum protocol.\": [\n \"\"\n ],\n \"Interledger protocol.\": [\n \"\"\n ],\n \"Host\": [\n \"\"\n ],\n \"Bank host.\": [\n \"\"\n ],\n \"Bank account.\": [\n \"\"\n ],\n \"Bank account owner's name.\": [\n \"\"\n ],\n \"No accounts yet.\": [\n \"\"\n ],\n \"Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.\": [\n \"\"\n ],\n \"Business name\": [\n \"Nombre de edificio\"\n ],\n \"Legal name of the business represented by this instance.\": [\n \"\"\n ],\n \"Email\": [\n \"\"\n ],\n \"Contact email\": [\n \"\"\n ],\n \"Website URL\": [\n \"\"\n ],\n \"URL.\": [\n \"\"\n ],\n \"Logo\": [\n \"\"\n ],\n \"Logo image.\": [\n \"\"\n ],\n \"Bank account\": [\n \"\"\n ],\n \"URI specifying bank account for crediting revenue.\": [\n \"\"\n ],\n \"Default max deposit fee\": [\n \"Impuesto m\u00E1ximo de deposito por omisi\u00F3n\"\n ],\n \"Maximum deposit fees this merchant is willing to pay per order by default.\": [\n \"\"\n ],\n \"Default max wire fee\": [\n \"Impuesto m\u00E1ximo de transferencia por omisi\u00F3n\"\n ],\n \"Maximum wire fees this merchant is willing to pay per wire transfer by default.\": [\n \"\"\n ],\n \"Default wire fee amortization\": [\n \"Amortizaci\u00F3n de impuesto de transferencia por omisi\u00F3n\"\n ],\n \"Number of orders excess wire transfer fees will be divided by to compute per order surcharge.\": [\n \"\"\n ],\n \"Physical location of the merchant.\": [\n \"\"\n ],\n \"Jurisdiction\": [\n \"Jurisdicci\u00F3n\"\n ],\n \"Jurisdiction for legal disputes with the merchant.\": [\n \"\"\n ],\n \"Default payment delay\": [\n \"Retrazo de pago por omisi\u00F3n\"\n ],\n \"Time customers have to pay an order before the offer expires by default.\": [\n \"\"\n ],\n \"Default wire transfer delay\": [\n \"Retrazo de transferencia por omisi\u00F3n\"\n ],\n \"Maximum time an exchange is allowed to delay wiring funds to the merchant, enabling it to aggregate smaller payments into larger wire transfers and reducing wire fees.\": [\n \"\"\n ],\n \"Instance id\": [\n \"Instancia\"\n ],\n \"Change the authorization method use for this instance.\": [\n \"Limpiar el token de autorizaci\u00F3n significa acceso publico a la instancia\"\n ],\n \"Manage access token\": [\n \"Administrar token\"\n ],\n \"Failed to create instance\": [\n \"no se pudo crear la instancia\"\n ],\n \"Login required\": [\n \"Login necesario\"\n ],\n \"Please enter your access token.\": [\n \"\"\n ],\n \"Access Token\": [\n \"Acceso denegado\"\n ],\n \"The request to the backend take too long and was cancelled\": [\n \"\"\n ],\n \"Diagnostic from %1$s is '%2$s'\": [\n \"\"\n ],\n \"The backend reported a problem: HTTP status #%1$s\": [\n \"Servidir reporto un problema: HTTP status #%1$s\"\n ],\n \"Access denied\": [\n \"Acceso denegado\"\n ],\n \"The access token provided is invalid.\": [\n \"\"\n ],\n \"No 'default' instance configured yet.\": [\n \"Sin instancia default\"\n ],\n \"Create a 'default' instance to begin using the merchant backoffice.\": [\n \"\"\n ],\n \"The access token provided is invalid\": [\n \"\"\n ],\n \"Hide for today\": [\n \"\"\n ],\n \"Instance\": [\n \"Instancia\"\n ],\n \"Settings\": [\n \"Configuraci\u00F3n\"\n ],\n \"Connection\": [\n \"Conexi\u00F3n\"\n ],\n \"New\": [\n \"Nuevo\"\n ],\n \"List\": [\n \"Lista\"\n ],\n \"Log out\": [\n \"Salir\"\n ],\n \"Check your token is valid\": [\n \"Verifica que el token sea valido\"\n ],\n \"Couldn't access the server.\": [\n \"No se pudo acceder al servidor.\"\n ],\n \"Could not infer instance id from url %1$s\": [\n \"No se pudo inferir el id de la instancia con la url %1$s\"\n ],\n \"Server not found\": [\n \"Servidor no encontrado\"\n ],\n \"Couldn't access the server\": [\n \"No se pudo aceder al servidor\"\n ],\n \"Got message %1$s from %2$s\": [\n \"Recivimos el mensaje %1$s desde %2$s\"\n ],\n \"Unexpected Error\": [\n \"Error inesperado\"\n ],\n \"The value %1$s is invalid for a payment url\": [\n \"El valor %1$s es invalido para una URL de pago\"\n ],\n \"add element to the list\": [\n \"\"\n ],\n \"add\": [\n \"Agregar\"\n ],\n \"Deleting\": [\n \"Borrando\"\n ],\n \"Changing\": [\n \"Cambiando\"\n ],\n \"Order ID\": [\n \"Orden\"\n ],\n \"Payment URL\": [\n \"Detalles de pago\"\n ]\n }\n }\n};\n\nstrings['fr'] = {\n \"domain\": \"messages\",\n \"locale_data\": {\n \"messages\": {\n \"\": {\n \"domain\": \"messages\",\n \"plural_forms\": \"nplurals=2; plural=(n != 1);\",\n \"lang\": \"\"\n },\n \"Cancel\": [\n \"\"\n ],\n \"%1$s\": [\n \"\"\n ],\n \"Continue\": [\n \"\"\n ],\n \"Clear\": [\n \"\"\n ],\n \"Confirm\": [\n \"\"\n ],\n \"is not the same as the current access token\": [\n \"\"\n ],\n \"cannot be empty\": [\n \"\"\n ],\n \"cannot be the same as the old token\": [\n \"\"\n ],\n \"is not the same\": [\n \"\"\n ],\n \"You are updating the access token from instance with id %1$s\": [\n \"\"\n ],\n \"Old access token\": [\n \"\"\n ],\n \"access token currently in use\": [\n \"\"\n ],\n \"New access token\": [\n \"\"\n ],\n \"next access token to be used\": [\n \"\"\n ],\n \"Repeat access token\": [\n \"\"\n ],\n \"confirm the same access token\": [\n \"\"\n ],\n \"Clearing the access token will mean public access to the instance\": [\n \"\"\n ],\n \"cannot be the same as the old access token\": [\n \"\"\n ],\n \"You are setting the access token for the new instance\": [\n \"\"\n ],\n \"With external authorization method no check will be done by the merchant backend\": [\n \"\"\n ],\n \"Set external authorization\": [\n \"\"\n ],\n \"Set access token\": [\n \"\"\n ],\n \"Operation in progress...\": [\n \"\"\n ],\n \"The operation will be automatically canceled after %1$s seconds\": [\n \"\"\n ],\n \"Instances\": [\n \"\"\n ],\n \"Delete\": [\n \"\"\n ],\n \"add new instance\": [\n \"\"\n ],\n \"ID\": [\n \"\"\n ],\n \"Name\": [\n \"\"\n ],\n \"Edit\": [\n \"\"\n ],\n \"Purge\": [\n \"\"\n ],\n \"There is no instances yet, add more pressing the + sign\": [\n \"\"\n ],\n \"Only show active instances\": [\n \"\"\n ],\n \"Active\": [\n \"\"\n ],\n \"Only show deleted instances\": [\n \"\"\n ],\n \"Deleted\": [\n \"\"\n ],\n \"Show all instances\": [\n \"\"\n ],\n \"All\": [\n \"\"\n ],\n \"Instance '%1$s' (ID: %2$s) has been deleted\": [\n \"\"\n ],\n \"Failed to delete instance\": [\n \"\"\n ],\n \"Instance '%1$s' (ID: %2$s) has been disabled\": [\n \"\"\n ],\n \"Failed to purge instance\": [\n \"\"\n ],\n \"Pending KYC verification\": [\n \"\"\n ],\n \"Timed out\": [\n \"\"\n ],\n \"Exchange\": [\n \"\"\n ],\n \"Target account\": [\n \"\"\n ],\n \"KYC URL\": [\n \"\"\n ],\n \"Code\": [\n \"\"\n ],\n \"Http Status\": [\n \"\"\n ],\n \"No pending kyc verification!\": [\n \"\"\n ],\n \"change value to unknown date\": [\n \"\"\n ],\n \"change value to empty\": [\n \"\"\n ],\n \"clear\": [\n \"\"\n ],\n \"change value to never\": [\n \"\"\n ],\n \"never\": [\n \"\"\n ],\n \"Country\": [\n \"\"\n ],\n \"Address\": [\n \"\"\n ],\n \"Building number\": [\n \"\"\n ],\n \"Building name\": [\n \"\"\n ],\n \"Street\": [\n \"\"\n ],\n \"Post code\": [\n \"\"\n ],\n \"Town location\": [\n \"\"\n ],\n \"Town\": [\n \"\"\n ],\n \"District\": [\n \"\"\n ],\n \"Country subdivision\": [\n \"\"\n ],\n \"Product id\": [\n \"\"\n ],\n \"Description\": [\n \"\"\n ],\n \"Product\": [\n \"\"\n ],\n \"search products by it's description or id\": [\n \"\"\n ],\n \"no products found with that description\": [\n \"\"\n ],\n \"You must enter a valid product identifier.\": [\n \"\"\n ],\n \"Quantity must be greater than 0!\": [\n \"\"\n ],\n \"This quantity exceeds remaining stock. Currently, only %1$s units remain unreserved in stock.\": [\n \"\"\n ],\n \"Quantity\": [\n \"\"\n ],\n \"how many products will be added\": [\n \"\"\n ],\n \"Add from inventory\": [\n \"\"\n ],\n \"Image should be smaller than 1 MB\": [\n \"\"\n ],\n \"Add\": [\n \"\"\n ],\n \"Remove\": [\n \"\"\n ],\n \"No taxes configured for this product.\": [\n \"\"\n ],\n \"Amount\": [\n \"\"\n ],\n \"Taxes can be in currencies that differ from the main currency used by the merchant.\": [\n \"\"\n ],\n \"Enter currency and value separated with a colon, e.g. &quot;USD:2.3&quot;.\": [\n \"\"\n ],\n \"Legal name of the tax, e.g. VAT or import duties.\": [\n \"\"\n ],\n \"add tax to the tax list\": [\n \"\"\n ],\n \"describe and add a product that is not in the inventory list\": [\n \"\"\n ],\n \"Add custom product\": [\n \"\"\n ],\n \"Complete information of the product\": [\n \"\"\n ],\n \"Image\": [\n \"\"\n ],\n \"photo of the product\": [\n \"\"\n ],\n \"full product description\": [\n \"\"\n ],\n \"Unit\": [\n \"\"\n ],\n \"name of the product unit\": [\n \"\"\n ],\n \"Price\": [\n \"\"\n ],\n \"amount in the current currency\": [\n \"\"\n ],\n \"Taxes\": [\n \"\"\n ],\n \"image\": [\n \"\"\n ],\n \"description\": [\n \"\"\n ],\n \"quantity\": [\n \"\"\n ],\n \"unit price\": [\n \"\"\n ],\n \"total price\": [\n \"\"\n ],\n \"required\": [\n \"\"\n ],\n \"must be greater than 0\": [\n \"\"\n ],\n \"not a valid json\": [\n \"\"\n ],\n \"should be in the future\": [\n \"\"\n ],\n \"refund deadline cannot be before pay deadline\": [\n \"\"\n ],\n \"wire transfer deadline cannot be before refund deadline\": [\n \"\"\n ],\n \"wire transfer deadline cannot be before pay deadline\": [\n \"\"\n ],\n \"should have a refund deadline\": [\n \"\"\n ],\n \"auto refund cannot be after refund deadline\": [\n \"\"\n ],\n \"Manage products in order\": [\n \"\"\n ],\n \"Manage list of products in the order.\": [\n \"\"\n ],\n \"Remove this product from the order.\": [\n \"\"\n ],\n \"Total price\": [\n \"\"\n ],\n \"total product price added up\": [\n \"\"\n ],\n \"Amount to be paid by the customer\": [\n \"\"\n ],\n \"Order price\": [\n \"\"\n ],\n \"final order price\": [\n \"\"\n ],\n \"Summary\": [\n \"\"\n ],\n \"Title of the order to be shown to the customer\": [\n \"\"\n ],\n \"Shipping and Fulfillment\": [\n \"\"\n ],\n \"Delivery date\": [\n \"\"\n ],\n \"Deadline for physical delivery assured by the merchant.\": [\n \"\"\n ],\n \"Location\": [\n \"\"\n ],\n \"address where the products will be delivered\": [\n \"\"\n ],\n \"Fulfillment URL\": [\n \"\"\n ],\n \"URL to which the user will be redirected after successful payment.\": [\n \"\"\n ],\n \"Taler payment options\": [\n \"\"\n ],\n \"Override default Taler payment settings for this order\": [\n \"\"\n ],\n \"Payment deadline\": [\n \"\"\n ],\n \"Deadline for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline.\": [\n \"\"\n ],\n \"Refund deadline\": [\n \"\"\n ],\n \"Time until which the order can be refunded by the merchant.\": [\n \"\"\n ],\n \"Wire transfer deadline\": [\n \"\"\n ],\n \"Deadline for the exchange to make the wire transfer.\": [\n \"\"\n ],\n \"Auto-refund deadline\": [\n \"\"\n ],\n \"Time until which the wallet will automatically check for refunds without user interaction.\": [\n \"\"\n ],\n \"Maximum deposit fee\": [\n \"\"\n ],\n \"Maximum deposit fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.\": [\n \"\"\n ],\n \"Maximum wire fee\": [\n \"\"\n ],\n \"Maximum aggregate wire fees the merchant is willing to cover for this order. Wire fees exceeding this amount are to be covered by the customers.\": [\n \"\"\n ],\n \"Wire fee amortization\": [\n \"\"\n ],\n \"Factor by which wire fees exceeding the above threshold are divided to determine the share of excess wire fees to be paid explicitly by the consumer.\": [\n \"\"\n ],\n \"Create token\": [\n \"\"\n ],\n \"Uncheck this option if the merchant backend generated an order ID with enough entropy to prevent adversarial claims.\": [\n \"\"\n ],\n \"Minimum age required\": [\n \"\"\n ],\n \"Any value greater than 0 will limit the coins able be used to pay this contract. If empty the age restriction will be defined by the products\": [\n \"\"\n ],\n \"Min age defined by the producs is %1$s\": [\n \"\"\n ],\n \"Additional information\": [\n \"\"\n ],\n \"Custom information to be included in the contract for this order.\": [\n \"\"\n ],\n \"You must enter a value in JavaScript Object Notation (JSON).\": [\n \"\"\n ],\n \"days\": [\n \"\"\n ],\n \"hours\": [\n \"\"\n ],\n \"minutes\": [\n \"\"\n ],\n \"seconds\": [\n \"\"\n ],\n \"forever\": [\n \"\"\n ],\n \"%1$sM\": [\n \"\"\n ],\n \"%1$sY\": [\n \"\"\n ],\n \"%1$sd\": [\n \"\"\n ],\n \"%1$sh\": [\n \"\"\n ],\n \"%1$smin\": [\n \"\"\n ],\n \"%1$ssec\": [\n \"\"\n ],\n \"Orders\": [\n \"\"\n ],\n \"create order\": [\n \"\"\n ],\n \"load newer orders\": [\n \"\"\n ],\n \"Date\": [\n \"\"\n ],\n \"Refund\": [\n \"\"\n ],\n \"copy url\": [\n \"\"\n ],\n \"load older orders\": [\n \"\"\n ],\n \"No orders have been found matching your query!\": [\n \"\"\n ],\n \"duplicated\": [\n \"\"\n ],\n \"invalid format\": [\n \"\"\n ],\n \"this value exceed the refundable amount\": [\n \"\"\n ],\n \"date\": [\n \"\"\n ],\n \"amount\": [\n \"\"\n ],\n \"reason\": [\n \"\"\n ],\n \"amount to be refunded\": [\n \"\"\n ],\n \"Max refundable:\": [\n \"\"\n ],\n \"Reason\": [\n \"\"\n ],\n \"Choose one...\": [\n \"\"\n ],\n \"requested by the customer\": [\n \"\"\n ],\n \"other\": [\n \"\"\n ],\n \"why this order is being refunded\": [\n \"\"\n ],\n \"more information to give context\": [\n \"\"\n ],\n \"Contract Terms\": [\n \"\"\n ],\n \"human-readable description of the whole purchase\": [\n \"\"\n ],\n \"total price for the transaction\": [\n \"\"\n ],\n \"URL for this purchase\": [\n \"\"\n ],\n \"Max fee\": [\n \"\"\n ],\n \"maximum total deposit fee accepted by the merchant for this contract\": [\n \"\"\n ],\n \"Max wire fee\": [\n \"\"\n ],\n \"maximum wire fee accepted by the merchant\": [\n \"\"\n ],\n \"over how many customer transactions does the merchant expect to amortize wire fees on average\": [\n \"\"\n ],\n \"Created at\": [\n \"\"\n ],\n \"time when this contract was generated\": [\n \"\"\n ],\n \"after this deadline has passed no refunds will be accepted\": [\n \"\"\n ],\n \"after this deadline, the merchant won't accept payments for the contract\": [\n \"\"\n ],\n \"transfer deadline for the exchange\": [\n \"\"\n ],\n \"time indicating when the order should be delivered\": [\n \"\"\n ],\n \"where the order will be delivered\": [\n \"\"\n ],\n \"Auto-refund delay\": [\n \"\"\n ],\n \"how long the wallet should try to get an automatic refund for the purchase\": [\n \"\"\n ],\n \"Extra info\": [\n \"\"\n ],\n \"extra data that is only interpreted by the merchant frontend\": [\n \"\"\n ],\n \"Order\": [\n \"\"\n ],\n \"claimed\": [\n \"\"\n ],\n \"claimed at\": [\n \"\"\n ],\n \"Timeline\": [\n \"\"\n ],\n \"Payment details\": [\n \"\"\n ],\n \"Order status\": [\n \"\"\n ],\n \"Product list\": [\n \"\"\n ],\n \"paid\": [\n \"\"\n ],\n \"wired\": [\n \"\"\n ],\n \"refunded\": [\n \"\"\n ],\n \"refund order\": [\n \"\"\n ],\n \"not refundable\": [\n \"\"\n ],\n \"refund\": [\n \"\"\n ],\n \"Refunded amount\": [\n \"\"\n ],\n \"Refund taken\": [\n \"\"\n ],\n \"Status URL\": [\n \"\"\n ],\n \"Refund URI\": [\n \"\"\n ],\n \"unpaid\": [\n \"\"\n ],\n \"pay at\": [\n \"\"\n ],\n \"created at\": [\n \"\"\n ],\n \"Order status URL\": [\n \"\"\n ],\n \"Payment URI\": [\n \"\"\n ],\n \"Unknown order status. This is an error, please contact the administrator.\": [\n \"\"\n ],\n \"Back\": [\n \"\"\n ],\n \"refund created successfully\": [\n \"\"\n ],\n \"could not create the refund\": [\n \"\"\n ],\n \"select date to show nearby orders\": [\n \"\"\n ],\n \"order id\": [\n \"\"\n ],\n \"jump to order with the given order ID\": [\n \"\"\n ],\n \"remove all filters\": [\n \"\"\n ],\n \"only show paid orders\": [\n \"\"\n ],\n \"Paid\": [\n \"\"\n ],\n \"only show orders with refunds\": [\n \"\"\n ],\n \"Refunded\": [\n \"\"\n ],\n \"only show orders where customers paid, but wire payments from payment provider are still pending\": [\n \"\"\n ],\n \"Not wired\": [\n \"\"\n ],\n \"clear date filter\": [\n \"\"\n ],\n \"date (YYYY/MM/DD)\": [\n \"\"\n ],\n \"Enter an order id\": [\n \"\"\n ],\n \"order not found\": [\n \"\"\n ],\n \"could not get the order to refund\": [\n \"\"\n ],\n \"Loading...\": [\n \"\"\n ],\n \"click here to configure the stock of the product, leave it as is and the backend will not control stock\": [\n \"\"\n ],\n \"Manage stock\": [\n \"\"\n ],\n \"this product has been configured without stock control\": [\n \"\"\n ],\n \"Infinite\": [\n \"\"\n ],\n \"lost cannot be greater than current and incoming (max %1$s)\": [\n \"\"\n ],\n \"Incoming\": [\n \"\"\n ],\n \"Lost\": [\n \"\"\n ],\n \"Current\": [\n \"\"\n ],\n \"remove stock control for this product\": [\n \"\"\n ],\n \"without stock\": [\n \"\"\n ],\n \"Next restock\": [\n \"\"\n ],\n \"Delivery address\": [\n \"\"\n ],\n \"product identification to use in URLs (for internal use only)\": [\n \"\"\n ],\n \"illustration of the product for customers\": [\n \"\"\n ],\n \"product description for customers\": [\n \"\"\n ],\n \"Age restricted\": [\n \"\"\n ],\n \"is this product restricted for customer below certain age?\": [\n \"\"\n ],\n \"unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers\": [\n \"\"\n ],\n \"sale price for customers, including taxes, for above units of the product\": [\n \"\"\n ],\n \"Stock\": [\n \"\"\n ],\n \"product inventory for products with finite supply (for internal use only)\": [\n \"\"\n ],\n \"taxes included in the product price, exposed to customers\": [\n \"\"\n ],\n \"Need to complete marked fields\": [\n \"\"\n ],\n \"could not create product\": [\n \"\"\n ],\n \"Products\": [\n \"\"\n ],\n \"add product to inventory\": [\n \"\"\n ],\n \"Sell\": [\n \"\"\n ],\n \"Profit\": [\n \"\"\n ],\n \"Sold\": [\n \"\"\n ],\n \"free\": [\n \"\"\n ],\n \"go to product update page\": [\n \"\"\n ],\n \"Update\": [\n \"\"\n ],\n \"remove this product from the database\": [\n \"\"\n ],\n \"update the product with new price\": [\n \"\"\n ],\n \"update product with new price\": [\n \"\"\n ],\n \"add more elements to the inventory\": [\n \"\"\n ],\n \"report elements lost in the inventory\": [\n \"\"\n ],\n \"new price for the product\": [\n \"\"\n ],\n \"the are value with errors\": [\n \"\"\n ],\n \"update product with new stock and price\": [\n \"\"\n ],\n \"There is no products yet, add more pressing the + sign\": [\n \"\"\n ],\n \"product updated successfully\": [\n \"\"\n ],\n \"could not update the product\": [\n \"\"\n ],\n \"product delete successfully\": [\n \"\"\n ],\n \"could not delete the product\": [\n \"\"\n ],\n \"Product id:\": [\n \"\"\n ],\n \"To complete the setup of the reserve, you must now initiate a wire transfer using the given wire transfer subject and crediting the specified amount to the indicated account of the exchange.\": [\n \"\"\n ],\n \"If your system supports RFC 8905, you can do this by opening this URI:\": [\n \"\"\n ],\n \"it should be greater than 0\": [\n \"\"\n ],\n \"must be a valid URL\": [\n \"\"\n ],\n \"Initial balance\": [\n \"\"\n ],\n \"balance prior to deposit\": [\n \"\"\n ],\n \"Exchange URL\": [\n \"\"\n ],\n \"URL of exchange\": [\n \"\"\n ],\n \"Next\": [\n \"\"\n ],\n \"Wire method\": [\n \"\"\n ],\n \"method to use for wire transfer\": [\n \"\"\n ],\n \"Select one wire method\": [\n \"\"\n ],\n \"could not create reserve\": [\n \"\"\n ],\n \"Valid until\": [\n \"\"\n ],\n \"Created balance\": [\n \"\"\n ],\n \"Exchange balance\": [\n \"\"\n ],\n \"Picked up\": [\n \"\"\n ],\n \"Committed\": [\n \"\"\n ],\n \"Account address\": [\n \"\"\n ],\n \"Subject\": [\n \"\"\n ],\n \"Tips\": [\n \"\"\n ],\n \"No tips has been authorized from this reserve\": [\n \"\"\n ],\n \"Authorized\": [\n \"\"\n ],\n \"Expiration\": [\n \"\"\n ],\n \"amount of tip\": [\n \"\"\n ],\n \"Justification\": [\n \"\"\n ],\n \"reason for the tip\": [\n \"\"\n ],\n \"URL after tip\": [\n \"\"\n ],\n \"URL to visit after tip payment\": [\n \"\"\n ],\n \"Reserves not yet funded\": [\n \"\"\n ],\n \"Reserves ready\": [\n \"\"\n ],\n \"add new reserve\": [\n \"\"\n ],\n \"Expires at\": [\n \"\"\n ],\n \"Initial\": [\n \"\"\n ],\n \"delete selected reserve from the database\": [\n \"\"\n ],\n \"authorize new tip from selected reserve\": [\n \"\"\n ],\n \"There is no ready reserves yet, add more pressing the + sign or fund them\": [\n \"\"\n ],\n \"Expected Balance\": [\n \"\"\n ],\n \"could not create the tip\": [\n \"\"\n ],\n \"should not be empty\": [\n \"\"\n ],\n \"should be greater that 0\": [\n \"\"\n ],\n \"can't be empty\": [\n \"\"\n ],\n \"to short\": [\n \"\"\n ],\n \"Identifier\": [\n \"\"\n ],\n \"Name of the template in URLs.\": [\n \"\"\n ],\n \"Describe what this template stands for\": [\n \"\"\n ],\n \"Order summary\": [\n \"\"\n ],\n \"Minimum age\": [\n \"\"\n ],\n \"Is this contract restricted to some age?\": [\n \"\"\n ],\n \"Payment timeout\": [\n \"\"\n ],\n \"How much time has the customer to complete the payment once the order was created.\": [\n \"\"\n ],\n \"Point-of-sale key\": [\n \"\"\n ],\n \"Useful to validate the purchase\": [\n \"\"\n ],\n \"could not inform template\": [\n \"\"\n ],\n \"Amount is required\": [\n \"\"\n ],\n \"Order summary is required\": [\n \"\"\n ],\n \"Amount of the order\": [\n \"\"\n ],\n \"could not create order from template\": [\n \"\"\n ],\n \"Templates\": [\n \"\"\n ],\n \"add new templates\": [\n \"\"\n ],\n \"load more templates before the first one\": [\n \"\"\n ],\n \"load newer templates\": [\n \"\"\n ],\n \"delete selected templates from the database\": [\n \"\"\n ],\n \"use template to create new order\": [\n \"\"\n ],\n \"load more templates after the last one\": [\n \"\"\n ],\n \"load older templates\": [\n \"\"\n ],\n \"There is no templates yet, add more pressing the + sign\": [\n \"\"\n ],\n \"template delete successfully\": [\n \"\"\n ],\n \"could not delete the template\": [\n \"\"\n ],\n \"could not update template\": [\n \"\"\n ],\n \"should be one of '%1$s'\": [\n \"\"\n ],\n \"Webhook ID to use\": [\n \"\"\n ],\n \"Event\": [\n \"\"\n ],\n \"The event of the webhook: why the webhook is used\": [\n \"\"\n ],\n \"Method\": [\n \"\"\n ],\n \"Method used by the webhook\": [\n \"\"\n ],\n \"URL\": [\n \"\"\n ],\n \"URL of the webhook where the customer will be redirected\": [\n \"\"\n ],\n \"Header\": [\n \"\"\n ],\n \"Header template of the webhook\": [\n \"\"\n ],\n \"Body\": [\n \"\"\n ],\n \"Body template by the webhook\": [\n \"\"\n ],\n \"Webhooks\": [\n \"\"\n ],\n \"add new webhooks\": [\n \"\"\n ],\n \"load more webhooks before the first one\": [\n \"\"\n ],\n \"load newer webhooks\": [\n \"\"\n ],\n \"Event type\": [\n \"\"\n ],\n \"delete selected webhook from the database\": [\n \"\"\n ],\n \"load more webhooks after the last one\": [\n \"\"\n ],\n \"load older webhooks\": [\n \"\"\n ],\n \"There is no webhooks yet, add more pressing the + sign\": [\n \"\"\n ],\n \"webhook delete successfully\": [\n \"\"\n ],\n \"could not delete the webhook\": [\n \"\"\n ],\n \"check the id, does not look valid\": [\n \"\"\n ],\n \"should have 52 characters, current %1$s\": [\n \"\"\n ],\n \"URL doesn't have the right format\": [\n \"\"\n ],\n \"Credited bank account\": [\n \"\"\n ],\n \"Select one account\": [\n \"\"\n ],\n \"Bank account of the merchant where the payment was received\": [\n \"\"\n ],\n \"Wire transfer ID\": [\n \"\"\n ],\n \"unique identifier of the wire transfer used by the exchange, must be 52 characters long\": [\n \"\"\n ],\n \"Base URL of the exchange that made the transfer, should have been in the wire transfer subject\": [\n \"\"\n ],\n \"Amount credited\": [\n \"\"\n ],\n \"Actual amount that was wired to the merchant's bank account\": [\n \"\"\n ],\n \"could not inform transfer\": [\n \"\"\n ],\n \"Transfers\": [\n \"\"\n ],\n \"add new transfer\": [\n \"\"\n ],\n \"load more transfers before the first one\": [\n \"\"\n ],\n \"load newer transfers\": [\n \"\"\n ],\n \"Credit\": [\n \"\"\n ],\n \"Confirmed\": [\n \"\"\n ],\n \"Verified\": [\n \"\"\n ],\n \"Executed at\": [\n \"\"\n ],\n \"yes\": [\n \"\"\n ],\n \"no\": [\n \"\"\n ],\n \"unknown\": [\n \"\"\n ],\n \"delete selected transfer from the database\": [\n \"\"\n ],\n \"load more transfer after the last one\": [\n \"\"\n ],\n \"load older transfers\": [\n \"\"\n ],\n \"There is no transfer yet, add more pressing the + sign\": [\n \"\"\n ],\n \"filter by account address\": [\n \"\"\n ],\n \"only show wire transfers confirmed by the merchant\": [\n \"\"\n ],\n \"only show wire transfers claimed by the exchange\": [\n \"\"\n ],\n \"Unverified\": [\n \"\"\n ],\n \"is not valid\": [\n \"\"\n ],\n \"is not a number\": [\n \"\"\n ],\n \"must be 1 or greater\": [\n \"\"\n ],\n \"max 7 lines\": [\n \"\"\n ],\n \"change authorization configuration\": [\n \"\"\n ],\n \"Need to complete marked fields and choose authorization method\": [\n \"\"\n ],\n \"This is not a valid bitcoin address.\": [\n \"\"\n ],\n \"This is not a valid Ethereum address.\": [\n \"\"\n ],\n \"IBAN numbers usually have more that 4 digits\": [\n \"\"\n ],\n \"IBAN numbers usually have less that 34 digits\": [\n \"\"\n ],\n \"IBAN country code not found\": [\n \"\"\n ],\n \"IBAN number is not valid, checksum is wrong\": [\n \"\"\n ],\n \"Target type\": [\n \"\"\n ],\n \"Method to use for wire transfer\": [\n \"\"\n ],\n \"Routing\": [\n \"\"\n ],\n \"Routing number.\": [\n \"\"\n ],\n \"Account\": [\n \"\"\n ],\n \"Account number.\": [\n \"\"\n ],\n \"Business Identifier Code.\": [\n \"\"\n ],\n \"Bank Account Number.\": [\n \"\"\n ],\n \"Unified Payment Interface.\": [\n \"\"\n ],\n \"Bitcoin protocol.\": [\n \"\"\n ],\n \"Ethereum protocol.\": [\n \"\"\n ],\n \"Interledger protocol.\": [\n \"\"\n ],\n \"Host\": [\n \"\"\n ],\n \"Bank host.\": [\n \"\"\n ],\n \"Bank account.\": [\n \"\"\n ],\n \"Bank account owner's name.\": [\n \"\"\n ],\n \"No accounts yet.\": [\n \"\"\n ],\n \"Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.\": [\n \"\"\n ],\n \"Business name\": [\n \"\"\n ],\n \"Legal name of the business represented by this instance.\": [\n \"\"\n ],\n \"Email\": [\n \"\"\n ],\n \"Contact email\": [\n \"\"\n ],\n \"Website URL\": [\n \"\"\n ],\n \"URL.\": [\n \"\"\n ],\n \"Logo\": [\n \"\"\n ],\n \"Logo image.\": [\n \"\"\n ],\n \"Bank account\": [\n \"\"\n ],\n \"URI specifying bank account for crediting revenue.\": [\n \"\"\n ],\n \"Default max deposit fee\": [\n \"\"\n ],\n \"Maximum deposit fees this merchant is willing to pay per order by default.\": [\n \"\"\n ],\n \"Default max wire fee\": [\n \"\"\n ],\n \"Maximum wire fees this merchant is willing to pay per wire transfer by default.\": [\n \"\"\n ],\n \"Default wire fee amortization\": [\n \"\"\n ],\n \"Number of orders excess wire transfer fees will be divided by to compute per order surcharge.\": [\n \"\"\n ],\n \"Physical location of the merchant.\": [\n \"\"\n ],\n \"Jurisdiction\": [\n \"\"\n ],\n \"Jurisdiction for legal disputes with the merchant.\": [\n \"\"\n ],\n \"Default payment delay\": [\n \"\"\n ],\n \"Time customers have to pay an order before the offer expires by default.\": [\n \"\"\n ],\n \"Default wire transfer delay\": [\n \"\"\n ],\n \"Maximum time an exchange is allowed to delay wiring funds to the merchant, enabling it to aggregate smaller payments into larger wire transfers and reducing wire fees.\": [\n \"\"\n ],\n \"Instance id\": [\n \"\"\n ],\n \"Change the authorization method use for this instance.\": [\n \"\"\n ],\n \"Manage access token\": [\n \"\"\n ],\n \"Failed to create instance\": [\n \"\"\n ],\n \"Login required\": [\n \"\"\n ],\n \"Please enter your access token.\": [\n \"\"\n ],\n \"Access Token\": [\n \"\"\n ],\n \"The request to the backend take too long and was cancelled\": [\n \"\"\n ],\n \"Diagnostic from %1$s is '%2$s'\": [\n \"\"\n ],\n \"The backend reported a problem: HTTP status #%1$s\": [\n \"\"\n ],\n \"Access denied\": [\n \"\"\n ],\n \"The access token provided is invalid.\": [\n \"\"\n ],\n \"No 'default' instance configured yet.\": [\n \"\"\n ],\n \"Create a 'default' instance to begin using the merchant backoffice.\": [\n \"\"\n ],\n \"The access token provided is invalid\": [\n \"\"\n ],\n \"Hide for today\": [\n \"\"\n ],\n \"Instance\": [\n \"\"\n ],\n \"Settings\": [\n \"\"\n ],\n \"Connection\": [\n \"\"\n ],\n \"New\": [\n \"\"\n ],\n \"List\": [\n \"\"\n ],\n \"Log out\": [\n \"\"\n ],\n \"Check your token is valid\": [\n \"\"\n ],\n \"Couldn't access the server.\": [\n \"\"\n ],\n \"Could not infer instance id from url %1$s\": [\n \"\"\n ],\n \"Server not found\": [\n \"\"\n ],\n \"Couldn't access the server\": [\n \"\"\n ],\n \"Got message %1$s from %2$s\": [\n \"\"\n ],\n \"Unexpected Error\": [\n \"\"\n ],\n \"The value %1$s is invalid for a payment url\": [\n \"\"\n ],\n \"add element to the list\": [\n \"\"\n ],\n \"add\": [\n \"\"\n ],\n \"Deleting\": [\n \"\"\n ],\n \"Changing\": [\n \"\"\n ],\n \"Order ID\": [\n \"\"\n ],\n \"Payment URL\": [\n \"\"\n ]\n }\n }\n};\n\nstrings['it'] = {\n \"domain\": \"messages\",\n \"locale_data\": {\n \"messages\": {\n \"\": {\n \"domain\": \"messages\",\n \"plural_forms\": \"nplurals=2; plural=(n != 1);\",\n \"lang\": \"\"\n },\n \"Cancel\": [\n \"\"\n ],\n \"%1$s\": [\n \"\"\n ],\n \"Continue\": [\n \"\"\n ],\n \"Clear\": [\n \"\"\n ],\n \"Confirm\": [\n \"\"\n ],\n \"is not the same as the current access token\": [\n \"\"\n ],\n \"cannot be empty\": [\n \"\"\n ],\n \"cannot be the same as the old token\": [\n \"\"\n ],\n \"is not the same\": [\n \"\"\n ],\n \"You are updating the access token from instance with id %1$s\": [\n \"\"\n ],\n \"Old access token\": [\n \"\"\n ],\n \"access token currently in use\": [\n \"\"\n ],\n \"New access token\": [\n \"\"\n ],\n \"next access token to be used\": [\n \"\"\n ],\n \"Repeat access token\": [\n \"\"\n ],\n \"confirm the same access token\": [\n \"\"\n ],\n \"Clearing the access token will mean public access to the instance\": [\n \"\"\n ],\n \"cannot be the same as the old access token\": [\n \"\"\n ],\n \"You are setting the access token for the new instance\": [\n \"\"\n ],\n \"With external authorization method no check will be done by the merchant backend\": [\n \"\"\n ],\n \"Set external authorization\": [\n \"\"\n ],\n \"Set access token\": [\n \"\"\n ],\n \"Operation in progress...\": [\n \"\"\n ],\n \"The operation will be automatically canceled after %1$s seconds\": [\n \"\"\n ],\n \"Instances\": [\n \"\"\n ],\n \"Delete\": [\n \"\"\n ],\n \"add new instance\": [\n \"\"\n ],\n \"ID\": [\n \"\"\n ],\n \"Name\": [\n \"\"\n ],\n \"Edit\": [\n \"\"\n ],\n \"Purge\": [\n \"\"\n ],\n \"There is no instances yet, add more pressing the + sign\": [\n \"\"\n ],\n \"Only show active instances\": [\n \"\"\n ],\n \"Active\": [\n \"\"\n ],\n \"Only show deleted instances\": [\n \"\"\n ],\n \"Deleted\": [\n \"\"\n ],\n \"Show all instances\": [\n \"\"\n ],\n \"All\": [\n \"\"\n ],\n \"Instance '%1$s' (ID: %2$s) has been deleted\": [\n \"\"\n ],\n \"Failed to delete instance\": [\n \"\"\n ],\n \"Instance '%1$s' (ID: %2$s) has been disabled\": [\n \"\"\n ],\n \"Failed to purge instance\": [\n \"\"\n ],\n \"Pending KYC verification\": [\n \"\"\n ],\n \"Timed out\": [\n \"\"\n ],\n \"Exchange\": [\n \"\"\n ],\n \"Target account\": [\n \"\"\n ],\n \"KYC URL\": [\n \"\"\n ],\n \"Code\": [\n \"\"\n ],\n \"Http Status\": [\n \"\"\n ],\n \"No pending kyc verification!\": [\n \"\"\n ],\n \"change value to unknown date\": [\n \"\"\n ],\n \"change value to empty\": [\n \"\"\n ],\n \"clear\": [\n \"\"\n ],\n \"change value to never\": [\n \"\"\n ],\n \"never\": [\n \"\"\n ],\n \"Country\": [\n \"\"\n ],\n \"Address\": [\n \"\"\n ],\n \"Building number\": [\n \"\"\n ],\n \"Building name\": [\n \"\"\n ],\n \"Street\": [\n \"\"\n ],\n \"Post code\": [\n \"\"\n ],\n \"Town location\": [\n \"\"\n ],\n \"Town\": [\n \"\"\n ],\n \"District\": [\n \"\"\n ],\n \"Country subdivision\": [\n \"\"\n ],\n \"Product id\": [\n \"\"\n ],\n \"Description\": [\n \"\"\n ],\n \"Product\": [\n \"\"\n ],\n \"search products by it's description or id\": [\n \"\"\n ],\n \"no products found with that description\": [\n \"\"\n ],\n \"You must enter a valid product identifier.\": [\n \"\"\n ],\n \"Quantity must be greater than 0!\": [\n \"\"\n ],\n \"This quantity exceeds remaining stock. Currently, only %1$s units remain unreserved in stock.\": [\n \"\"\n ],\n \"Quantity\": [\n \"\"\n ],\n \"how many products will be added\": [\n \"\"\n ],\n \"Add from inventory\": [\n \"\"\n ],\n \"Image should be smaller than 1 MB\": [\n \"\"\n ],\n \"Add\": [\n \"\"\n ],\n \"Remove\": [\n \"\"\n ],\n \"No taxes configured for this product.\": [\n \"\"\n ],\n \"Amount\": [\n \"\"\n ],\n \"Taxes can be in currencies that differ from the main currency used by the merchant.\": [\n \"\"\n ],\n \"Enter currency and value separated with a colon, e.g. &quot;USD:2.3&quot;.\": [\n \"\"\n ],\n \"Legal name of the tax, e.g. VAT or import duties.\": [\n \"\"\n ],\n \"add tax to the tax list\": [\n \"\"\n ],\n \"describe and add a product that is not in the inventory list\": [\n \"\"\n ],\n \"Add custom product\": [\n \"\"\n ],\n \"Complete information of the product\": [\n \"\"\n ],\n \"Image\": [\n \"\"\n ],\n \"photo of the product\": [\n \"\"\n ],\n \"full product description\": [\n \"\"\n ],\n \"Unit\": [\n \"\"\n ],\n \"name of the product unit\": [\n \"\"\n ],\n \"Price\": [\n \"\"\n ],\n \"amount in the current currency\": [\n \"\"\n ],\n \"Taxes\": [\n \"\"\n ],\n \"image\": [\n \"\"\n ],\n \"description\": [\n \"\"\n ],\n \"quantity\": [\n \"\"\n ],\n \"unit price\": [\n \"\"\n ],\n \"total price\": [\n \"\"\n ],\n \"required\": [\n \"\"\n ],\n \"must be greater than 0\": [\n \"\"\n ],\n \"not a valid json\": [\n \"\"\n ],\n \"should be in the future\": [\n \"\"\n ],\n \"refund deadline cannot be before pay deadline\": [\n \"\"\n ],\n \"wire transfer deadline cannot be before refund deadline\": [\n \"\"\n ],\n \"wire transfer deadline cannot be before pay deadline\": [\n \"\"\n ],\n \"should have a refund deadline\": [\n \"\"\n ],\n \"auto refund cannot be after refund deadline\": [\n \"\"\n ],\n \"Manage products in order\": [\n \"\"\n ],\n \"Manage list of products in the order.\": [\n \"\"\n ],\n \"Remove this product from the order.\": [\n \"\"\n ],\n \"Total price\": [\n \"\"\n ],\n \"total product price added up\": [\n \"\"\n ],\n \"Amount to be paid by the customer\": [\n \"\"\n ],\n \"Order price\": [\n \"\"\n ],\n \"final order price\": [\n \"\"\n ],\n \"Summary\": [\n \"\"\n ],\n \"Title of the order to be shown to the customer\": [\n \"\"\n ],\n \"Shipping and Fulfillment\": [\n \"\"\n ],\n \"Delivery date\": [\n \"\"\n ],\n \"Deadline for physical delivery assured by the merchant.\": [\n \"\"\n ],\n \"Location\": [\n \"\"\n ],\n \"address where the products will be delivered\": [\n \"\"\n ],\n \"Fulfillment URL\": [\n \"\"\n ],\n \"URL to which the user will be redirected after successful payment.\": [\n \"\"\n ],\n \"Taler payment options\": [\n \"\"\n ],\n \"Override default Taler payment settings for this order\": [\n \"\"\n ],\n \"Payment deadline\": [\n \"\"\n ],\n \"Deadline for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline.\": [\n \"\"\n ],\n \"Refund deadline\": [\n \"\"\n ],\n \"Time until which the order can be refunded by the merchant.\": [\n \"\"\n ],\n \"Wire transfer deadline\": [\n \"\"\n ],\n \"Deadline for the exchange to make the wire transfer.\": [\n \"\"\n ],\n \"Auto-refund deadline\": [\n \"\"\n ],\n \"Time until which the wallet will automatically check for refunds without user interaction.\": [\n \"\"\n ],\n \"Maximum deposit fee\": [\n \"\"\n ],\n \"Maximum deposit fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.\": [\n \"\"\n ],\n \"Maximum wire fee\": [\n \"\"\n ],\n \"Maximum aggregate wire fees the merchant is willing to cover for this order. Wire fees exceeding this amount are to be covered by the customers.\": [\n \"\"\n ],\n \"Wire fee amortization\": [\n \"\"\n ],\n \"Factor by which wire fees exceeding the above threshold are divided to determine the share of excess wire fees to be paid explicitly by the consumer.\": [\n \"\"\n ],\n \"Create token\": [\n \"\"\n ],\n \"Uncheck this option if the merchant backend generated an order ID with enough entropy to prevent adversarial claims.\": [\n \"\"\n ],\n \"Minimum age required\": [\n \"\"\n ],\n \"Any value greater than 0 will limit the coins able be used to pay this contract. If empty the age restriction will be defined by the products\": [\n \"\"\n ],\n \"Min age defined by the producs is %1$s\": [\n \"\"\n ],\n \"Additional information\": [\n \"\"\n ],\n \"Custom information to be included in the contract for this order.\": [\n \"\"\n ],\n \"You must enter a value in JavaScript Object Notation (JSON).\": [\n \"\"\n ],\n \"days\": [\n \"\"\n ],\n \"hours\": [\n \"\"\n ],\n \"minutes\": [\n \"\"\n ],\n \"seconds\": [\n \"\"\n ],\n \"forever\": [\n \"\"\n ],\n \"%1$sM\": [\n \"\"\n ],\n \"%1$sY\": [\n \"\"\n ],\n \"%1$sd\": [\n \"\"\n ],\n \"%1$sh\": [\n \"\"\n ],\n \"%1$smin\": [\n \"\"\n ],\n \"%1$ssec\": [\n \"\"\n ],\n \"Orders\": [\n \"\"\n ],\n \"create order\": [\n \"\"\n ],\n \"load newer orders\": [\n \"\"\n ],\n \"Date\": [\n \"\"\n ],\n \"Refund\": [\n \"\"\n ],\n \"copy url\": [\n \"\"\n ],\n \"load older orders\": [\n \"\"\n ],\n \"No orders have been found matching your query!\": [\n \"\"\n ],\n \"duplicated\": [\n \"\"\n ],\n \"invalid format\": [\n \"\"\n ],\n \"this value exceed the refundable amount\": [\n \"\"\n ],\n \"date\": [\n \"\"\n ],\n \"amount\": [\n \"\"\n ],\n \"reason\": [\n \"\"\n ],\n \"amount to be refunded\": [\n \"\"\n ],\n \"Max refundable:\": [\n \"\"\n ],\n \"Reason\": [\n \"\"\n ],\n \"Choose one...\": [\n \"\"\n ],\n \"requested by the customer\": [\n \"\"\n ],\n \"other\": [\n \"\"\n ],\n \"why this order is being refunded\": [\n \"\"\n ],\n \"more information to give context\": [\n \"\"\n ],\n \"Contract Terms\": [\n \"\"\n ],\n \"human-readable description of the whole purchase\": [\n \"\"\n ],\n \"total price for the transaction\": [\n \"\"\n ],\n \"URL for this purchase\": [\n \"\"\n ],\n \"Max fee\": [\n \"\"\n ],\n \"maximum total deposit fee accepted by the merchant for this contract\": [\n \"\"\n ],\n \"Max wire fee\": [\n \"\"\n ],\n \"maximum wire fee accepted by the merchant\": [\n \"\"\n ],\n \"over how many customer transactions does the merchant expect to amortize wire fees on average\": [\n \"\"\n ],\n \"Created at\": [\n \"\"\n ],\n \"time when this contract was generated\": [\n \"\"\n ],\n \"after this deadline has passed no refunds will be accepted\": [\n \"\"\n ],\n \"after this deadline, the merchant won't accept payments for the contract\": [\n \"\"\n ],\n \"transfer deadline for the exchange\": [\n \"\"\n ],\n \"time indicating when the order should be delivered\": [\n \"\"\n ],\n \"where the order will be delivered\": [\n \"\"\n ],\n \"Auto-refund delay\": [\n \"\"\n ],\n \"how long the wallet should try to get an automatic refund for the purchase\": [\n \"\"\n ],\n \"Extra info\": [\n \"\"\n ],\n \"extra data that is only interpreted by the merchant frontend\": [\n \"\"\n ],\n \"Order\": [\n \"\"\n ],\n \"claimed\": [\n \"\"\n ],\n \"claimed at\": [\n \"\"\n ],\n \"Timeline\": [\n \"\"\n ],\n \"Payment details\": [\n \"\"\n ],\n \"Order status\": [\n \"\"\n ],\n \"Product list\": [\n \"\"\n ],\n \"paid\": [\n \"\"\n ],\n \"wired\": [\n \"\"\n ],\n \"refunded\": [\n \"\"\n ],\n \"refund order\": [\n \"\"\n ],\n \"not refundable\": [\n \"\"\n ],\n \"refund\": [\n \"\"\n ],\n \"Refunded amount\": [\n \"\"\n ],\n \"Refund taken\": [\n \"\"\n ],\n \"Status URL\": [\n \"\"\n ],\n \"Refund URI\": [\n \"\"\n ],\n \"unpaid\": [\n \"\"\n ],\n \"pay at\": [\n \"\"\n ],\n \"created at\": [\n \"\"\n ],\n \"Order status URL\": [\n \"\"\n ],\n \"Payment URI\": [\n \"\"\n ],\n \"Unknown order status. This is an error, please contact the administrator.\": [\n \"\"\n ],\n \"Back\": [\n \"\"\n ],\n \"refund created successfully\": [\n \"\"\n ],\n \"could not create the refund\": [\n \"\"\n ],\n \"select date to show nearby orders\": [\n \"\"\n ],\n \"order id\": [\n \"\"\n ],\n \"jump to order with the given order ID\": [\n \"\"\n ],\n \"remove all filters\": [\n \"\"\n ],\n \"only show paid orders\": [\n \"\"\n ],\n \"Paid\": [\n \"\"\n ],\n \"only show orders with refunds\": [\n \"\"\n ],\n \"Refunded\": [\n \"\"\n ],\n \"only show orders where customers paid, but wire payments from payment provider are still pending\": [\n \"\"\n ],\n \"Not wired\": [\n \"\"\n ],\n \"clear date filter\": [\n \"\"\n ],\n \"date (YYYY/MM/DD)\": [\n \"\"\n ],\n \"Enter an order id\": [\n \"\"\n ],\n \"order not found\": [\n \"\"\n ],\n \"could not get the order to refund\": [\n \"\"\n ],\n \"Loading...\": [\n \"\"\n ],\n \"click here to configure the stock of the product, leave it as is and the backend will not control stock\": [\n \"\"\n ],\n \"Manage stock\": [\n \"\"\n ],\n \"this product has been configured without stock control\": [\n \"\"\n ],\n \"Infinite\": [\n \"\"\n ],\n \"lost cannot be greater than current and incoming (max %1$s)\": [\n \"\"\n ],\n \"Incoming\": [\n \"\"\n ],\n \"Lost\": [\n \"\"\n ],\n \"Current\": [\n \"\"\n ],\n \"remove stock control for this product\": [\n \"\"\n ],\n \"without stock\": [\n \"\"\n ],\n \"Next restock\": [\n \"\"\n ],\n \"Delivery address\": [\n \"\"\n ],\n \"product identification to use in URLs (for internal use only)\": [\n \"\"\n ],\n \"illustration of the product for customers\": [\n \"\"\n ],\n \"product description for customers\": [\n \"\"\n ],\n \"Age restricted\": [\n \"\"\n ],\n \"is this product restricted for customer below certain age?\": [\n \"\"\n ],\n \"unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers\": [\n \"\"\n ],\n \"sale price for customers, including taxes, for above units of the product\": [\n \"\"\n ],\n \"Stock\": [\n \"\"\n ],\n \"product inventory for products with finite supply (for internal use only)\": [\n \"\"\n ],\n \"taxes included in the product price, exposed to customers\": [\n \"\"\n ],\n \"Need to complete marked fields\": [\n \"\"\n ],\n \"could not create product\": [\n \"\"\n ],\n \"Products\": [\n \"\"\n ],\n \"add product to inventory\": [\n \"\"\n ],\n \"Sell\": [\n \"\"\n ],\n \"Profit\": [\n \"\"\n ],\n \"Sold\": [\n \"\"\n ],\n \"free\": [\n \"\"\n ],\n \"go to product update page\": [\n \"\"\n ],\n \"Update\": [\n \"\"\n ],\n \"remove this product from the database\": [\n \"\"\n ],\n \"update the product with new price\": [\n \"\"\n ],\n \"update product with new price\": [\n \"\"\n ],\n \"add more elements to the inventory\": [\n \"\"\n ],\n \"report elements lost in the inventory\": [\n \"\"\n ],\n \"new price for the product\": [\n \"\"\n ],\n \"the are value with errors\": [\n \"\"\n ],\n \"update product with new stock and price\": [\n \"\"\n ],\n \"There is no products yet, add more pressing the + sign\": [\n \"\"\n ],\n \"product updated successfully\": [\n \"\"\n ],\n \"could not update the product\": [\n \"\"\n ],\n \"product delete successfully\": [\n \"\"\n ],\n \"could not delete the product\": [\n \"\"\n ],\n \"Product id:\": [\n \"\"\n ],\n \"To complete the setup of the reserve, you must now initiate a wire transfer using the given wire transfer subject and crediting the specified amount to the indicated account of the exchange.\": [\n \"\"\n ],\n \"If your system supports RFC 8905, you can do this by opening this URI:\": [\n \"\"\n ],\n \"it should be greater than 0\": [\n \"\"\n ],\n \"must be a valid URL\": [\n \"\"\n ],\n \"Initial balance\": [\n \"\"\n ],\n \"balance prior to deposit\": [\n \"\"\n ],\n \"Exchange URL\": [\n \"\"\n ],\n \"URL of exchange\": [\n \"\"\n ],\n \"Next\": [\n \"\"\n ],\n \"Wire method\": [\n \"\"\n ],\n \"method to use for wire transfer\": [\n \"\"\n ],\n \"Select one wire method\": [\n \"\"\n ],\n \"could not create reserve\": [\n \"\"\n ],\n \"Valid until\": [\n \"\"\n ],\n \"Created balance\": [\n \"\"\n ],\n \"Exchange balance\": [\n \"\"\n ],\n \"Picked up\": [\n \"\"\n ],\n \"Committed\": [\n \"\"\n ],\n \"Account address\": [\n \"\"\n ],\n \"Subject\": [\n \"\"\n ],\n \"Tips\": [\n \"\"\n ],\n \"No tips has been authorized from this reserve\": [\n \"\"\n ],\n \"Authorized\": [\n \"\"\n ],\n \"Expiration\": [\n \"\"\n ],\n \"amount of tip\": [\n \"\"\n ],\n \"Justification\": [\n \"\"\n ],\n \"reason for the tip\": [\n \"\"\n ],\n \"URL after tip\": [\n \"\"\n ],\n \"URL to visit after tip payment\": [\n \"\"\n ],\n \"Reserves not yet funded\": [\n \"\"\n ],\n \"Reserves ready\": [\n \"\"\n ],\n \"add new reserve\": [\n \"\"\n ],\n \"Expires at\": [\n \"\"\n ],\n \"Initial\": [\n \"\"\n ],\n \"delete selected reserve from the database\": [\n \"\"\n ],\n \"authorize new tip from selected reserve\": [\n \"\"\n ],\n \"There is no ready reserves yet, add more pressing the + sign or fund them\": [\n \"\"\n ],\n \"Expected Balance\": [\n \"\"\n ],\n \"could not create the tip\": [\n \"\"\n ],\n \"should not be empty\": [\n \"\"\n ],\n \"should be greater that 0\": [\n \"\"\n ],\n \"can't be empty\": [\n \"\"\n ],\n \"to short\": [\n \"\"\n ],\n \"Identifier\": [\n \"\"\n ],\n \"Name of the template in URLs.\": [\n \"\"\n ],\n \"Describe what this template stands for\": [\n \"\"\n ],\n \"Order summary\": [\n \"\"\n ],\n \"Minimum age\": [\n \"\"\n ],\n \"Is this contract restricted to some age?\": [\n \"\"\n ],\n \"Payment timeout\": [\n \"\"\n ],\n \"How much time has the customer to complete the payment once the order was created.\": [\n \"\"\n ],\n \"Point-of-sale key\": [\n \"\"\n ],\n \"Useful to validate the purchase\": [\n \"\"\n ],\n \"could not inform template\": [\n \"\"\n ],\n \"Amount is required\": [\n \"\"\n ],\n \"Order summary is required\": [\n \"\"\n ],\n \"Amount of the order\": [\n \"\"\n ],\n \"could not create order from template\": [\n \"\"\n ],\n \"Templates\": [\n \"\"\n ],\n \"add new templates\": [\n \"\"\n ],\n \"load more templates before the first one\": [\n \"\"\n ],\n \"load newer templates\": [\n \"\"\n ],\n \"delete selected templates from the database\": [\n \"\"\n ],\n \"use template to create new order\": [\n \"\"\n ],\n \"load more templates after the last one\": [\n \"\"\n ],\n \"load older templates\": [\n \"\"\n ],\n \"There is no templates yet, add more pressing the + sign\": [\n \"\"\n ],\n \"template delete successfully\": [\n \"\"\n ],\n \"could not delete the template\": [\n \"\"\n ],\n \"could not update template\": [\n \"\"\n ],\n \"should be one of '%1$s'\": [\n \"\"\n ],\n \"Webhook ID to use\": [\n \"\"\n ],\n \"Event\": [\n \"\"\n ],\n \"The event of the webhook: why the webhook is used\": [\n \"\"\n ],\n \"Method\": [\n \"\"\n ],\n \"Method used by the webhook\": [\n \"\"\n ],\n \"URL\": [\n \"\"\n ],\n \"URL of the webhook where the customer will be redirected\": [\n \"\"\n ],\n \"Header\": [\n \"\"\n ],\n \"Header template of the webhook\": [\n \"\"\n ],\n \"Body\": [\n \"\"\n ],\n \"Body template by the webhook\": [\n \"\"\n ],\n \"Webhooks\": [\n \"\"\n ],\n \"add new webhooks\": [\n \"\"\n ],\n \"load more webhooks before the first one\": [\n \"\"\n ],\n \"load newer webhooks\": [\n \"\"\n ],\n \"Event type\": [\n \"\"\n ],\n \"delete selected webhook from the database\": [\n \"\"\n ],\n \"load more webhooks after the last one\": [\n \"\"\n ],\n \"load older webhooks\": [\n \"\"\n ],\n \"There is no webhooks yet, add more pressing the + sign\": [\n \"\"\n ],\n \"webhook delete successfully\": [\n \"\"\n ],\n \"could not delete the webhook\": [\n \"\"\n ],\n \"check the id, does not look valid\": [\n \"\"\n ],\n \"should have 52 characters, current %1$s\": [\n \"\"\n ],\n \"URL doesn't have the right format\": [\n \"\"\n ],\n \"Credited bank account\": [\n \"\"\n ],\n \"Select one account\": [\n \"\"\n ],\n \"Bank account of the merchant where the payment was received\": [\n \"\"\n ],\n \"Wire transfer ID\": [\n \"\"\n ],\n \"unique identifier of the wire transfer used by the exchange, must be 52 characters long\": [\n \"\"\n ],\n \"Base URL of the exchange that made the transfer, should have been in the wire transfer subject\": [\n \"\"\n ],\n \"Amount credited\": [\n \"\"\n ],\n \"Actual amount that was wired to the merchant's bank account\": [\n \"\"\n ],\n \"could not inform transfer\": [\n \"\"\n ],\n \"Transfers\": [\n \"\"\n ],\n \"add new transfer\": [\n \"\"\n ],\n \"load more transfers before the first one\": [\n \"\"\n ],\n \"load newer transfers\": [\n \"\"\n ],\n \"Credit\": [\n \"\"\n ],\n \"Confirmed\": [\n \"\"\n ],\n \"Verified\": [\n \"\"\n ],\n \"Executed at\": [\n \"\"\n ],\n \"yes\": [\n \"\"\n ],\n \"no\": [\n \"\"\n ],\n \"unknown\": [\n \"\"\n ],\n \"delete selected transfer from the database\": [\n \"\"\n ],\n \"load more transfer after the last one\": [\n \"\"\n ],\n \"load older transfers\": [\n \"\"\n ],\n \"There is no transfer yet, add more pressing the + sign\": [\n \"\"\n ],\n \"filter by account address\": [\n \"\"\n ],\n \"only show wire transfers confirmed by the merchant\": [\n \"\"\n ],\n \"only show wire transfers claimed by the exchange\": [\n \"\"\n ],\n \"Unverified\": [\n \"\"\n ],\n \"is not valid\": [\n \"\"\n ],\n \"is not a number\": [\n \"\"\n ],\n \"must be 1 or greater\": [\n \"\"\n ],\n \"max 7 lines\": [\n \"\"\n ],\n \"change authorization configuration\": [\n \"\"\n ],\n \"Need to complete marked fields and choose authorization method\": [\n \"\"\n ],\n \"This is not a valid bitcoin address.\": [\n \"\"\n ],\n \"This is not a valid Ethereum address.\": [\n \"\"\n ],\n \"IBAN numbers usually have more that 4 digits\": [\n \"\"\n ],\n \"IBAN numbers usually have less that 34 digits\": [\n \"\"\n ],\n \"IBAN country code not found\": [\n \"\"\n ],\n \"IBAN number is not valid, checksum is wrong\": [\n \"\"\n ],\n \"Target type\": [\n \"\"\n ],\n \"Method to use for wire transfer\": [\n \"\"\n ],\n \"Routing\": [\n \"\"\n ],\n \"Routing number.\": [\n \"\"\n ],\n \"Account\": [\n \"\"\n ],\n \"Account number.\": [\n \"\"\n ],\n \"Business Identifier Code.\": [\n \"\"\n ],\n \"Bank Account Number.\": [\n \"\"\n ],\n \"Unified Payment Interface.\": [\n \"\"\n ],\n \"Bitcoin protocol.\": [\n \"\"\n ],\n \"Ethereum protocol.\": [\n \"\"\n ],\n \"Interledger protocol.\": [\n \"\"\n ],\n \"Host\": [\n \"\"\n ],\n \"Bank host.\": [\n \"\"\n ],\n \"Bank account.\": [\n \"\"\n ],\n \"Bank account owner's name.\": [\n \"\"\n ],\n \"No accounts yet.\": [\n \"\"\n ],\n \"Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.\": [\n \"\"\n ],\n \"Business name\": [\n \"\"\n ],\n \"Legal name of the business represented by this instance.\": [\n \"\"\n ],\n \"Email\": [\n \"\"\n ],\n \"Contact email\": [\n \"\"\n ],\n \"Website URL\": [\n \"\"\n ],\n \"URL.\": [\n \"\"\n ],\n \"Logo\": [\n \"\"\n ],\n \"Logo image.\": [\n \"\"\n ],\n \"Bank account\": [\n \"\"\n ],\n \"URI specifying bank account for crediting revenue.\": [\n \"\"\n ],\n \"Default max deposit fee\": [\n \"\"\n ],\n \"Maximum deposit fees this merchant is willing to pay per order by default.\": [\n \"\"\n ],\n \"Default max wire fee\": [\n \"\"\n ],\n \"Maximum wire fees this merchant is willing to pay per wire transfer by default.\": [\n \"\"\n ],\n \"Default wire fee amortization\": [\n \"\"\n ],\n \"Number of orders excess wire transfer fees will be divided by to compute per order surcharge.\": [\n \"\"\n ],\n \"Physical location of the merchant.\": [\n \"\"\n ],\n \"Jurisdiction\": [\n \"\"\n ],\n \"Jurisdiction for legal disputes with the merchant.\": [\n \"\"\n ],\n \"Default payment delay\": [\n \"\"\n ],\n \"Time customers have to pay an order before the offer expires by default.\": [\n \"\"\n ],\n \"Default wire transfer delay\": [\n \"\"\n ],\n \"Maximum time an exchange is allowed to delay wiring funds to the merchant, enabling it to aggregate smaller payments into larger wire transfers and reducing wire fees.\": [\n \"\"\n ],\n \"Instance id\": [\n \"\"\n ],\n \"Change the authorization method use for this instance.\": [\n \"\"\n ],\n \"Manage access token\": [\n \"\"\n ],\n \"Failed to create instance\": [\n \"\"\n ],\n \"Login required\": [\n \"\"\n ],\n \"Please enter your access token.\": [\n \"\"\n ],\n \"Access Token\": [\n \"\"\n ],\n \"The request to the backend take too long and was cancelled\": [\n \"\"\n ],\n \"Diagnostic from %1$s is '%2$s'\": [\n \"\"\n ],\n \"The backend reported a problem: HTTP status #%1$s\": [\n \"\"\n ],\n \"Access denied\": [\n \"\"\n ],\n \"The access token provided is invalid.\": [\n \"\"\n ],\n \"No 'default' instance configured yet.\": [\n \"\"\n ],\n \"Create a 'default' instance to begin using the merchant backoffice.\": [\n \"\"\n ],\n \"The access token provided is invalid\": [\n \"\"\n ],\n \"Hide for today\": [\n \"\"\n ],\n \"Instance\": [\n \"\"\n ],\n \"Settings\": [\n \"\"\n ],\n \"Connection\": [\n \"\"\n ],\n \"New\": [\n \"\"\n ],\n \"List\": [\n \"\"\n ],\n \"Log out\": [\n \"\"\n ],\n \"Check your token is valid\": [\n \"\"\n ],\n \"Couldn't access the server.\": [\n \"\"\n ],\n \"Could not infer instance id from url %1$s\": [\n \"\"\n ],\n \"Server not found\": [\n \"\"\n ],\n \"Couldn't access the server\": [\n \"\"\n ],\n \"Got message %1$s from %2$s\": [\n \"\"\n ],\n \"Unexpected Error\": [\n \"\"\n ],\n \"The value %1$s is invalid for a payment url\": [\n \"\"\n ],\n \"add element to the list\": [\n \"\"\n ],\n \"add\": [\n \"\"\n ],\n \"Deleting\": [\n \"\"\n ],\n \"Changing\": [\n \"\"\n ],\n \"Order ID\": [\n \"\"\n ],\n \"Payment URL\": [\n \"\"\n ]\n }\n }\n};\n\nstrings['sv'] = {\n \"domain\": \"messages\",\n \"locale_data\": {\n \"messages\": {\n \"\": {\n \"domain\": \"messages\",\n \"plural_forms\": \"nplurals=2; plural=(n != 1);\",\n \"lang\": \"\"\n },\n \"Cancel\": [\n \"\"\n ],\n \"%1$s\": [\n \"\"\n ],\n \"Continue\": [\n \"\"\n ],\n \"Clear\": [\n \"\"\n ],\n \"Confirm\": [\n \"\"\n ],\n \"is not the same as the current access token\": [\n \"\"\n ],\n \"cannot be empty\": [\n \"\"\n ],\n \"cannot be the same as the old token\": [\n \"\"\n ],\n \"is not the same\": [\n \"\"\n ],\n \"You are updating the access token from instance with id %1$s\": [\n \"\"\n ],\n \"Old access token\": [\n \"\"\n ],\n \"access token currently in use\": [\n \"\"\n ],\n \"New access token\": [\n \"\"\n ],\n \"next access token to be used\": [\n \"\"\n ],\n \"Repeat access token\": [\n \"\"\n ],\n \"confirm the same access token\": [\n \"\"\n ],\n \"Clearing the access token will mean public access to the instance\": [\n \"\"\n ],\n \"cannot be the same as the old access token\": [\n \"\"\n ],\n \"You are setting the access token for the new instance\": [\n \"\"\n ],\n \"With external authorization method no check will be done by the merchant backend\": [\n \"\"\n ],\n \"Set external authorization\": [\n \"\"\n ],\n \"Set access token\": [\n \"\"\n ],\n \"Operation in progress...\": [\n \"\"\n ],\n \"The operation will be automatically canceled after %1$s seconds\": [\n \"\"\n ],\n \"Instances\": [\n \"\"\n ],\n \"Delete\": [\n \"\"\n ],\n \"add new instance\": [\n \"\"\n ],\n \"ID\": [\n \"\"\n ],\n \"Name\": [\n \"\"\n ],\n \"Edit\": [\n \"\"\n ],\n \"Purge\": [\n \"\"\n ],\n \"There is no instances yet, add more pressing the + sign\": [\n \"\"\n ],\n \"Only show active instances\": [\n \"\"\n ],\n \"Active\": [\n \"\"\n ],\n \"Only show deleted instances\": [\n \"\"\n ],\n \"Deleted\": [\n \"\"\n ],\n \"Show all instances\": [\n \"\"\n ],\n \"All\": [\n \"\"\n ],\n \"Instance '%1$s' (ID: %2$s) has been deleted\": [\n \"\"\n ],\n \"Failed to delete instance\": [\n \"\"\n ],\n \"Instance '%1$s' (ID: %2$s) has been disabled\": [\n \"\"\n ],\n \"Failed to purge instance\": [\n \"\"\n ],\n \"Pending KYC verification\": [\n \"\"\n ],\n \"Timed out\": [\n \"\"\n ],\n \"Exchange\": [\n \"\"\n ],\n \"Target account\": [\n \"\"\n ],\n \"KYC URL\": [\n \"\"\n ],\n \"Code\": [\n \"\"\n ],\n \"Http Status\": [\n \"\"\n ],\n \"No pending kyc verification!\": [\n \"\"\n ],\n \"change value to unknown date\": [\n \"\"\n ],\n \"change value to empty\": [\n \"\"\n ],\n \"clear\": [\n \"\"\n ],\n \"change value to never\": [\n \"\"\n ],\n \"never\": [\n \"\"\n ],\n \"Country\": [\n \"\"\n ],\n \"Address\": [\n \"\"\n ],\n \"Building number\": [\n \"\"\n ],\n \"Building name\": [\n \"\"\n ],\n \"Street\": [\n \"\"\n ],\n \"Post code\": [\n \"\"\n ],\n \"Town location\": [\n \"\"\n ],\n \"Town\": [\n \"\"\n ],\n \"District\": [\n \"\"\n ],\n \"Country subdivision\": [\n \"\"\n ],\n \"Product id\": [\n \"\"\n ],\n \"Description\": [\n \"\"\n ],\n \"Product\": [\n \"\"\n ],\n \"search products by it's description or id\": [\n \"\"\n ],\n \"no products found with that description\": [\n \"\"\n ],\n \"You must enter a valid product identifier.\": [\n \"\"\n ],\n \"Quantity must be greater than 0!\": [\n \"\"\n ],\n \"This quantity exceeds remaining stock. Currently, only %1$s units remain unreserved in stock.\": [\n \"\"\n ],\n \"Quantity\": [\n \"\"\n ],\n \"how many products will be added\": [\n \"\"\n ],\n \"Add from inventory\": [\n \"\"\n ],\n \"Image should be smaller than 1 MB\": [\n \"\"\n ],\n \"Add\": [\n \"\"\n ],\n \"Remove\": [\n \"\"\n ],\n \"No taxes configured for this product.\": [\n \"\"\n ],\n \"Amount\": [\n \"\"\n ],\n \"Taxes can be in currencies that differ from the main currency used by the merchant.\": [\n \"\"\n ],\n \"Enter currency and value separated with a colon, e.g. &quot;USD:2.3&quot;.\": [\n \"\"\n ],\n \"Legal name of the tax, e.g. VAT or import duties.\": [\n \"\"\n ],\n \"add tax to the tax list\": [\n \"\"\n ],\n \"describe and add a product that is not in the inventory list\": [\n \"\"\n ],\n \"Add custom product\": [\n \"\"\n ],\n \"Complete information of the product\": [\n \"\"\n ],\n \"Image\": [\n \"\"\n ],\n \"photo of the product\": [\n \"\"\n ],\n \"full product description\": [\n \"\"\n ],\n \"Unit\": [\n \"\"\n ],\n \"name of the product unit\": [\n \"\"\n ],\n \"Price\": [\n \"\"\n ],\n \"amount in the current currency\": [\n \"\"\n ],\n \"Taxes\": [\n \"\"\n ],\n \"image\": [\n \"\"\n ],\n \"description\": [\n \"\"\n ],\n \"quantity\": [\n \"\"\n ],\n \"unit price\": [\n \"\"\n ],\n \"total price\": [\n \"\"\n ],\n \"required\": [\n \"\"\n ],\n \"must be greater than 0\": [\n \"\"\n ],\n \"not a valid json\": [\n \"\"\n ],\n \"should be in the future\": [\n \"\"\n ],\n \"refund deadline cannot be before pay deadline\": [\n \"\"\n ],\n \"wire transfer deadline cannot be before refund deadline\": [\n \"\"\n ],\n \"wire transfer deadline cannot be before pay deadline\": [\n \"\"\n ],\n \"should have a refund deadline\": [\n \"\"\n ],\n \"auto refund cannot be after refund deadline\": [\n \"\"\n ],\n \"Manage products in order\": [\n \"\"\n ],\n \"Manage list of products in the order.\": [\n \"\"\n ],\n \"Remove this product from the order.\": [\n \"\"\n ],\n \"Total price\": [\n \"\"\n ],\n \"total product price added up\": [\n \"\"\n ],\n \"Amount to be paid by the customer\": [\n \"\"\n ],\n \"Order price\": [\n \"\"\n ],\n \"final order price\": [\n \"\"\n ],\n \"Summary\": [\n \"\"\n ],\n \"Title of the order to be shown to the customer\": [\n \"\"\n ],\n \"Shipping and Fulfillment\": [\n \"\"\n ],\n \"Delivery date\": [\n \"\"\n ],\n \"Deadline for physical delivery assured by the merchant.\": [\n \"\"\n ],\n \"Location\": [\n \"\"\n ],\n \"address where the products will be delivered\": [\n \"\"\n ],\n \"Fulfillment URL\": [\n \"\"\n ],\n \"URL to which the user will be redirected after successful payment.\": [\n \"\"\n ],\n \"Taler payment options\": [\n \"\"\n ],\n \"Override default Taler payment settings for this order\": [\n \"\"\n ],\n \"Payment deadline\": [\n \"\"\n ],\n \"Deadline for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline.\": [\n \"\"\n ],\n \"Refund deadline\": [\n \"\"\n ],\n \"Time until which the order can be refunded by the merchant.\": [\n \"\"\n ],\n \"Wire transfer deadline\": [\n \"\"\n ],\n \"Deadline for the exchange to make the wire transfer.\": [\n \"\"\n ],\n \"Auto-refund deadline\": [\n \"\"\n ],\n \"Time until which the wallet will automatically check for refunds without user interaction.\": [\n \"\"\n ],\n \"Maximum deposit fee\": [\n \"\"\n ],\n \"Maximum deposit fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.\": [\n \"\"\n ],\n \"Maximum wire fee\": [\n \"\"\n ],\n \"Maximum aggregate wire fees the merchant is willing to cover for this order. Wire fees exceeding this amount are to be covered by the customers.\": [\n \"\"\n ],\n \"Wire fee amortization\": [\n \"\"\n ],\n \"Factor by which wire fees exceeding the above threshold are divided to determine the share of excess wire fees to be paid explicitly by the consumer.\": [\n \"\"\n ],\n \"Create token\": [\n \"\"\n ],\n \"Uncheck this option if the merchant backend generated an order ID with enough entropy to prevent adversarial claims.\": [\n \"\"\n ],\n \"Minimum age required\": [\n \"\"\n ],\n \"Any value greater than 0 will limit the coins able be used to pay this contract. If empty the age restriction will be defined by the products\": [\n \"\"\n ],\n \"Min age defined by the producs is %1$s\": [\n \"\"\n ],\n \"Additional information\": [\n \"\"\n ],\n \"Custom information to be included in the contract for this order.\": [\n \"\"\n ],\n \"You must enter a value in JavaScript Object Notation (JSON).\": [\n \"\"\n ],\n \"days\": [\n \"\"\n ],\n \"hours\": [\n \"\"\n ],\n \"minutes\": [\n \"\"\n ],\n \"seconds\": [\n \"\"\n ],\n \"forever\": [\n \"\"\n ],\n \"%1$sM\": [\n \"\"\n ],\n \"%1$sY\": [\n \"\"\n ],\n \"%1$sd\": [\n \"\"\n ],\n \"%1$sh\": [\n \"\"\n ],\n \"%1$smin\": [\n \"\"\n ],\n \"%1$ssec\": [\n \"\"\n ],\n \"Orders\": [\n \"\"\n ],\n \"create order\": [\n \"\"\n ],\n \"load newer orders\": [\n \"\"\n ],\n \"Date\": [\n \"\"\n ],\n \"Refund\": [\n \"\"\n ],\n \"copy url\": [\n \"\"\n ],\n \"load older orders\": [\n \"\"\n ],\n \"No orders have been found matching your query!\": [\n \"\"\n ],\n \"duplicated\": [\n \"\"\n ],\n \"invalid format\": [\n \"\"\n ],\n \"this value exceed the refundable amount\": [\n \"\"\n ],\n \"date\": [\n \"\"\n ],\n \"amount\": [\n \"\"\n ],\n \"reason\": [\n \"\"\n ],\n \"amount to be refunded\": [\n \"\"\n ],\n \"Max refundable:\": [\n \"\"\n ],\n \"Reason\": [\n \"\"\n ],\n \"Choose one...\": [\n \"\"\n ],\n \"requested by the customer\": [\n \"\"\n ],\n \"other\": [\n \"\"\n ],\n \"why this order is being refunded\": [\n \"\"\n ],\n \"more information to give context\": [\n \"\"\n ],\n \"Contract Terms\": [\n \"\"\n ],\n \"human-readable description of the whole purchase\": [\n \"\"\n ],\n \"total price for the transaction\": [\n \"\"\n ],\n \"URL for this purchase\": [\n \"\"\n ],\n \"Max fee\": [\n \"\"\n ],\n \"maximum total deposit fee accepted by the merchant for this contract\": [\n \"\"\n ],\n \"Max wire fee\": [\n \"\"\n ],\n \"maximum wire fee accepted by the merchant\": [\n \"\"\n ],\n \"over how many customer transactions does the merchant expect to amortize wire fees on average\": [\n \"\"\n ],\n \"Created at\": [\n \"\"\n ],\n \"time when this contract was generated\": [\n \"\"\n ],\n \"after this deadline has passed no refunds will be accepted\": [\n \"\"\n ],\n \"after this deadline, the merchant won't accept payments for the contract\": [\n \"\"\n ],\n \"transfer deadline for the exchange\": [\n \"\"\n ],\n \"time indicating when the order should be delivered\": [\n \"\"\n ],\n \"where the order will be delivered\": [\n \"\"\n ],\n \"Auto-refund delay\": [\n \"\"\n ],\n \"how long the wallet should try to get an automatic refund for the purchase\": [\n \"\"\n ],\n \"Extra info\": [\n \"\"\n ],\n \"extra data that is only interpreted by the merchant frontend\": [\n \"\"\n ],\n \"Order\": [\n \"\"\n ],\n \"claimed\": [\n \"\"\n ],\n \"claimed at\": [\n \"\"\n ],\n \"Timeline\": [\n \"\"\n ],\n \"Payment details\": [\n \"\"\n ],\n \"Order status\": [\n \"\"\n ],\n \"Product list\": [\n \"\"\n ],\n \"paid\": [\n \"\"\n ],\n \"wired\": [\n \"\"\n ],\n \"refunded\": [\n \"\"\n ],\n \"refund order\": [\n \"\"\n ],\n \"not refundable\": [\n \"\"\n ],\n \"refund\": [\n \"\"\n ],\n \"Refunded amount\": [\n \"\"\n ],\n \"Refund taken\": [\n \"\"\n ],\n \"Status URL\": [\n \"\"\n ],\n \"Refund URI\": [\n \"\"\n ],\n \"unpaid\": [\n \"\"\n ],\n \"pay at\": [\n \"\"\n ],\n \"created at\": [\n \"\"\n ],\n \"Order status URL\": [\n \"\"\n ],\n \"Payment URI\": [\n \"\"\n ],\n \"Unknown order status. This is an error, please contact the administrator.\": [\n \"\"\n ],\n \"Back\": [\n \"\"\n ],\n \"refund created successfully\": [\n \"\"\n ],\n \"could not create the refund\": [\n \"\"\n ],\n \"select date to show nearby orders\": [\n \"\"\n ],\n \"order id\": [\n \"\"\n ],\n \"jump to order with the given order ID\": [\n \"\"\n ],\n \"remove all filters\": [\n \"\"\n ],\n \"only show paid orders\": [\n \"\"\n ],\n \"Paid\": [\n \"\"\n ],\n \"only show orders with refunds\": [\n \"\"\n ],\n \"Refunded\": [\n \"\"\n ],\n \"only show orders where customers paid, but wire payments from payment provider are still pending\": [\n \"\"\n ],\n \"Not wired\": [\n \"\"\n ],\n \"clear date filter\": [\n \"\"\n ],\n \"date (YYYY/MM/DD)\": [\n \"\"\n ],\n \"Enter an order id\": [\n \"\"\n ],\n \"order not found\": [\n \"\"\n ],\n \"could not get the order to refund\": [\n \"\"\n ],\n \"Loading...\": [\n \"\"\n ],\n \"click here to configure the stock of the product, leave it as is and the backend will not control stock\": [\n \"\"\n ],\n \"Manage stock\": [\n \"\"\n ],\n \"this product has been configured without stock control\": [\n \"\"\n ],\n \"Infinite\": [\n \"\"\n ],\n \"lost cannot be greater than current and incoming (max %1$s)\": [\n \"\"\n ],\n \"Incoming\": [\n \"\"\n ],\n \"Lost\": [\n \"\"\n ],\n \"Current\": [\n \"\"\n ],\n \"remove stock control for this product\": [\n \"\"\n ],\n \"without stock\": [\n \"\"\n ],\n \"Next restock\": [\n \"\"\n ],\n \"Delivery address\": [\n \"\"\n ],\n \"product identification to use in URLs (for internal use only)\": [\n \"\"\n ],\n \"illustration of the product for customers\": [\n \"\"\n ],\n \"product description for customers\": [\n \"\"\n ],\n \"Age restricted\": [\n \"\"\n ],\n \"is this product restricted for customer below certain age?\": [\n \"\"\n ],\n \"unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers\": [\n \"\"\n ],\n \"sale price for customers, including taxes, for above units of the product\": [\n \"\"\n ],\n \"Stock\": [\n \"\"\n ],\n \"product inventory for products with finite supply (for internal use only)\": [\n \"\"\n ],\n \"taxes included in the product price, exposed to customers\": [\n \"\"\n ],\n \"Need to complete marked fields\": [\n \"\"\n ],\n \"could not create product\": [\n \"\"\n ],\n \"Products\": [\n \"\"\n ],\n \"add product to inventory\": [\n \"\"\n ],\n \"Sell\": [\n \"\"\n ],\n \"Profit\": [\n \"\"\n ],\n \"Sold\": [\n \"\"\n ],\n \"free\": [\n \"\"\n ],\n \"go to product update page\": [\n \"\"\n ],\n \"Update\": [\n \"\"\n ],\n \"remove this product from the database\": [\n \"\"\n ],\n \"update the product with new price\": [\n \"\"\n ],\n \"update product with new price\": [\n \"\"\n ],\n \"add more elements to the inventory\": [\n \"\"\n ],\n \"report elements lost in the inventory\": [\n \"\"\n ],\n \"new price for the product\": [\n \"\"\n ],\n \"the are value with errors\": [\n \"\"\n ],\n \"update product with new stock and price\": [\n \"\"\n ],\n \"There is no products yet, add more pressing the + sign\": [\n \"\"\n ],\n \"product updated successfully\": [\n \"\"\n ],\n \"could not update the product\": [\n \"\"\n ],\n \"product delete successfully\": [\n \"\"\n ],\n \"could not delete the product\": [\n \"\"\n ],\n \"Product id:\": [\n \"\"\n ],\n \"To complete the setup of the reserve, you must now initiate a wire transfer using the given wire transfer subject and crediting the specified amount to the indicated account of the exchange.\": [\n \"\"\n ],\n \"If your system supports RFC 8905, you can do this by opening this URI:\": [\n \"\"\n ],\n \"it should be greater than 0\": [\n \"\"\n ],\n \"must be a valid URL\": [\n \"\"\n ],\n \"Initial balance\": [\n \"\"\n ],\n \"balance prior to deposit\": [\n \"\"\n ],\n \"Exchange URL\": [\n \"\"\n ],\n \"URL of exchange\": [\n \"\"\n ],\n \"Next\": [\n \"\"\n ],\n \"Wire method\": [\n \"\"\n ],\n \"method to use for wire transfer\": [\n \"\"\n ],\n \"Select one wire method\": [\n \"\"\n ],\n \"could not create reserve\": [\n \"\"\n ],\n \"Valid until\": [\n \"\"\n ],\n \"Created balance\": [\n \"\"\n ],\n \"Exchange balance\": [\n \"\"\n ],\n \"Picked up\": [\n \"\"\n ],\n \"Committed\": [\n \"\"\n ],\n \"Account address\": [\n \"\"\n ],\n \"Subject\": [\n \"\"\n ],\n \"Tips\": [\n \"\"\n ],\n \"No tips has been authorized from this reserve\": [\n \"\"\n ],\n \"Authorized\": [\n \"\"\n ],\n \"Expiration\": [\n \"\"\n ],\n \"amount of tip\": [\n \"\"\n ],\n \"Justification\": [\n \"\"\n ],\n \"reason for the tip\": [\n \"\"\n ],\n \"URL after tip\": [\n \"\"\n ],\n \"URL to visit after tip payment\": [\n \"\"\n ],\n \"Reserves not yet funded\": [\n \"\"\n ],\n \"Reserves ready\": [\n \"\"\n ],\n \"add new reserve\": [\n \"\"\n ],\n \"Expires at\": [\n \"\"\n ],\n \"Initial\": [\n \"\"\n ],\n \"delete selected reserve from the database\": [\n \"\"\n ],\n \"authorize new tip from selected reserve\": [\n \"\"\n ],\n \"There is no ready reserves yet, add more pressing the + sign or fund them\": [\n \"\"\n ],\n \"Expected Balance\": [\n \"\"\n ],\n \"could not create the tip\": [\n \"\"\n ],\n \"should not be empty\": [\n \"\"\n ],\n \"should be greater that 0\": [\n \"\"\n ],\n \"can't be empty\": [\n \"\"\n ],\n \"to short\": [\n \"\"\n ],\n \"Identifier\": [\n \"\"\n ],\n \"Name of the template in URLs.\": [\n \"\"\n ],\n \"Describe what this template stands for\": [\n \"\"\n ],\n \"Order summary\": [\n \"\"\n ],\n \"Minimum age\": [\n \"\"\n ],\n \"Is this contract restricted to some age?\": [\n \"\"\n ],\n \"Payment timeout\": [\n \"\"\n ],\n \"How much time has the customer to complete the payment once the order was created.\": [\n \"\"\n ],\n \"Point-of-sale key\": [\n \"\"\n ],\n \"Useful to validate the purchase\": [\n \"\"\n ],\n \"could not inform template\": [\n \"\"\n ],\n \"Amount is required\": [\n \"\"\n ],\n \"Order summary is required\": [\n \"\"\n ],\n \"Amount of the order\": [\n \"\"\n ],\n \"could not create order from template\": [\n \"\"\n ],\n \"Templates\": [\n \"\"\n ],\n \"add new templates\": [\n \"\"\n ],\n \"load more templates before the first one\": [\n \"\"\n ],\n \"load newer templates\": [\n \"\"\n ],\n \"delete selected templates from the database\": [\n \"\"\n ],\n \"use template to create new order\": [\n \"\"\n ],\n \"load more templates after the last one\": [\n \"\"\n ],\n \"load older templates\": [\n \"\"\n ],\n \"There is no templates yet, add more pressing the + sign\": [\n \"\"\n ],\n \"template delete successfully\": [\n \"\"\n ],\n \"could not delete the template\": [\n \"\"\n ],\n \"could not update template\": [\n \"\"\n ],\n \"should be one of '%1$s'\": [\n \"\"\n ],\n \"Webhook ID to use\": [\n \"\"\n ],\n \"Event\": [\n \"\"\n ],\n \"The event of the webhook: why the webhook is used\": [\n \"\"\n ],\n \"Method\": [\n \"\"\n ],\n \"Method used by the webhook\": [\n \"\"\n ],\n \"URL\": [\n \"\"\n ],\n \"URL of the webhook where the customer will be redirected\": [\n \"\"\n ],\n \"Header\": [\n \"\"\n ],\n \"Header template of the webhook\": [\n \"\"\n ],\n \"Body\": [\n \"\"\n ],\n \"Body template by the webhook\": [\n \"\"\n ],\n \"Webhooks\": [\n \"\"\n ],\n \"add new webhooks\": [\n \"\"\n ],\n \"load more webhooks before the first one\": [\n \"\"\n ],\n \"load newer webhooks\": [\n \"\"\n ],\n \"Event type\": [\n \"\"\n ],\n \"delete selected webhook from the database\": [\n \"\"\n ],\n \"load more webhooks after the last one\": [\n \"\"\n ],\n \"load older webhooks\": [\n \"\"\n ],\n \"There is no webhooks yet, add more pressing the + sign\": [\n \"\"\n ],\n \"webhook delete successfully\": [\n \"\"\n ],\n \"could not delete the webhook\": [\n \"\"\n ],\n \"check the id, does not look valid\": [\n \"\"\n ],\n \"should have 52 characters, current %1$s\": [\n \"\"\n ],\n \"URL doesn't have the right format\": [\n \"\"\n ],\n \"Credited bank account\": [\n \"\"\n ],\n \"Select one account\": [\n \"\"\n ],\n \"Bank account of the merchant where the payment was received\": [\n \"\"\n ],\n \"Wire transfer ID\": [\n \"\"\n ],\n \"unique identifier of the wire transfer used by the exchange, must be 52 characters long\": [\n \"\"\n ],\n \"Base URL of the exchange that made the transfer, should have been in the wire transfer subject\": [\n \"\"\n ],\n \"Amount credited\": [\n \"\"\n ],\n \"Actual amount that was wired to the merchant's bank account\": [\n \"\"\n ],\n \"could not inform transfer\": [\n \"\"\n ],\n \"Transfers\": [\n \"\"\n ],\n \"add new transfer\": [\n \"\"\n ],\n \"load more transfers before the first one\": [\n \"\"\n ],\n \"load newer transfers\": [\n \"\"\n ],\n \"Credit\": [\n \"\"\n ],\n \"Confirmed\": [\n \"\"\n ],\n \"Verified\": [\n \"\"\n ],\n \"Executed at\": [\n \"\"\n ],\n \"yes\": [\n \"\"\n ],\n \"no\": [\n \"\"\n ],\n \"unknown\": [\n \"\"\n ],\n \"delete selected transfer from the database\": [\n \"\"\n ],\n \"load more transfer after the last one\": [\n \"\"\n ],\n \"load older transfers\": [\n \"\"\n ],\n \"There is no transfer yet, add more pressing the + sign\": [\n \"\"\n ],\n \"filter by account address\": [\n \"\"\n ],\n \"only show wire transfers confirmed by the merchant\": [\n \"\"\n ],\n \"only show wire transfers claimed by the exchange\": [\n \"\"\n ],\n \"Unverified\": [\n \"\"\n ],\n \"is not valid\": [\n \"\"\n ],\n \"is not a number\": [\n \"\"\n ],\n \"must be 1 or greater\": [\n \"\"\n ],\n \"max 7 lines\": [\n \"\"\n ],\n \"change authorization configuration\": [\n \"\"\n ],\n \"Need to complete marked fields and choose authorization method\": [\n \"\"\n ],\n \"This is not a valid bitcoin address.\": [\n \"\"\n ],\n \"This is not a valid Ethereum address.\": [\n \"\"\n ],\n \"IBAN numbers usually have more that 4 digits\": [\n \"\"\n ],\n \"IBAN numbers usually have less that 34 digits\": [\n \"\"\n ],\n \"IBAN country code not found\": [\n \"\"\n ],\n \"IBAN number is not valid, checksum is wrong\": [\n \"\"\n ],\n \"Target type\": [\n \"\"\n ],\n \"Method to use for wire transfer\": [\n \"\"\n ],\n \"Routing\": [\n \"\"\n ],\n \"Routing number.\": [\n \"\"\n ],\n \"Account\": [\n \"\"\n ],\n \"Account number.\": [\n \"\"\n ],\n \"Business Identifier Code.\": [\n \"\"\n ],\n \"Bank Account Number.\": [\n \"\"\n ],\n \"Unified Payment Interface.\": [\n \"\"\n ],\n \"Bitcoin protocol.\": [\n \"\"\n ],\n \"Ethereum protocol.\": [\n \"\"\n ],\n \"Interledger protocol.\": [\n \"\"\n ],\n \"Host\": [\n \"\"\n ],\n \"Bank host.\": [\n \"\"\n ],\n \"Bank account.\": [\n \"\"\n ],\n \"Bank account owner's name.\": [\n \"\"\n ],\n \"No accounts yet.\": [\n \"\"\n ],\n \"Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.\": [\n \"\"\n ],\n \"Business name\": [\n \"\"\n ],\n \"Legal name of the business represented by this instance.\": [\n \"\"\n ],\n \"Email\": [\n \"\"\n ],\n \"Contact email\": [\n \"\"\n ],\n \"Website URL\": [\n \"\"\n ],\n \"URL.\": [\n \"\"\n ],\n \"Logo\": [\n \"\"\n ],\n \"Logo image.\": [\n \"\"\n ],\n \"Bank account\": [\n \"\"\n ],\n \"URI specifying bank account for crediting revenue.\": [\n \"\"\n ],\n \"Default max deposit fee\": [\n \"\"\n ],\n \"Maximum deposit fees this merchant is willing to pay per order by default.\": [\n \"\"\n ],\n \"Default max wire fee\": [\n \"\"\n ],\n \"Maximum wire fees this merchant is willing to pay per wire transfer by default.\": [\n \"\"\n ],\n \"Default wire fee amortization\": [\n \"\"\n ],\n \"Number of orders excess wire transfer fees will be divided by to compute per order surcharge.\": [\n \"\"\n ],\n \"Physical location of the merchant.\": [\n \"\"\n ],\n \"Jurisdiction\": [\n \"\"\n ],\n \"Jurisdiction for legal disputes with the merchant.\": [\n \"\"\n ],\n \"Default payment delay\": [\n \"\"\n ],\n \"Time customers have to pay an order before the offer expires by default.\": [\n \"\"\n ],\n \"Default wire transfer delay\": [\n \"\"\n ],\n \"Maximum time an exchange is allowed to delay wiring funds to the merchant, enabling it to aggregate smaller payments into larger wire transfers and reducing wire fees.\": [\n \"\"\n ],\n \"Instance id\": [\n \"\"\n ],\n \"Change the authorization method use for this instance.\": [\n \"\"\n ],\n \"Manage access token\": [\n \"\"\n ],\n \"Failed to create instance\": [\n \"\"\n ],\n \"Login required\": [\n \"\"\n ],\n \"Please enter your access token.\": [\n \"\"\n ],\n \"Access Token\": [\n \"\"\n ],\n \"The request to the backend take too long and was cancelled\": [\n \"\"\n ],\n \"Diagnostic from %1$s is '%2$s'\": [\n \"\"\n ],\n \"The backend reported a problem: HTTP status #%1$s\": [\n \"\"\n ],\n \"Access denied\": [\n \"\"\n ],\n \"The access token provided is invalid.\": [\n \"\"\n ],\n \"No 'default' instance configured yet.\": [\n \"\"\n ],\n \"Create a 'default' instance to begin using the merchant backoffice.\": [\n \"\"\n ],\n \"The access token provided is invalid\": [\n \"\"\n ],\n \"Hide for today\": [\n \"\"\n ],\n \"Instance\": [\n \"\"\n ],\n \"Settings\": [\n \"\"\n ],\n \"Connection\": [\n \"\"\n ],\n \"New\": [\n \"\"\n ],\n \"List\": [\n \"\"\n ],\n \"Log out\": [\n \"\"\n ],\n \"Check your token is valid\": [\n \"\"\n ],\n \"Couldn't access the server.\": [\n \"\"\n ],\n \"Could not infer instance id from url %1$s\": [\n \"\"\n ],\n \"Server not found\": [\n \"\"\n ],\n \"Couldn't access the server\": [\n \"\"\n ],\n \"Got message %1$s from %2$s\": [\n \"\"\n ],\n \"Unexpected Error\": [\n \"\"\n ],\n \"The value %1$s is invalid for a payment url\": [\n \"\"\n ],\n \"add element to the list\": [\n \"\"\n ],\n \"add\": [\n \"\"\n ],\n \"Deleting\": [\n \"\"\n ],\n \"Changing\": [\n \"\"\n ],\n \"Order ID\": [\n \"\"\n ],\n \"Payment URL\": [\n \"\"\n ]\n }\n }\n};\n\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport langIcon from \"../../assets/icons/languageicon.svg\";\nimport { strings as messages } from \"../../i18n/strings.js\";\n\ntype LangsNames = {\n [P in keyof typeof messages]: string;\n};\n\nconst names: LangsNames = {\n es: \"Espa\u00F1ol [es]\",\n en: \"English [en]\",\n fr: \"Fran\u00E7ais [fr]\",\n de: \"Deutsch [de]\",\n sv: \"Svenska [sv]\",\n it: \"Italiano [it]\",\n};\n\nfunction getLangName(s: keyof LangsNames | string) {\n if (names[s]) return names[s];\n return s;\n}\n\nexport function LangSelector(): VNode {\n const [updatingLang, setUpdatingLang] = useState(false);\n const { lang, changeLanguage } = useTranslationContext();\n\n return (\n <div class=\"dropdown is-active \">\n <div class=\"dropdown-trigger\">\n <button\n class=\"button has-tooltip-left\"\n data-tooltip=\"change language selection\"\n aria-haspopup=\"true\"\n aria-controls=\"dropdown-menu\"\n onClick={() => setUpdatingLang(!updatingLang)}\n >\n <div class=\"icon is-small is-left\">\n <img src={langIcon} />\n </div>\n <span>{getLangName(lang)}</span>\n <div class=\"icon is-right\">\n <i class=\"mdi mdi-chevron-down\" />\n </div>\n </button>\n </div>\n {updatingLang && (\n <div class=\"dropdown-menu\" id=\"dropdown-menu\" role=\"menu\">\n <div class=\"dropdown-content\">\n {Object.keys(messages)\n .filter((l) => l !== lang)\n .map((l) => (\n <a\n key={l}\n class=\"dropdown-item\"\n value={l}\n onClick={() => {\n changeLanguage(l);\n setUpdatingLang(false);\n }}\n >\n {getLangName(l)}\n </a>\n ))}\n </div>\n </div>\n )}\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { h, VNode } from \"preact\";\nimport { LangSelector } from \"./LangSelector.js\";\nimport logo from \"../../assets/logo-2021.svg\";\n\ninterface Props {\n onMobileMenu: () => void;\n title: string;\n}\n\nexport function NavigationBar({ onMobileMenu, title }: Props): VNode {\n return (\n <nav\n class=\"navbar is-fixed-top\"\n role=\"navigation\"\n aria-label=\"main navigation\"\n >\n <div class=\"navbar-brand\">\n <span class=\"navbar-item\" style={{ fontSize: 24, fontWeight: 900 }}>\n {title}\n </span>\n\n <a\n role=\"button\"\n class=\"navbar-burger\"\n aria-label=\"menu\"\n aria-expanded=\"false\"\n onClick={(e) => {\n onMobileMenu();\n e.stopPropagation();\n }}\n >\n <span aria-hidden=\"true\" />\n <span aria-hidden=\"true\" />\n <span aria-hidden=\"true\" />\n </a>\n </div>\n\n <div class=\"navbar-menu \">\n <a\n class=\"navbar-start is-justify-content-center is-flex-grow-1\"\n href=\"https://taler.net\"\n >\n <img src={logo} style={{ height: 35, margin: 10 }} />\n </a>\n <div class=\"navbar-end\">\n <div class=\"navbar-item\" style={{ paddingTop: 4, paddingBottom: 4 }}>\n <LangSelector />\n </div>\n </div>\n </div>\n </nav>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useBackendContext } from \"../../context/backend.js\";\nimport { useConfigContext } from \"../../context/config.js\";\nimport { useInstanceKYCDetails } from \"../../hooks/instance.js\";\nimport { LangSelector } from \"./LangSelector.js\";\n\nconst GIT_HASH = typeof __GIT_HASH__ !== \"undefined\" ? __GIT_HASH__ : undefined;\nconst VERSION = typeof __VERSION__ !== \"undefined\" ? __VERSION__ : undefined;\n\ninterface Props {\n onLogout: () => void;\n mobile?: boolean;\n instance: string;\n admin?: boolean;\n mimic?: boolean;\n}\n\nexport function Sidebar({\n mobile,\n instance,\n onLogout,\n admin,\n mimic,\n}: Props): VNode {\n const config = useConfigContext();\n const backend = useBackendContext();\n const { i18n } = useTranslationContext();\n const kycStatus = useInstanceKYCDetails();\n const needKYC = kycStatus.ok && kycStatus.data.type === \"redirect\";\n\n return (\n <aside class=\"aside is-placed-left is-expanded\">\n {mobile && (\n <div\n class=\"footer\"\n onClick={(e) => {\n return e.stopImmediatePropagation();\n }}\n >\n <LangSelector />\n </div>\n )}\n <div class=\"aside-tools\">\n <div class=\"aside-tools-label\">\n <div>\n <b>Taler</b> Backoffice\n </div>\n <div\n class=\"is-size-7 has-text-right\"\n style={{ lineHeight: 0, marginTop: -10 }}\n >\n {VERSION} ({config.version})\n </div>\n </div>\n </div>\n <div class=\"menu is-menu-main\">\n {instance ? (\n <Fragment>\n <p class=\"menu-label\">\n <i18n.Translate>Instance</i18n.Translate>\n </p>\n <ul class=\"menu-list\">\n <li>\n <a href={\"/update\"} class=\"has-icon\">\n <span class=\"icon\">\n <i class=\"mdi mdi-square-edit-outline\" />\n </span>\n <span class=\"menu-item-label\">\n <i18n.Translate>Settings</i18n.Translate>\n </span>\n </a>\n </li>\n <li>\n <a href={\"/orders\"} class=\"has-icon\">\n <span class=\"icon\">\n <i class=\"mdi mdi-cash-register\" />\n </span>\n <span class=\"menu-item-label\">\n <i18n.Translate>Orders</i18n.Translate>\n </span>\n </a>\n </li>\n <li>\n <a href={\"/products\"} class=\"has-icon\">\n <span class=\"icon\">\n <i class=\"mdi mdi-shopping\" />\n </span>\n <span class=\"menu-item-label\">\n <i18n.Translate>Products</i18n.Translate>\n </span>\n </a>\n </li>\n <li>\n <a href={\"/transfers\"} class=\"has-icon\">\n <span class=\"icon\">\n <i class=\"mdi mdi-bank\" />\n </span>\n <span class=\"menu-item-label\">\n <i18n.Translate>Transfers</i18n.Translate>\n </span>\n </a>\n </li>\n <li>\n <a href={\"/templates\"} class=\"has-icon\">\n <span class=\"icon\">\n <i class=\"mdi mdi-newspaper\" />\n </span>\n <span class=\"menu-item-label\">\n <i18n.Translate>Templates</i18n.Translate>\n </span>\n </a>\n </li>\n <li>\n <a href={\"/reserves\"} class=\"has-icon\">\n <span class=\"icon\">\n <i class=\"mdi mdi-cash\" />\n </span>\n <span class=\"menu-item-label\">Reserves</span>\n </a>\n </li>\n <li>\n <a href={\"/webhooks\"} class=\"has-icon\">\n <span class=\"icon\">\n <i class=\"mdi mdi-newspaper\" />\n </span>\n <span class=\"menu-item-label\">\n <i18n.Translate>Webhooks</i18n.Translate>\n </span>\n </a>\n </li>\n {needKYC && (\n <li>\n <a href={\"/kyc\"} class=\"has-icon\">\n <span class=\"icon\">\n <i class=\"mdi mdi-account-check\" />\n </span>\n <span class=\"menu-item-label\">KYC Status</span>\n </a>\n </li>\n )}\n </ul>\n </Fragment>\n ) : undefined}\n <p class=\"menu-label\">\n <i18n.Translate>Connection</i18n.Translate>\n </p>\n <ul class=\"menu-list\">\n <li>\n <div>\n <span style={{ width: \"3rem\" }} class=\"icon\">\n <i class=\"mdi mdi-currency-eur\" />\n </span>\n <span class=\"menu-item-label\">{config.currency}</span>\n </div>\n </li>\n <li>\n <div>\n <span style={{ width: \"3rem\" }} class=\"icon\">\n <i class=\"mdi mdi-web\" />\n </span>\n <span class=\"menu-item-label\">\n {new URL(backend.url).hostname}\n </span>\n </div>\n </li>\n <li>\n <div>\n <span style={{ width: \"3rem\" }} class=\"icon\">\n ID\n </span>\n <span class=\"menu-item-label\">\n {!instance ? \"default\" : instance}\n </span>\n </div>\n </li>\n {admin && !mimic && (\n <Fragment>\n <p class=\"menu-label\">\n <i18n.Translate>Instances</i18n.Translate>\n </p>\n <li>\n <a href={\"/instance/new\"} class=\"has-icon\">\n <span class=\"icon\">\n <i class=\"mdi mdi-plus\" />\n </span>\n <span class=\"menu-item-label\">\n <i18n.Translate>New</i18n.Translate>\n </span>\n </a>\n </li>\n <li>\n <a href={\"/instances\"} class=\"has-icon\">\n <span class=\"icon\">\n <i class=\"mdi mdi-format-list-bulleted\" />\n </span>\n <span class=\"menu-item-label\">\n <i18n.Translate>List</i18n.Translate>\n </span>\n </a>\n </li>\n </Fragment>\n )}\n <li>\n <a\n class=\"has-icon is-state-info is-hoverable\"\n onClick={(): void => onLogout()}\n >\n <span class=\"icon\">\n <i class=\"mdi mdi-logout default\" />\n </span>\n <span class=\"menu-item-label\">\n <i18n.Translate>Log out</i18n.Translate>\n </span>\n </a>\n </li>\n </ul>\n </div>\n </aside>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\nimport { ComponentChildren, Fragment, h, VNode } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { AdminPaths } from \"../../AdminRoutes.js\";\nimport { InstancePaths } from \"../../InstanceRoutes.js\";\nimport { Notification } from \"../../utils/types.js\";\nimport { NavigationBar } from \"./NavigationBar.js\";\nimport { Sidebar } from \"./SideBar.js\";\n\nfunction getInstanceTitle(path: string, id: string): string {\n switch (path) {\n case InstancePaths.update:\n return `${id}: Settings`;\n case InstancePaths.order_list:\n return `${id}: Orders`;\n case InstancePaths.order_new:\n return `${id}: New order`;\n case InstancePaths.product_list:\n return `${id}: Products`;\n case InstancePaths.product_new:\n return `${id}: New product`;\n case InstancePaths.product_update:\n return `${id}: Update product`;\n case InstancePaths.reserves_new:\n return `${id}: New reserve`;\n case InstancePaths.reserves_list:\n return `${id}: Reserves`;\n case InstancePaths.transfers_list:\n return `${id}: Transfers`;\n case InstancePaths.transfers_new:\n return `${id}: New transfer`;\n case InstancePaths.webhooks_list:\n return `${id}: Webhooks`;\n case InstancePaths.webhooks_new:\n return `${id}: New webhook`;\n case InstancePaths.webhooks_update:\n return `${id}: Update webhook`;\n case InstancePaths.templates_new:\n return `${id}: New template`;\n case InstancePaths.templates_update:\n return `${id}: Update template`;\n case InstancePaths.templates_list:\n return `${id}: Templates`;\n case InstancePaths.templates_use:\n return `${id}: Use template`;\n default:\n return \"\";\n }\n}\n\nfunction getAdminTitle(path: string, instance: string) {\n if (path === AdminPaths.new_instance) return `New instance`;\n if (path === AdminPaths.list_instances) return `Instances`;\n return getInstanceTitle(path, instance);\n}\n\ninterface MenuProps {\n title?: string;\n path: string;\n instance: string;\n admin?: boolean;\n onLogout?: () => void;\n setInstanceName: (s: string) => void;\n}\n\nfunction WithTitle({\n title,\n children,\n}: {\n title: string;\n children: ComponentChildren;\n}): VNode {\n useEffect(() => {\n document.title = `Taler Backoffice: ${title}`;\n }, [title]);\n return <Fragment>{children}</Fragment>;\n}\n\nexport function Menu({\n onLogout,\n title,\n instance,\n path,\n admin,\n setInstanceName,\n}: MenuProps): VNode {\n const [mobileOpen, setMobileOpen] = useState(false);\n\n const titleWithSubtitle = title\n ? title\n : !admin\n ? getInstanceTitle(path, instance)\n : getAdminTitle(path, instance);\n const adminInstance = instance === \"default\";\n const mimic = admin && !adminInstance;\n return (\n <WithTitle title={titleWithSubtitle}>\n <div\n class={mobileOpen ? \"has-aside-mobile-expanded\" : \"\"}\n onClick={() => setMobileOpen(false)}\n >\n <NavigationBar\n onMobileMenu={() => setMobileOpen(!mobileOpen)}\n title={titleWithSubtitle}\n />\n\n {onLogout && (\n <Sidebar\n onLogout={onLogout}\n admin={admin}\n mimic={mimic}\n instance={instance}\n mobile={mobileOpen}\n />\n )}\n\n {mimic && (\n <nav class=\"level\">\n <div class=\"level-item has-text-centered has-background-warning\">\n <p class=\"is-size-5\">\n You are viewing the instance <b>&quot;{instance}&quot;</b>.{\" \"}\n <a\n href=\"#/instances\"\n onClick={(e) => {\n setInstanceName(\"default\");\n }}\n >\n go back\n </a>\n </p>\n </div>\n </nav>\n )}\n </div>\n </WithTitle>\n );\n}\n\ninterface NotYetReadyAppMenuProps {\n title: string;\n onLogout?: () => void;\n}\n\ninterface NotifProps {\n notification?: Notification;\n}\nexport function NotificationCard({\n notification: n,\n}: NotifProps): VNode | null {\n if (!n) return null;\n return (\n <div class=\"notification\">\n <div class=\"columns is-vcentered\">\n <div class=\"column is-12\">\n <article\n class={\n n.type === \"ERROR\"\n ? \"message is-danger\"\n : n.type === \"WARN\"\n ? \"message is-warning\"\n : \"message is-info\"\n }\n >\n <div class=\"message-header\">\n <p>{n.message}</p>\n </div>\n {n.description && (\n <div class=\"message-body\">\n <div>{n.description}</div>\n {n.details && <pre>{n.details}</pre>}\n </div>\n )}\n </article>\n </div>\n </div>\n </div>\n );\n}\n\nexport function NotYetReadyAppMenu({\n onLogout,\n title,\n}: NotYetReadyAppMenuProps): VNode {\n const [mobileOpen, setMobileOpen] = useState(false);\n\n useEffect(() => {\n document.title = `Taler Backoffice: ${title}`;\n }, [title]);\n\n return (\n <div\n class={mobileOpen ? \"has-aside-mobile-expanded\" : \"\"}\n onClick={() => setMobileOpen(false)}\n >\n <NavigationBar\n onMobileMenu={() => setMobileOpen(!mobileOpen)}\n title={title}\n />\n {onLogout && (\n <Sidebar onLogout={onLogout} instance=\"\" mobile={mobileOpen} />\n )}\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { createHashHistory } from \"history\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { Router, Route, route } from \"preact-router\";\nimport { useState } from \"preact/hooks\";\nimport {\n NotificationCard,\n NotYetReadyAppMenu,\n} from \"./components/menu/index.js\";\nimport { useBackendContext } from \"./context/backend.js\";\nimport { useBackendInstancesTestForAdmin } from \"./hooks/backend.js\";\nimport { InstanceRoutes } from \"./InstanceRoutes.js\";\nimport LoginPage from \"./paths/login/index.js\";\nimport { INSTANCE_ID_LOOKUP } from \"./utils/constants.js\";\n\nexport function ApplicationReadyRoutes(): VNode {\n const { i18n } = useTranslationContext();\n const {\n url: backendURL,\n updateLoginStatus,\n clearAllTokens,\n } = useBackendContext();\n\n const result = useBackendInstancesTestForAdmin();\n\n const clearTokenAndGoToRoot = () => {\n clearAllTokens();\n route(\"/\");\n };\n\n if (result.clientError && result.isUnauthorized) {\n return (\n <Fragment>\n <NotYetReadyAppMenu title=\"Login\" onLogout={clearTokenAndGoToRoot} />\n <NotificationCard\n notification={{\n message: i18n.str`Access denied`,\n description: i18n.str`Check your token is valid`,\n type: \"ERROR\",\n }}\n />\n <LoginPage onConfirm={updateLoginStatus} />\n </Fragment>\n );\n }\n\n if (result.loading) return <NotYetReadyAppMenu title=\"Loading...\" />;\n\n let admin = true;\n let instanceNameByBackendURL;\n\n if (!result.ok) {\n const path = new URL(backendURL).pathname;\n const match = INSTANCE_ID_LOOKUP.exec(path);\n if (!match || !match[1]) {\n // this should be rare because\n // query to /config is ok but the URL\n // does not match our pattern\n return (\n <Fragment>\n <NotYetReadyAppMenu title=\"Error\" onLogout={clearTokenAndGoToRoot} />\n <NotificationCard\n notification={{\n message: i18n.str`Couldn't access the server.`,\n description: i18n.str`Could not infer instance id from url ${backendURL}`,\n type: \"ERROR\",\n }}\n />\n <LoginPage onConfirm={updateLoginStatus} />\n </Fragment>\n );\n }\n\n admin = false;\n instanceNameByBackendURL = match[1];\n }\n\n const history = createHashHistory();\n return (\n <Router history={history}>\n <Route\n default\n component={DefaultMainRoute}\n admin={admin}\n instanceNameByBackendURL={instanceNameByBackendURL}\n />\n </Router>\n );\n}\n\nfunction DefaultMainRoute({\n instance,\n admin,\n instanceNameByBackendURL,\n url, //from preact-router\n}: any): VNode {\n const [instanceName, setInstanceName] = useState(\n instanceNameByBackendURL || instance || \"default\",\n );\n\n return (\n <InstanceRoutes\n admin={admin}\n path={url}\n id={instanceName}\n setInstanceName={setInstanceName}\n />\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport {\n TranslationProvider,\n useTranslationContext,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { route } from \"preact-router\";\nimport { useMemo } from \"preact/hooks\";\nimport { ApplicationReadyRoutes } from \"./ApplicationReadyRoutes.js\";\nimport { Loading } from \"./components/exception/loading.js\";\nimport {\n NotificationCard,\n NotYetReadyAppMenu,\n} from \"./components/menu/index.js\";\nimport {\n BackendContextProvider,\n useBackendContext,\n} from \"./context/backend.js\";\nimport { ConfigContextProvider } from \"./context/config.js\";\nimport { useBackendConfig } from \"./hooks/backend.js\";\nimport { strings } from \"./i18n/strings.js\";\nimport LoginPage from \"./paths/login/index.js\";\n\nexport function Application(): VNode {\n return (\n // <FetchContextProvider>\n <BackendContextProvider>\n <TranslationProvider source={strings}>\n <ApplicationStatusRoutes />\n </TranslationProvider>\n </BackendContextProvider>\n // </FetchContextProvider>\n );\n}\n\nfunction ApplicationStatusRoutes(): VNode {\n const { updateLoginStatus, triedToLog } = useBackendContext();\n const result = useBackendConfig();\n const { i18n } = useTranslationContext();\n\n const updateLoginInfoAndGoToRoot = (url: string, token?: string) => {\n updateLoginStatus(url, token);\n route(\"/\");\n };\n\n const { currency, version } = result.ok\n ? result.data\n : { currency: \"unknown\", version: \"unknown\" };\n const ctx = useMemo(() => ({ currency, version }), [currency, version]);\n\n if (!triedToLog) {\n return (\n <Fragment>\n <NotYetReadyAppMenu title=\"Welcome!\" />\n <LoginPage onConfirm={updateLoginInfoAndGoToRoot} />\n </Fragment>\n );\n }\n\n if (result.clientError && result.isUnauthorized)\n return (\n <Fragment>\n <NotYetReadyAppMenu title=\"Login\" />\n <LoginPage onConfirm={updateLoginInfoAndGoToRoot} />\n </Fragment>\n );\n\n if (result.clientError && result.isNotfound)\n return (\n <Fragment>\n <NotYetReadyAppMenu title=\"Error\" />\n <NotificationCard\n notification={{\n message: i18n.str`Server not found`,\n type: \"ERROR\",\n description: `Check your url`,\n }}\n />\n <LoginPage onConfirm={updateLoginInfoAndGoToRoot} />\n </Fragment>\n );\n\n if (result.serverError)\n return (\n <Fragment>\n <NotYetReadyAppMenu title=\"Error\" />\n <NotificationCard\n notification={{\n message: i18n.str`Couldn't access the server`,\n type: \"ERROR\",\n description: i18n.str`Got message ${result.message} from ${result.info?.url}`,\n }}\n />\n <LoginPage onConfirm={updateLoginInfoAndGoToRoot} />\n </Fragment>\n );\n\n if (result.loading) return <Loading />;\n\n if (!result.ok)\n return (\n <Fragment>\n <NotYetReadyAppMenu title=\"Error\" />\n <NotificationCard\n notification={{\n message: i18n.str`Unexpected Error`,\n type: \"ERROR\",\n description: i18n.str`Got message ${result.message} from ${result.info?.url}`,\n }}\n />\n <LoginPage onConfirm={updateLoginInfoAndGoToRoot} />\n </Fragment>\n );\n\n return (\n <div class=\"has-navbar-fixed-top\">\n <ConfigContextProvider value={ctx}>\n <ApplicationReadyRoutes />\n </ConfigContextProvider>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\nimport { Application } from \"./Application.js\";\n\nimport { h, render } from \"preact\";\nimport \"./scss/main.scss\";\n\nconst app = document.getElementById(\"app\");\n\nrender(<Application />, app as any);\n"],
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,QAAI,SAAU,SAAUA,YAAW;AAC/B;AAEA,UAAI,OAAO,KACP,WAAW,GACX,UAAU,kBACV,cAAc,aAAa,OAAO,GAClC,mBAAmB;AAEvB,UAAI,uBAAuB,OAAO,WAAW;AAE7C,eAAS,QAAQC,IAAG,OAAO,UAAU,eAAe;AAChD,YAAI,OAAOA,OAAM;AAAa,iBAAO,QAAQ,CAAC;AAC9C,YAAI,OAAO,UAAU;AAAa,iBAAO,CAAC,UAAU,MAAM,CAAC,WAAW,WAAWA,EAAC,IAAI,UAAUA,IAAG,OAAO,UAAU,aAAa;AACjI,eAAO,WAAWA,EAAC;AAAA,MACvB;AAEA,eAAS,WAAW,OAAO,MAAM;AAC7B,aAAK,QAAQ;AACb,aAAK,OAAO;AACZ,aAAK,UAAU;AAAA,MACnB;AACA,iBAAW,YAAY,OAAO,OAAO,QAAQ,SAAS;AAEtD,eAAS,aAAa,OAAO;AACzB,aAAK,QAAQ;AACb,aAAK,OAAO,QAAQ;AACpB,aAAK,UAAU;AAAA,MACnB;AACA,mBAAa,YAAY,OAAO,OAAO,QAAQ,SAAS;AAExD,eAAS,aAAa,OAAO;AACzB,aAAK,QAAQ;AAAA,MACjB;AACA,mBAAa,YAAY,OAAO,OAAO,QAAQ,SAAS;AAExD,eAAS,UAAUC,IAAG;AAClB,eAAO,CAAC,UAAUA,MAAKA,KAAI;AAAA,MAC/B;AAEA,eAAS,aAAaA,IAAG;AACrB,YAAIA,KAAI;AACJ,iBAAO,CAACA,EAAC;AACb,YAAIA,KAAI;AACJ,iBAAO,CAACA,KAAI,KAAK,KAAK,MAAMA,KAAI,GAAG,CAAC;AACxC,eAAO,CAACA,KAAI,KAAK,KAAK,MAAMA,KAAI,GAAG,IAAI,KAAK,KAAK,MAAMA,KAAI,IAAI,CAAC;AAAA,MACpE;AAEA,eAAS,aAAa,KAAK;AACvB,QAAAC,MAAK,GAAG;AACR,YAAI,SAAS,IAAI;AACjB,YAAI,SAAS,KAAK,WAAW,KAAK,WAAW,IAAI,GAAG;AAChD,kBAAQ,QAAQ;AAAA,YACZ,KAAK;AAAG,qBAAO;AAAA,YACf,KAAK;AAAG,qBAAO,IAAI,CAAC;AAAA,YACpB,KAAK;AAAG,qBAAO,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;AAAA,YACjC;AAAS,qBAAO,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,QAAQ;AAAA,UACxD;AAAA,QACJ;AACA,eAAO;AAAA,MACX;AAEA,eAASA,MAAKF,IAAG;AACb,YAAIG,KAAIH,GAAE;AACV,eAAOA,GAAE,EAAEG,EAAC,MAAM;AAAE;AACpB,QAAAH,GAAE,SAASG,KAAI;AAAA,MACnB;AAEA,eAAS,YAAY,QAAQ;AACzB,YAAIC,KAAI,IAAI,MAAM,MAAM;AACxB,YAAID,KAAI;AACR,eAAO,EAAEA,KAAI,QAAQ;AACjB,UAAAC,GAAED,EAAC,IAAI;AAAA,QACX;AACA,eAAOC;AAAA,MACX;AAEA,eAAS,SAASH,IAAG;AACjB,YAAIA,KAAI;AAAG,iBAAO,KAAK,MAAMA,EAAC;AAC9B,eAAO,KAAK,KAAKA,EAAC;AAAA,MACtB;AAEA,eAASI,KAAIC,IAAGC,IAAG;AACf,YAAI,MAAMD,GAAE,QACR,MAAMC,GAAE,QACRC,KAAI,IAAI,MAAM,GAAG,GACjB,QAAQ,GACRC,QAAO,MACPC,MAAKP;AACT,aAAKA,KAAI,GAAGA,KAAI,KAAKA,MAAK;AACtB,UAAAO,OAAMJ,GAAEH,EAAC,IAAII,GAAEJ,EAAC,IAAI;AACpB,kBAAQO,QAAOD,QAAO,IAAI;AAC1B,UAAAD,GAAEL,EAAC,IAAIO,OAAM,QAAQD;AAAA,QACzB;AACA,eAAON,KAAI,KAAK;AACZ,UAAAO,OAAMJ,GAAEH,EAAC,IAAI;AACb,kBAAQO,SAAQD,QAAO,IAAI;AAC3B,UAAAD,GAAEL,IAAG,IAAIO,OAAM,QAAQD;AAAA,QAC3B;AACA,YAAI,QAAQ;AAAG,UAAAD,GAAE,KAAK,KAAK;AAC3B,eAAOA;AAAA,MACX;AAEA,eAAS,OAAOF,IAAGC,IAAG;AAClB,YAAID,GAAE,UAAUC,GAAE;AAAQ,iBAAOF,KAAIC,IAAGC,EAAC;AACzC,eAAOF,KAAIE,IAAGD,EAAC;AAAA,MACnB;AAEA,eAAS,SAASA,IAAG,OAAO;AACxB,YAAIK,KAAIL,GAAE,QACNE,KAAI,IAAI,MAAMG,EAAC,GACfF,QAAO,MACPC,MAAKP;AACT,aAAKA,KAAI,GAAGA,KAAIQ,IAAGR,MAAK;AACpB,UAAAO,OAAMJ,GAAEH,EAAC,IAAIM,QAAO;AACpB,kBAAQ,KAAK,MAAMC,OAAMD,KAAI;AAC7B,UAAAD,GAAEL,EAAC,IAAIO,OAAM,QAAQD;AACrB,mBAAS;AAAA,QACb;AACA,eAAO,QAAQ,GAAG;AACd,UAAAD,GAAEL,IAAG,IAAI,QAAQM;AACjB,kBAAQ,KAAK,MAAM,QAAQA,KAAI;AAAA,QACnC;AACA,eAAOD;AAAA,MACX;AAEA,iBAAW,UAAU,MAAM,SAAUR,IAAG;AACpC,YAAIC,KAAI,WAAWD,EAAC;AACpB,YAAI,KAAK,SAASC,GAAE,MAAM;AACtB,iBAAO,KAAK,SAASA,GAAE,OAAO,CAAC;AAAA,QACnC;AACA,YAAIK,KAAI,KAAK,OAAOC,KAAIN,GAAE;AAC1B,YAAIA,GAAE,SAAS;AACX,iBAAO,IAAI,WAAW,SAASK,IAAG,KAAK,IAAIC,EAAC,CAAC,GAAG,KAAK,IAAI;AAAA,QAC7D;AACA,eAAO,IAAI,WAAW,OAAOD,IAAGC,EAAC,GAAG,KAAK,IAAI;AAAA,MACjD;AACA,iBAAW,UAAU,OAAO,WAAW,UAAU;AAEjD,mBAAa,UAAU,MAAM,SAAUP,IAAG;AACtC,YAAIC,KAAI,WAAWD,EAAC;AACpB,YAAIM,KAAI,KAAK;AACb,YAAIA,KAAI,MAAML,GAAE,MAAM;AAClB,iBAAO,KAAK,SAASA,GAAE,OAAO,CAAC;AAAA,QACnC;AACA,YAAIM,KAAIN,GAAE;AACV,YAAIA,GAAE,SAAS;AACX,cAAI,UAAUK,KAAIC,EAAC;AAAG,mBAAO,IAAI,aAAaD,KAAIC,EAAC;AACnD,UAAAA,KAAI,aAAa,KAAK,IAAIA,EAAC,CAAC;AAAA,QAChC;AACA,eAAO,IAAI,WAAW,SAASA,IAAG,KAAK,IAAID,EAAC,CAAC,GAAGA,KAAI,CAAC;AAAA,MACzD;AACA,mBAAa,UAAU,OAAO,aAAa,UAAU;AAErD,mBAAa,UAAU,MAAM,SAAUN,IAAG;AACtC,eAAO,IAAI,aAAa,KAAK,QAAQ,WAAWA,EAAC,EAAE,KAAK;AAAA,MAC5D;AACA,mBAAa,UAAU,OAAO,aAAa,UAAU;AAErD,eAAS,SAASM,IAAGC,IAAG;AACpB,YAAI,MAAMD,GAAE,QACR,MAAMC,GAAE,QACRC,KAAI,IAAI,MAAM,GAAG,GACjB,SAAS,GACTC,QAAO,MACPN,IAAGS;AACP,aAAKT,KAAI,GAAGA,KAAI,KAAKA,MAAK;AACtB,UAAAS,cAAaN,GAAEH,EAAC,IAAI,SAASI,GAAEJ,EAAC;AAChC,cAAIS,cAAa,GAAG;AAChB,YAAAA,eAAcH;AACd,qBAAS;AAAA,UACb;AAAO,qBAAS;AAChB,UAAAD,GAAEL,EAAC,IAAIS;AAAA,QACX;AACA,aAAKT,KAAI,KAAKA,KAAI,KAAKA,MAAK;AACxB,UAAAS,cAAaN,GAAEH,EAAC,IAAI;AACpB,cAAIS,cAAa;AAAG,YAAAA,eAAcH;AAAA,eAC7B;AACD,YAAAD,GAAEL,IAAG,IAAIS;AACT;AAAA,UACJ;AACA,UAAAJ,GAAEL,EAAC,IAAIS;AAAA,QACX;AACA,eAAOT,KAAI,KAAKA,MAAK;AACjB,UAAAK,GAAEL,EAAC,IAAIG,GAAEH,EAAC;AAAA,QACd;AACA,QAAAD,MAAKM,EAAC;AACN,eAAOA;AAAA,MACX;AAEA,eAAS,YAAYF,IAAGC,IAAG,MAAM;AAC7B,YAAI;AACJ,YAAI,WAAWD,IAAGC,EAAC,KAAK,GAAG;AACvB,kBAAQ,SAASD,IAAGC,EAAC;AAAA,QACzB,OAAO;AACH,kBAAQ,SAASA,IAAGD,EAAC;AACrB,iBAAO,CAAC;AAAA,QACZ;AACA,gBAAQ,aAAa,KAAK;AAC1B,YAAI,OAAO,UAAU,UAAU;AAC3B,cAAI;AAAM,oBAAQ,CAAC;AACnB,iBAAO,IAAI,aAAa,KAAK;AAAA,QACjC;AACA,eAAO,IAAI,WAAW,OAAO,IAAI;AAAA,MACrC;AAEA,eAAS,cAAcA,IAAGC,IAAG,MAAM;AAC/B,YAAII,KAAIL,GAAE,QACNE,KAAI,IAAI,MAAMG,EAAC,GACf,QAAQ,CAACJ,IACTE,QAAO,MACPN,IAAGS;AACP,aAAKT,KAAI,GAAGA,KAAIQ,IAAGR,MAAK;AACpB,UAAAS,cAAaN,GAAEH,EAAC,IAAI;AACpB,kBAAQ,KAAK,MAAMS,cAAaH,KAAI;AACpC,UAAAG,eAAcH;AACd,UAAAD,GAAEL,EAAC,IAAIS,cAAa,IAAIA,cAAaH,QAAOG;AAAA,QAChD;AACA,QAAAJ,KAAI,aAAaA,EAAC;AAClB,YAAI,OAAOA,OAAM,UAAU;AACvB,cAAI;AAAM,YAAAA,KAAI,CAACA;AACf,iBAAO,IAAI,aAAaA,EAAC;AAAA,QAC7B;AAAE,eAAO,IAAI,WAAWA,IAAG,IAAI;AAAA,MACnC;AAEA,iBAAW,UAAU,WAAW,SAAUR,IAAG;AACzC,YAAIC,KAAI,WAAWD,EAAC;AACpB,YAAI,KAAK,SAASC,GAAE,MAAM;AACtB,iBAAO,KAAK,IAAIA,GAAE,OAAO,CAAC;AAAA,QAC9B;AACA,YAAIK,KAAI,KAAK,OAAOC,KAAIN,GAAE;AAC1B,YAAIA,GAAE;AACF,iBAAO,cAAcK,IAAG,KAAK,IAAIC,EAAC,GAAG,KAAK,IAAI;AAClD,eAAO,YAAYD,IAAGC,IAAG,KAAK,IAAI;AAAA,MACtC;AACA,iBAAW,UAAU,QAAQ,WAAW,UAAU;AAElD,mBAAa,UAAU,WAAW,SAAUP,IAAG;AAC3C,YAAIC,KAAI,WAAWD,EAAC;AACpB,YAAIM,KAAI,KAAK;AACb,YAAIA,KAAI,MAAML,GAAE,MAAM;AAClB,iBAAO,KAAK,IAAIA,GAAE,OAAO,CAAC;AAAA,QAC9B;AACA,YAAIM,KAAIN,GAAE;AACV,YAAIA,GAAE,SAAS;AACX,iBAAO,IAAI,aAAaK,KAAIC,EAAC;AAAA,QACjC;AACA,eAAO,cAAcA,IAAG,KAAK,IAAID,EAAC,GAAGA,MAAK,CAAC;AAAA,MAC/C;AACA,mBAAa,UAAU,QAAQ,aAAa,UAAU;AAEtD,mBAAa,UAAU,WAAW,SAAUN,IAAG;AAC3C,eAAO,IAAI,aAAa,KAAK,QAAQ,WAAWA,EAAC,EAAE,KAAK;AAAA,MAC5D;AACA,mBAAa,UAAU,QAAQ,aAAa,UAAU;AAEtD,iBAAW,UAAU,SAAS,WAAY;AACtC,eAAO,IAAI,WAAW,KAAK,OAAO,CAAC,KAAK,IAAI;AAAA,MAChD;AACA,mBAAa,UAAU,SAAS,WAAY;AACxC,YAAI,OAAO,KAAK;AAChB,YAAI,QAAQ,IAAI,aAAa,CAAC,KAAK,KAAK;AACxC,cAAM,OAAO,CAAC;AACd,eAAO;AAAA,MACX;AACA,mBAAa,UAAU,SAAS,WAAY;AACxC,eAAO,IAAI,aAAa,CAAC,KAAK,KAAK;AAAA,MACvC;AAEA,iBAAW,UAAU,MAAM,WAAY;AACnC,eAAO,IAAI,WAAW,KAAK,OAAO,KAAK;AAAA,MAC3C;AACA,mBAAa,UAAU,MAAM,WAAY;AACrC,eAAO,IAAI,aAAa,KAAK,IAAI,KAAK,KAAK,CAAC;AAAA,MAChD;AACA,mBAAa,UAAU,MAAM,WAAY;AACrC,eAAO,IAAI,aAAa,KAAK,SAAS,IAAI,KAAK,QAAQ,CAAC,KAAK,KAAK;AAAA,MACtE;AAGA,eAAS,aAAaM,IAAGC,IAAG;AACxB,YAAI,MAAMD,GAAE,QACR,MAAMC,GAAE,QACRI,KAAI,MAAM,KACVH,KAAI,YAAYG,EAAC,GACjBF,QAAO,MACP,SAAS,OAAON,IAAG,KAAK;AAC5B,aAAKA,KAAI,GAAGA,KAAI,KAAK,EAAEA,IAAG;AACtB,gBAAMG,GAAEH,EAAC;AACT,mBAASU,KAAI,GAAGA,KAAI,KAAK,EAAEA,IAAG;AAC1B,kBAAMN,GAAEM,EAAC;AACT,sBAAU,MAAM,MAAML,GAAEL,KAAIU,EAAC;AAC7B,oBAAQ,KAAK,MAAM,UAAUJ,KAAI;AACjC,YAAAD,GAAEL,KAAIU,EAAC,IAAI,UAAU,QAAQJ;AAC7B,YAAAD,GAAEL,KAAIU,KAAI,CAAC,KAAK;AAAA,UACpB;AAAA,QACJ;AACA,QAAAX,MAAKM,EAAC;AACN,eAAOA;AAAA,MACX;AAEA,eAAS,cAAcF,IAAGC,IAAG;AACzB,YAAII,KAAIL,GAAE,QACNE,KAAI,IAAI,MAAMG,EAAC,GACfF,QAAO,MACP,QAAQ,GACR,SAASN;AACb,aAAKA,KAAI,GAAGA,KAAIQ,IAAGR,MAAK;AACpB,oBAAUG,GAAEH,EAAC,IAAII,KAAI;AACrB,kBAAQ,KAAK,MAAM,UAAUE,KAAI;AACjC,UAAAD,GAAEL,EAAC,IAAI,UAAU,QAAQM;AAAA,QAC7B;AACA,eAAO,QAAQ,GAAG;AACd,UAAAD,GAAEL,IAAG,IAAI,QAAQM;AACjB,kBAAQ,KAAK,MAAM,QAAQA,KAAI;AAAA,QACnC;AACA,eAAOD;AAAA,MACX;AAEA,eAAS,UAAUJ,IAAGH,IAAG;AACrB,YAAIO,KAAI,CAAC;AACT,eAAOP,OAAM;AAAG,UAAAO,GAAE,KAAK,CAAC;AACxB,eAAOA,GAAE,OAAOJ,EAAC;AAAA,MACrB;AAEA,eAAS,kBAAkBA,IAAGU,IAAG;AAC7B,YAAIb,KAAI,KAAK,IAAIG,GAAE,QAAQU,GAAE,MAAM;AAEnC,YAAIb,MAAK;AAAI,iBAAO,aAAaG,IAAGU,EAAC;AACrC,QAAAb,KAAI,KAAK,KAAKA,KAAI,CAAC;AAEnB,YAAIM,KAAIH,GAAE,MAAMH,EAAC,GACbK,KAAIF,GAAE,MAAM,GAAGH,EAAC,GAChBc,KAAID,GAAE,MAAMb,EAAC,GACbe,KAAIF,GAAE,MAAM,GAAGb,EAAC;AAEpB,YAAI,KAAK,kBAAkBK,IAAGU,EAAC,GAC3B,KAAK,kBAAkBT,IAAGQ,EAAC,GAC3B,OAAO,kBAAkB,OAAOT,IAAGC,EAAC,GAAG,OAAOS,IAAGD,EAAC,CAAC;AAEvD,YAAI,UAAU,OAAO,OAAO,IAAI,UAAU,SAAS,SAAS,MAAM,EAAE,GAAG,EAAE,GAAGd,EAAC,CAAC,GAAG,UAAU,IAAI,IAAIA,EAAC,CAAC;AACrG,QAAAC,MAAK,OAAO;AACZ,eAAO;AAAA,MACX;AAIA,eAAS,aAAa,IAAIe,KAAI;AAC1B,eAAO,SAAS,KAAK,QAAQA,MAAK,QAAW,KAAKA,MAAK;AAAA,MAC3D;AAEA,iBAAW,UAAU,WAAW,SAAUjB,IAAG;AACzC,YAAIC,KAAI,WAAWD,EAAC,GAChBM,KAAI,KAAK,OAAOC,KAAIN,GAAE,OACtB,OAAO,KAAK,SAASA,GAAE,MACvB;AACJ,YAAIA,GAAE,SAAS;AACX,cAAIM,OAAM;AAAG,mBAAO,QAAQ,CAAC;AAC7B,cAAIA,OAAM;AAAG,mBAAO;AACpB,cAAIA,OAAM;AAAI,mBAAO,KAAK,OAAO;AACjC,gBAAM,KAAK,IAAIA,EAAC;AAChB,cAAI,MAAM,MAAM;AACZ,mBAAO,IAAI,WAAW,cAAcD,IAAG,GAAG,GAAG,IAAI;AAAA,UACrD;AACA,UAAAC,KAAI,aAAa,GAAG;AAAA,QACxB;AACA,YAAI,aAAaD,GAAE,QAAQC,GAAE,MAAM;AAC/B,iBAAO,IAAI,WAAW,kBAAkBD,IAAGC,EAAC,GAAG,IAAI;AACvD,eAAO,IAAI,WAAW,aAAaD,IAAGC,EAAC,GAAG,IAAI;AAAA,MAClD;AAEA,iBAAW,UAAU,QAAQ,WAAW,UAAU;AAElD,eAAS,sBAAsBD,IAAGC,IAAG,MAAM;AACvC,YAAID,KAAI,MAAM;AACV,iBAAO,IAAI,WAAW,cAAcC,IAAGD,EAAC,GAAG,IAAI;AAAA,QACnD;AACA,eAAO,IAAI,WAAW,aAAaC,IAAG,aAAaD,EAAC,CAAC,GAAG,IAAI;AAAA,MAChE;AACA,mBAAa,UAAU,mBAAmB,SAAUA,IAAG;AACnD,YAAI,UAAUA,GAAE,QAAQ,KAAK,KAAK,GAAG;AACjC,iBAAO,IAAI,aAAaA,GAAE,QAAQ,KAAK,KAAK;AAAA,QAChD;AACA,eAAO,sBAAsB,KAAK,IAAIA,GAAE,KAAK,GAAG,aAAa,KAAK,IAAI,KAAK,KAAK,CAAC,GAAG,KAAK,SAASA,GAAE,IAAI;AAAA,MAC5G;AACA,iBAAW,UAAU,mBAAmB,SAAUA,IAAG;AACjD,YAAIA,GAAE,UAAU;AAAG,iBAAO,QAAQ,CAAC;AACnC,YAAIA,GAAE,UAAU;AAAG,iBAAO;AAC1B,YAAIA,GAAE,UAAU;AAAI,iBAAO,KAAK,OAAO;AACvC,eAAO,sBAAsB,KAAK,IAAIA,GAAE,KAAK,GAAG,KAAK,OAAO,KAAK,SAASA,GAAE,IAAI;AAAA,MACpF;AACA,mBAAa,UAAU,WAAW,SAAUN,IAAG;AAC3C,eAAO,WAAWA,EAAC,EAAE,iBAAiB,IAAI;AAAA,MAC9C;AACA,mBAAa,UAAU,QAAQ,aAAa,UAAU;AAEtD,mBAAa,UAAU,WAAW,SAAUA,IAAG;AAC3C,eAAO,IAAI,aAAa,KAAK,QAAQ,WAAWA,EAAC,EAAE,KAAK;AAAA,MAC5D;AACA,mBAAa,UAAU,QAAQ,aAAa,UAAU;AAEtD,eAAS,OAAOM,IAAG;AAEf,YAAIK,KAAIL,GAAE,QACNE,KAAI,YAAYG,KAAIA,EAAC,GACrBF,QAAO,MACP,SAAS,OAAON,IAAG,KAAK;AAC5B,aAAKA,KAAI,GAAGA,KAAIQ,IAAGR,MAAK;AACpB,gBAAMG,GAAEH,EAAC;AACT,kBAAQ,IAAI,MAAM;AAClB,mBAASU,KAAIV,IAAGU,KAAIF,IAAGE,MAAK;AACxB,kBAAMP,GAAEO,EAAC;AACT,sBAAU,KAAK,MAAM,OAAOL,GAAEL,KAAIU,EAAC,IAAI;AACvC,oBAAQ,KAAK,MAAM,UAAUJ,KAAI;AACjC,YAAAD,GAAEL,KAAIU,EAAC,IAAI,UAAU,QAAQJ;AAAA,UACjC;AACA,UAAAD,GAAEL,KAAIQ,EAAC,IAAI;AAAA,QACf;AACA,QAAAT,MAAKM,EAAC;AACN,eAAOA;AAAA,MACX;AAEA,iBAAW,UAAU,SAAS,WAAY;AACtC,eAAO,IAAI,WAAW,OAAO,KAAK,KAAK,GAAG,KAAK;AAAA,MACnD;AAEA,mBAAa,UAAU,SAAS,WAAY;AACxC,YAAI,QAAQ,KAAK,QAAQ,KAAK;AAC9B,YAAI,UAAU,KAAK;AAAG,iBAAO,IAAI,aAAa,KAAK;AACnD,eAAO,IAAI,WAAW,OAAO,aAAa,KAAK,IAAI,KAAK,KAAK,CAAC,CAAC,GAAG,KAAK;AAAA,MAC3E;AAEA,mBAAa,UAAU,SAAS,SAAUR,IAAG;AACzC,eAAO,IAAI,aAAa,KAAK,QAAQ,KAAK,KAAK;AAAA,MACnD;AAEA,eAAS,QAAQM,IAAGC,IAAG;AACnB,YAAI,MAAMD,GAAE,QACR,MAAMC,GAAE,QACRE,QAAO,MACP,SAAS,YAAYF,GAAE,MAAM,GAC7B,8BAA8BA,GAAE,MAAM,CAAC,GAEvC,SAAS,KAAK,KAAKE,SAAQ,IAAI,4BAA4B,GAC3D,YAAY,cAAcH,IAAG,MAAM,GACnC,UAAU,cAAcC,IAAG,MAAM,GACjC,eAAe,OAAO,OAAO,QAAQJ,IAAGQ,IAAGO;AAC/C,YAAI,UAAU,UAAU;AAAK,oBAAU,KAAK,CAAC;AAC7C,gBAAQ,KAAK,CAAC;AACd,sCAA8B,QAAQ,MAAM,CAAC;AAC7C,aAAK,QAAQ,MAAM,KAAK,SAAS,GAAG,SAAS;AACzC,0BAAgBT,QAAO;AACvB,cAAI,UAAU,QAAQ,GAAG,MAAM,6BAA6B;AACxD,4BAAgB,KAAK,OAAO,UAAU,QAAQ,GAAG,IAAIA,QAAO,UAAU,QAAQ,MAAM,CAAC,KAAK,2BAA2B;AAAA,UACzH;AAEA,kBAAQ;AACR,mBAAS;AACT,UAAAE,KAAI,QAAQ;AACZ,eAAKR,KAAI,GAAGA,KAAIQ,IAAGR,MAAK;AACpB,qBAAS,gBAAgB,QAAQA,EAAC;AAClC,YAAAe,KAAI,KAAK,MAAM,QAAQT,KAAI;AAC3B,sBAAU,UAAU,QAAQN,EAAC,KAAK,QAAQe,KAAIT;AAC9C,oBAAQS;AACR,gBAAI,SAAS,GAAG;AACZ,wBAAU,QAAQf,EAAC,IAAI,SAASM;AAChC,uBAAS;AAAA,YACb,OAAO;AACH,wBAAU,QAAQN,EAAC,IAAI;AACvB,uBAAS;AAAA,YACb;AAAA,UACJ;AACA,iBAAO,WAAW,GAAG;AACjB,6BAAiB;AACjB,oBAAQ;AACR,iBAAKA,KAAI,GAAGA,KAAIQ,IAAGR,MAAK;AACpB,uBAAS,UAAU,QAAQA,EAAC,IAAIM,QAAO,QAAQN,EAAC;AAChD,kBAAI,QAAQ,GAAG;AACX,0BAAU,QAAQA,EAAC,IAAI,QAAQM;AAC/B,wBAAQ;AAAA,cACZ,OAAO;AACH,0BAAU,QAAQN,EAAC,IAAI;AACvB,wBAAQ;AAAA,cACZ;AAAA,YACJ;AACA,sBAAU;AAAA,UACd;AACA,iBAAO,KAAK,IAAI;AAAA,QACpB;AAEA,oBAAY,YAAY,WAAW,MAAM,EAAE,CAAC;AAC5C,eAAO,CAAC,aAAa,MAAM,GAAG,aAAa,SAAS,CAAC;AAAA,MACzD;AAEA,eAAS,QAAQG,IAAGC,IAAG;AAEnB,YAAI,MAAMD,GAAE,QACR,MAAMC,GAAE,QACR,SAAS,CAAC,GACV,OAAO,CAAC,GACRE,QAAO,MACP,OAAO,MAAM,OAAO,OAAO;AAC/B,eAAO,KAAK;AACR,eAAK,QAAQH,GAAE,EAAE,GAAG,CAAC;AACrB,UAAAJ,MAAK,IAAI;AACT,cAAI,WAAW,MAAMK,EAAC,IAAI,GAAG;AACzB,mBAAO,KAAK,CAAC;AACb;AAAA,UACJ;AACA,iBAAO,KAAK;AACZ,kBAAQ,KAAK,OAAO,CAAC,IAAIE,QAAO,KAAK,OAAO,CAAC;AAC7C,kBAAQF,GAAE,MAAM,CAAC,IAAIE,QAAOF,GAAE,MAAM,CAAC;AACrC,cAAI,OAAO,KAAK;AACZ,qBAAS,QAAQ,KAAKE;AAAA,UAC1B;AACA,kBAAQ,KAAK,KAAK,QAAQ,KAAK;AAC/B,aAAG;AACC,oBAAQ,cAAcF,IAAG,KAAK;AAC9B,gBAAI,WAAW,OAAO,IAAI,KAAK;AAAG;AAClC;AAAA,UACJ,SAAS;AACT,iBAAO,KAAK,KAAK;AACjB,iBAAO,SAAS,MAAM,KAAK;AAAA,QAC/B;AACA,eAAO,QAAQ;AACf,eAAO,CAAC,aAAa,MAAM,GAAG,aAAa,IAAI,CAAC;AAAA,MACpD;AAEA,eAAS,YAAY,OAAO,QAAQ;AAChC,YAAI,SAAS,MAAM,QACf,WAAW,YAAY,MAAM,GAC7BE,QAAO,MACPN,IAAGe,IAAG,WAAW;AACrB,oBAAY;AACZ,aAAKf,KAAI,SAAS,GAAGA,MAAK,GAAG,EAAEA,IAAG;AAC9B,oBAAU,YAAYM,QAAO,MAAMN,EAAC;AACpC,UAAAe,KAAI,SAAS,UAAU,MAAM;AAC7B,sBAAY,UAAUA,KAAI;AAC1B,mBAASf,EAAC,IAAIe,KAAI;AAAA,QACtB;AACA,eAAO,CAAC,UAAU,YAAY,CAAC;AAAA,MACnC;AAEA,eAAS,UAAUC,OAAMnB,IAAG;AACxB,YAAI,OAAOC,KAAI,WAAWD,EAAC;AAC3B,YAAI,sBAAsB;AACtB,iBAAO,CAAC,IAAI,aAAamB,MAAK,QAAQlB,GAAE,KAAK,GAAG,IAAI,aAAakB,MAAK,QAAQlB,GAAE,KAAK,CAAC;AAAA,QAC1F;AACA,YAAIK,KAAIa,MAAK,OAAOZ,KAAIN,GAAE;AAC1B,YAAI;AACJ,YAAIM,OAAM;AAAG,gBAAM,IAAI,MAAM,uBAAuB;AACpD,YAAIY,MAAK,SAAS;AACd,cAAIlB,GAAE,SAAS;AACX,mBAAO,CAAC,IAAI,aAAa,SAASK,KAAIC,EAAC,CAAC,GAAG,IAAI,aAAaD,KAAIC,EAAC,CAAC;AAAA,UACtE;AACA,iBAAO,CAAC,QAAQ,CAAC,GAAGY,KAAI;AAAA,QAC5B;AACA,YAAIlB,GAAE,SAAS;AACX,cAAIM,OAAM;AAAG,mBAAO,CAACY,OAAM,QAAQ,CAAC,CAAC;AACrC,cAAIZ,MAAK;AAAI,mBAAO,CAACY,MAAK,OAAO,GAAG,QAAQ,CAAC,CAAC;AAC9C,cAAI,MAAM,KAAK,IAAIZ,EAAC;AACpB,cAAI,MAAM,MAAM;AACZ,oBAAQ,YAAYD,IAAG,GAAG;AAC1B,uBAAW,aAAa,MAAM,CAAC,CAAC;AAChC,gBAAI,YAAY,MAAM,CAAC;AACvB,gBAAIa,MAAK;AAAM,0BAAY,CAAC;AAC5B,gBAAI,OAAO,aAAa,UAAU;AAC9B,kBAAIA,MAAK,SAASlB,GAAE;AAAM,2BAAW,CAAC;AACtC,qBAAO,CAAC,IAAI,aAAa,QAAQ,GAAG,IAAI,aAAa,SAAS,CAAC;AAAA,YACnE;AACA,mBAAO,CAAC,IAAI,WAAW,UAAUkB,MAAK,SAASlB,GAAE,IAAI,GAAG,IAAI,aAAa,SAAS,CAAC;AAAA,UACvF;AACA,UAAAM,KAAI,aAAa,GAAG;AAAA,QACxB;AACA,YAAI,aAAa,WAAWD,IAAGC,EAAC;AAChC,YAAI,eAAe;AAAI,iBAAO,CAAC,QAAQ,CAAC,GAAGY,KAAI;AAC/C,YAAI,eAAe;AAAG,iBAAO,CAAC,QAAQA,MAAK,SAASlB,GAAE,OAAO,IAAI,EAAE,GAAG,QAAQ,CAAC,CAAC;AAGhF,YAAIK,GAAE,SAASC,GAAE,UAAU;AACvB,kBAAQ,QAAQD,IAAGC,EAAC;AAAA;AACnB,kBAAQ,QAAQD,IAAGC,EAAC;AAEzB,mBAAW,MAAM,CAAC;AAClB,YAAI,QAAQY,MAAK,SAASlB,GAAE,MACxB,MAAM,MAAM,CAAC,GACb,QAAQkB,MAAK;AACjB,YAAI,OAAO,aAAa,UAAU;AAC9B,cAAI;AAAO,uBAAW,CAAC;AACvB,qBAAW,IAAI,aAAa,QAAQ;AAAA,QACxC;AAAO,qBAAW,IAAI,WAAW,UAAU,KAAK;AAChD,YAAI,OAAO,QAAQ,UAAU;AACzB,cAAI;AAAO,kBAAM,CAAC;AAClB,gBAAM,IAAI,aAAa,GAAG;AAAA,QAC9B;AAAO,gBAAM,IAAI,WAAW,KAAK,KAAK;AACtC,eAAO,CAAC,UAAU,GAAG;AAAA,MACzB;AAEA,iBAAW,UAAU,SAAS,SAAUnB,IAAG;AACvC,YAAI,SAAS,UAAU,MAAMA,EAAC;AAC9B,eAAO;AAAA,UACH,UAAU,OAAO,CAAC;AAAA,UAClB,WAAW,OAAO,CAAC;AAAA,QACvB;AAAA,MACJ;AACA,mBAAa,UAAU,SAAS,aAAa,UAAU,SAAS,WAAW,UAAU;AAGrF,iBAAW,UAAU,SAAS,SAAUA,IAAG;AACvC,eAAO,UAAU,MAAMA,EAAC,EAAE,CAAC;AAAA,MAC/B;AACA,mBAAa,UAAU,OAAO,aAAa,UAAU,SAAS,SAAUA,IAAG;AACvE,eAAO,IAAI,aAAa,KAAK,QAAQ,WAAWA,EAAC,EAAE,KAAK;AAAA,MAC5D;AACA,mBAAa,UAAU,OAAO,aAAa,UAAU,SAAS,WAAW,UAAU,OAAO,WAAW,UAAU;AAE/G,iBAAW,UAAU,MAAM,SAAUA,IAAG;AACpC,eAAO,UAAU,MAAMA,EAAC,EAAE,CAAC;AAAA,MAC/B;AACA,mBAAa,UAAU,MAAM,aAAa,UAAU,YAAY,SAAUA,IAAG;AACzE,eAAO,IAAI,aAAa,KAAK,QAAQ,WAAWA,EAAC,EAAE,KAAK;AAAA,MAC5D;AACA,mBAAa,UAAU,YAAY,aAAa,UAAU,MAAM,WAAW,UAAU,YAAY,WAAW,UAAU;AAEtH,iBAAW,UAAU,MAAM,SAAUA,IAAG;AACpC,YAAIC,KAAI,WAAWD,EAAC,GAChBM,KAAI,KAAK,OACTC,KAAIN,GAAE,OACN,OAAOG,IAAGU;AACd,YAAIP,OAAM;AAAG,iBAAO,QAAQ,CAAC;AAC7B,YAAID,OAAM;AAAG,iBAAO,QAAQ,CAAC;AAC7B,YAAIA,OAAM;AAAG,iBAAO,QAAQ,CAAC;AAC7B,YAAIA,OAAM;AAAI,iBAAOL,GAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,QAAQ,EAAE;AACzD,YAAIA,GAAE,MAAM;AACR,iBAAO,QAAQ,CAAC;AAAA,QACpB;AACA,YAAI,CAACA,GAAE;AAAS,gBAAM,IAAI,MAAM,kBAAkBA,GAAE,SAAS,IAAI,gBAAgB;AACjF,YAAI,KAAK,SAAS;AACd,cAAI,UAAU,QAAQ,KAAK,IAAIK,IAAGC,EAAC,CAAC;AAChC,mBAAO,IAAI,aAAa,SAAS,KAAK,CAAC;AAAA,QAC/C;AACA,QAAAH,KAAI;AACJ,QAAAU,KAAI,QAAQ,CAAC;AACb,eAAO,MAAM;AACT,cAAIP,KAAI,MAAS;AACb,YAAAO,KAAIA,GAAE,MAAMV,EAAC;AACb,cAAEG;AAAA,UACN;AACA,cAAIA,OAAM;AAAG;AACb,UAAAA,MAAK;AACL,UAAAH,KAAIA,GAAE,OAAO;AAAA,QACjB;AACA,eAAOU;AAAA,MACX;AACA,mBAAa,UAAU,MAAM,WAAW,UAAU;AAElD,mBAAa,UAAU,MAAM,SAAUd,IAAG;AACtC,YAAIC,KAAI,WAAWD,EAAC;AACpB,YAAIM,KAAI,KAAK,OAAOC,KAAIN,GAAE;AAC1B,YAAI,KAAK,OAAO,CAAC,GAAG,KAAK,OAAO,CAAC,GAAGmB,MAAK,OAAO,CAAC;AACjD,YAAIb,OAAM;AAAI,iBAAO,QAAQ,CAAC;AAC9B,YAAID,OAAM;AAAI,iBAAO,QAAQ,CAAC;AAC9B,YAAIA,OAAM;AAAI,iBAAO,QAAQ,CAAC;AAC9B,YAAIA,OAAM,OAAO,EAAE;AAAG,iBAAOL,GAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,QAAQ,EAAE;AACjE,YAAIA,GAAE,WAAW;AAAG,iBAAO,IAAI,aAAa,EAAE;AAC9C,YAAIG,KAAI;AACR,YAAIU,KAAI,QAAQ,CAAC;AACjB,eAAO,MAAM;AACT,eAAKP,KAAI,QAAQ,IAAI;AACjB,YAAAO,KAAIA,GAAE,MAAMV,EAAC;AACb,cAAEG;AAAA,UACN;AACA,cAAIA,OAAM;AAAI;AACd,UAAAA,MAAKa;AACL,UAAAhB,KAAIA,GAAE,OAAO;AAAA,QACjB;AACA,eAAOU;AAAA,MACX;AAEA,iBAAW,UAAU,SAAS,SAAU,KAAK,KAAK;AAC9C,cAAM,WAAW,GAAG;AACpB,cAAM,WAAW,GAAG;AACpB,YAAI,IAAI,OAAO;AAAG,gBAAM,IAAI,MAAM,mCAAmC;AACrE,YAAIN,KAAI,QAAQ,CAAC,GACbC,QAAO,KAAK,IAAI,GAAG;AACvB,YAAI,IAAI,WAAW,GAAG;AAClB,gBAAM,IAAI,SAAS,QAAQ,EAAE,CAAC;AAC9B,UAAAA,QAAOA,MAAK,OAAO,GAAG;AAAA,QAC1B;AACA,eAAO,IAAI,WAAW,GAAG;AACrB,cAAIA,MAAK,OAAO;AAAG,mBAAO,QAAQ,CAAC;AACnC,cAAI,IAAI,MAAM;AAAG,YAAAD,KAAIA,GAAE,SAASC,KAAI,EAAE,IAAI,GAAG;AAC7C,gBAAM,IAAI,OAAO,CAAC;AAClB,UAAAA,QAAOA,MAAK,OAAO,EAAE,IAAI,GAAG;AAAA,QAChC;AACA,eAAOD;AAAA,MACX;AACA,mBAAa,UAAU,SAAS,aAAa,UAAU,SAAS,WAAW,UAAU;AAErF,eAAS,WAAWF,IAAGC,IAAG;AACtB,YAAID,GAAE,WAAWC,GAAE,QAAQ;AACvB,iBAAOD,GAAE,SAASC,GAAE,SAAS,IAAI;AAAA,QACrC;AACA,iBAASJ,KAAIG,GAAE,SAAS,GAAGH,MAAK,GAAGA,MAAK;AACpC,cAAIG,GAAEH,EAAC,MAAMI,GAAEJ,EAAC;AAAG,mBAAOG,GAAEH,EAAC,IAAII,GAAEJ,EAAC,IAAI,IAAI;AAAA,QAChD;AACA,eAAO;AAAA,MACX;AAEA,iBAAW,UAAU,aAAa,SAAUH,IAAG;AAC3C,YAAIC,KAAI,WAAWD,EAAC,GAChBM,KAAI,KAAK,OACTC,KAAIN,GAAE;AACV,YAAIA,GAAE;AAAS,iBAAO;AACtB,eAAO,WAAWK,IAAGC,EAAC;AAAA,MAC1B;AACA,mBAAa,UAAU,aAAa,SAAUP,IAAG;AAC7C,YAAIC,KAAI,WAAWD,EAAC,GAChBM,KAAI,KAAK,IAAI,KAAK,KAAK,GACvBC,KAAIN,GAAE;AACV,YAAIA,GAAE,SAAS;AACX,UAAAM,KAAI,KAAK,IAAIA,EAAC;AACd,iBAAOD,OAAMC,KAAI,IAAID,KAAIC,KAAI,IAAI;AAAA,QACrC;AACA,eAAO;AAAA,MACX;AACA,mBAAa,UAAU,aAAa,SAAUP,IAAG;AAC7C,YAAIM,KAAI,KAAK;AACb,YAAIC,KAAI,WAAWP,EAAC,EAAE;AACtB,QAAAM,KAAIA,MAAK,IAAIA,KAAI,CAACA;AAClB,QAAAC,KAAIA,MAAK,IAAIA,KAAI,CAACA;AAClB,eAAOD,OAAMC,KAAI,IAAID,KAAIC,KAAI,IAAI;AAAA,MACrC;AAEA,iBAAW,UAAU,UAAU,SAAUP,IAAG;AAGxC,YAAIA,OAAM,UAAU;AAChB,iBAAO;AAAA,QACX;AACA,YAAIA,OAAM,WAAW;AACjB,iBAAO;AAAA,QACX;AAEA,YAAIC,KAAI,WAAWD,EAAC,GAChBM,KAAI,KAAK,OACTC,KAAIN,GAAE;AACV,YAAI,KAAK,SAASA,GAAE,MAAM;AACtB,iBAAOA,GAAE,OAAO,IAAI;AAAA,QACxB;AACA,YAAIA,GAAE,SAAS;AACX,iBAAO,KAAK,OAAO,KAAK;AAAA,QAC5B;AACA,eAAO,WAAWK,IAAGC,EAAC,KAAK,KAAK,OAAO,KAAK;AAAA,MAChD;AACA,iBAAW,UAAU,YAAY,WAAW,UAAU;AAEtD,mBAAa,UAAU,UAAU,SAAUP,IAAG;AAC1C,YAAIA,OAAM,UAAU;AAChB,iBAAO;AAAA,QACX;AACA,YAAIA,OAAM,WAAW;AACjB,iBAAO;AAAA,QACX;AAEA,YAAIC,KAAI,WAAWD,EAAC,GAChBM,KAAI,KAAK,OACTC,KAAIN,GAAE;AACV,YAAIA,GAAE,SAAS;AACX,iBAAOK,MAAKC,KAAI,IAAID,KAAIC,KAAI,IAAI;AAAA,QACpC;AACA,YAAID,KAAI,MAAML,GAAE,MAAM;AAClB,iBAAOK,KAAI,IAAI,KAAK;AAAA,QACxB;AACA,eAAOA,KAAI,IAAI,IAAI;AAAA,MACvB;AACA,mBAAa,UAAU,YAAY,aAAa,UAAU;AAE1D,mBAAa,UAAU,UAAU,SAAUN,IAAG;AAC1C,YAAIA,OAAM,UAAU;AAChB,iBAAO;AAAA,QACX;AACA,YAAIA,OAAM,WAAW;AACjB,iBAAO;AAAA,QACX;AACA,YAAIM,KAAI,KAAK;AACb,YAAIC,KAAI,WAAWP,EAAC,EAAE;AACtB,eAAOM,OAAMC,KAAI,IAAID,KAAIC,KAAI,IAAI;AAAA,MACrC;AACA,mBAAa,UAAU,YAAY,aAAa,UAAU;AAE1D,iBAAW,UAAU,SAAS,SAAUP,IAAG;AACvC,eAAO,KAAK,QAAQA,EAAC,MAAM;AAAA,MAC/B;AACA,mBAAa,UAAU,KAAK,aAAa,UAAU,SAAS,aAAa,UAAU,KAAK,aAAa,UAAU,SAAS,WAAW,UAAU,KAAK,WAAW,UAAU;AAEvK,iBAAW,UAAU,YAAY,SAAUA,IAAG;AAC1C,eAAO,KAAK,QAAQA,EAAC,MAAM;AAAA,MAC/B;AACA,mBAAa,UAAU,MAAM,aAAa,UAAU,YAAY,aAAa,UAAU,MAAM,aAAa,UAAU,YAAY,WAAW,UAAU,MAAM,WAAW,UAAU;AAEhL,iBAAW,UAAU,UAAU,SAAUA,IAAG;AACxC,eAAO,KAAK,QAAQA,EAAC,IAAI;AAAA,MAC7B;AACA,mBAAa,UAAU,KAAK,aAAa,UAAU,UAAU,aAAa,UAAU,KAAK,aAAa,UAAU,UAAU,WAAW,UAAU,KAAK,WAAW,UAAU;AAEzK,iBAAW,UAAU,SAAS,SAAUA,IAAG;AACvC,eAAO,KAAK,QAAQA,EAAC,IAAI;AAAA,MAC7B;AACA,mBAAa,UAAU,KAAK,aAAa,UAAU,SAAS,aAAa,UAAU,KAAK,aAAa,UAAU,SAAS,WAAW,UAAU,KAAK,WAAW,UAAU;AAEvK,iBAAW,UAAU,kBAAkB,SAAUA,IAAG;AAChD,eAAO,KAAK,QAAQA,EAAC,KAAK;AAAA,MAC9B;AACA,mBAAa,UAAU,MAAM,aAAa,UAAU,kBAAkB,aAAa,UAAU,MAAM,aAAa,UAAU,kBAAkB,WAAW,UAAU,MAAM,WAAW,UAAU;AAE5L,iBAAW,UAAU,iBAAiB,SAAUA,IAAG;AAC/C,eAAO,KAAK,QAAQA,EAAC,KAAK;AAAA,MAC9B;AACA,mBAAa,UAAU,MAAM,aAAa,UAAU,iBAAiB,aAAa,UAAU,MAAM,aAAa,UAAU,iBAAiB,WAAW,UAAU,MAAM,WAAW,UAAU;AAE1L,iBAAW,UAAU,SAAS,WAAY;AACtC,gBAAQ,KAAK,MAAM,CAAC,IAAI,OAAO;AAAA,MACnC;AACA,mBAAa,UAAU,SAAS,WAAY;AACxC,gBAAQ,KAAK,QAAQ,OAAO;AAAA,MAChC;AACA,mBAAa,UAAU,SAAS,WAAY;AACxC,gBAAQ,KAAK,QAAQ,OAAO,CAAC,OAAO,OAAO,CAAC;AAAA,MAChD;AAEA,iBAAW,UAAU,QAAQ,WAAY;AACrC,gBAAQ,KAAK,MAAM,CAAC,IAAI,OAAO;AAAA,MACnC;AACA,mBAAa,UAAU,QAAQ,WAAY;AACvC,gBAAQ,KAAK,QAAQ,OAAO;AAAA,MAChC;AACA,mBAAa,UAAU,QAAQ,WAAY;AACvC,gBAAQ,KAAK,QAAQ,OAAO,CAAC,OAAO,OAAO,CAAC;AAAA,MAChD;AAEA,iBAAW,UAAU,aAAa,WAAY;AAC1C,eAAO,CAAC,KAAK;AAAA,MACjB;AACA,mBAAa,UAAU,aAAa,WAAY;AAC5C,eAAO,KAAK,QAAQ;AAAA,MACxB;AACA,mBAAa,UAAU,aAAa,aAAa,UAAU;AAE3D,iBAAW,UAAU,aAAa,WAAY;AAC1C,eAAO,KAAK;AAAA,MAChB;AACA,mBAAa,UAAU,aAAa,WAAY;AAC5C,eAAO,KAAK,QAAQ;AAAA,MACxB;AACA,mBAAa,UAAU,aAAa,aAAa,UAAU;AAE3D,iBAAW,UAAU,SAAS,WAAY;AACtC,eAAO;AAAA,MACX;AACA,mBAAa,UAAU,SAAS,WAAY;AACxC,eAAO,KAAK,IAAI,KAAK,KAAK,MAAM;AAAA,MACpC;AACA,mBAAa,UAAU,SAAS,WAAY;AACxC,eAAO,KAAK,IAAI,EAAE,UAAU,OAAO,CAAC;AAAA,MACxC;AAEA,iBAAW,UAAU,SAAS,WAAY;AACtC,eAAO;AAAA,MACX;AACA,mBAAa,UAAU,SAAS,WAAY;AACxC,eAAO,KAAK,UAAU;AAAA,MAC1B;AACA,mBAAa,UAAU,SAAS,WAAY;AACxC,eAAO,KAAK,UAAU,OAAO,CAAC;AAAA,MAClC;AAEA,iBAAW,UAAU,gBAAgB,SAAUA,IAAG;AAC9C,YAAIC,KAAI,WAAWD,EAAC;AACpB,YAAIC,GAAE,OAAO;AAAG,iBAAO;AACvB,YAAIA,GAAE,OAAO;AAAG,iBAAO;AACvB,YAAIA,GAAE,WAAW,CAAC,MAAM;AAAG,iBAAO,KAAK,OAAO;AAC9C,eAAO,KAAK,IAAIA,EAAC,EAAE,OAAO;AAAA,MAC9B;AACA,mBAAa,UAAU,gBAAgB,aAAa,UAAU,gBAAgB,WAAW,UAAU;AAEnG,eAAS,aAAaD,IAAG;AACrB,YAAIC,KAAID,GAAE,IAAI;AACd,YAAIC,GAAE,OAAO;AAAG,iBAAO;AACvB,YAAIA,GAAE,OAAO,CAAC,KAAKA,GAAE,OAAO,CAAC,KAAKA,GAAE,OAAO,CAAC;AAAG,iBAAO;AACtD,YAAIA,GAAE,OAAO,KAAKA,GAAE,cAAc,CAAC,KAAKA,GAAE,cAAc,CAAC;AAAG,iBAAO;AACnE,YAAIA,GAAE,OAAO,EAAE;AAAG,iBAAO;AAAA,MAE7B;AAEA,eAAS,gBAAgBA,IAAGK,IAAG;AAC3B,YAAI,QAAQL,GAAE,KAAK,GACfM,KAAI,OACJC,KAAI,GACJO,IAAGM,IAAGlB,IAAGC;AACb,eAAOG,GAAE,OAAO;AAAG,UAAAA,KAAIA,GAAE,OAAO,CAAC,GAAGC;AACpC;AAAM,eAAKL,KAAI,GAAGA,KAAIG,GAAE,QAAQH,MAAK;AACjC,gBAAIF,GAAE,OAAOK,GAAEH,EAAC,CAAC;AAAG;AACpB,YAAAC,KAAI,OAAOE,GAAEH,EAAC,CAAC,EAAE,OAAOI,IAAGN,EAAC;AAC5B,gBAAIG,GAAE,OAAO,KAAKA,GAAE,OAAO,KAAK;AAAG;AACnC,iBAAKW,KAAIP,KAAI,GAAGO,MAAK,GAAGA,MAAK;AACzB,cAAAX,KAAIA,GAAE,OAAO,EAAE,IAAIH,EAAC;AACpB,kBAAIG,GAAE,OAAO;AAAG,uBAAO;AACvB,kBAAIA,GAAE,OAAO,KAAK;AAAG,yBAAS;AAAA,YAClC;AACA,mBAAO;AAAA,UACX;AACA,eAAO;AAAA,MACX;AAGA,iBAAW,UAAU,UAAU,SAAU,QAAQ;AAC7C,YAAI,UAAU,aAAa,IAAI;AAC/B,YAAI,YAAYL;AAAW,iBAAO;AAClC,YAAIE,KAAI,KAAK,IAAI;AACjB,YAAI,OAAOA,GAAE,UAAU;AACvB,YAAI,QAAQ;AACR,iBAAO,gBAAgBA,IAAG,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;AAC1E,YAAI,OAAO,KAAK,IAAI,CAAC,IAAI,KAAK,WAAW;AACzC,YAAIoB,KAAI,KAAK,KAAM,WAAW,OAAS,IAAI,KAAK,IAAI,MAAM,CAAC,IAAK,IAAI;AACpE,iBAASf,KAAI,CAAC,GAAGH,KAAI,GAAGA,KAAIkB,IAAGlB,MAAK;AAChC,UAAAG,GAAE,KAAK,OAAOH,KAAI,CAAC,CAAC;AAAA,QACxB;AACA,eAAO,gBAAgBF,IAAGK,EAAC;AAAA,MAC/B;AACA,mBAAa,UAAU,UAAU,aAAa,UAAU,UAAU,WAAW,UAAU;AAEvF,iBAAW,UAAU,kBAAkB,SAAU,YAAY,KAAK;AAC9D,YAAI,UAAU,aAAa,IAAI;AAC/B,YAAI,YAAYP;AAAW,iBAAO;AAClC,YAAIE,KAAI,KAAK,IAAI;AACjB,YAAIoB,KAAI,eAAetB,aAAY,IAAI;AACvC,iBAASO,KAAI,CAAC,GAAGH,KAAI,GAAGA,KAAIkB,IAAGlB,MAAK;AAChC,UAAAG,GAAE,KAAK,OAAO,YAAY,GAAGL,GAAE,MAAM,CAAC,GAAG,GAAG,CAAC;AAAA,QACjD;AACA,eAAO,gBAAgBA,IAAGK,EAAC;AAAA,MAC/B;AACA,mBAAa,UAAU,kBAAkB,aAAa,UAAU,kBAAkB,WAAW,UAAU;AAEvG,iBAAW,UAAU,SAAS,SAAUL,IAAG;AACvC,YAAIoB,KAAI,OAAO,MAAM,OAAO,OAAO,KAAKb,KAAI,WAAWP,EAAC,GAAG,OAAO,KAAK,IAAI,GAAGiB,IAAG,OAAO;AACxF,eAAO,CAAC,KAAK,OAAO,GAAG;AACnB,UAAAA,KAAIV,GAAE,OAAO,IAAI;AACjB,kBAAQa;AACR,kBAAQb;AACR,UAAAa,KAAI;AACJ,UAAAb,KAAI;AACJ,iBAAO,MAAM,SAASU,GAAE,SAAS,IAAI,CAAC;AACtC,iBAAO,MAAM,SAASA,GAAE,SAAS,IAAI,CAAC;AAAA,QAC1C;AACA,YAAI,CAACV,GAAE,OAAO;AAAG,gBAAM,IAAI,MAAM,KAAK,SAAS,IAAI,UAAUP,GAAE,SAAS,IAAI,mBAAmB;AAC/F,YAAIoB,GAAE,QAAQ,CAAC,MAAM,IAAI;AACrB,UAAAA,KAAIA,GAAE,IAAIpB,EAAC;AAAA,QACf;AACA,YAAI,KAAK,WAAW,GAAG;AACnB,iBAAOoB,GAAE,OAAO;AAAA,QACpB;AACA,eAAOA;AAAA,MACX;AAEA,mBAAa,UAAU,SAAS,aAAa,UAAU,SAAS,WAAW,UAAU;AAErF,iBAAW,UAAU,OAAO,WAAY;AACpC,YAAI,QAAQ,KAAK;AACjB,YAAI,KAAK,MAAM;AACX,iBAAO,cAAc,OAAO,GAAG,KAAK,IAAI;AAAA,QAC5C;AACA,eAAO,IAAI,WAAW,SAAS,OAAO,CAAC,GAAG,KAAK,IAAI;AAAA,MACvD;AACA,mBAAa,UAAU,OAAO,WAAY;AACtC,YAAI,QAAQ,KAAK;AACjB,YAAI,QAAQ,IAAI;AAAS,iBAAO,IAAI,aAAa,QAAQ,CAAC;AAC1D,eAAO,IAAI,WAAW,aAAa,KAAK;AAAA,MAC5C;AACA,mBAAa,UAAU,OAAO,WAAY;AACtC,eAAO,IAAI,aAAa,KAAK,QAAQ,OAAO,CAAC,CAAC;AAAA,MAClD;AAEA,iBAAW,UAAU,OAAO,WAAY;AACpC,YAAI,QAAQ,KAAK;AACjB,YAAI,KAAK,MAAM;AACX,iBAAO,IAAI,WAAW,SAAS,OAAO,CAAC,GAAG,IAAI;AAAA,QAClD;AACA,eAAO,cAAc,OAAO,GAAG,KAAK,IAAI;AAAA,MAC5C;AACA,mBAAa,UAAU,OAAO,WAAY;AACtC,YAAI,QAAQ,KAAK;AACjB,YAAI,QAAQ,IAAI,CAAC;AAAS,iBAAO,IAAI,aAAa,QAAQ,CAAC;AAC3D,eAAO,IAAI,WAAW,aAAa,IAAI;AAAA,MAC3C;AACA,mBAAa,UAAU,OAAO,WAAY;AACtC,eAAO,IAAI,aAAa,KAAK,QAAQ,OAAO,CAAC,CAAC;AAAA,MAClD;AAEA,UAAI,cAAc,CAAC,CAAC;AACpB,aAAO,IAAI,YAAY,YAAY,SAAS,CAAC,KAAK;AAAM,oBAAY,KAAK,IAAI,YAAY,YAAY,SAAS,CAAC,CAAC;AAChH,UAAI,gBAAgB,YAAY,QAAQ,gBAAgB,YAAY,gBAAgB,CAAC;AAErF,eAAS,cAAcpB,IAAG;AACtB,eAAO,KAAK,IAAIA,EAAC,KAAK;AAAA,MAC1B;AAEA,iBAAW,UAAU,YAAY,SAAUD,IAAG;AAC1C,YAAIC,KAAI,WAAWD,EAAC,EAAE,WAAW;AACjC,YAAI,CAAC,cAAcC,EAAC,GAAG;AACnB,gBAAM,IAAI,MAAM,OAAOA,EAAC,IAAI,6BAA6B;AAAA,QAC7D;AACA,YAAIA,KAAI;AAAG,iBAAO,KAAK,WAAW,CAACA,EAAC;AACpC,YAAI,SAAS;AACb,YAAI,OAAO,OAAO;AAAG,iBAAO;AAC5B,eAAOA,MAAK,eAAe;AACvB,mBAAS,OAAO,SAAS,aAAa;AACtC,UAAAA,MAAK,gBAAgB;AAAA,QACzB;AACA,eAAO,OAAO,SAAS,YAAYA,EAAC,CAAC;AAAA,MACzC;AACA,mBAAa,UAAU,YAAY,aAAa,UAAU,YAAY,WAAW,UAAU;AAE3F,iBAAW,UAAU,aAAa,SAAUD,IAAG;AAC3C,YAAI;AACJ,YAAIC,KAAI,WAAWD,EAAC,EAAE,WAAW;AACjC,YAAI,CAAC,cAAcC,EAAC,GAAG;AACnB,gBAAM,IAAI,MAAM,OAAOA,EAAC,IAAI,6BAA6B;AAAA,QAC7D;AACA,YAAIA,KAAI;AAAG,iBAAO,KAAK,UAAU,CAACA,EAAC;AACnC,YAAI,SAAS;AACb,eAAOA,MAAK,eAAe;AACvB,cAAI,OAAO,OAAO,KAAM,OAAO,WAAW,KAAK,OAAO,OAAO;AAAI,mBAAO;AACxE,mBAAS,UAAU,QAAQ,aAAa;AACxC,mBAAS,OAAO,CAAC,EAAE,WAAW,IAAI,OAAO,CAAC,EAAE,KAAK,IAAI,OAAO,CAAC;AAC7D,UAAAA,MAAK,gBAAgB;AAAA,QACzB;AACA,iBAAS,UAAU,QAAQ,YAAYA,EAAC,CAAC;AACzC,eAAO,OAAO,CAAC,EAAE,WAAW,IAAI,OAAO,CAAC,EAAE,KAAK,IAAI,OAAO,CAAC;AAAA,MAC/D;AACA,mBAAa,UAAU,aAAa,aAAa,UAAU,aAAa,WAAW,UAAU;AAE7F,eAAS,QAAQG,IAAGU,IAAG,IAAI;AACvB,QAAAA,KAAI,WAAWA,EAAC;AAChB,YAAI,QAAQV,GAAE,WAAW,GAAG,QAAQU,GAAE,WAAW;AACjD,YAAI,OAAO,QAAQV,GAAE,IAAI,IAAIA,IACzB,OAAO,QAAQU,GAAE,IAAI,IAAIA;AAC7B,YAAI,SAAS,GAAG,SAAS;AACzB,YAAI,UAAU,MAAM,UAAU;AAC9B,YAAI,SAAS,CAAC;AACd,eAAO,CAAC,KAAK,OAAO,KAAK,CAAC,KAAK,OAAO,GAAG;AACrC,oBAAU,UAAU,MAAM,aAAa;AACvC,mBAAS,QAAQ,CAAC,EAAE,WAAW;AAC/B,cAAI,OAAO;AACP,qBAAS,gBAAgB,IAAI;AAAA,UACjC;AAEA,oBAAU,UAAU,MAAM,aAAa;AACvC,mBAAS,QAAQ,CAAC,EAAE,WAAW;AAC/B,cAAI,OAAO;AACP,qBAAS,gBAAgB,IAAI;AAAA,UACjC;AAEA,iBAAO,QAAQ,CAAC;AAChB,iBAAO,QAAQ,CAAC;AAChB,iBAAO,KAAK,GAAG,QAAQ,MAAM,CAAC;AAAA,QAClC;AACA,YAAIJ,OAAM,GAAG,QAAQ,IAAI,GAAG,QAAQ,IAAI,CAAC,MAAM,IAAI,OAAO,EAAE,IAAI,OAAO,CAAC;AACxE,iBAASP,KAAI,OAAO,SAAS,GAAGA,MAAK,GAAGA,MAAK,GAAG;AAC5C,UAAAO,OAAMA,KAAI,SAAS,aAAa,EAAE,IAAI,OAAO,OAAOP,EAAC,CAAC,CAAC;AAAA,QAC3D;AACA,eAAOO;AAAA,MACX;AAEA,iBAAW,UAAU,MAAM,WAAY;AACnC,eAAO,KAAK,OAAO,EAAE,KAAK;AAAA,MAC9B;AACA,mBAAa,UAAU,MAAM,aAAa,UAAU,MAAM,WAAW,UAAU;AAE/E,iBAAW,UAAU,MAAM,SAAUT,IAAG;AACpC,eAAO,QAAQ,MAAMA,IAAG,SAAUK,IAAGC,IAAG;AAAE,iBAAOD,KAAIC;AAAA,QAAG,CAAC;AAAA,MAC7D;AACA,mBAAa,UAAU,MAAM,aAAa,UAAU,MAAM,WAAW,UAAU;AAE/E,iBAAW,UAAU,KAAK,SAAUN,IAAG;AACnC,eAAO,QAAQ,MAAMA,IAAG,SAAUK,IAAGC,IAAG;AAAE,iBAAOD,KAAIC;AAAA,QAAG,CAAC;AAAA,MAC7D;AACA,mBAAa,UAAU,KAAK,aAAa,UAAU,KAAK,WAAW,UAAU;AAE7E,iBAAW,UAAU,MAAM,SAAUN,IAAG;AACpC,eAAO,QAAQ,MAAMA,IAAG,SAAUK,IAAGC,IAAG;AAAE,iBAAOD,KAAIC;AAAA,QAAG,CAAC;AAAA,MAC7D;AACA,mBAAa,UAAU,MAAM,aAAa,UAAU,MAAM,WAAW,UAAU;AAE/E,UAAI,YAAY,KAAK,IAAI,cAAc,OAAO,CAAC,SAAS,OAAO,CAAC,QAAQ;AACxE,eAAS,SAASN,IAAG;AAGjB,YAAID,KAAIC,GAAE,OACNG,KAAI,OAAOJ,OAAM,WAAWA,KAAI,YAC5B,OAAOA,OAAM,WAAWA,KAAI,OAAO,SAAS,IACxCA,GAAE,CAAC,IAAIA,GAAE,CAAC,IAAI,OAAO;AACjC,eAAOI,KAAI,CAACA;AAAA,MAChB;AAEA,eAAS,iBAAiB,OAAOK,OAAM;AACnC,YAAIA,MAAK,UAAU,KAAK,KAAK,GAAG;AAC5B,cAAI,MAAM,iBAAiB,OAAOA,MAAK,OAAOA,KAAI,CAAC;AACnD,cAAIa,KAAI,IAAI;AACZ,cAAIC,KAAI,IAAI;AACZ,cAAIF,KAAIC,GAAE,SAASb,KAAI;AACvB,iBAAOY,GAAE,UAAU,KAAK,KAAK,IAAI,EAAE,GAAGA,IAAG,GAAGE,KAAI,IAAI,EAAE,IAAI,EAAE,GAAGD,IAAG,GAAGC,KAAI,EAAE;AAAA,QAC/E;AACA,eAAO,EAAE,GAAG,OAAO,CAAC,GAAG,GAAG,EAAE;AAAA,MAChC;AAEA,iBAAW,UAAU,YAAY,WAAY;AACzC,YAAItB,KAAI;AACR,YAAIA,GAAE,UAAU,OAAO,CAAC,CAAC,IAAI,GAAG;AAC5B,UAAAA,KAAIA,GAAE,OAAO,EAAE,SAAS,OAAO,CAAC,CAAC;AAAA,QACrC;AACA,YAAIA,GAAE,UAAU,OAAO,CAAC,CAAC,MAAM,GAAG;AAC9B,iBAAO,OAAO,CAAC;AAAA,QACnB;AACA,eAAO,OAAO,iBAAiBA,IAAG,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC;AAAA,MACjE;AACA,mBAAa,UAAU,YAAY,aAAa,UAAU,YAAY,WAAW,UAAU;AAE3F,eAAS,IAAIK,IAAGC,IAAG;AACf,QAAAD,KAAI,WAAWA,EAAC;AAChB,QAAAC,KAAI,WAAWA,EAAC;AAChB,eAAOD,GAAE,QAAQC,EAAC,IAAID,KAAIC;AAAA,MAC9B;AACA,eAAS,IAAID,IAAGC,IAAG;AACf,QAAAD,KAAI,WAAWA,EAAC;AAChB,QAAAC,KAAI,WAAWA,EAAC;AAChB,eAAOD,GAAE,OAAOC,EAAC,IAAID,KAAIC;AAAA,MAC7B;AACA,eAAS,IAAID,IAAGC,IAAG;AACf,QAAAD,KAAI,WAAWA,EAAC,EAAE,IAAI;AACtB,QAAAC,KAAI,WAAWA,EAAC,EAAE,IAAI;AACtB,YAAID,GAAE,OAAOC,EAAC;AAAG,iBAAOD;AACxB,YAAIA,GAAE,OAAO;AAAG,iBAAOC;AACvB,YAAIA,GAAE,OAAO;AAAG,iBAAOD;AACvB,YAAIU,KAAI,QAAQ,CAAC,GAAGD,IAAGM;AACvB,eAAOf,GAAE,OAAO,KAAKC,GAAE,OAAO,GAAG;AAC7B,UAAAQ,KAAI,IAAI,SAAST,EAAC,GAAG,SAASC,EAAC,CAAC;AAChC,UAAAD,KAAIA,GAAE,OAAOS,EAAC;AACd,UAAAR,KAAIA,GAAE,OAAOQ,EAAC;AACd,UAAAC,KAAIA,GAAE,SAASD,EAAC;AAAA,QACpB;AACA,eAAOT,GAAE,OAAO,GAAG;AACf,UAAAA,KAAIA,GAAE,OAAO,SAASA,EAAC,CAAC;AAAA,QAC5B;AACA,WAAG;AACC,iBAAOC,GAAE,OAAO,GAAG;AACf,YAAAA,KAAIA,GAAE,OAAO,SAASA,EAAC,CAAC;AAAA,UAC5B;AACA,cAAID,GAAE,QAAQC,EAAC,GAAG;AACd,YAAAc,KAAId;AAAG,YAAAA,KAAID;AAAG,YAAAA,KAAIe;AAAA,UACtB;AACA,UAAAd,KAAIA,GAAE,SAASD,EAAC;AAAA,QACpB,SAAS,CAACC,GAAE,OAAO;AACnB,eAAOS,GAAE,OAAO,IAAIV,KAAIA,GAAE,SAASU,EAAC;AAAA,MACxC;AACA,eAAS,IAAIV,IAAGC,IAAG;AACf,QAAAD,KAAI,WAAWA,EAAC,EAAE,IAAI;AACtB,QAAAC,KAAI,WAAWA,EAAC,EAAE,IAAI;AACtB,eAAOD,GAAE,OAAO,IAAIA,IAAGC,EAAC,CAAC,EAAE,SAASA,EAAC;AAAA,MACzC;AACA,eAAS,YAAYD,IAAGC,IAAG,KAAK;AAC5B,QAAAD,KAAI,WAAWA,EAAC;AAChB,QAAAC,KAAI,WAAWA,EAAC;AAChB,YAAI,UAAU,OAAO,KAAK;AAC1B,YAAI,MAAM,IAAID,IAAGC,EAAC,GAAG,OAAO,IAAID,IAAGC,EAAC;AACpC,YAAI,QAAQ,KAAK,SAAS,GAAG,EAAE,IAAI,CAAC;AACpC,YAAI,MAAM;AAAS,iBAAO,IAAI,IAAI,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC;AAC/D,YAAI,SAAS,OAAO,OAAO,IAAI,EAAE;AACjC,YAAI,SAAS,CAAC,GAAG,aAAa;AAC9B,iBAASJ,KAAI,GAAGA,KAAI,OAAO,QAAQA,MAAK;AACpC,cAAI,MAAM,aAAa,OAAOA,EAAC,KAAKA,KAAI,IAAI,OAAO,SAAS,OAAOA,KAAI,CAAC,IAAI,OAAO,KAAK;AACxF,cAAI,QAAQ,SAAS,QAAQ,IAAI,GAAG;AACpC,iBAAO,KAAK,KAAK;AACjB,cAAI,QAAQ,OAAOA,EAAC;AAAG,yBAAa;AAAA,QACxC;AACA,eAAO,IAAI,IAAI,QAAQ,UAAU,QAAQ,MAAM,KAAK,CAAC;AAAA,MACzD;AAEA,UAAI,YAAY,SAAU,MAAMM,OAAM,UAAU,eAAe;AAC3D,mBAAW,YAAY;AACvB,eAAO,OAAO,IAAI;AAClB,YAAI,CAAC,eAAe;AAChB,iBAAO,KAAK,YAAY;AACxB,qBAAW,SAAS,YAAY;AAAA,QACpC;AACA,YAAI,SAAS,KAAK;AAClB,YAAIN;AACJ,YAAI,UAAU,KAAK,IAAIM,KAAI;AAC3B,YAAI,iBAAiB,CAAC;AACtB,aAAKN,KAAI,GAAGA,KAAI,SAAS,QAAQA,MAAK;AAClC,yBAAe,SAASA,EAAC,CAAC,IAAIA;AAAA,QAClC;AACA,aAAKA,KAAI,GAAGA,KAAI,QAAQA,MAAK;AACzB,cAAIa,KAAI,KAAKb,EAAC;AACd,cAAIa,OAAM;AAAK;AACf,cAAIA,MAAK,gBAAgB;AACrB,gBAAI,eAAeA,EAAC,KAAK,SAAS;AAC9B,kBAAIA,OAAM,OAAO,YAAY;AAAG;AAChC,oBAAM,IAAI,MAAMA,KAAI,mCAAmCP,QAAO,GAAG;AAAA,YACrE;AAAA,UACJ;AAAA,QACJ;AACA,QAAAA,QAAO,WAAWA,KAAI;AACtB,YAAI,SAAS,CAAC;AACd,YAAI,aAAa,KAAK,CAAC,MAAM;AAC7B,aAAKN,KAAI,aAAa,IAAI,GAAGA,KAAI,KAAK,QAAQA,MAAK;AAC/C,cAAIa,KAAI,KAAKb,EAAC;AACd,cAAIa,MAAK;AAAgB,mBAAO,KAAK,WAAW,eAAeA,EAAC,CAAC,CAAC;AAAA,mBACzDA,OAAM,KAAK;AAChB,gBAAI,QAAQb;AACZ,eAAG;AAAE,cAAAA;AAAA,YAAK,SAAS,KAAKA,EAAC,MAAM,OAAOA,KAAI,KAAK;AAC/C,mBAAO,KAAK,WAAW,KAAK,MAAM,QAAQ,GAAGA,EAAC,CAAC,CAAC;AAAA,UACpD;AACK,kBAAM,IAAI,MAAMa,KAAI,2BAA2B;AAAA,QACxD;AACA,eAAO,mBAAmB,QAAQP,OAAM,UAAU;AAAA,MACtD;AAEA,eAAS,mBAAmB,QAAQA,OAAM,YAAY;AAClD,YAAI,MAAM,QAAQ,CAAC,GAAG,MAAM,QAAQ,CAAC,GAAGN;AACxC,aAAKA,KAAI,OAAO,SAAS,GAAGA,MAAK,GAAGA,MAAK;AACrC,gBAAM,IAAI,IAAI,OAAOA,EAAC,EAAE,MAAM,GAAG,CAAC;AAClC,gBAAM,IAAI,MAAMM,KAAI;AAAA,QACxB;AACA,eAAO,aAAa,IAAI,OAAO,IAAI;AAAA,MACvC;AAEA,eAAS,UAAU,OAAO,UAAU;AAChC,mBAAW,YAAY;AACvB,YAAI,QAAQ,SAAS,QAAQ;AACzB,iBAAO,SAAS,KAAK;AAAA,QACzB;AACA,eAAO,MAAM,QAAQ;AAAA,MACzB;AAEA,eAAS,OAAOR,IAAGQ,OAAM;AACrB,QAAAA,QAAO,OAAOA,KAAI;AAClB,YAAIA,MAAK,OAAO,GAAG;AACf,cAAIR,GAAE,OAAO;AAAG,mBAAO,EAAE,OAAO,CAAC,CAAC,GAAG,YAAY,MAAM;AACvD,gBAAM,IAAI,MAAM,2CAA2C;AAAA,QAC/D;AACA,YAAIQ,MAAK,OAAO,EAAE,GAAG;AACjB,cAAIR,GAAE,OAAO;AAAG,mBAAO,EAAE,OAAO,CAAC,CAAC,GAAG,YAAY,MAAM;AACvD,cAAIA,GAAE,WAAW;AACb,mBAAO;AAAA,cACH,OAAO,CAAC,EAAE,OAAO;AAAA,gBAAM,CAAC;AAAA,gBAAG,MAAM,MAAM,MAAM,MAAM,CAACA,GAAE,WAAW,CAAC,CAAC,EAC9D,IAAI,MAAM,UAAU,SAAS,CAAC,GAAG,CAAC,CAAC;AAAA,cACxC;AAAA,cACA,YAAY;AAAA,YAChB;AAEJ,cAAI,MAAM,MAAM,MAAM,MAAM,MAAMA,GAAE,WAAW,IAAI,CAAC,CAAC,EAChD,IAAI,MAAM,UAAU,SAAS,CAAC,GAAG,CAAC,CAAC;AACxC,cAAI,QAAQ,CAAC,CAAC,CAAC;AACf,iBAAO;AAAA,YACH,OAAO,CAAC,EAAE,OAAO,MAAM,CAAC,GAAG,GAAG;AAAA,YAC9B,YAAY;AAAA,UAChB;AAAA,QACJ;AAEA,YAAI,MAAM;AACV,YAAIA,GAAE,WAAW,KAAKQ,MAAK,WAAW,GAAG;AACrC,gBAAM;AACN,UAAAR,KAAIA,GAAE,IAAI;AAAA,QACd;AACA,YAAIQ,MAAK,OAAO,GAAG;AACf,cAAIR,GAAE,OAAO;AAAG,mBAAO,EAAE,OAAO,CAAC,CAAC,GAAG,YAAY,MAAM;AAEvD,iBAAO;AAAA,YACH,OAAO,MAAM,MAAM,MAAM,MAAMA,GAAE,WAAW,CAAC,CAAC,EACzC,IAAI,OAAO,UAAU,SAAS,CAAC;AAAA,YACpC,YAAY;AAAA,UAChB;AAAA,QACJ;AACA,YAAI,MAAM,CAAC;AACX,YAAI,OAAOA,IAAG;AACd,eAAO,KAAK,WAAW,KAAK,KAAK,WAAWQ,KAAI,KAAK,GAAG;AACpD,mBAAS,KAAK,OAAOA,KAAI;AACzB,iBAAO,OAAO;AACd,cAAI,QAAQ,OAAO;AACnB,cAAI,MAAM,WAAW,GAAG;AACpB,oBAAQA,MAAK,MAAM,KAAK,EAAE,IAAI;AAC9B,mBAAO,KAAK,KAAK;AAAA,UACrB;AACA,cAAI,KAAK,MAAM,WAAW,CAAC;AAAA,QAC/B;AACA,YAAI,KAAK,KAAK,WAAW,CAAC;AAC1B,eAAO,EAAE,OAAO,IAAI,QAAQ,GAAG,YAAY,IAAI;AAAA,MACnD;AAEA,eAAS,aAAaR,IAAGQ,OAAM,UAAU;AACrC,YAAI,MAAM,OAAOR,IAAGQ,KAAI;AACxB,gBAAQ,IAAI,aAAa,MAAM,MAAM,IAAI,MAAM,IAAI,SAAUL,IAAG;AAC5D,iBAAO,UAAUA,IAAG,QAAQ;AAAA,QAChC,CAAC,EAAE,KAAK,EAAE;AAAA,MACd;AAEA,iBAAW,UAAU,UAAU,SAAU,OAAO;AAC5C,eAAO,OAAO,MAAM,KAAK;AAAA,MAC7B;AAEA,mBAAa,UAAU,UAAU,SAAU,OAAO;AAC9C,eAAO,OAAO,MAAM,KAAK;AAAA,MAC7B;AAEA,mBAAa,UAAU,UAAU,SAAU,OAAO;AAC9C,eAAO,OAAO,MAAM,KAAK;AAAA,MAC7B;AAEA,iBAAW,UAAU,WAAW,SAAU,OAAO,UAAU;AACvD,YAAI,UAAUL;AAAW,kBAAQ;AACjC,YAAI,UAAU;AAAI,iBAAO,aAAa,MAAM,OAAO,QAAQ;AAC3D,YAAIC,KAAI,KAAK,OAAOW,KAAIX,GAAE,QAAQ,MAAM,OAAOA,GAAE,EAAEW,EAAC,CAAC,GAAG,QAAQ,WAAW;AAC3E,eAAO,EAAEA,MAAK,GAAG;AACb,kBAAQ,OAAOX,GAAEW,EAAC,CAAC;AACnB,iBAAO,MAAM,MAAM,MAAM,MAAM,IAAI;AAAA,QACvC;AACA,YAAI,OAAO,KAAK,OAAO,MAAM;AAC7B,eAAO,OAAO;AAAA,MAClB;AAEA,mBAAa,UAAU,WAAW,SAAU,OAAO,UAAU;AACzD,YAAI,UAAUZ;AAAW,kBAAQ;AACjC,YAAI,SAAS;AAAI,iBAAO,aAAa,MAAM,OAAO,QAAQ;AAC1D,eAAO,OAAO,KAAK,KAAK;AAAA,MAC5B;AAEA,mBAAa,UAAU,WAAW,aAAa,UAAU;AAEzD,mBAAa,UAAU,SAAS,WAAW,UAAU,SAAS,aAAa,UAAU,SAAS,WAAY;AAAE,eAAO,KAAK,SAAS;AAAA,MAAG;AAEpI,iBAAW,UAAU,UAAU,WAAY;AACvC,eAAO,SAAS,KAAK,SAAS,GAAG,EAAE;AAAA,MACvC;AACA,iBAAW,UAAU,aAAa,WAAW,UAAU;AAEvD,mBAAa,UAAU,UAAU,WAAY;AACzC,eAAO,KAAK;AAAA,MAChB;AACA,mBAAa,UAAU,aAAa,aAAa,UAAU;AAC3D,mBAAa,UAAU,UAAU,aAAa,UAAU,aAAa,WAAY;AAC7E,eAAO,SAAS,KAAK,SAAS,GAAG,EAAE;AAAA,MACvC;AAEA,eAAS,iBAAiBC,IAAG;AACzB,YAAI,UAAU,CAACA,EAAC,GAAG;AACf,cAAII,KAAI,CAACJ;AACT,cAAII,OAAM,SAASA,EAAC;AAChB,mBAAO,uBAAuB,IAAI,aAAa,OAAOA,EAAC,CAAC,IAAI,IAAI,aAAaA,EAAC;AAClF,gBAAM,IAAI,MAAM,sBAAsBJ,EAAC;AAAA,QAC3C;AACA,YAAI,OAAOA,GAAE,CAAC,MAAM;AACpB,YAAI;AAAM,UAAAA,KAAIA,GAAE,MAAM,CAAC;AACvB,YAAIwB,SAAQxB,GAAE,MAAM,IAAI;AACxB,YAAIwB,OAAM,SAAS;AAAG,gBAAM,IAAI,MAAM,sBAAsBA,OAAM,KAAK,GAAG,CAAC;AAC3E,YAAIA,OAAM,WAAW,GAAG;AACpB,cAAI,MAAMA,OAAM,CAAC;AACjB,cAAI,IAAI,CAAC,MAAM;AAAK,kBAAM,IAAI,MAAM,CAAC;AACrC,gBAAM,CAAC;AACP,cAAI,QAAQ,SAAS,GAAG,KAAK,CAAC,UAAU,GAAG;AAAG,kBAAM,IAAI,MAAM,sBAAsB,MAAM,2BAA2B;AACrH,cAAI,OAAOA,OAAM,CAAC;AAClB,cAAI,eAAe,KAAK,QAAQ,GAAG;AACnC,cAAI,gBAAgB,GAAG;AACnB,mBAAO,KAAK,SAAS,eAAe;AACpC,mBAAO,KAAK,MAAM,GAAG,YAAY,IAAI,KAAK,MAAM,eAAe,CAAC;AAAA,UACpE;AACA,cAAI,MAAM;AAAG,kBAAM,IAAI,MAAM,oDAAoD;AACjF,kBAAS,IAAI,MAAM,MAAM,CAAC,EAAG,KAAK,GAAG;AACrC,UAAAxB,KAAI;AAAA,QACR;AACA,YAAIyB,WAAU,kBAAkB,KAAKzB,EAAC;AACtC,YAAI,CAACyB;AAAS,gBAAM,IAAI,MAAM,sBAAsBzB,EAAC;AACrD,YAAI,sBAAsB;AACtB,iBAAO,IAAI,aAAa,OAAO,OAAO,MAAMA,KAAIA,EAAC,CAAC;AAAA,QACtD;AACA,YAAIQ,KAAI,CAAC,GAAGkB,OAAM1B,GAAE,QAAQW,KAAI,UAAUgB,OAAMD,OAAMf;AACtD,eAAOe,OAAM,GAAG;AACZ,UAAAlB,GAAE,KAAK,CAACR,GAAE,MAAM2B,MAAKD,IAAG,CAAC;AACzB,UAAAC,QAAOhB;AACP,cAAIgB,OAAM;AAAG,YAAAA,OAAM;AACnB,UAAAD,QAAOf;AAAA,QACX;AACA,QAAAT,MAAKM,EAAC;AACN,eAAO,IAAI,WAAWA,IAAG,IAAI;AAAA,MACjC;AAEA,eAAS,iBAAiBR,IAAG;AACzB,YAAI,sBAAsB;AACtB,iBAAO,IAAI,aAAa,OAAOA,EAAC,CAAC;AAAA,QACrC;AACA,YAAI,UAAUA,EAAC,GAAG;AACd,cAAIA,OAAM,SAASA,EAAC;AAAG,kBAAM,IAAI,MAAMA,KAAI,qBAAqB;AAChE,iBAAO,IAAI,aAAaA,EAAC;AAAA,QAC7B;AACA,eAAO,iBAAiBA,GAAE,SAAS,CAAC;AAAA,MACxC;AAEA,eAAS,WAAWA,IAAG;AACnB,YAAI,OAAOA,OAAM,UAAU;AACvB,iBAAO,iBAAiBA,EAAC;AAAA,QAC7B;AACA,YAAI,OAAOA,OAAM,UAAU;AACvB,iBAAO,iBAAiBA,EAAC;AAAA,QAC7B;AACA,YAAI,OAAOA,OAAM,UAAU;AACvB,iBAAO,IAAI,aAAaA,EAAC;AAAA,QAC7B;AACA,eAAOA;AAAA,MACX;AAEA,eAASG,KAAI,GAAGA,KAAI,KAAMA,MAAK;AAC3B,gBAAQA,EAAC,IAAI,WAAWA,EAAC;AACzB,YAAIA,KAAI;AAAG,kBAAQ,CAACA,EAAC,IAAI,WAAW,CAACA,EAAC;AAAA,MAC1C;AAEA,cAAQ,MAAM,QAAQ,CAAC;AACvB,cAAQ,OAAO,QAAQ,CAAC;AACxB,cAAQ,WAAW,QAAQ,EAAE;AAC7B,cAAQ,MAAM;AACd,cAAQ,MAAM;AACd,cAAQ,MAAM;AACd,cAAQ,MAAM;AACd,cAAQ,aAAa,SAAUC,IAAG;AAAE,eAAOA,cAAa,cAAcA,cAAa,gBAAgBA,cAAa;AAAA,MAAc;AAC9H,cAAQ,cAAc;AAEtB,cAAQ,YAAY,SAAU,QAAQK,OAAM,YAAY;AACpD,eAAO,mBAAmB,OAAO,IAAI,UAAU,GAAG,WAAWA,SAAQ,EAAE,GAAG,UAAU;AAAA,MACxF;AAEA,aAAO;AAAA,IACX,EAAG;AAGH,QAAI,OAAO,WAAW,eAAe,OAAO,eAAe,SAAS,GAAG;AACnE,aAAO,UAAU;AAAA,IACrB;AAGA,QAAI,OAAO,WAAW,cAAc,OAAO,KAAK;AAC5C,aAAQ,WAAY;AAChB,eAAO;AAAA,MACX,CAAC;AAAA,IACL;AAAA;AAAA;;;AC56CA;AAAA;AA0BA,KAAC,SAAU,MAAM,OAAO;AAQtB,UAAI,aAAgB,MAAM,WACtB,WAAgB,OAAO,WACvB,QAAgB,WAAW,OAC3B,aAAgB,SAAS,gBACzB,gBAAgB,WAAW,SAC3B,UAAgB,CAAC;AAKrB,UAAImB,KAAI;AAAA,QACN,SAAU,SAAU,KAAK,UAAU,SAAU;AAC3C,cAAIC,IAAGC,IAAG;AACV,cAAK,QAAQ,MAAO;AAClB;AAAA,UACF;AAEA,cAAK,iBAAiB,IAAI,YAAY,eAAgB;AACpD,gBAAI,QAAS,UAAU,OAAQ;AAAA,UACjC,WACU,IAAI,WAAW,CAAC,IAAI,QAAS;AACrC,iBAAMD,KAAI,GAAGC,KAAI,IAAI,QAAQD,KAAIC,IAAGD,MAAM;AACxC,kBAAKA,MAAK,OAAO,SAAS,KAAM,SAAS,IAAIA,EAAC,GAAGA,IAAG,GAAI,MAAM,SAAU;AACtE;AAAA,cACF;AAAA,YACF;AAAA,UACF,OACK;AACH,iBAAM,OAAO,KAAK;AAChB,kBAAK,WAAW,KAAM,KAAK,GAAI,GAAI;AACjC,oBAAK,SAAS,KAAM,SAAS,IAAI,GAAG,GAAG,KAAK,GAAI,MAAM,SAAU;AAC9D;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,QACA,QAAS,SAAU,KAAM;AACvB,eAAK,QAAS,MAAM,KAAM,WAAW,CAAE,GAAG,SAAW,QAAS;AAC5D,qBAAU,QAAQ,QAAS;AACzB,kBAAI,IAAI,IAAI,OAAO,IAAI;AAAA,YACzB;AAAA,UACF,CAAC;AACD,iBAAO;AAAA,QACT;AAAA,MACF;AAIA,UAAIE,OAAM,SAAW,SAAU;AAE7B,aAAK,WAAW;AAAA,UACd,eAAgB;AAAA,YACd,YAAa;AAAA,cACX,IAAK;AAAA,gBACH,UAAiB;AAAA,gBACjB,QAAiB;AAAA,gBACjB,gBAAiB;AAAA,cACnB;AAAA;AAAA,YAEF;AAAA,UACF;AAAA;AAAA,UAEA,UAAW;AAAA;AAAA,UAEX,SAAU;AAAA,QACZ;AAGA,aAAK,UAAUH,GAAE,OAAQ,CAAC,GAAG,KAAK,UAAU,OAAQ;AACpD,aAAK,WAAY,KAAK,QAAQ,MAAO;AAErC,YAAK,QAAQ,UAAU,CAAE,KAAK,QAAQ,YAAa,KAAK,QAAQ,MAAO,GAAI;AACzE,gBAAM,IAAI,MAAM,8CAA8C,QAAQ,SAAS,GAAG;AAAA,QACpF;AAAA,MACF;AAOA,MAAAG,KAAI,oBAAoB,OAAO,aAAc,CAAE;AAE/C,eAAS,kBAAoB,oBAAqB;AAChD,eAAOA,KAAI,GAAG,QAAS,sBAAsB,8BAA8B;AAAA,MAC7E;AAEA,eAAS,MAAO,KAAKC,OAAM;AACzB,aAAK,OAAO;AACZ,aAAK,QAAQA;AAAA,MACf;AAGA,MAAAJ,GAAE,OAAQ,MAAM,WAAW;AAAA,QACzB,UAAW,SAAW,QAAS;AAC7B,eAAK,UAAU;AACf,iBAAO;AAAA,QACT;AAAA,QACA,aAAc,SAAW,SAAU;AACjC,eAAK,WAAW;AAChB,iBAAO;AAAA,QACT;AAAA,QACA,UAAW,SAAW,KAAK,MAAO;AAChC,eAAK,OAAO;AACZ,eAAK,QAAQ;AACb,iBAAO;AAAA,QACT;AAAA,QACA,OAAQ,SAAW,MAAO;AACxB,cAAK,CAAC,EAAE,SAAS,KAAM,IAAK,KAAK,kBAAmB;AAClD,mBAAO,CAAC,EAAE,MAAM,KAAK,WAAW,CAAC;AAAA,UACnC;AACA,kBAAS,QAAQ,KAAK,SAASG,KAAI,UAAU,SAASE,IAAE;AAAE,mBAAOA;AAAA,UAAG;AAAA,YAClE,KAAK,MAAM,YAAY,KAAK,SAAS,KAAK,UAAU,KAAK,MAAM,KAAK,OAAO,KAAK,IAAI;AAAA,YACpF;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AAMD,MAAAL,GAAE,OAAQG,KAAI,WAAW;AAAA;AAAA,QAEvB,WAAY,SAAW,KAAM;AAC3B,iBAAO,IAAI,MAAO,KAAK,IAAK;AAAA,QAC9B;AAAA,QAEA,YAAa,SAAW,QAAS;AAC/B,cAAK,CAAE,QAAS;AACd,mBAAO,KAAK;AAAA,UACd;AACA,eAAK,cAAc;AAAA,QACrB;AAAA,QAEA,SAAU,SAAW,KAAM;AACzB,iBAAO,KAAK,YAAY,KAAM,MAAM,OAAO,OAAO,GAAI;AAAA,QACxD;AAAA,QAEA,UAAW,SAAW,QAAQ,KAAM;AACnC,iBAAO,KAAK,YAAY,KAAM,MAAM,QAAQ,OAAO,GAAI;AAAA,QACxD;AAAA,QAEA,WAAY,SAAW,QAAS,KAAsB;AAEpD,iBAAO,KAAK,YAAY,KAAM,MAAM,QAAQ,OAAO,GAAI;AAAA,QACzD;AAAA,QAEA,UAAW,SAAW,MAAM,MAAM,KAAM;AACtC,iBAAO,KAAK,YAAY,KAAM,MAAM,OAAO,OAAO,MAAM,MAAM,GAAI;AAAA,QACpE;AAAA,QAEA,WAAY,SAAW,QAAQ,MAAM,MAAM,KAAM;AAC/C,iBAAO,KAAK,YAAY,KAAM,MAAM,QAAQ,OAAO,MAAM,MAAM,GAAI;AAAA,QACrE;AAAA,QAEA,YAAa,SAAW,QAAQ,MAAM,MAAM,KAAoB;AAC9D,iBAAO,KAAK,YAAY,KAAM,MAAM,QAAQ,OAAO,MAAM,MAAM,GAAI;AAAA,QACrE;AAAA,QAEA,UAAW,SAAW,SAAS,KAAM;AACnC,iBAAO,KAAK,YAAY,KAAM,MAAM,OAAO,SAAS,GAAI;AAAA,QAC1D;AAAA,QAEA,WAAY,SAAW,QAAQ,SAAS,KAAM;AAC5C,iBAAO,KAAK,YAAY,KAAM,MAAM,QAAQ,SAAS,GAAI;AAAA,QAC3D;AAAA,QAEA,YAAa,SAAW,QAAQ,SAAS,KAAoB;AAC3D,iBAAO,KAAK,YAAY,KAAM,MAAM,QAAQ,SAAS,GAAI;AAAA,QAC3D;AAAA,QAEA,WAAY,SAAW,SAAS,MAAM,MAAM,KAAM;AAChD,iBAAO,KAAK,YAAY,KAAM,MAAM,OAAO,SAAS,MAAM,MAAM,GAAI;AAAA,QACtE;AAAA,QAEA,YAAa,SAAW,QAAQ,SAAS,MAAM,MAAM,KAAM;AACzD,iBAAO,KAAK,YAAY,KAAM,MAAM,QAAQ,SAAS,MAAM,MAAM,GAAI;AAAA,QACvE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOA,aAAc,SAAW,QAAQ,SAAS,cAAc,YAAY,KAAM;AAGxE,uBAAa,cAAc;AAI3B,mBAAS,UAAU,KAAK;AAExB,cAAI;AAKJ,cAAK,CAAE,KAAK,SAAU;AAIpB,uBAAW,IAAIA,KAAI;AACnB,mBAAO,SAAS,YAAY,KAAM,UAAU,QAAW,QAAW,cAAc,YAAY,GAAI;AAAA,UAClG;AAGA,cAAK,CAAE,KAAK,QAAQ,aAAc;AAChC,kBAAM,IAAI,MAAM,0BAA0B;AAAA,UAC5C;AAEA,cAAK,CAAE,KAAK,QAAQ,YAAa,MAAO,GAAI;AAC1C,kBAAM,IAAI,MAAM,aAAa,SAAS,kBAAkB;AAAA,UAC1D;AAEA,cAAK,CAAE,KAAK,QAAQ,YAAa,MAAO,EAAG,EAAG,GAAI;AAChD,kBAAM,IAAI,MAAM,sCAAsC;AAAA,UACxD;AAKA,cAAK,CAAE,cAAe;AACpB,kBAAM,IAAI,MAAM,2BAA2B;AAAA,UAC7C;AAEA,cAAI,MAAO,UAAU,UAAUA,KAAI,oBAAoB,eAAe,cAClE,cAAc,KAAK,QAAQ,aAC3B,OAAO,YAAa,MAAO,GAC3B,eAAe,YAAY,YAAY,KAAK,SAAS,YAAY,UAAU,EAAE,GAC7E,cAAc,KAAK,EAAE,EAAE,gBAAgB,KAAK,EAAE,EAAE,cAAc,KAAK,KAAK,EAAE,EAAE,cAAc,KAAK,YAAY,gBAAgB,YAAY,cAAc,KAAK,YAAY,cAAc,GACpL,UACA;AAEJ,cAAI;AACJ,cAAI,QAAQ,QAAW;AAErB,sBAAU;AAAA,UAEZ,OAAO;AAIL,gBAAK,OAAO,OAAO,UAAW;AAC5B,oBAAM,SAAU,KAAK,EAAG;AAExB,kBAAK,MAAO,GAAI,GAAI;AAClB,sBAAM,IAAI,MAAM,gDAAgD;AAAA,cAClE;AAAA,YACF;AAEA,sBAAU,kBAAkB,WAAW,EAAE,GAAG;AAAA,UAC9C;AAGA,cAAK,CAAE,MAAO;AACZ,kBAAM,IAAI,MAAM,sBAAsB,SAAS,mBAAmB;AAAA,UACpE;AAEA,qBAAW,KAAM,GAAI;AAIrB,cAAK,CAAE,YAAY,UAAU,SAAS,QAAS;AAC7C,gBAAI,KAAK,QAAQ,sBAAsB;AACrC,mBAAK,QAAQ,qBAAqB,KAAK,MAAM;AAAA,YAC/C;AACA,kBAAM,CAAE,cAAc,UAAW;AAGjC,gBAAI,KAAK,QAAQ,UAAQ,MAAM;AAC7B,sBAAQ,IAAI,IAAK,kBAAkB,WAAW,EAAG,GAAI,CAAE,CAAC;AAAA,YAC1D;AACA,mBAAO,IAAK,kBAAkB,EAAG,GAAI,CAAE;AAAA,UACzC;AAEA,gBAAM,SAAU,OAAQ;AAGxB,cAAK,CAAE,KAAO;AACZ,kBAAM,CAAE,cAAc,UAAW;AACjC,mBAAO,IAAK,kBAAkB,EAAG,GAAI,CAAE;AAAA,UACzC;AACA,iBAAO;AAAA,QACT;AAAA,MACF,CAAC;AAuCD,UAAI,UAAW,WAAW;AACxB,iBAAS,SAAS,UAAU;AAC1B,iBAAO,OAAO,UAAU,SAAS,KAAK,QAAQ,EAAE,MAAM,GAAG,EAAE,EAAE,YAAY;AAAA,QAC3E;AACA,iBAAS,WAAW,OAAO,YAAY;AACrC,mBAAS,SAAS,CAAC,GAAG,aAAa,GAAG,OAAO,EAAE,UAAU,IAAI,OAAO;AAAA,UAAiB;AACrF,iBAAO,OAAO,KAAK,EAAE;AAAA,QACvB;AAEA,YAAI,aAAa,WAAW;AAC1B,cAAI,CAAC,WAAW,MAAM,eAAe,UAAU,CAAC,CAAC,GAAG;AAClD,uBAAW,MAAM,UAAU,CAAC,CAAC,IAAI,WAAW,MAAM,UAAU,CAAC,CAAC;AAAA,UAChE;AACA,iBAAO,WAAW,OAAO,KAAK,MAAM,WAAW,MAAM,UAAU,CAAC,CAAC,GAAG,SAAS;AAAA,QAC/E;AAEA,mBAAW,SAAS,SAAS,YAAY,MAAM;AAC7C,cAAI,SAAS,GAAG,cAAc,WAAW,QAAQ,YAAY,IAAI,KAAK,SAAS,CAAC,GAAGF,IAAGK,IAAGC,QAAO,KAAK,eAAe;AACpH,eAAKN,KAAI,GAAGA,KAAI,aAAaA,MAAK;AAChC,wBAAY,SAAS,WAAWA,EAAC,CAAC;AAClC,gBAAI,cAAc,UAAU;AAC1B,qBAAO,KAAK,WAAWA,EAAC,CAAC;AAAA,YAC3B,WACS,cAAc,SAAS;AAC9B,cAAAM,SAAQ,WAAWN,EAAC;AACpB,kBAAIM,OAAM,CAAC,GAAG;AACZ,sBAAM,KAAK,MAAM;AACjB,qBAAKD,KAAI,GAAGA,KAAIC,OAAM,CAAC,EAAE,QAAQD,MAAK;AACpC,sBAAI,CAAC,IAAI,eAAeC,OAAM,CAAC,EAAED,EAAC,CAAC,GAAG;AACpC,0BAAM,QAAQ,0CAA0CC,OAAM,CAAC,EAAED,EAAC,CAAC;AAAA,kBACrE;AACA,wBAAM,IAAIC,OAAM,CAAC,EAAED,EAAC,CAAC;AAAA,gBACvB;AAAA,cACF,WACSC,OAAM,CAAC,GAAG;AACjB,sBAAM,KAAKA,OAAM,CAAC,CAAC;AAAA,cACrB,OACK;AACH,sBAAM,KAAK,QAAQ;AAAA,cACrB;AAEA,kBAAI,OAAO,KAAKA,OAAM,CAAC,CAAC,KAAM,SAAS,GAAG,KAAK,UAAW;AACxD,sBAAM,QAAQ,2CAA2C,SAAS,GAAG,CAAC;AAAA,cACxE;AAGA,kBAAK,OAAO,OAAO,eAAe,QAAQ,MAAO;AAC/C,sBAAM;AAAA,cACR;AAGA,sBAAQA,OAAM,CAAC,GAAG;AAAA,gBAChB,KAAK;AAAK,wBAAM,IAAI,SAAS,CAAC;AAAG;AAAA,gBACjC,KAAK;AAAK,wBAAM,OAAO,aAAa,GAAG;AAAG;AAAA,gBAC1C,KAAK;AAAK,wBAAM,SAAS,KAAK,EAAE;AAAG;AAAA,gBACnC,KAAK;AAAK,wBAAMA,OAAM,CAAC,IAAI,IAAI,cAAcA,OAAM,CAAC,CAAC,IAAI,IAAI,cAAc;AAAG;AAAA,gBAC9E,KAAK;AAAK,wBAAMA,OAAM,CAAC,IAAI,WAAW,GAAG,EAAE,QAAQA,OAAM,CAAC,CAAC,IAAI,WAAW,GAAG;AAAG;AAAA,gBAChF,KAAK;AAAK,wBAAM,IAAI,SAAS,CAAC;AAAG;AAAA,gBACjC,KAAK;AAAK,yBAAQ,MAAM,OAAO,GAAG,MAAMA,OAAM,CAAC,IAAI,IAAI,UAAU,GAAGA,OAAM,CAAC,CAAC,IAAI;AAAM;AAAA,gBACtF,KAAK;AAAK,wBAAM,KAAK,IAAI,GAAG;AAAG;AAAA,gBAC/B,KAAK;AAAK,wBAAM,IAAI,SAAS,EAAE;AAAG;AAAA,gBAClC,KAAK;AAAK,wBAAM,IAAI,SAAS,EAAE,EAAE,YAAY;AAAG;AAAA,cAClD;AACA,oBAAO,QAAQ,KAAKA,OAAM,CAAC,CAAC,KAAKA,OAAM,CAAC,KAAK,OAAO,IAAI,MAAK,MAAM;AACnE,8BAAgBA,OAAM,CAAC,IAAIA,OAAM,CAAC,KAAK,MAAM,MAAMA,OAAM,CAAC,EAAE,OAAO,CAAC,IAAI;AACxE,2BAAaA,OAAM,CAAC,IAAI,OAAO,GAAG,EAAE;AACpC,oBAAMA,OAAM,CAAC,IAAI,WAAW,eAAe,UAAU,IAAI;AACzD,qBAAO,KAAKA,OAAM,CAAC,IAAI,MAAM,MAAM,MAAM,GAAG;AAAA,YAC9C;AAAA,UACF;AACA,iBAAO,OAAO,KAAK,EAAE;AAAA,QACvB;AAEA,mBAAW,QAAQ,CAAC;AAEpB,mBAAW,QAAQ,SAAS,KAAK;AAC/B,cAAI,OAAO,KAAKA,SAAQ,CAAC,GAAG,aAAa,CAAC,GAAG,YAAY;AACzD,iBAAO,MAAM;AACX,iBAAKA,SAAQ,YAAY,KAAK,IAAI,OAAO,MAAM;AAC7C,yBAAW,KAAKA,OAAM,CAAC,CAAC;AAAA,YAC1B,YACUA,SAAQ,WAAW,KAAK,IAAI,OAAO,MAAM;AACjD,yBAAW,KAAK,GAAG;AAAA,YACrB,YACUA,SAAQ,uFAAuF,KAAK,IAAI,OAAO,MAAM;AAC7H,kBAAIA,OAAM,CAAC,GAAG;AACZ,6BAAa;AACb,oBAAI,aAAa,CAAC,GAAG,oBAAoBA,OAAM,CAAC,GAAG,cAAc,CAAC;AAClE,qBAAK,cAAc,sBAAsB,KAAK,iBAAiB,OAAO,MAAM;AAC1E,6BAAW,KAAK,YAAY,CAAC,CAAC;AAC9B,0BAAQ,oBAAoB,kBAAkB,UAAU,YAAY,CAAC,EAAE,MAAM,OAAO,IAAI;AACtF,yBAAK,cAAc,wBAAwB,KAAK,iBAAiB,OAAO,MAAM;AAC5E,iCAAW,KAAK,YAAY,CAAC,CAAC;AAAA,oBAChC,YACU,cAAc,aAAa,KAAK,iBAAiB,OAAO,MAAM;AACtE,iCAAW,KAAK,YAAY,CAAC,CAAC;AAAA,oBAChC,OACK;AACH,4BAAM;AAAA,oBACR;AAAA,kBACF;AAAA,gBACF,OACK;AACH,wBAAM;AAAA,gBACR;AACA,gBAAAA,OAAM,CAAC,IAAI;AAAA,cACb,OACK;AACH,6BAAa;AAAA,cACf;AACA,kBAAI,cAAc,GAAG;AACnB,sBAAM;AAAA,cACR;AACA,yBAAW,KAAKA,MAAK;AAAA,YACvB,OACK;AACH,oBAAM;AAAA,YACR;AACA,mBAAO,KAAK,UAAUA,OAAM,CAAC,EAAE,MAAM;AAAA,UACvC;AACA,iBAAO;AAAA,QACT;AAEA,eAAO;AAAA,MACT,EAAG;AAEH,UAAI,WAAW,SAAS,KAAK,MAAM;AACjC,aAAK,QAAQ,GAAG;AAChB,eAAO,QAAQ,MAAM,MAAM,IAAI;AAAA,MACjC;AAEA,MAAAJ,KAAI,eAAe,SAAW,cAAcK,IAAI;AAC9C,uBAAe,aAAa,QAAQ,MAAMA,EAAC;AAC3C,eAAOL,KAAI,iBAAiB,YAAY;AAAA,MAC1C;AAEA,MAAAA,KAAI,UAAU,SAAW,KAAK,MAAO;AACnC,YAAK,CAAC,EAAE,SAAS,KAAM,IAAK,KAAK,kBAAmB;AAClD,iBAAO,SAAU,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAE;AAAA,QAC5C;AACA,eAAO,QAAQ,MAAM,MAAM,CAAC,EAAE,MAAM,KAAK,SAAS,CAAE;AAAA,MACtD;AAEA,MAAAA,KAAI,UAAU,UAAU,WAAY;AAClC,eAAOA,KAAI,QAAQ,MAAM,MAAM,SAAS;AAAA,MAC1C;AAcA,MAAAA,KAAI,KAAK,CAAC;AAEV,MAAAA,KAAI,GAAG,QAAQ,SAAWM,IAAI;AAC5B,YAAI,aAAaN,KAAI,GAAG,kBAAmBM,EAAE;AAC7C,eAAON,KAAI,GAAG,OAAO,MAAM,KAAKA,KAAI,GAAG,QAAQ,UAAU;AAAA,MAC3D;AAEA,MAAAA,KAAI,GAAG,UAAU,SAAWM,IAAI;AAE9B,iBAAS,MAAO,KAAM;AACpB,iBAAQ,QAAQ,OAAO,IAAI,MAAM,MAAM;AAAA,QACzC;AAEA,YAAI,MAAMN,KAAI,GAAG,MAAOM,EAAE;AAC1B,eAAO,SAAWD,IAAI;AACpB,iBAAO,MAAOL,KAAI,GAAG,YAAa,GAAI,EAAGK,EAAE,CAAE;AAAA,QAC/C;AAAA,MACF;AAEA,MAAAL,KAAI,GAAG,cAAc,SAAW,KAAM;AACpC,eAAO,SAAWK,IAAI;AACpB,cAAI;AACJ,kBAAS,IAAI,MAAO;AAAA,YAClB,KAAK;AACH,qBAAOL,KAAI,GAAG,YAAa,IAAI,IAAK,EAAGK,EAAE;AAAA,YAC3C,KAAK;AACH,kBAAKL,KAAI,GAAG,YAAa,IAAI,IAAK,EAAGK,EAAE,GAAI;AACzC,uBAAOL,KAAI,GAAG,YAAa,IAAI,MAAO,EAAGK,EAAE;AAAA,cAC7C;AACA,qBAAOL,KAAI,GAAG,YAAa,IAAI,MAAO,EAAGK,EAAE;AAAA,YAC7C,KAAK;AACH,qBAAOL,KAAI,GAAG,YAAa,IAAI,IAAK,EAAGK,EAAE,KAAKL,KAAI,GAAG,YAAa,IAAI,KAAM,EAAGK,EAAE;AAAA,YACnF,KAAK;AACH,qBAAOL,KAAI,GAAG,YAAa,IAAI,IAAK,EAAGK,EAAE,KAAKL,KAAI,GAAG,YAAa,IAAI,KAAM,EAAGK,EAAE;AAAA,YACnF,KAAK;AACH,qBAAOL,KAAI,GAAG,YAAa,IAAI,IAAK,EAAGK,EAAE,IAAIL,KAAI,GAAG,YAAa,IAAI,KAAM,EAAGK,EAAE;AAAA,YAClF,KAAK;AACH,qBAAOL,KAAI,GAAG,YAAa,IAAI,IAAK,EAAGK,EAAE,IAAIL,KAAI,GAAG,YAAa,IAAI,KAAM,EAAGK,EAAE;AAAA,YAClF,KAAK;AACH,qBAAOL,KAAI,GAAG,YAAa,IAAI,IAAK,EAAGK,EAAE,KAAKL,KAAI,GAAG,YAAa,IAAI,KAAM,EAAGK,EAAE;AAAA,YACnF,KAAK;AACH,qBAAOL,KAAI,GAAG,YAAa,IAAI,IAAK,EAAGK,EAAE,KAAKL,KAAI,GAAG,YAAa,IAAI,KAAM,EAAGK,EAAE;AAAA,YACnF,KAAK;AACH,qBAAOL,KAAI,GAAG,YAAa,IAAI,IAAK,EAAGK,EAAE,KAAKL,KAAI,GAAG,YAAa,IAAI,KAAM,EAAGK,EAAE;AAAA,YACnF,KAAK;AACH,qBAAOL,KAAI,GAAG,YAAa,IAAI,IAAK,EAAGK,EAAE,KAAKL,KAAI,GAAG,YAAa,IAAI,KAAM,EAAGK,EAAE;AAAA,YACnF,KAAK;AACH,qBAAOL,KAAI,GAAG,YAAa,IAAI,IAAK,EAAGK,EAAE,IAAIL,KAAI,GAAG,YAAa,IAAI,KAAM,EAAGK,EAAE;AAAA,YAClF,KAAK;AACH,qBAAOA;AAAA,YACT,KAAK;AACH,qBAAO,IAAI;AAAA,YACb;AACE,oBAAM,IAAI,MAAM,sBAAsB;AAAA,UAC1C;AAAA,QACF;AAAA,MACF;AAEA,MAAAL,KAAI,GAAG,oBAAoB,SAAWM,IAAI;AAExC,QAAAA,KAAIA,GAAE,QAAQ,UAAU,EAAE,EAAE,QAAQ,UAAU,EAAE;AAEhD,YAAI,CAAE,QAAQ,KAAKA,EAAC,GAAG;AACrB,UAAAA,KAAIA,GAAE,OAAO,GAAG;AAAA,QAClB;AAEA,YAAI,cAAc,oBACd,YAAY,iBACZ,mBAAmBA,GAAE,MAAO,WAAY,GACxC,MAAM,CAAC,GACP;AAGJ,YAAK,iBAAiB,SAAS,GAAI;AACjC,cAAI,WAAW,iBAAiB,CAAC;AAAA,QACnC,OACK;AACH,gBAAM,IAAI,MAAM,gDAAgDA,EAAE;AAAA,QACpE;AAGA,QAAAA,KAAIA,GAAE,QAAS,aAAa,EAAG;AAC/B,yBAAiBA,GAAE,MAAO,SAAU;AAEpC,YAAI,EAAG,kBAAkB,eAAe,SAAS,IAAM;AACrD,gBAAM,IAAI,MAAM,oCAAoCA,EAAC;AAAA,QACvD;AACA,eAAO,eAAgB,CAAE;AAAA,MAC3B;AAGA,MAAAN,KAAI,GAAG,SAAU,WAAU;AAE7B,YAAI,SAAS;AAAA,UAAC,OAAO,SAAS,QAAQ;AAAA,UAAE;AAAA,UACxC,IAAI,CAAC;AAAA,UACL,UAAU,EAAC,SAAQ,GAAE,eAAc,GAAE,KAAI,GAAE,OAAM,GAAE,KAAI,GAAE,KAAI,GAAE,MAAK,GAAE,MAAK,GAAE,KAAI,IAAG,MAAK,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,UAAS,IAAG,WAAU,GAAE,QAAO,EAAC;AAAA,UACvL,YAAY,EAAC,GAAE,SAAQ,GAAE,OAAM,GAAE,KAAI,GAAE,KAAI,GAAE,MAAK,GAAE,MAAK,IAAG,KAAI,IAAG,MAAK,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,SAAQ;AAAA,UAC9I,cAAc,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,CAAC;AAAA,UACpG,eAAe,SAAS,UAAU,QAAO,QAAO,UAAS,IAAG,SAAQ,IAAG,IAAI;AAE3E,gBAAI,KAAK,GAAG,SAAS;AACrB,oBAAQ,SAAS;AAAA,cACjB,KAAK;AAAG,uBAAO,EAAE,MAAO,SAAS,MAAM,GAAG,KAAG,CAAC,EAAE;AAChD;AAAA,cACA,KAAK;AAAE,qBAAK,IAAI,EAAE,MAAM,WAAW,MAAM,GAAG,KAAG,CAAC,GAAG,QAAS,GAAG,KAAG,CAAC,GAAG,QAAQ,GAAG,EAAE,EAAE;AACrF;AAAA,cACA,KAAK;AAAE,qBAAK,IAAI,EAAE,MAAM,MAAM,MAAM,GAAG,KAAG,CAAC,GAAG,OAAO,GAAG,EAAE,EAAE;AAC5D;AAAA,cACA,KAAK;AAAE,qBAAK,IAAI,EAAE,MAAM,OAAO,MAAM,GAAG,KAAG,CAAC,GAAG,OAAO,GAAG,EAAE,EAAE;AAC7D;AAAA,cACA,KAAK;AAAE,qBAAK,IAAI,EAAE,MAAM,MAAM,MAAM,GAAG,KAAG,CAAC,GAAG,OAAO,GAAG,EAAE,EAAE;AAC5D;AAAA,cACA,KAAK;AAAE,qBAAK,IAAI,EAAE,MAAM,OAAO,MAAM,GAAG,KAAG,CAAC,GAAG,OAAO,GAAG,EAAE,EAAE;AAC7D;AAAA,cACA,KAAK;AAAE,qBAAK,IAAI,EAAE,MAAM,MAAM,MAAM,GAAG,KAAG,CAAC,GAAG,OAAO,GAAG,EAAE,EAAE;AAC5D;AAAA,cACA,KAAK;AAAE,qBAAK,IAAI,EAAE,MAAM,OAAO,MAAM,GAAG,KAAG,CAAC,GAAG,OAAO,GAAG,EAAE,EAAE;AAC7D;AAAA,cACA,KAAK;AAAE,qBAAK,IAAI,EAAE,MAAM,OAAO,MAAM,GAAG,KAAG,CAAC,GAAG,OAAO,GAAG,EAAE,EAAE;AAC7D;AAAA,cACA,KAAK;AAAG,qBAAK,IAAI,EAAE,MAAM,MAAM,MAAM,GAAG,KAAG,CAAC,GAAG,OAAO,GAAG,EAAE,EAAE;AAC7D;AAAA,cACA,KAAK;AAAG,qBAAK,IAAI,EAAE,MAAM,OAAO,MAAM,GAAG,KAAG,CAAC,GAAG,OAAO,GAAG,EAAE,EAAE;AAC9D;AAAA,cACA,KAAK;AAAG,qBAAK,IAAI,EAAE,MAAM,SAAS,MAAM,GAAG,KAAG,CAAC,EAAE;AACjD;AAAA,cACA,KAAK;AAAG,qBAAK,IAAI,EAAE,MAAM,MAAM;AAC/B;AAAA,cACA,KAAK;AAAG,qBAAK,IAAI,EAAE,MAAM,OAAO,KAAK,OAAO,MAAM,EAAE;AACpD;AAAA,YACA;AAAA,UACA;AAAA,UACA,OAAO,CAAC,EAAC,GAAE,GAAE,GAAE,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,CAAC,CAAC,EAAC,GAAE,EAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,GAAE,IAAG,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,CAAC,GAAE,EAAE,GAAE,GAAE,CAAC,GAAE,EAAE,GAAE,GAAE,CAAC,GAAE,EAAE,GAAE,GAAE,CAAC,GAAE,EAAE,GAAE,GAAE,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,GAAE,CAAC,GAAE,EAAE,GAAE,GAAE,CAAC,GAAE,EAAE,GAAE,GAAE,CAAC,GAAE,EAAE,GAAE,GAAE,CAAC,GAAE,EAAE,GAAE,GAAE,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,GAAE,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,IAAG,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,IAAG,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,IAAG,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,IAAG,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,IAAG,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,IAAG,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,IAAG,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,IAAG,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,IAAG,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,IAAG,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,EAAE,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,CAAC,GAAE,EAAE,GAAE,GAAE,CAAC,GAAE,EAAE,GAAE,GAAE,CAAC,GAAE,EAAE,GAAE,GAAE,CAAC,GAAE,EAAE,GAAE,GAAE,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,GAAE,CAAC,GAAE,EAAE,GAAE,GAAE,CAAC,GAAE,EAAE,GAAE,GAAE,CAAC,GAAE,EAAE,GAAE,GAAE,CAAC,GAAE,EAAE,GAAE,GAAE,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,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A,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EAC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",
+ "sourcesContent": ["var bigInt = (function (undefined) {\r\n \"use strict\";\r\n\r\n var BASE = 1e7,\r\n LOG_BASE = 7,\r\n MAX_INT = 9007199254740992,\r\n MAX_INT_ARR = smallToArray(MAX_INT),\r\n DEFAULT_ALPHABET = \"0123456789abcdefghijklmnopqrstuvwxyz\";\r\n\r\n var supportsNativeBigInt = typeof BigInt === \"function\";\r\n\r\n function Integer(v, radix, alphabet, caseSensitive) {\r\n if (typeof v === \"undefined\") return Integer[0];\r\n if (typeof radix !== \"undefined\") return +radix === 10 && !alphabet ? parseValue(v) : parseBase(v, radix, alphabet, caseSensitive);\r\n return parseValue(v);\r\n }\r\n\r\n function BigInteger(value, sign) {\r\n this.value = value;\r\n this.sign = sign;\r\n this.isSmall = false;\r\n }\r\n BigInteger.prototype = Object.create(Integer.prototype);\r\n\r\n function SmallInteger(value) {\r\n this.value = value;\r\n this.sign = value < 0;\r\n this.isSmall = true;\r\n }\r\n SmallInteger.prototype = Object.create(Integer.prototype);\r\n\r\n function NativeBigInt(value) {\r\n this.value = value;\r\n }\r\n NativeBigInt.prototype = Object.create(Integer.prototype);\r\n\r\n function isPrecise(n) {\r\n return -MAX_INT < n && n < MAX_INT;\r\n }\r\n\r\n function smallToArray(n) { // For performance reasons doesn't reference BASE, need to change this function if BASE changes\r\n if (n < 1e7)\r\n return [n];\r\n if (n < 1e14)\r\n return [n % 1e7, Math.floor(n / 1e7)];\r\n return [n % 1e7, Math.floor(n / 1e7) % 1e7, Math.floor(n / 1e14)];\r\n }\r\n\r\n function arrayToSmall(arr) { // If BASE changes this function may need to change\r\n trim(arr);\r\n var length = arr.length;\r\n if (length < 4 && compareAbs(arr, MAX_INT_ARR) < 0) {\r\n switch (length) {\r\n case 0: return 0;\r\n case 1: return arr[0];\r\n case 2: return arr[0] + arr[1] * BASE;\r\n default: return arr[0] + (arr[1] + arr[2] * BASE) * BASE;\r\n }\r\n }\r\n return arr;\r\n }\r\n\r\n function trim(v) {\r\n var i = v.length;\r\n while (v[--i] === 0);\r\n v.length = i + 1;\r\n }\r\n\r\n function createArray(length) { // function shamelessly stolen from Yaffle's library https://github.com/Yaffle/BigInteger\r\n var x = new Array(length);\r\n var i = -1;\r\n while (++i < length) {\r\n x[i] = 0;\r\n }\r\n return x;\r\n }\r\n\r\n function truncate(n) {\r\n if (n > 0) return Math.floor(n);\r\n return Math.ceil(n);\r\n }\r\n\r\n function add(a, b) { // assumes a and b are arrays with a.length >= b.length\r\n var l_a = a.length,\r\n l_b = b.length,\r\n r = new Array(l_a),\r\n carry = 0,\r\n base = BASE,\r\n sum, i;\r\n for (i = 0; i < l_b; i++) {\r\n sum = a[i] + b[i] + carry;\r\n carry = sum >= base ? 1 : 0;\r\n r[i] = sum - carry * base;\r\n }\r\n while (i < l_a) {\r\n sum = a[i] + carry;\r\n carry = sum === base ? 1 : 0;\r\n r[i++] = sum - carry * base;\r\n }\r\n if (carry > 0) r.push(carry);\r\n return r;\r\n }\r\n\r\n function addAny(a, b) {\r\n if (a.length >= b.length) return add(a, b);\r\n return add(b, a);\r\n }\r\n\r\n function addSmall(a, carry) { // assumes a is array, carry is number with 0 <= carry < MAX_INT\r\n var l = a.length,\r\n r = new Array(l),\r\n base = BASE,\r\n sum, i;\r\n for (i = 0; i < l; i++) {\r\n sum = a[i] - base + carry;\r\n carry = Math.floor(sum / base);\r\n r[i] = sum - carry * base;\r\n carry += 1;\r\n }\r\n while (carry > 0) {\r\n r[i++] = carry % base;\r\n carry = Math.floor(carry / base);\r\n }\r\n return r;\r\n }\r\n\r\n BigInteger.prototype.add = function (v) {\r\n var n = parseValue(v);\r\n if (this.sign !== n.sign) {\r\n return this.subtract(n.negate());\r\n }\r\n var a = this.value, b = n.value;\r\n if (n.isSmall) {\r\n return new BigInteger(addSmall(a, Math.abs(b)), this.sign);\r\n }\r\n return new BigInteger(addAny(a, b), this.sign);\r\n };\r\n BigInteger.prototype.plus = BigInteger.prototype.add;\r\n\r\n SmallInteger.prototype.add = function (v) {\r\n var n = parseValue(v);\r\n var a = this.value;\r\n if (a < 0 !== n.sign) {\r\n return this.subtract(n.negate());\r\n }\r\n var b = n.value;\r\n if (n.isSmall) {\r\n if (isPrecise(a + b)) return new SmallInteger(a + b);\r\n b = smallToArray(Math.abs(b));\r\n }\r\n return new BigInteger(addSmall(b, Math.abs(a)), a < 0);\r\n };\r\n SmallInteger.prototype.plus = SmallInteger.prototype.add;\r\n\r\n NativeBigInt.prototype.add = function (v) {\r\n return new NativeBigInt(this.value + parseValue(v).value);\r\n }\r\n NativeBigInt.prototype.plus = NativeBigInt.prototype.add;\r\n\r\n function subtract(a, b) { // assumes a and b are arrays with a >= b\r\n var a_l = a.length,\r\n b_l = b.length,\r\n r = new Array(a_l),\r\n borrow = 0,\r\n base = BASE,\r\n i, difference;\r\n for (i = 0; i < b_l; i++) {\r\n difference = a[i] - borrow - b[i];\r\n if (difference < 0) {\r\n difference += base;\r\n borrow = 1;\r\n } else borrow = 0;\r\n r[i] = difference;\r\n }\r\n for (i = b_l; i < a_l; i++) {\r\n difference = a[i] - borrow;\r\n if (difference < 0) difference += base;\r\n else {\r\n r[i++] = difference;\r\n break;\r\n }\r\n r[i] = difference;\r\n }\r\n for (; i < a_l; i++) {\r\n r[i] = a[i];\r\n }\r\n trim(r);\r\n return r;\r\n }\r\n\r\n function subtractAny(a, b, sign) {\r\n var value;\r\n if (compareAbs(a, b) >= 0) {\r\n value = subtract(a, b);\r\n } else {\r\n value = subtract(b, a);\r\n sign = !sign;\r\n }\r\n value = arrayToSmall(value);\r\n if (typeof value === \"number\") {\r\n if (sign) value = -value;\r\n return new SmallInteger(value);\r\n }\r\n return new BigInteger(value, sign);\r\n }\r\n\r\n function subtractSmall(a, b, sign) { // assumes a is array, b is number with 0 <= b < MAX_INT\r\n var l = a.length,\r\n r = new Array(l),\r\n carry = -b,\r\n base = BASE,\r\n i, difference;\r\n for (i = 0; i < l; i++) {\r\n difference = a[i] + carry;\r\n carry = Math.floor(difference / base);\r\n difference %= base;\r\n r[i] = difference < 0 ? difference + base : difference;\r\n }\r\n r = arrayToSmall(r);\r\n if (typeof r === \"number\") {\r\n if (sign) r = -r;\r\n return new SmallInteger(r);\r\n } return new BigInteger(r, sign);\r\n }\r\n\r\n BigInteger.prototype.subtract = function (v) {\r\n var n = parseValue(v);\r\n if (this.sign !== n.sign) {\r\n return this.add(n.negate());\r\n }\r\n var a = this.value, b = n.value;\r\n if (n.isSmall)\r\n return subtractSmall(a, Math.abs(b), this.sign);\r\n return subtractAny(a, b, this.sign);\r\n };\r\n BigInteger.prototype.minus = BigInteger.prototype.subtract;\r\n\r\n SmallInteger.prototype.subtract = function (v) {\r\n var n = parseValue(v);\r\n var a = this.value;\r\n if (a < 0 !== n.sign) {\r\n return this.add(n.negate());\r\n }\r\n var b = n.value;\r\n if (n.isSmall) {\r\n return new SmallInteger(a - b);\r\n }\r\n return subtractSmall(b, Math.abs(a), a >= 0);\r\n };\r\n SmallInteger.prototype.minus = SmallInteger.prototype.subtract;\r\n\r\n NativeBigInt.prototype.subtract = function (v) {\r\n return new NativeBigInt(this.value - parseValue(v).value);\r\n }\r\n NativeBigInt.prototype.minus = NativeBigInt.prototype.subtract;\r\n\r\n BigInteger.prototype.negate = function () {\r\n return new BigInteger(this.value, !this.sign);\r\n };\r\n SmallInteger.prototype.negate = function () {\r\n var sign = this.sign;\r\n var small = new SmallInteger(-this.value);\r\n small.sign = !sign;\r\n return small;\r\n };\r\n NativeBigInt.prototype.negate = function () {\r\n return new NativeBigInt(-this.value);\r\n }\r\n\r\n BigInteger.prototype.abs = function () {\r\n return new BigInteger(this.value, false);\r\n };\r\n SmallInteger.prototype.abs = function () {\r\n return new SmallInteger(Math.abs(this.value));\r\n };\r\n NativeBigInt.prototype.abs = function () {\r\n return new NativeBigInt(this.value >= 0 ? this.value : -this.value);\r\n }\r\n\r\n\r\n function multiplyLong(a, b) {\r\n var a_l = a.length,\r\n b_l = b.length,\r\n l = a_l + b_l,\r\n r = createArray(l),\r\n base = BASE,\r\n product, carry, i, a_i, b_j;\r\n for (i = 0; i < a_l; ++i) {\r\n a_i = a[i];\r\n for (var j = 0; j < b_l; ++j) {\r\n b_j = b[j];\r\n product = a_i * b_j + r[i + j];\r\n carry = Math.floor(product / base);\r\n r[i + j] = product - carry * base;\r\n r[i + j + 1] += carry;\r\n }\r\n }\r\n trim(r);\r\n return r;\r\n }\r\n\r\n function multiplySmall(a, b) { // assumes a is array, b is number with |b| < BASE\r\n var l = a.length,\r\n r = new Array(l),\r\n base = BASE,\r\n carry = 0,\r\n product, i;\r\n for (i = 0; i < l; i++) {\r\n product = a[i] * b + carry;\r\n carry = Math.floor(product / base);\r\n r[i] = product - carry * base;\r\n }\r\n while (carry > 0) {\r\n r[i++] = carry % base;\r\n carry = Math.floor(carry / base);\r\n }\r\n return r;\r\n }\r\n\r\n function shiftLeft(x, n) {\r\n var r = [];\r\n while (n-- > 0) r.push(0);\r\n return r.concat(x);\r\n }\r\n\r\n function multiplyKaratsuba(x, y) {\r\n var n = Math.max(x.length, y.length);\r\n\r\n if (n <= 30) return multiplyLong(x, y);\r\n n = Math.ceil(n / 2);\r\n\r\n var b = x.slice(n),\r\n a = x.slice(0, n),\r\n d = y.slice(n),\r\n c = y.slice(0, n);\r\n\r\n var ac = multiplyKaratsuba(a, c),\r\n bd = multiplyKaratsuba(b, d),\r\n abcd = multiplyKaratsuba(addAny(a, b), addAny(c, d));\r\n\r\n var product = addAny(addAny(ac, shiftLeft(subtract(subtract(abcd, ac), bd), n)), shiftLeft(bd, 2 * n));\r\n trim(product);\r\n return product;\r\n }\r\n\r\n // The following function is derived from a surface fit of a graph plotting the performance difference\r\n // between long multiplication and karatsuba multiplication versus the lengths of the two arrays.\r\n function useKaratsuba(l1, l2) {\r\n return -0.012 * l1 - 0.012 * l2 + 0.000015 * l1 * l2 > 0;\r\n }\r\n\r\n BigInteger.prototype.multiply = function (v) {\r\n var n = parseValue(v),\r\n a = this.value, b = n.value,\r\n sign = this.sign !== n.sign,\r\n abs;\r\n if (n.isSmall) {\r\n if (b === 0) return Integer[0];\r\n if (b === 1) return this;\r\n if (b === -1) return this.negate();\r\n abs = Math.abs(b);\r\n if (abs < BASE) {\r\n return new BigInteger(multiplySmall(a, abs), sign);\r\n }\r\n b = smallToArray(abs);\r\n }\r\n if (useKaratsuba(a.length, b.length)) // Karatsuba is only faster for certain array sizes\r\n return new BigInteger(multiplyKaratsuba(a, b), sign);\r\n return new BigInteger(multiplyLong(a, b), sign);\r\n };\r\n\r\n BigInteger.prototype.times = BigInteger.prototype.multiply;\r\n\r\n function multiplySmallAndArray(a, b, sign) { // a >= 0\r\n if (a < BASE) {\r\n return new BigInteger(multiplySmall(b, a), sign);\r\n }\r\n return new BigInteger(multiplyLong(b, smallToArray(a)), sign);\r\n }\r\n SmallInteger.prototype._multiplyBySmall = function (a) {\r\n if (isPrecise(a.value * this.value)) {\r\n return new SmallInteger(a.value * this.value);\r\n }\r\n return multiplySmallAndArray(Math.abs(a.value), smallToArray(Math.abs(this.value)), this.sign !== a.sign);\r\n };\r\n BigInteger.prototype._multiplyBySmall = function (a) {\r\n if (a.value === 0) return Integer[0];\r\n if (a.value === 1) return this;\r\n if (a.value === -1) return this.negate();\r\n return multiplySmallAndArray(Math.abs(a.value), this.value, this.sign !== a.sign);\r\n };\r\n SmallInteger.prototype.multiply = function (v) {\r\n return parseValue(v)._multiplyBySmall(this);\r\n };\r\n SmallInteger.prototype.times = SmallInteger.prototype.multiply;\r\n\r\n NativeBigInt.prototype.multiply = function (v) {\r\n return new NativeBigInt(this.value * parseValue(v).value);\r\n }\r\n NativeBigInt.prototype.times = NativeBigInt.prototype.multiply;\r\n\r\n function square(a) {\r\n //console.assert(2 * BASE * BASE < MAX_INT);\r\n var l = a.length,\r\n r = createArray(l + l),\r\n base = BASE,\r\n product, carry, i, a_i, a_j;\r\n for (i = 0; i < l; i++) {\r\n a_i = a[i];\r\n carry = 0 - a_i * a_i;\r\n for (var j = i; j < l; j++) {\r\n a_j = a[j];\r\n product = 2 * (a_i * a_j) + r[i + j] + carry;\r\n carry = Math.floor(product / base);\r\n r[i + j] = product - carry * base;\r\n }\r\n r[i + l] = carry;\r\n }\r\n trim(r);\r\n return r;\r\n }\r\n\r\n BigInteger.prototype.square = function () {\r\n return new BigInteger(square(this.value), false);\r\n };\r\n\r\n SmallInteger.prototype.square = function () {\r\n var value = this.value * this.value;\r\n if (isPrecise(value)) return new SmallInteger(value);\r\n return new BigInteger(square(smallToArray(Math.abs(this.value))), false);\r\n };\r\n\r\n NativeBigInt.prototype.square = function (v) {\r\n return new NativeBigInt(this.value * this.value);\r\n }\r\n\r\n function divMod1(a, b) { // Left over from previous version. Performs faster than divMod2 on smaller input sizes.\r\n var a_l = a.length,\r\n b_l = b.length,\r\n base = BASE,\r\n result = createArray(b.length),\r\n divisorMostSignificantDigit = b[b_l - 1],\r\n // normalization\r\n lambda = Math.ceil(base / (2 * divisorMostSignificantDigit)),\r\n remainder = multiplySmall(a, lambda),\r\n divisor = multiplySmall(b, lambda),\r\n quotientDigit, shift, carry, borrow, i, l, q;\r\n if (remainder.length <= a_l) remainder.push(0);\r\n divisor.push(0);\r\n divisorMostSignificantDigit = divisor[b_l - 1];\r\n for (shift = a_l - b_l; shift >= 0; shift--) {\r\n quotientDigit = base - 1;\r\n if (remainder[shift + b_l] !== divisorMostSignificantDigit) {\r\n quotientDigit = Math.floor((remainder[shift + b_l] * base + remainder[shift + b_l - 1]) / divisorMostSignificantDigit);\r\n }\r\n // quotientDigit <= base - 1\r\n carry = 0;\r\n borrow = 0;\r\n l = divisor.length;\r\n for (i = 0; i < l; i++) {\r\n carry += quotientDigit * divisor[i];\r\n q = Math.floor(carry / base);\r\n borrow += remainder[shift + i] - (carry - q * base);\r\n carry = q;\r\n if (borrow < 0) {\r\n remainder[shift + i] = borrow + base;\r\n borrow = -1;\r\n } else {\r\n remainder[shift + i] = borrow;\r\n borrow = 0;\r\n }\r\n }\r\n while (borrow !== 0) {\r\n quotientDigit -= 1;\r\n carry = 0;\r\n for (i = 0; i < l; i++) {\r\n carry += remainder[shift + i] - base + divisor[i];\r\n if (carry < 0) {\r\n remainder[shift + i] = carry + base;\r\n carry = 0;\r\n } else {\r\n remainder[shift + i] = carry;\r\n carry = 1;\r\n }\r\n }\r\n borrow += carry;\r\n }\r\n result[shift] = quotientDigit;\r\n }\r\n // denormalization\r\n remainder = divModSmall(remainder, lambda)[0];\r\n return [arrayToSmall(result), arrayToSmall(remainder)];\r\n }\r\n\r\n function divMod2(a, b) { // Implementation idea shamelessly stolen from Silent Matt's library http://silentmatt.com/biginteger/\r\n // Performs faster than divMod1 on larger input sizes.\r\n var a_l = a.length,\r\n b_l = b.length,\r\n result = [],\r\n part = [],\r\n base = BASE,\r\n guess, xlen, highx, highy, check;\r\n while (a_l) {\r\n part.unshift(a[--a_l]);\r\n trim(part);\r\n if (compareAbs(part, b) < 0) {\r\n result.push(0);\r\n continue;\r\n }\r\n xlen = part.length;\r\n highx = part[xlen - 1] * base + part[xlen - 2];\r\n highy = b[b_l - 1] * base + b[b_l - 2];\r\n if (xlen > b_l) {\r\n highx = (highx + 1) * base;\r\n }\r\n guess = Math.ceil(highx / highy);\r\n do {\r\n check = multiplySmall(b, guess);\r\n if (compareAbs(check, part) <= 0) break;\r\n guess--;\r\n } while (guess);\r\n result.push(guess);\r\n part = subtract(part, check);\r\n }\r\n result.reverse();\r\n return [arrayToSmall(result), arrayToSmall(part)];\r\n }\r\n\r\n function divModSmall(value, lambda) {\r\n var length = value.length,\r\n quotient = createArray(length),\r\n base = BASE,\r\n i, q, remainder, divisor;\r\n remainder = 0;\r\n for (i = length - 1; i >= 0; --i) {\r\n divisor = remainder * base + value[i];\r\n q = truncate(divisor / lambda);\r\n remainder = divisor - q * lambda;\r\n quotient[i] = q | 0;\r\n }\r\n return [quotient, remainder | 0];\r\n }\r\n\r\n function divModAny(self, v) {\r\n var value, n = parseValue(v);\r\n if (supportsNativeBigInt) {\r\n return [new NativeBigInt(self.value / n.value), new NativeBigInt(self.value % n.value)];\r\n }\r\n var a = self.value, b = n.value;\r\n var quotient;\r\n if (b === 0) throw new Error(\"Cannot divide by zero\");\r\n if (self.isSmall) {\r\n if (n.isSmall) {\r\n return [new SmallInteger(truncate(a / b)), new SmallInteger(a % b)];\r\n }\r\n return [Integer[0], self];\r\n }\r\n if (n.isSmall) {\r\n if (b === 1) return [self, Integer[0]];\r\n if (b == -1) return [self.negate(), Integer[0]];\r\n var abs = Math.abs(b);\r\n if (abs < BASE) {\r\n value = divModSmall(a, abs);\r\n quotient = arrayToSmall(value[0]);\r\n var remainder = value[1];\r\n if (self.sign) remainder = -remainder;\r\n if (typeof quotient === \"number\") {\r\n if (self.sign !== n.sign) quotient = -quotient;\r\n return [new SmallInteger(quotient), new SmallInteger(remainder)];\r\n }\r\n return [new BigInteger(quotient, self.sign !== n.sign), new SmallInteger(remainder)];\r\n }\r\n b = smallToArray(abs);\r\n }\r\n var comparison = compareAbs(a, b);\r\n if (comparison === -1) return [Integer[0], self];\r\n if (comparison === 0) return [Integer[self.sign === n.sign ? 1 : -1], Integer[0]];\r\n\r\n // divMod1 is faster on smaller input sizes\r\n if (a.length + b.length <= 200)\r\n value = divMod1(a, b);\r\n else value = divMod2(a, b);\r\n\r\n quotient = value[0];\r\n var qSign = self.sign !== n.sign,\r\n mod = value[1],\r\n mSign = self.sign;\r\n if (typeof quotient === \"number\") {\r\n if (qSign) quotient = -quotient;\r\n quotient = new SmallInteger(quotient);\r\n } else quotient = new BigInteger(quotient, qSign);\r\n if (typeof mod === \"number\") {\r\n if (mSign) mod = -mod;\r\n mod = new SmallInteger(mod);\r\n } else mod = new BigInteger(mod, mSign);\r\n return [quotient, mod];\r\n }\r\n\r\n BigInteger.prototype.divmod = function (v) {\r\n var result = divModAny(this, v);\r\n return {\r\n quotient: result[0],\r\n remainder: result[1]\r\n };\r\n };\r\n NativeBigInt.prototype.divmod = SmallInteger.prototype.divmod = BigInteger.prototype.divmod;\r\n\r\n\r\n BigInteger.prototype.divide = function (v) {\r\n return divModAny(this, v)[0];\r\n };\r\n NativeBigInt.prototype.over = NativeBigInt.prototype.divide = function (v) {\r\n return new NativeBigInt(this.value / parseValue(v).value);\r\n };\r\n SmallInteger.prototype.over = SmallInteger.prototype.divide = BigInteger.prototype.over = BigInteger.prototype.divide;\r\n\r\n BigInteger.prototype.mod = function (v) {\r\n return divModAny(this, v)[1];\r\n };\r\n NativeBigInt.prototype.mod = NativeBigInt.prototype.remainder = function (v) {\r\n return new NativeBigInt(this.value % parseValue(v).value);\r\n };\r\n SmallInteger.prototype.remainder = SmallInteger.prototype.mod = BigInteger.prototype.remainder = BigInteger.prototype.mod;\r\n\r\n BigInteger.prototype.pow = function (v) {\r\n var n = parseValue(v),\r\n a = this.value,\r\n b = n.value,\r\n value, x, y;\r\n if (b === 0) return Integer[1];\r\n if (a === 0) return Integer[0];\r\n if (a === 1) return Integer[1];\r\n if (a === -1) return n.isEven() ? Integer[1] : Integer[-1];\r\n if (n.sign) {\r\n return Integer[0];\r\n }\r\n if (!n.isSmall) throw new Error(\"The exponent \" + n.toString() + \" is too large.\");\r\n if (this.isSmall) {\r\n if (isPrecise(value = Math.pow(a, b)))\r\n return new SmallInteger(truncate(value));\r\n }\r\n x = this;\r\n y = Integer[1];\r\n while (true) {\r\n if (b & 1 === 1) {\r\n y = y.times(x);\r\n --b;\r\n }\r\n if (b === 0) break;\r\n b /= 2;\r\n x = x.square();\r\n }\r\n return y;\r\n };\r\n SmallInteger.prototype.pow = BigInteger.prototype.pow;\r\n\r\n NativeBigInt.prototype.pow = function (v) {\r\n var n = parseValue(v);\r\n var a = this.value, b = n.value;\r\n var _0 = BigInt(0), _1 = BigInt(1), _2 = BigInt(2);\r\n if (b === _0) return Integer[1];\r\n if (a === _0) return Integer[0];\r\n if (a === _1) return Integer[1];\r\n if (a === BigInt(-1)) return n.isEven() ? Integer[1] : Integer[-1];\r\n if (n.isNegative()) return new NativeBigInt(_0);\r\n var x = this;\r\n var y = Integer[1];\r\n while (true) {\r\n if ((b & _1) === _1) {\r\n y = y.times(x);\r\n --b;\r\n }\r\n if (b === _0) break;\r\n b /= _2;\r\n x = x.square();\r\n }\r\n return y;\r\n }\r\n\r\n BigInteger.prototype.modPow = function (exp, mod) {\r\n exp = parseValue(exp);\r\n mod = parseValue(mod);\r\n if (mod.isZero()) throw new Error(\"Cannot take modPow with modulus 0\");\r\n var r = Integer[1],\r\n base = this.mod(mod);\r\n if (exp.isNegative()) {\r\n exp = exp.multiply(Integer[-1]);\r\n base = base.modInv(mod);\r\n }\r\n while (exp.isPositive()) {\r\n if (base.isZero()) return Integer[0];\r\n if (exp.isOdd()) r = r.multiply(base).mod(mod);\r\n exp = exp.divide(2);\r\n base = base.square().mod(mod);\r\n }\r\n return r;\r\n };\r\n NativeBigInt.prototype.modPow = SmallInteger.prototype.modPow = BigInteger.prototype.modPow;\r\n\r\n function compareAbs(a, b) {\r\n if (a.length !== b.length) {\r\n return a.length > b.length ? 1 : -1;\r\n }\r\n for (var i = a.length - 1; i >= 0; i--) {\r\n if (a[i] !== b[i]) return a[i] > b[i] ? 1 : -1;\r\n }\r\n return 0;\r\n }\r\n\r\n BigInteger.prototype.compareAbs = function (v) {\r\n var n = parseValue(v),\r\n a = this.value,\r\n b = n.value;\r\n if (n.isSmall) return 1;\r\n return compareAbs(a, b);\r\n };\r\n SmallInteger.prototype.compareAbs = function (v) {\r\n var n = parseValue(v),\r\n a = Math.abs(this.value),\r\n b = n.value;\r\n if (n.isSmall) {\r\n b = Math.abs(b);\r\n return a === b ? 0 : a > b ? 1 : -1;\r\n }\r\n return -1;\r\n };\r\n NativeBigInt.prototype.compareAbs = function (v) {\r\n var a = this.value;\r\n var b = parseValue(v).value;\r\n a = a >= 0 ? a : -a;\r\n b = b >= 0 ? b : -b;\r\n return a === b ? 0 : a > b ? 1 : -1;\r\n }\r\n\r\n BigInteger.prototype.compare = function (v) {\r\n // See discussion about comparison with Infinity:\r\n // https://github.com/peterolson/BigInteger.js/issues/61\r\n if (v === Infinity) {\r\n return -1;\r\n }\r\n if (v === -Infinity) {\r\n return 1;\r\n }\r\n\r\n var n = parseValue(v),\r\n a = this.value,\r\n b = n.value;\r\n if (this.sign !== n.sign) {\r\n return n.sign ? 1 : -1;\r\n }\r\n if (n.isSmall) {\r\n return this.sign ? -1 : 1;\r\n }\r\n return compareAbs(a, b) * (this.sign ? -1 : 1);\r\n };\r\n BigInteger.prototype.compareTo = BigInteger.prototype.compare;\r\n\r\n SmallInteger.prototype.compare = function (v) {\r\n if (v === Infinity) {\r\n return -1;\r\n }\r\n if (v === -Infinity) {\r\n return 1;\r\n }\r\n\r\n var n = parseValue(v),\r\n a = this.value,\r\n b = n.value;\r\n if (n.isSmall) {\r\n return a == b ? 0 : a > b ? 1 : -1;\r\n }\r\n if (a < 0 !== n.sign) {\r\n return a < 0 ? -1 : 1;\r\n }\r\n return a < 0 ? 1 : -1;\r\n };\r\n SmallInteger.prototype.compareTo = SmallInteger.prototype.compare;\r\n\r\n NativeBigInt.prototype.compare = function (v) {\r\n if (v === Infinity) {\r\n return -1;\r\n }\r\n if (v === -Infinity) {\r\n return 1;\r\n }\r\n var a = this.value;\r\n var b = parseValue(v).value;\r\n return a === b ? 0 : a > b ? 1 : -1;\r\n }\r\n NativeBigInt.prototype.compareTo = NativeBigInt.prototype.compare;\r\n\r\n BigInteger.prototype.equals = function (v) {\r\n return this.compare(v) === 0;\r\n };\r\n NativeBigInt.prototype.eq = NativeBigInt.prototype.equals = SmallInteger.prototype.eq = SmallInteger.prototype.equals = BigInteger.prototype.eq = BigInteger.prototype.equals;\r\n\r\n BigInteger.prototype.notEquals = function (v) {\r\n return this.compare(v) !== 0;\r\n };\r\n NativeBigInt.prototype.neq = NativeBigInt.prototype.notEquals = SmallInteger.prototype.neq = SmallInteger.prototype.notEquals = BigInteger.prototype.neq = BigInteger.prototype.notEquals;\r\n\r\n BigInteger.prototype.greater = function (v) {\r\n return this.compare(v) > 0;\r\n };\r\n NativeBigInt.prototype.gt = NativeBigInt.prototype.greater = SmallInteger.prototype.gt = SmallInteger.prototype.greater = BigInteger.prototype.gt = BigInteger.prototype.greater;\r\n\r\n BigInteger.prototype.lesser = function (v) {\r\n return this.compare(v) < 0;\r\n };\r\n NativeBigInt.prototype.lt = NativeBigInt.prototype.lesser = SmallInteger.prototype.lt = SmallInteger.prototype.lesser = BigInteger.prototype.lt = BigInteger.prototype.lesser;\r\n\r\n BigInteger.prototype.greaterOrEquals = function (v) {\r\n return this.compare(v) >= 0;\r\n };\r\n NativeBigInt.prototype.geq = NativeBigInt.prototype.greaterOrEquals = SmallInteger.prototype.geq = SmallInteger.prototype.greaterOrEquals = BigInteger.prototype.geq = BigInteger.prototype.greaterOrEquals;\r\n\r\n BigInteger.prototype.lesserOrEquals = function (v) {\r\n return this.compare(v) <= 0;\r\n };\r\n NativeBigInt.prototype.leq = NativeBigInt.prototype.lesserOrEquals = SmallInteger.prototype.leq = SmallInteger.prototype.lesserOrEquals = BigInteger.prototype.leq = BigInteger.prototype.lesserOrEquals;\r\n\r\n BigInteger.prototype.isEven = function () {\r\n return (this.value[0] & 1) === 0;\r\n };\r\n SmallInteger.prototype.isEven = function () {\r\n return (this.value & 1) === 0;\r\n };\r\n NativeBigInt.prototype.isEven = function () {\r\n return (this.value & BigInt(1)) === BigInt(0);\r\n }\r\n\r\n BigInteger.prototype.isOdd = function () {\r\n return (this.value[0] & 1) === 1;\r\n };\r\n SmallInteger.prototype.isOdd = function () {\r\n return (this.value & 1) === 1;\r\n };\r\n NativeBigInt.prototype.isOdd = function () {\r\n return (this.value & BigInt(1)) === BigInt(1);\r\n }\r\n\r\n BigInteger.prototype.isPositive = function () {\r\n return !this.sign;\r\n };\r\n SmallInteger.prototype.isPositive = function () {\r\n return this.value > 0;\r\n };\r\n NativeBigInt.prototype.isPositive = SmallInteger.prototype.isPositive;\r\n\r\n BigInteger.prototype.isNegative = function () {\r\n return this.sign;\r\n };\r\n SmallInteger.prototype.isNegative = function () {\r\n return this.value < 0;\r\n };\r\n NativeBigInt.prototype.isNegative = SmallInteger.prototype.isNegative;\r\n\r\n BigInteger.prototype.isUnit = function () {\r\n return false;\r\n };\r\n SmallInteger.prototype.isUnit = function () {\r\n return Math.abs(this.value) === 1;\r\n };\r\n NativeBigInt.prototype.isUnit = function () {\r\n return this.abs().value === BigInt(1);\r\n }\r\n\r\n BigInteger.prototype.isZero = function () {\r\n return false;\r\n };\r\n SmallInteger.prototype.isZero = function () {\r\n return this.value === 0;\r\n };\r\n NativeBigInt.prototype.isZero = function () {\r\n return this.value === BigInt(0);\r\n }\r\n\r\n BigInteger.prototype.isDivisibleBy = function (v) {\r\n var n = parseValue(v);\r\n if (n.isZero()) return false;\r\n if (n.isUnit()) return true;\r\n if (n.compareAbs(2) === 0) return this.isEven();\r\n return this.mod(n).isZero();\r\n };\r\n NativeBigInt.prototype.isDivisibleBy = SmallInteger.prototype.isDivisibleBy = BigInteger.prototype.isDivisibleBy;\r\n\r\n function isBasicPrime(v) {\r\n var n = v.abs();\r\n if (n.isUnit()) return false;\r\n if (n.equals(2) || n.equals(3) || n.equals(5)) return true;\r\n if (n.isEven() || n.isDivisibleBy(3) || n.isDivisibleBy(5)) return false;\r\n if (n.lesser(49)) return true;\r\n // we don't know if it's prime: let the other functions figure it out\r\n }\r\n\r\n function millerRabinTest(n, a) {\r\n var nPrev = n.prev(),\r\n b = nPrev,\r\n r = 0,\r\n d, t, i, x;\r\n while (b.isEven()) b = b.divide(2), r++;\r\n next: for (i = 0; i < a.length; i++) {\r\n if (n.lesser(a[i])) continue;\r\n x = bigInt(a[i]).modPow(b, n);\r\n if (x.isUnit() || x.equals(nPrev)) continue;\r\n for (d = r - 1; d != 0; d--) {\r\n x = x.square().mod(n);\r\n if (x.isUnit()) return false;\r\n if (x.equals(nPrev)) continue next;\r\n }\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n // Set \"strict\" to true to force GRH-supported lower bound of 2*log(N)^2\r\n BigInteger.prototype.isPrime = function (strict) {\r\n var isPrime = isBasicPrime(this);\r\n if (isPrime !== undefined) return isPrime;\r\n var n = this.abs();\r\n var bits = n.bitLength();\r\n if (bits <= 64)\r\n return millerRabinTest(n, [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37]);\r\n var logN = Math.log(2) * bits.toJSNumber();\r\n var t = Math.ceil((strict === true) ? (2 * Math.pow(logN, 2)) : logN);\r\n for (var a = [], i = 0; i < t; i++) {\r\n a.push(bigInt(i + 2));\r\n }\r\n return millerRabinTest(n, a);\r\n };\r\n NativeBigInt.prototype.isPrime = SmallInteger.prototype.isPrime = BigInteger.prototype.isPrime;\r\n\r\n BigInteger.prototype.isProbablePrime = function (iterations, rng) {\r\n var isPrime = isBasicPrime(this);\r\n if (isPrime !== undefined) return isPrime;\r\n var n = this.abs();\r\n var t = iterations === undefined ? 5 : iterations;\r\n for (var a = [], i = 0; i < t; i++) {\r\n a.push(bigInt.randBetween(2, n.minus(2), rng));\r\n }\r\n return millerRabinTest(n, a);\r\n };\r\n NativeBigInt.prototype.isProbablePrime = SmallInteger.prototype.isProbablePrime = BigInteger.prototype.isProbablePrime;\r\n\r\n BigInteger.prototype.modInv = function (n) {\r\n var t = bigInt.zero, newT = bigInt.one, r = parseValue(n), newR = this.abs(), q, lastT, lastR;\r\n while (!newR.isZero()) {\r\n q = r.divide(newR);\r\n lastT = t;\r\n lastR = r;\r\n t = newT;\r\n r = newR;\r\n newT = lastT.subtract(q.multiply(newT));\r\n newR = lastR.subtract(q.multiply(newR));\r\n }\r\n if (!r.isUnit()) throw new Error(this.toString() + \" and \" + n.toString() + \" are not co-prime\");\r\n if (t.compare(0) === -1) {\r\n t = t.add(n);\r\n }\r\n if (this.isNegative()) {\r\n return t.negate();\r\n }\r\n return t;\r\n };\r\n\r\n NativeBigInt.prototype.modInv = SmallInteger.prototype.modInv = BigInteger.prototype.modInv;\r\n\r\n BigInteger.prototype.next = function () {\r\n var value = this.value;\r\n if (this.sign) {\r\n return subtractSmall(value, 1, this.sign);\r\n }\r\n return new BigInteger(addSmall(value, 1), this.sign);\r\n };\r\n SmallInteger.prototype.next = function () {\r\n var value = this.value;\r\n if (value + 1 < MAX_INT) return new SmallInteger(value + 1);\r\n return new BigInteger(MAX_INT_ARR, false);\r\n };\r\n NativeBigInt.prototype.next = function () {\r\n return new NativeBigInt(this.value + BigInt(1));\r\n }\r\n\r\n BigInteger.prototype.prev = function () {\r\n var value = this.value;\r\n if (this.sign) {\r\n return new BigInteger(addSmall(value, 1), true);\r\n }\r\n return subtractSmall(value, 1, this.sign);\r\n };\r\n SmallInteger.prototype.prev = function () {\r\n var value = this.value;\r\n if (value - 1 > -MAX_INT) return new SmallInteger(value - 1);\r\n return new BigInteger(MAX_INT_ARR, true);\r\n };\r\n NativeBigInt.prototype.prev = function () {\r\n return new NativeBigInt(this.value - BigInt(1));\r\n }\r\n\r\n var powersOfTwo = [1];\r\n while (2 * powersOfTwo[powersOfTwo.length - 1] <= BASE) powersOfTwo.push(2 * powersOfTwo[powersOfTwo.length - 1]);\r\n var powers2Length = powersOfTwo.length, highestPower2 = powersOfTwo[powers2Length - 1];\r\n\r\n function shift_isSmall(n) {\r\n return Math.abs(n) <= BASE;\r\n }\r\n\r\n BigInteger.prototype.shiftLeft = function (v) {\r\n var n = parseValue(v).toJSNumber();\r\n if (!shift_isSmall(n)) {\r\n throw new Error(String(n) + \" is too large for shifting.\");\r\n }\r\n if (n < 0) return this.shiftRight(-n);\r\n var result = this;\r\n if (result.isZero()) return result;\r\n while (n >= powers2Length) {\r\n result = result.multiply(highestPower2);\r\n n -= powers2Length - 1;\r\n }\r\n return result.multiply(powersOfTwo[n]);\r\n };\r\n NativeBigInt.prototype.shiftLeft = SmallInteger.prototype.shiftLeft = BigInteger.prototype.shiftLeft;\r\n\r\n BigInteger.prototype.shiftRight = function (v) {\r\n var remQuo;\r\n var n = parseValue(v).toJSNumber();\r\n if (!shift_isSmall(n)) {\r\n throw new Error(String(n) + \" is too large for shifting.\");\r\n }\r\n if (n < 0) return this.shiftLeft(-n);\r\n var result = this;\r\n while (n >= powers2Length) {\r\n if (result.isZero() || (result.isNegative() && result.isUnit())) return result;\r\n remQuo = divModAny(result, highestPower2);\r\n result = remQuo[1].isNegative() ? remQuo[0].prev() : remQuo[0];\r\n n -= powers2Length - 1;\r\n }\r\n remQuo = divModAny(result, powersOfTwo[n]);\r\n return remQuo[1].isNegative() ? remQuo[0].prev() : remQuo[0];\r\n };\r\n NativeBigInt.prototype.shiftRight = SmallInteger.prototype.shiftRight = BigInteger.prototype.shiftRight;\r\n\r\n function bitwise(x, y, fn) {\r\n y = parseValue(y);\r\n var xSign = x.isNegative(), ySign = y.isNegative();\r\n var xRem = xSign ? x.not() : x,\r\n yRem = ySign ? y.not() : y;\r\n var xDigit = 0, yDigit = 0;\r\n var xDivMod = null, yDivMod = null;\r\n var result = [];\r\n while (!xRem.isZero() || !yRem.isZero()) {\r\n xDivMod = divModAny(xRem, highestPower2);\r\n xDigit = xDivMod[1].toJSNumber();\r\n if (xSign) {\r\n xDigit = highestPower2 - 1 - xDigit; // two's complement for negative numbers\r\n }\r\n\r\n yDivMod = divModAny(yRem, highestPower2);\r\n yDigit = yDivMod[1].toJSNumber();\r\n if (ySign) {\r\n yDigit = highestPower2 - 1 - yDigit; // two's complement for negative numbers\r\n }\r\n\r\n xRem = xDivMod[0];\r\n yRem = yDivMod[0];\r\n result.push(fn(xDigit, yDigit));\r\n }\r\n var sum = fn(xSign ? 1 : 0, ySign ? 1 : 0) !== 0 ? bigInt(-1) : bigInt(0);\r\n for (var i = result.length - 1; i >= 0; i -= 1) {\r\n sum = sum.multiply(highestPower2).add(bigInt(result[i]));\r\n }\r\n return sum;\r\n }\r\n\r\n BigInteger.prototype.not = function () {\r\n return this.negate().prev();\r\n };\r\n NativeBigInt.prototype.not = SmallInteger.prototype.not = BigInteger.prototype.not;\r\n\r\n BigInteger.prototype.and = function (n) {\r\n return bitwise(this, n, function (a, b) { return a & b; });\r\n };\r\n NativeBigInt.prototype.and = SmallInteger.prototype.and = BigInteger.prototype.and;\r\n\r\n BigInteger.prototype.or = function (n) {\r\n return bitwise(this, n, function (a, b) { return a | b; });\r\n };\r\n NativeBigInt.prototype.or = SmallInteger.prototype.or = BigInteger.prototype.or;\r\n\r\n BigInteger.prototype.xor = function (n) {\r\n return bitwise(this, n, function (a, b) { return a ^ b; });\r\n };\r\n NativeBigInt.prototype.xor = SmallInteger.prototype.xor = BigInteger.prototype.xor;\r\n\r\n var LOBMASK_I = 1 << 30, LOBMASK_BI = (BASE & -BASE) * (BASE & -BASE) | LOBMASK_I;\r\n function roughLOB(n) { // get lowestOneBit (rough)\r\n // SmallInteger: return Min(lowestOneBit(n), 1 << 30)\r\n // BigInteger: return Min(lowestOneBit(n), 1 << 14) [BASE=1e7]\r\n var v = n.value,\r\n x = typeof v === \"number\" ? v | LOBMASK_I :\r\n typeof v === \"bigint\" ? v | BigInt(LOBMASK_I) :\r\n v[0] + v[1] * BASE | LOBMASK_BI;\r\n return x & -x;\r\n }\r\n\r\n function integerLogarithm(value, base) {\r\n if (base.compareTo(value) <= 0) {\r\n var tmp = integerLogarithm(value, base.square(base));\r\n var p = tmp.p;\r\n var e = tmp.e;\r\n var t = p.multiply(base);\r\n return t.compareTo(value) <= 0 ? { p: t, e: e * 2 + 1 } : { p: p, e: e * 2 };\r\n }\r\n return { p: bigInt(1), e: 0 };\r\n }\r\n\r\n BigInteger.prototype.bitLength = function () {\r\n var n = this;\r\n if (n.compareTo(bigInt(0)) < 0) {\r\n n = n.negate().subtract(bigInt(1));\r\n }\r\n if (n.compareTo(bigInt(0)) === 0) {\r\n return bigInt(0);\r\n }\r\n return bigInt(integerLogarithm(n, bigInt(2)).e).add(bigInt(1));\r\n }\r\n NativeBigInt.prototype.bitLength = SmallInteger.prototype.bitLength = BigInteger.prototype.bitLength;\r\n\r\n function max(a, b) {\r\n a = parseValue(a);\r\n b = parseValue(b);\r\n return a.greater(b) ? a : b;\r\n }\r\n function min(a, b) {\r\n a = parseValue(a);\r\n b = parseValue(b);\r\n return a.lesser(b) ? a : b;\r\n }\r\n function gcd(a, b) {\r\n a = parseValue(a).abs();\r\n b = parseValue(b).abs();\r\n if (a.equals(b)) return a;\r\n if (a.isZero()) return b;\r\n if (b.isZero()) return a;\r\n var c = Integer[1], d, t;\r\n while (a.isEven() && b.isEven()) {\r\n d = min(roughLOB(a), roughLOB(b));\r\n a = a.divide(d);\r\n b = b.divide(d);\r\n c = c.multiply(d);\r\n }\r\n while (a.isEven()) {\r\n a = a.divide(roughLOB(a));\r\n }\r\n do {\r\n while (b.isEven()) {\r\n b = b.divide(roughLOB(b));\r\n }\r\n if (a.greater(b)) {\r\n t = b; b = a; a = t;\r\n }\r\n b = b.subtract(a);\r\n } while (!b.isZero());\r\n return c.isUnit() ? a : a.multiply(c);\r\n }\r\n function lcm(a, b) {\r\n a = parseValue(a).abs();\r\n b = parseValue(b).abs();\r\n return a.divide(gcd(a, b)).multiply(b);\r\n }\r\n function randBetween(a, b, rng) {\r\n a = parseValue(a);\r\n b = parseValue(b);\r\n var usedRNG = rng || Math.random;\r\n var low = min(a, b), high = max(a, b);\r\n var range = high.subtract(low).add(1);\r\n if (range.isSmall) return low.add(Math.floor(usedRNG() * range));\r\n var digits = toBase(range, BASE).value;\r\n var result = [], restricted = true;\r\n for (var i = 0; i < digits.length; i++) {\r\n var top = restricted ? digits[i] + (i + 1 < digits.length ? digits[i + 1] / BASE : 0) : BASE;\r\n var digit = truncate(usedRNG() * top);\r\n result.push(digit);\r\n if (digit < digits[i]) restricted = false;\r\n }\r\n return low.add(Integer.fromArray(result, BASE, false));\r\n }\r\n\r\n var parseBase = function (text, base, alphabet, caseSensitive) {\r\n alphabet = alphabet || DEFAULT_ALPHABET;\r\n text = String(text);\r\n if (!caseSensitive) {\r\n text = text.toLowerCase();\r\n alphabet = alphabet.toLowerCase();\r\n }\r\n var length = text.length;\r\n var i;\r\n var absBase = Math.abs(base);\r\n var alphabetValues = {};\r\n for (i = 0; i < alphabet.length; i++) {\r\n alphabetValues[alphabet[i]] = i;\r\n }\r\n for (i = 0; i < length; i++) {\r\n var c = text[i];\r\n if (c === \"-\") continue;\r\n if (c in alphabetValues) {\r\n if (alphabetValues[c] >= absBase) {\r\n if (c === \"1\" && absBase === 1) continue;\r\n throw new Error(c + \" is not a valid digit in base \" + base + \".\");\r\n }\r\n }\r\n }\r\n base = parseValue(base);\r\n var digits = [];\r\n var isNegative = text[0] === \"-\";\r\n for (i = isNegative ? 1 : 0; i < text.length; i++) {\r\n var c = text[i];\r\n if (c in alphabetValues) digits.push(parseValue(alphabetValues[c]));\r\n else if (c === \"<\") {\r\n var start = i;\r\n do { i++; } while (text[i] !== \">\" && i < text.length);\r\n digits.push(parseValue(text.slice(start + 1, i)));\r\n }\r\n else throw new Error(c + \" is not a valid character\");\r\n }\r\n return parseBaseFromArray(digits, base, isNegative);\r\n };\r\n\r\n function parseBaseFromArray(digits, base, isNegative) {\r\n var val = Integer[0], pow = Integer[1], i;\r\n for (i = digits.length - 1; i >= 0; i--) {\r\n val = val.add(digits[i].times(pow));\r\n pow = pow.times(base);\r\n }\r\n return isNegative ? val.negate() : val;\r\n }\r\n\r\n function stringify(digit, alphabet) {\r\n alphabet = alphabet || DEFAULT_ALPHABET;\r\n if (digit < alphabet.length) {\r\n return alphabet[digit];\r\n }\r\n return \"<\" + digit + \">\";\r\n }\r\n\r\n function toBase(n, base) {\r\n base = bigInt(base);\r\n if (base.isZero()) {\r\n if (n.isZero()) return { value: [0], isNegative: false };\r\n throw new Error(\"Cannot convert nonzero numbers to base 0.\");\r\n }\r\n if (base.equals(-1)) {\r\n if (n.isZero()) return { value: [0], isNegative: false };\r\n if (n.isNegative())\r\n return {\r\n value: [].concat.apply([], Array.apply(null, Array(-n.toJSNumber()))\r\n .map(Array.prototype.valueOf, [1, 0])\r\n ),\r\n isNegative: false\r\n };\r\n\r\n var arr = Array.apply(null, Array(n.toJSNumber() - 1))\r\n .map(Array.prototype.valueOf, [0, 1]);\r\n arr.unshift([1]);\r\n return {\r\n value: [].concat.apply([], arr),\r\n isNegative: false\r\n };\r\n }\r\n\r\n var neg = false;\r\n if (n.isNegative() && base.isPositive()) {\r\n neg = true;\r\n n = n.abs();\r\n }\r\n if (base.isUnit()) {\r\n if (n.isZero()) return { value: [0], isNegative: false };\r\n\r\n return {\r\n value: Array.apply(null, Array(n.toJSNumber()))\r\n .map(Number.prototype.valueOf, 1),\r\n isNegative: neg\r\n };\r\n }\r\n var out = [];\r\n var left = n, divmod;\r\n while (left.isNegative() || left.compareAbs(base) >= 0) {\r\n divmod = left.divmod(base);\r\n left = divmod.quotient;\r\n var digit = divmod.remainder;\r\n if (digit.isNegative()) {\r\n digit = base.minus(digit).abs();\r\n left = left.next();\r\n }\r\n out.push(digit.toJSNumber());\r\n }\r\n out.push(left.toJSNumber());\r\n return { value: out.reverse(), isNegative: neg };\r\n }\r\n\r\n function toBaseString(n, base, alphabet) {\r\n var arr = toBase(n, base);\r\n return (arr.isNegative ? \"-\" : \"\") + arr.value.map(function (x) {\r\n return stringify(x, alphabet);\r\n }).join('');\r\n }\r\n\r\n BigInteger.prototype.toArray = function (radix) {\r\n return toBase(this, radix);\r\n };\r\n\r\n SmallInteger.prototype.toArray = function (radix) {\r\n return toBase(this, radix);\r\n };\r\n\r\n NativeBigInt.prototype.toArray = function (radix) {\r\n return toBase(this, radix);\r\n };\r\n\r\n BigInteger.prototype.toString = function (radix, alphabet) {\r\n if (radix === undefined) radix = 10;\r\n if (radix !== 10) return toBaseString(this, radix, alphabet);\r\n var v = this.value, l = v.length, str = String(v[--l]), zeros = \"0000000\", digit;\r\n while (--l >= 0) {\r\n digit = String(v[l]);\r\n str += zeros.slice(digit.length) + digit;\r\n }\r\n var sign = this.sign ? \"-\" : \"\";\r\n return sign + str;\r\n };\r\n\r\n SmallInteger.prototype.toString = function (radix, alphabet) {\r\n if (radix === undefined) radix = 10;\r\n if (radix != 10) return toBaseString(this, radix, alphabet);\r\n return String(this.value);\r\n };\r\n\r\n NativeBigInt.prototype.toString = SmallInteger.prototype.toString;\r\n\r\n NativeBigInt.prototype.toJSON = BigInteger.prototype.toJSON = SmallInteger.prototype.toJSON = function () { return this.toString(); }\r\n\r\n BigInteger.prototype.valueOf = function () {\r\n return parseInt(this.toString(), 10);\r\n };\r\n BigInteger.prototype.toJSNumber = BigInteger.prototype.valueOf;\r\n\r\n SmallInteger.prototype.valueOf = function () {\r\n return this.value;\r\n };\r\n SmallInteger.prototype.toJSNumber = SmallInteger.prototype.valueOf;\r\n NativeBigInt.prototype.valueOf = NativeBigInt.prototype.toJSNumber = function () {\r\n return parseInt(this.toString(), 10);\r\n }\r\n\r\n function parseStringValue(v) {\r\n if (isPrecise(+v)) {\r\n var x = +v;\r\n if (x === truncate(x))\r\n return supportsNativeBigInt ? new NativeBigInt(BigInt(x)) : new SmallInteger(x);\r\n throw new Error(\"Invalid integer: \" + v);\r\n }\r\n var sign = v[0] === \"-\";\r\n if (sign) v = v.slice(1);\r\n var split = v.split(/e/i);\r\n if (split.length > 2) throw new Error(\"Invalid integer: \" + split.join(\"e\"));\r\n if (split.length === 2) {\r\n var exp = split[1];\r\n if (exp[0] === \"+\") exp = exp.slice(1);\r\n exp = +exp;\r\n if (exp !== truncate(exp) || !isPrecise(exp)) throw new Error(\"Invalid integer: \" + exp + \" is not a valid exponent.\");\r\n var text = split[0];\r\n var decimalPlace = text.indexOf(\".\");\r\n if (decimalPlace >= 0) {\r\n exp -= text.length - decimalPlace - 1;\r\n text = text.slice(0, decimalPlace) + text.slice(decimalPlace + 1);\r\n }\r\n if (exp < 0) throw new Error(\"Cannot include negative exponent part for integers\");\r\n text += (new Array(exp + 1)).join(\"0\");\r\n v = text;\r\n }\r\n var isValid = /^([0-9][0-9]*)$/.test(v);\r\n if (!isValid) throw new Error(\"Invalid integer: \" + v);\r\n if (supportsNativeBigInt) {\r\n return new NativeBigInt(BigInt(sign ? \"-\" + v : v));\r\n }\r\n var r = [], max = v.length, l = LOG_BASE, min = max - l;\r\n while (max > 0) {\r\n r.push(+v.slice(min, max));\r\n min -= l;\r\n if (min < 0) min = 0;\r\n max -= l;\r\n }\r\n trim(r);\r\n return new BigInteger(r, sign);\r\n }\r\n\r\n function parseNumberValue(v) {\r\n if (supportsNativeBigInt) {\r\n return new NativeBigInt(BigInt(v));\r\n }\r\n if (isPrecise(v)) {\r\n if (v !== truncate(v)) throw new Error(v + \" is not an integer.\");\r\n return new SmallInteger(v);\r\n }\r\n return parseStringValue(v.toString());\r\n }\r\n\r\n function parseValue(v) {\r\n if (typeof v === \"number\") {\r\n return parseNumberValue(v);\r\n }\r\n if (typeof v === \"string\") {\r\n return parseStringValue(v);\r\n }\r\n if (typeof v === \"bigint\") {\r\n return new NativeBigInt(v);\r\n }\r\n return v;\r\n }\r\n // Pre-define numbers in range [-999,999]\r\n for (var i = 0; i < 1000; i++) {\r\n Integer[i] = parseValue(i);\r\n if (i > 0) Integer[-i] = parseValue(-i);\r\n }\r\n // Backwards compatibility\r\n Integer.one = Integer[1];\r\n Integer.zero = Integer[0];\r\n Integer.minusOne = Integer[-1];\r\n Integer.max = max;\r\n Integer.min = min;\r\n Integer.gcd = gcd;\r\n Integer.lcm = lcm;\r\n Integer.isInstance = function (x) { return x instanceof BigInteger || x instanceof SmallInteger || x instanceof NativeBigInt; };\r\n Integer.randBetween = randBetween;\r\n\r\n Integer.fromArray = function (digits, base, isNegative) {\r\n return parseBaseFromArray(digits.map(parseValue), parseValue(base || 10), isNegative);\r\n };\r\n\r\n return Integer;\r\n})();\r\n\r\n// Node.js check\r\nif (typeof module !== \"undefined\" && module.hasOwnProperty(\"exports\")) {\r\n module.exports = bigInt;\r\n}\r\n\r\n//amd check\r\nif (typeof define === \"function\" && define.amd) {\r\n define( function () {\r\n return bigInt;\r\n });\r\n}\r\n", "/**\n * @preserve jed.js https://github.com/SlexAxton/Jed\n */\n/*\n-----------\nA gettext compatible i18n library for modern JavaScript Applications\n\nby Alex Sexton - AlexSexton [at] gmail - @SlexAxton\n\nMIT License\n\nA jQuery Foundation project - requires CLA to contribute -\nhttps://contribute.jquery.org/CLA/\n\n\n\nJed offers the entire applicable GNU gettext spec'd set of\nfunctions, but also offers some nicer wrappers around them.\nThe api for gettext was written for a language with no function\noverloading, so Jed allows a little more of that.\n\nMany thanks to Joshua I. Miller - unrtst@cpan.org - who wrote\ngettext.js back in 2008. I was able to vet a lot of my ideas\nagainst his. I also made sure Jed passed against his tests\nin order to offer easy upgrades -- jsgettext.berlios.de\n*/\n(function (root, undef) {\n\n // Set up some underscore-style functions, if you already have\n // underscore, feel free to delete this section, and use it\n // directly, however, the amount of functions used doesn't\n // warrant having underscore as a full dependency.\n // Underscore 1.3.0 was used to port and is licensed\n // under the MIT License by Jeremy Ashkenas.\n var ArrayProto = Array.prototype,\n ObjProto = Object.prototype,\n slice = ArrayProto.slice,\n hasOwnProp = ObjProto.hasOwnProperty,\n nativeForEach = ArrayProto.forEach,\n breaker = {};\n\n // We're not using the OOP style _ so we don't need the\n // extra level of indirection. This still means that you\n // sub out for real `_` though.\n var _ = {\n forEach : function( obj, iterator, context ) {\n var i, l, key;\n if ( obj === null ) {\n return;\n }\n\n if ( nativeForEach && obj.forEach === nativeForEach ) {\n obj.forEach( iterator, context );\n }\n else if ( obj.length === +obj.length ) {\n for ( i = 0, l = obj.length; i < l; i++ ) {\n if ( i in obj && iterator.call( context, obj[i], i, obj ) === breaker ) {\n return;\n }\n }\n }\n else {\n for ( key in obj) {\n if ( hasOwnProp.call( obj, key ) ) {\n if ( iterator.call (context, obj[key], key, obj ) === breaker ) {\n return;\n }\n }\n }\n }\n },\n extend : function( obj ) {\n this.forEach( slice.call( arguments, 1 ), function ( source ) {\n for ( var prop in source ) {\n obj[prop] = source[prop];\n }\n });\n return obj;\n }\n };\n // END Miniature underscore impl\n\n // Jed is a constructor function\n var Jed = function ( options ) {\n // Some minimal defaults\n this.defaults = {\n \"locale_data\" : {\n \"messages\" : {\n \"\" : {\n \"domain\" : \"messages\",\n \"lang\" : \"en\",\n \"plural_forms\" : \"nplurals=2; plural=(n != 1);\"\n }\n // There are no default keys, though\n }\n },\n // The default domain if one is missing\n \"domain\" : \"messages\",\n // enable debug mode to log untranslated strings to the console\n \"debug\" : false\n };\n\n // Mix in the sent options with the default options\n this.options = _.extend( {}, this.defaults, options );\n this.textdomain( this.options.domain );\n\n if ( options.domain && ! this.options.locale_data[ this.options.domain ] ) {\n throw new Error('Text domain set to non-existent domain: `' + options.domain + '`');\n }\n };\n\n // The gettext spec sets this character as the default\n // delimiter for context lookups.\n // e.g.: context\\u0004key\n // If your translation company uses something different,\n // just change this at any time and it will use that instead.\n Jed.context_delimiter = String.fromCharCode( 4 );\n\n function getPluralFormFunc ( plural_form_string ) {\n return Jed.PF.compile( plural_form_string || \"nplurals=2; plural=(n != 1);\");\n }\n\n function Chain( key, i18n ){\n this._key = key;\n this._i18n = i18n;\n }\n\n // Create a chainable api for adding args prettily\n _.extend( Chain.prototype, {\n onDomain : function ( domain ) {\n this._domain = domain;\n return this;\n },\n withContext : function ( context ) {\n this._context = context;\n return this;\n },\n ifPlural : function ( num, pkey ) {\n this._val = num;\n this._pkey = pkey;\n return this;\n },\n fetch : function ( sArr ) {\n if ( {}.toString.call( sArr ) != '[object Array]' ) {\n sArr = [].slice.call(arguments, 0);\n }\n return ( sArr && sArr.length ? Jed.sprintf : function(x){ return x; } )(\n this._i18n.dcnpgettext(this._domain, this._context, this._key, this._pkey, this._val),\n sArr\n );\n }\n });\n\n // Add functions to the Jed prototype.\n // These will be the functions on the object that's returned\n // from creating a `new Jed()`\n // These seem redundant, but they gzip pretty well.\n _.extend( Jed.prototype, {\n // The sexier api start point\n translate : function ( key ) {\n return new Chain( key, this );\n },\n\n textdomain : function ( domain ) {\n if ( ! domain ) {\n return this._textdomain;\n }\n this._textdomain = domain;\n },\n\n gettext : function ( key ) {\n return this.dcnpgettext.call( this, undef, undef, key );\n },\n\n dgettext : function ( domain, key ) {\n return this.dcnpgettext.call( this, domain, undef, key );\n },\n\n dcgettext : function ( domain , key /*, category */ ) {\n // Ignores the category anyways\n return this.dcnpgettext.call( this, domain, undef, key );\n },\n\n ngettext : function ( skey, pkey, val ) {\n return this.dcnpgettext.call( this, undef, undef, skey, pkey, val );\n },\n\n dngettext : function ( domain, skey, pkey, val ) {\n return this.dcnpgettext.call( this, domain, undef, skey, pkey, val );\n },\n\n dcngettext : function ( domain, skey, pkey, val/*, category */) {\n return this.dcnpgettext.call( this, domain, undef, skey, pkey, val );\n },\n\n pgettext : function ( context, key ) {\n return this.dcnpgettext.call( this, undef, context, key );\n },\n\n dpgettext : function ( domain, context, key ) {\n return this.dcnpgettext.call( this, domain, context, key );\n },\n\n dcpgettext : function ( domain, context, key/*, category */) {\n return this.dcnpgettext.call( this, domain, context, key );\n },\n\n npgettext : function ( context, skey, pkey, val ) {\n return this.dcnpgettext.call( this, undef, context, skey, pkey, val );\n },\n\n dnpgettext : function ( domain, context, skey, pkey, val ) {\n return this.dcnpgettext.call( this, domain, context, skey, pkey, val );\n },\n\n // The most fully qualified gettext function. It has every option.\n // Since it has every option, we can use it from every other method.\n // This is the bread and butter.\n // Technically there should be one more argument in this function for 'Category',\n // but since we never use it, we might as well not waste the bytes to define it.\n dcnpgettext : function ( domain, context, singular_key, plural_key, val ) {\n // Set some defaults\n\n plural_key = plural_key || singular_key;\n\n // Use the global domain default if one\n // isn't explicitly passed in\n domain = domain || this._textdomain;\n\n var fallback;\n\n // Handle special cases\n\n // No options found\n if ( ! this.options ) {\n // There's likely something wrong, but we'll return the correct key for english\n // We do this by instantiating a brand new Jed instance with the default set\n // for everything that could be broken.\n fallback = new Jed();\n return fallback.dcnpgettext.call( fallback, undefined, undefined, singular_key, plural_key, val );\n }\n\n // No translation data provided\n if ( ! this.options.locale_data ) {\n throw new Error('No locale data provided.');\n }\n\n if ( ! this.options.locale_data[ domain ] ) {\n throw new Error('Domain `' + domain + '` was not found.');\n }\n\n if ( ! this.options.locale_data[ domain ][ \"\" ] ) {\n throw new Error('No locale meta information provided.');\n }\n\n // Make sure we have a truthy key. Otherwise we might start looking\n // into the empty string key, which is the options for the locale\n // data.\n if ( ! singular_key ) {\n throw new Error('No translation key found.');\n }\n\n var key = context ? context + Jed.context_delimiter + singular_key : singular_key,\n locale_data = this.options.locale_data,\n dict = locale_data[ domain ],\n defaultConf = (locale_data.messages || this.defaults.locale_data.messages)[\"\"],\n pluralForms = dict[\"\"].plural_forms || dict[\"\"][\"Plural-Forms\"] || dict[\"\"][\"plural-forms\"] || defaultConf.plural_forms || defaultConf[\"Plural-Forms\"] || defaultConf[\"plural-forms\"],\n val_list,\n res;\n\n var val_idx;\n if (val === undefined) {\n // No value passed in; assume singular key lookup.\n val_idx = 0;\n\n } else {\n // Value has been passed in; use plural-forms calculations.\n\n // Handle invalid numbers, but try casting strings for good measure\n if ( typeof val != 'number' ) {\n val = parseInt( val, 10 );\n\n if ( isNaN( val ) ) {\n throw new Error('The number that was passed in is not a number.');\n }\n }\n\n val_idx = getPluralFormFunc(pluralForms)(val);\n }\n\n // Throw an error if a domain isn't found\n if ( ! dict ) {\n throw new Error('No domain named `' + domain + '` could be found.');\n }\n\n val_list = dict[ key ];\n\n // If there is no match, then revert back to\n // english style singular/plural with the keys passed in.\n if ( ! val_list || val_idx > val_list.length ) {\n if (this.options.missing_key_callback) {\n this.options.missing_key_callback(key, domain);\n }\n res = [ singular_key, plural_key ];\n\n // collect untranslated strings\n if (this.options.debug===true) {\n console.log(res[ getPluralFormFunc(pluralForms)( val ) ]);\n }\n return res[ getPluralFormFunc()( val ) ];\n }\n\n res = val_list[ val_idx ];\n\n // This includes empty strings on purpose\n if ( ! res ) {\n res = [ singular_key, plural_key ];\n return res[ getPluralFormFunc()( val ) ];\n }\n return res;\n }\n });\n\n\n // We add in sprintf capabilities for post translation value interolation\n // This is not internally used, so you can remove it if you have this\n // available somewhere else, or want to use a different system.\n\n // We _slightly_ modify the normal sprintf behavior to more gracefully handle\n // undefined values.\n\n /**\n sprintf() for JavaScript 0.7-beta1\n http://www.diveintojavascript.com/projects/javascript-sprintf\n\n Copyright (c) Alexandru Marasteanu <alexaholic [at) gmail (dot] com>\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n * Neither the name of sprintf() for JavaScript nor the\n names of its contributors may be used to endorse or promote products\n derived from this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL Alexandru Marasteanu BE LIABLE FOR ANY\n DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n var sprintf = (function() {\n function get_type(variable) {\n return Object.prototype.toString.call(variable).slice(8, -1).toLowerCase();\n }\n function str_repeat(input, multiplier) {\n for (var output = []; multiplier > 0; output[--multiplier] = input) {/* do nothing */}\n return output.join('');\n }\n\n var str_format = function() {\n if (!str_format.cache.hasOwnProperty(arguments[0])) {\n str_format.cache[arguments[0]] = str_format.parse(arguments[0]);\n }\n return str_format.format.call(null, str_format.cache[arguments[0]], arguments);\n };\n\n str_format.format = function(parse_tree, argv) {\n var cursor = 1, tree_length = parse_tree.length, node_type = '', arg, output = [], i, k, match, pad, pad_character, pad_length;\n for (i = 0; i < tree_length; i++) {\n node_type = get_type(parse_tree[i]);\n if (node_type === 'string') {\n output.push(parse_tree[i]);\n }\n else if (node_type === 'array') {\n match = parse_tree[i]; // convenience purposes only\n if (match[2]) { // keyword argument\n arg = argv[cursor];\n for (k = 0; k < match[2].length; k++) {\n if (!arg.hasOwnProperty(match[2][k])) {\n throw(sprintf('[sprintf] property \"%s\" does not exist', match[2][k]));\n }\n arg = arg[match[2][k]];\n }\n }\n else if (match[1]) { // positional argument (explicit)\n arg = argv[match[1]];\n }\n else { // positional argument (implicit)\n arg = argv[cursor++];\n }\n\n if (/[^s]/.test(match[8]) && (get_type(arg) != 'number')) {\n throw(sprintf('[sprintf] expecting number but found %s', get_type(arg)));\n }\n\n // Jed EDIT\n if ( typeof arg == 'undefined' || arg === null ) {\n arg = '';\n }\n // Jed EDIT\n\n switch (match[8]) {\n case 'b': arg = arg.toString(2); break;\n case 'c': arg = String.fromCharCode(arg); break;\n case 'd': arg = parseInt(arg, 10); break;\n case 'e': arg = match[7] ? arg.toExponential(match[7]) : arg.toExponential(); break;\n case 'f': arg = match[7] ? parseFloat(arg).toFixed(match[7]) : parseFloat(arg); break;\n case 'o': arg = arg.toString(8); break;\n case 's': arg = ((arg = String(arg)) && match[7] ? arg.substring(0, match[7]) : arg); break;\n case 'u': arg = Math.abs(arg); break;\n case 'x': arg = arg.toString(16); break;\n case 'X': arg = arg.toString(16).toUpperCase(); break;\n }\n arg = (/[def]/.test(match[8]) && match[3] && arg >= 0 ? '+'+ arg : arg);\n pad_character = match[4] ? match[4] == '0' ? '0' : match[4].charAt(1) : ' ';\n pad_length = match[6] - String(arg).length;\n pad = match[6] ? str_repeat(pad_character, pad_length) : '';\n output.push(match[5] ? arg + pad : pad + arg);\n }\n }\n return output.join('');\n };\n\n str_format.cache = {};\n\n str_format.parse = function(fmt) {\n var _fmt = fmt, match = [], parse_tree = [], arg_names = 0;\n while (_fmt) {\n if ((match = /^[^\\x25]+/.exec(_fmt)) !== null) {\n parse_tree.push(match[0]);\n }\n else if ((match = /^\\x25{2}/.exec(_fmt)) !== null) {\n parse_tree.push('%');\n }\n else if ((match = /^\\x25(?:([1-9]\\d*)\\$|\\(([^\\)]+)\\))?(\\+)?(0|'[^$])?(-)?(\\d+)?(?:\\.(\\d+))?([b-fosuxX])/.exec(_fmt)) !== null) {\n if (match[2]) {\n arg_names |= 1;\n var field_list = [], replacement_field = match[2], field_match = [];\n if ((field_match = /^([a-z_][a-z_\\d]*)/i.exec(replacement_field)) !== null) {\n field_list.push(field_match[1]);\n while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') {\n if ((field_match = /^\\.([a-z_][a-z_\\d]*)/i.exec(replacement_field)) !== null) {\n field_list.push(field_match[1]);\n }\n else if ((field_match = /^\\[(\\d+)\\]/.exec(replacement_field)) !== null) {\n field_list.push(field_match[1]);\n }\n else {\n throw('[sprintf] huh?');\n }\n }\n }\n else {\n throw('[sprintf] huh?');\n }\n match[2] = field_list;\n }\n else {\n arg_names |= 2;\n }\n if (arg_names === 3) {\n throw('[sprintf] mixing positional and named placeholders is not (yet) supported');\n }\n parse_tree.push(match);\n }\n else {\n throw('[sprintf] huh?');\n }\n _fmt = _fmt.substring(match[0].length);\n }\n return parse_tree;\n };\n\n return str_format;\n })();\n\n var vsprintf = function(fmt, argv) {\n argv.unshift(fmt);\n return sprintf.apply(null, argv);\n };\n\n Jed.parse_plural = function ( plural_forms, n ) {\n plural_forms = plural_forms.replace(/n/g, n);\n return Jed.parse_expression(plural_forms);\n };\n\n Jed.sprintf = function ( fmt, args ) {\n if ( {}.toString.call( args ) == '[object Array]' ) {\n return vsprintf( fmt, [].slice.call(args) );\n }\n return sprintf.apply(this, [].slice.call(arguments) );\n };\n\n Jed.prototype.sprintf = function () {\n return Jed.sprintf.apply(this, arguments);\n };\n // END sprintf Implementation\n\n // Start the Plural forms section\n // This is a full plural form expression parser. It is used to avoid\n // running 'eval' or 'new Function' directly against the plural\n // forms.\n //\n // This can be important if you get translations done through a 3rd\n // party vendor. I encourage you to use this instead, however, I\n // also will provide a 'precompiler' that you can use at build time\n // to output valid/safe function representations of the plural form\n // expressions. This means you can build this code out for the most\n // part.\n Jed.PF = {};\n\n Jed.PF.parse = function ( p ) {\n var plural_str = Jed.PF.extractPluralExpr( p );\n return Jed.PF.parser.parse.call(Jed.PF.parser, plural_str);\n };\n\n Jed.PF.compile = function ( p ) {\n // Handle trues and falses as 0 and 1\n function imply( val ) {\n return (val === true ? 1 : val ? val : 0);\n }\n\n var ast = Jed.PF.parse( p );\n return function ( n ) {\n return imply( Jed.PF.interpreter( ast )( n ) );\n };\n };\n\n Jed.PF.interpreter = function ( ast ) {\n return function ( n ) {\n var res;\n switch ( ast.type ) {\n case 'GROUP':\n return Jed.PF.interpreter( ast.expr )( n );\n case 'TERNARY':\n if ( Jed.PF.interpreter( ast.expr )( n ) ) {\n return Jed.PF.interpreter( ast.truthy )( n );\n }\n return Jed.PF.interpreter( ast.falsey )( n );\n case 'OR':\n return Jed.PF.interpreter( ast.left )( n ) || Jed.PF.interpreter( ast.right )( n );\n case 'AND':\n return Jed.PF.interpreter( ast.left )( n ) && Jed.PF.interpreter( ast.right )( n );\n case 'LT':\n return Jed.PF.interpreter( ast.left )( n ) < Jed.PF.interpreter( ast.right )( n );\n case 'GT':\n return Jed.PF.interpreter( ast.left )( n ) > Jed.PF.interpreter( ast.right )( n );\n case 'LTE':\n return Jed.PF.interpreter( ast.left )( n ) <= Jed.PF.interpreter( ast.right )( n );\n case 'GTE':\n return Jed.PF.interpreter( ast.left )( n ) >= Jed.PF.interpreter( ast.right )( n );\n case 'EQ':\n return Jed.PF.interpreter( ast.left )( n ) == Jed.PF.interpreter( ast.right )( n );\n case 'NEQ':\n return Jed.PF.interpreter( ast.left )( n ) != Jed.PF.interpreter( ast.right )( n );\n case 'MOD':\n return Jed.PF.interpreter( ast.left )( n ) % Jed.PF.interpreter( ast.right )( n );\n case 'VAR':\n return n;\n case 'NUM':\n return ast.val;\n default:\n throw new Error(\"Invalid Token found.\");\n }\n };\n };\n\n Jed.PF.extractPluralExpr = function ( p ) {\n // trim first\n p = p.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n\n if (! /;\\s*$/.test(p)) {\n p = p.concat(';');\n }\n\n var nplurals_re = /nplurals\\=(\\d+);/,\n plural_re = /plural\\=(.*);/,\n nplurals_matches = p.match( nplurals_re ),\n res = {},\n plural_matches;\n\n // Find the nplurals number\n if ( nplurals_matches.length > 1 ) {\n res.nplurals = nplurals_matches[1];\n }\n else {\n throw new Error('nplurals not found in plural_forms string: ' + p );\n }\n\n // remove that data to get to the formula\n p = p.replace( nplurals_re, \"\" );\n plural_matches = p.match( plural_re );\n\n if (!( plural_matches && plural_matches.length > 1 ) ) {\n throw new Error('`plural` expression not found: ' + p);\n }\n return plural_matches[ 1 ];\n };\n\n /* Jison generated parser */\n Jed.PF.parser = (function(){\n\nvar parser = {trace: function trace() { },\nyy: {},\nsymbols_: {\"error\":2,\"expressions\":3,\"e\":4,\"EOF\":5,\"?\":6,\":\":7,\"||\":8,\"&&\":9,\"<\":10,\"<=\":11,\">\":12,\">=\":13,\"!=\":14,\"==\":15,\"%\":16,\"(\":17,\")\":18,\"n\":19,\"NUMBER\":20,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",5:\"EOF\",6:\"?\",7:\":\",8:\"||\",9:\"&&\",10:\"<\",11:\"<=\",12:\">\",13:\">=\",14:\"!=\",15:\"==\",16:\"%\",17:\"(\",18:\")\",19:\"n\",20:\"NUMBER\"},\nproductions_: [0,[3,2],[4,5],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,1],[4,1]],\nperformAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$) {\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 1: return { type : 'GROUP', expr: $$[$0-1] };\nbreak;\ncase 2:this.$ = { type: 'TERNARY', expr: $$[$0-4], truthy : $$[$0-2], falsey: $$[$0] };\nbreak;\ncase 3:this.$ = { type: \"OR\", left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 4:this.$ = { type: \"AND\", left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 5:this.$ = { type: 'LT', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 6:this.$ = { type: 'LTE', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 7:this.$ = { type: 'GT', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 8:this.$ = { type: 'GTE', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 9:this.$ = { type: 'NEQ', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 10:this.$ = { type: 'EQ', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 11:this.$ = { type: 'MOD', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 12:this.$ = { type: 'GROUP', expr: $$[$0-1] };\nbreak;\ncase 13:this.$ = { type: 'VAR' };\nbreak;\ncase 14:this.$ = { type: 'NUM', val: Number(yytext) };\nbreak;\n}\n},\ntable: [{3:1,4:2,17:[1,3],19:[1,4],20:[1,5]},{1:[3]},{5:[1,6],6:[1,7],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16]},{4:17,17:[1,3],19:[1,4],20:[1,5]},{5:[2,13],6:[2,13],7:[2,13],8:[2,13],9:[2,13],10:[2,13],11:[2,13],12:[2,13],13:[2,13],14:[2,13],15:[2,13],16:[2,13],18:[2,13]},{5:[2,14],6:[2,14],7:[2,14],8:[2,14],9:[2,14],10:[2,14],11:[2,14],12:[2,14],13:[2,14],14:[2,14],15:[2,14],16:[2,14],18:[2,14]},{1:[2,1]},{4:18,17:[1,3],19:[1,4],20:[1,5]},{4:19,17:[1,3],19:[1,4],20:[1,5]},{4:20,17:[1,3],19:[1,4],20:[1,5]},{4:21,17:[1,3],19:[1,4],20:[1,5]},{4:22,17:[1,3],19:[1,4],20:[1,5]},{4:23,17:[1,3],19:[1,4],20:[1,5]},{4:24,17:[1,3],19:[1,4],20:[1,5]},{4:25,17:[1,3],19:[1,4],20:[1,5]},{4:26,17:[1,3],19:[1,4],20:[1,5]},{4:27,17:[1,3],19:[1,4],20:[1,5]},{6:[1,7],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[1,28]},{6:[1,7],7:[1,29],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16]},{5:[2,3],6:[2,3],7:[2,3],8:[2,3],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,3]},{5:[2,4],6:[2,4],7:[2,4],8:[2,4],9:[2,4],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,4]},{5:[2,5],6:[2,5],7:[2,5],8:[2,5],9:[2,5],10:[2,5],11:[2,5],12:[2,5],13:[2,5],14:[2,5],15:[2,5],16:[1,16],18:[2,5]},{5:[2,6],6:[2,6],7:[2,6],8:[2,6],9:[2,6],10:[2,6],11:[2,6],12:[2,6],13:[2,6],14:[2,6],15:[2,6],16:[1,16],18:[2,6]},{5:[2,7],6:[2,7],7:[2,7],8:[2,7],9:[2,7],10:[2,7],11:[2,7],12:[2,7],13:[2,7],14:[2,7],15:[2,7],16:[1,16],18:[2,7]},{5:[2,8],6:[2,8],7:[2,8],8:[2,8],9:[2,8],10:[2,8],11:[2,8],12:[2,8],13:[2,8],14:[2,8],15:[2,8],16:[1,16],18:[2,8]},{5:[2,9],6:[2,9],7:[2,9],8:[2,9],9:[2,9],10:[2,9],11:[2,9],12:[2,9],13:[2,9],14:[2,9],15:[2,9],16:[1,16],18:[2,9]},{5:[2,10],6:[2,10],7:[2,10],8:[2,10],9:[2,10],10:[2,10],11:[2,10],12:[2,10],13:[2,10],14:[2,10],15:[2,10],16:[1,16],18:[2,10]},{5:[2,11],6:[2,11],7:[2,11],8:[2,11],9:[2,11],10:[2,11],11:[2,11],12:[2,11],13:[2,11],14:[2,11],15:[2,11],16:[2,11],18:[2,11]},{5:[2,12],6:[2,12],7:[2,12],8:[2,12],9:[2,12],10:[2,12],11:[2,12],12:[2,12],13:[2,12],14:[2,12],15:[2,12],16:[2,12],18:[2,12]},{4:30,17:[1,3],19:[1,4],20:[1,5]},{5:[2,2],6:[1,7],7:[2,2],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,2]}],\ndefaultActions: {6:[2,1]},\nparseError: function parseError(str, hash) {\n throw new Error(str);\n},\nparse: function parse(input) {\n var self = this,\n stack = [0],\n vstack = [null], // semantic value stack\n lstack = [], // location stack\n table = this.table,\n yytext = '',\n yylineno = 0,\n yyleng = 0,\n recovering = 0,\n TERROR = 2,\n EOF = 1;\n\n //this.reductionCount = this.shiftCount = 0;\n\n this.lexer.setInput(input);\n this.lexer.yy = this.yy;\n this.yy.lexer = this.lexer;\n if (typeof this.lexer.yylloc == 'undefined')\n this.lexer.yylloc = {};\n var yyloc = this.lexer.yylloc;\n lstack.push(yyloc);\n\n if (typeof this.yy.parseError === 'function')\n this.parseError = this.yy.parseError;\n\n function popStack (n) {\n stack.length = stack.length - 2*n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n\n function lex() {\n var token;\n token = self.lexer.lex() || 1; // $end = 1\n // if token isn't its numeric value, convert\n if (typeof token !== 'number') {\n token = self.symbols_[token] || token;\n }\n return token;\n }\n\n var symbol, preErrorSymbol, state, action, a, r, yyval={},p,len,newState, expected;\n while (true) {\n // retreive state number from top of stack\n state = stack[stack.length-1];\n\n // use default actions if available\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol == null)\n symbol = lex();\n // read action for current state and first input\n action = table[state] && table[state][symbol];\n }\n\n // handle parse error\n _handle_error:\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n\n if (!recovering) {\n // Report error\n expected = [];\n for (p in table[state]) if (this.terminals_[p] && p > 2) {\n expected.push(\"'\"+this.terminals_[p]+\"'\");\n }\n var errStr = '';\n if (this.lexer.showPosition) {\n errStr = 'Parse error on line '+(yylineno+1)+\":\\n\"+this.lexer.showPosition()+\"\\nExpecting \"+expected.join(', ') + \", got '\" + this.terminals_[symbol]+ \"'\";\n } else {\n errStr = 'Parse error on line '+(yylineno+1)+\": Unexpected \" +\n (symbol == 1 /*EOF*/ ? \"end of input\" :\n (\"'\"+(this.terminals_[symbol] || symbol)+\"'\"));\n }\n this.parseError(errStr,\n {text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected});\n }\n\n // just recovered from another error\n if (recovering == 3) {\n if (symbol == EOF) {\n throw new Error(errStr || 'Parsing halted.');\n }\n\n // discard current lookahead and grab another\n yyleng = this.lexer.yyleng;\n yytext = this.lexer.yytext;\n yylineno = this.lexer.yylineno;\n yyloc = this.lexer.yylloc;\n symbol = lex();\n }\n\n // try to recover from error\n while (1) {\n // check for error recovery rule in this state\n if ((TERROR.toString()) in table[state]) {\n break;\n }\n if (state == 0) {\n throw new Error(errStr || 'Parsing halted.');\n }\n popStack(1);\n state = stack[stack.length-1];\n }\n\n preErrorSymbol = symbol; // save the lookahead token\n symbol = TERROR; // insert generic error symbol as new lookahead\n state = stack[stack.length-1];\n action = table[state] && table[state][TERROR];\n recovering = 3; // allow 3 real symbols to be shifted before reporting a new error\n }\n\n // this shouldn't happen, unless resolve defaults are off\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: '+state+', token: '+symbol);\n }\n\n switch (action[0]) {\n\n case 1: // shift\n //this.shiftCount++;\n\n stack.push(symbol);\n vstack.push(this.lexer.yytext);\n lstack.push(this.lexer.yylloc);\n stack.push(action[1]); // push state\n symbol = null;\n if (!preErrorSymbol) { // normal execution/no error\n yyleng = this.lexer.yyleng;\n yytext = this.lexer.yytext;\n yylineno = this.lexer.yylineno;\n yyloc = this.lexer.yylloc;\n if (recovering > 0)\n recovering--;\n } else { // error just occurred, resume old lookahead f/ before error\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n\n case 2: // reduce\n //this.reductionCount++;\n\n len = this.productions_[action[1]][1];\n\n // perform semantic action\n yyval.$ = vstack[vstack.length-len]; // default to $$ = $1\n // default location, uses first token for firsts, last for lasts\n yyval._$ = {\n first_line: lstack[lstack.length-(len||1)].first_line,\n last_line: lstack[lstack.length-1].last_line,\n first_column: lstack[lstack.length-(len||1)].first_column,\n last_column: lstack[lstack.length-1].last_column\n };\n r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);\n\n if (typeof r !== 'undefined') {\n return r;\n }\n\n // pop off stack\n if (len) {\n stack = stack.slice(0,-1*len*2);\n vstack = vstack.slice(0, -1*len);\n lstack = lstack.slice(0, -1*len);\n }\n\n stack.push(this.productions_[action[1]][0]); // push nonterminal (reduce)\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n // goto new state = table[STATE][NONTERMINAL]\n newState = table[stack[stack.length-2]][stack[stack.length-1]];\n stack.push(newState);\n break;\n\n case 3: // accept\n return true;\n }\n\n }\n\n return true;\n}};/* Jison generated lexer */\nvar lexer = (function(){\n\nvar lexer = ({EOF:1,\nparseError:function parseError(str, hash) {\n if (this.yy.parseError) {\n this.yy.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\nsetInput:function (input) {\n this._input = input;\n this._more = this._less = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {first_line:1,first_column:0,last_line:1,last_column:0};\n return this;\n },\ninput:function () {\n var ch = this._input[0];\n this.yytext+=ch;\n this.yyleng++;\n this.match+=ch;\n this.matched+=ch;\n var lines = ch.match(/\\n/);\n if (lines) this.yylineno++;\n this._input = this._input.slice(1);\n return ch;\n },\nunput:function (ch) {\n this._input = ch + this._input;\n return this;\n },\nmore:function () {\n this._more = true;\n return this;\n },\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20)+(next.length > 20 ? '...':'')).replace(/\\n/g, \"\");\n },\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c+\"^\";\n },\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) this.done = true;\n\n var token,\n match,\n col,\n lines;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i=0;i < rules.length; i++) {\n match = this._input.match(this.rules[rules[i]]);\n if (match) {\n lines = match[0].match(/\\n.*/g);\n if (lines) this.yylineno += lines.length;\n this.yylloc = {first_line: this.yylloc.last_line,\n last_line: this.yylineno+1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length-1].length-1 : this.yylloc.last_column + match[0].length}\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n this._more = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, rules[i],this.conditionStack[this.conditionStack.length-1]);\n if (token) return token;\n else return;\n }\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n this.parseError('Lexical error on line '+(this.yylineno+1)+'. Unrecognized text.\\n'+this.showPosition(),\n {text: \"\", token: null, line: this.yylineno});\n }\n },\nlex:function lex() {\n var r = this.next();\n if (typeof r !== 'undefined') {\n return r;\n } else {\n return this.lex();\n }\n },\nbegin:function begin(condition) {\n this.conditionStack.push(condition);\n },\npopState:function popState() {\n return this.conditionStack.pop();\n },\n_currentRules:function _currentRules() {\n return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules;\n },\ntopState:function () {\n return this.conditionStack[this.conditionStack.length-2];\n },\npushState:function begin(condition) {\n this.begin(condition);\n }});\nlexer.performAction = function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\n\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:/* skip whitespace */\nbreak;\ncase 1:return 20\nbreak;\ncase 2:return 19\nbreak;\ncase 3:return 8\nbreak;\ncase 4:return 9\nbreak;\ncase 5:return 6\nbreak;\ncase 6:return 7\nbreak;\ncase 7:return 11\nbreak;\ncase 8:return 13\nbreak;\ncase 9:return 10\nbreak;\ncase 10:return 12\nbreak;\ncase 11:return 14\nbreak;\ncase 12:return 15\nbreak;\ncase 13:return 16\nbreak;\ncase 14:return 17\nbreak;\ncase 15:return 18\nbreak;\ncase 16:return 5\nbreak;\ncase 17:return 'INVALID'\nbreak;\n}\n};\nlexer.rules = [/^\\s+/,/^[0-9]+(\\.[0-9]+)?\\b/,/^n\\b/,/^\\|\\|/,/^&&/,/^\\?/,/^:/,/^<=/,/^>=/,/^</,/^>/,/^!=/,/^==/,/^%/,/^\\(/,/^\\)/,/^$/,/^./];\nlexer.conditions = {\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],\"inclusive\":true}};return lexer;})()\nparser.lexer = lexer;\nreturn parser;\n})();\n// End parser\n\n // Handle node, amd, and global systems\n if (typeof exports !== 'undefined') {\n if (typeof module !== 'undefined' && module.exports) {\n exports = module.exports = Jed;\n }\n exports.Jed = Jed;\n }\n else {\n if (typeof define === 'function' && define.amd) {\n define(function() {\n return Jed;\n });\n }\n // Leak a global regardless of module system\n root['Jed'] = Jed;\n }\n\n})(this);\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n}\n\nmodule.exports = baseHas;\n", "/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n", "/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n", "var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n", "var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n", "var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n", "var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n", "/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n", "var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n", "var isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n", "/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n", "var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n", "var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n", "var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n", "/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n", "var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n", "/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n", "var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n", "var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n", "var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n", "/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n", "var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n", "var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n", "var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n", "var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n", "/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n", "/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n", "var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n", "var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n", "var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n", "var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n", "var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n", "var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n", "var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n", "var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n", "/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n", "var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n", "var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n", "var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n", "var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n", "var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n", "var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n", "var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n", "var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nmodule.exports = memoizeCapped;\n", "var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nmodule.exports = stringToPath;\n", "/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n", "var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n", "var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n", "var isArray = require('./isArray'),\n isKey = require('./_isKey'),\n stringToPath = require('./_stringToPath'),\n toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n", "var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n", "var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n", "/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n", "/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n", "var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n", "var castPath = require('./_castPath'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isIndex = require('./_isIndex'),\n isLength = require('./isLength'),\n toKey = require('./_toKey');\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;\n", "var baseHas = require('./_baseHas'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\nfunction has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n}\n\nmodule.exports = has;\n", "var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n", "var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n", "/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nmodule.exports = createBaseFor;\n", "var createBaseFor = require('./_createBaseFor');\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n", "/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nmodule.exports = baseTimes;\n", "/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n", "var root = require('./_root'),\n stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n", "var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n", "/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n", "var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n", "var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n", "var baseTimes = require('./_baseTimes'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isIndex = require('./_isIndex'),\n isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = arrayLikeKeys;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n", "/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;\n", "var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n", "var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeys;\n", "var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n", "var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n", "var baseFor = require('./_baseFor'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nmodule.exports = baseForOwn;\n", "var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nmodule.exports = stackClear;\n", "/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nmodule.exports = stackDelete;\n", "/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n", "/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n", "var ListCache = require('./_ListCache'),\n Map = require('./_Map'),\n MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nmodule.exports = stackSet;\n", "var ListCache = require('./_ListCache'),\n stackClear = require('./_stackClear'),\n stackDelete = require('./_stackDelete'),\n stackGet = require('./_stackGet'),\n stackHas = require('./_stackHas'),\n stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n", "/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nmodule.exports = setCacheAdd;\n", "/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n", "var MapCache = require('./_MapCache'),\n setCacheAdd = require('./_setCacheAdd'),\n setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n", "/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arraySome;\n", "/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n", "var SetCache = require('./_SetCache'),\n arraySome = require('./_arraySome'),\n cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalArrays;\n", "var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n", "/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nmodule.exports = mapToArray;\n", "/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nmodule.exports = setToArray;\n", "var Symbol = require('./_Symbol'),\n Uint8Array = require('./_Uint8Array'),\n eq = require('./eq'),\n equalArrays = require('./_equalArrays'),\n mapToArray = require('./_mapToArray'),\n setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nmodule.exports = equalByTag;\n", "/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nmodule.exports = arrayPush;\n", "var arrayPush = require('./_arrayPush'),\n isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n", "/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nmodule.exports = arrayFilter;\n", "/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nmodule.exports = stubArray;\n", "var arrayFilter = require('./_arrayFilter'),\n stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nmodule.exports = getSymbols;\n", "var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbols = require('./_getSymbols'),\n keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n", "var getAllKeys = require('./_getAllKeys');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalObjects;\n", "var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n", "var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n", "var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n", "var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n", "var DataView = require('./_DataView'),\n Map = require('./_Map'),\n Promise = require('./_Promise'),\n Set = require('./_Set'),\n WeakMap = require('./_WeakMap'),\n baseGetTag = require('./_baseGetTag'),\n toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nmodule.exports = getTag;\n", "var Stack = require('./_Stack'),\n equalArrays = require('./_equalArrays'),\n equalByTag = require('./_equalByTag'),\n equalObjects = require('./_equalObjects'),\n getTag = require('./_getTag'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n", "var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n", "var Stack = require('./_Stack'),\n baseIsEqual = require('./_baseIsEqual');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nmodule.exports = baseIsMatch;\n", "var isObject = require('./isObject');\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nmodule.exports = isStrictComparable;\n", "var isStrictComparable = require('./_isStrictComparable'),\n keys = require('./keys');\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\nmodule.exports = getMatchData;\n", "/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\nmodule.exports = matchesStrictComparable;\n", "var baseIsMatch = require('./_baseIsMatch'),\n getMatchData = require('./_getMatchData'),\n matchesStrictComparable = require('./_matchesStrictComparable');\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\nmodule.exports = baseMatches;\n", "var castPath = require('./_castPath'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n", "var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n", "/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;\n", "var baseHasIn = require('./_baseHasIn'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;\n", "var baseIsEqual = require('./_baseIsEqual'),\n get = require('./get'),\n hasIn = require('./hasIn'),\n isKey = require('./_isKey'),\n isStrictComparable = require('./_isStrictComparable'),\n matchesStrictComparable = require('./_matchesStrictComparable'),\n toKey = require('./_toKey');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nmodule.exports = baseMatchesProperty;\n", "/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n", "/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nmodule.exports = baseProperty;\n", "var baseGet = require('./_baseGet');\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nmodule.exports = basePropertyDeep;\n", "var baseProperty = require('./_baseProperty'),\n basePropertyDeep = require('./_basePropertyDeep'),\n isKey = require('./_isKey'),\n toKey = require('./_toKey');\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = property;\n", "var baseMatches = require('./_baseMatches'),\n baseMatchesProperty = require('./_baseMatchesProperty'),\n identity = require('./identity'),\n isArray = require('./isArray'),\n property = require('./property');\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\nmodule.exports = baseIteratee;\n", "var baseAssignValue = require('./_baseAssignValue'),\n baseForOwn = require('./_baseForOwn'),\n baseIteratee = require('./_baseIteratee');\n\n/**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\nfunction mapValues(object, iteratee) {\n var result = {};\n iteratee = baseIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n}\n\nmodule.exports = mapValues;\n", "/**\n * Based on Kendo UI Core expression code <https://github.com/telerik/kendo-ui-core#license-information>\n */\n'use strict'\n\nfunction Cache(maxSize) {\n this._maxSize = maxSize\n this.clear()\n}\nCache.prototype.clear = function () {\n this._size = 0\n this._values = Object.create(null)\n}\nCache.prototype.get = function (key) {\n return this._values[key]\n}\nCache.prototype.set = function (key, value) {\n this._size >= this._maxSize && this.clear()\n if (!(key in this._values)) this._size++\n\n return (this._values[key] = value)\n}\n\nvar SPLIT_REGEX = /[^.^\\]^[]+|(?=\\[\\]|\\.\\.)/g,\n DIGIT_REGEX = /^\\d+$/,\n LEAD_DIGIT_REGEX = /^\\d/,\n SPEC_CHAR_REGEX = /[~`!#$%\\^&*+=\\-\\[\\]\\\\';,/{}|\\\\\":<>\\?]/g,\n CLEAN_QUOTES_REGEX = /^\\s*(['\"]?)(.*?)(\\1)\\s*$/,\n MAX_CACHE_SIZE = 512\n\nvar pathCache = new Cache(MAX_CACHE_SIZE),\n setCache = new Cache(MAX_CACHE_SIZE),\n getCache = new Cache(MAX_CACHE_SIZE)\n\nvar config\n\nmodule.exports = {\n Cache: Cache,\n\n split: split,\n\n normalizePath: normalizePath,\n\n setter: function (path) {\n var parts = normalizePath(path)\n\n return (\n setCache.get(path) ||\n setCache.set(path, function setter(obj, value) {\n var index = 0\n var len = parts.length\n var data = obj\n\n while (index < len - 1) {\n var part = parts[index]\n if (\n part === '__proto__' ||\n part === 'constructor' ||\n part === 'prototype'\n ) {\n return obj\n }\n\n data = data[parts[index++]]\n }\n data[parts[index]] = value\n })\n )\n },\n\n getter: function (path, safe) {\n var parts = normalizePath(path)\n return (\n getCache.get(path) ||\n getCache.set(path, function getter(data) {\n var index = 0,\n len = parts.length\n while (index < len) {\n if (data != null || !safe) data = data[parts[index++]]\n else return\n }\n return data\n })\n )\n },\n\n join: function (segments) {\n return segments.reduce(function (path, part) {\n return (\n path +\n (isQuoted(part) || DIGIT_REGEX.test(part)\n ? '[' + part + ']'\n : (path ? '.' : '') + part)\n )\n }, '')\n },\n\n forEach: function (path, cb, thisArg) {\n forEach(Array.isArray(path) ? path : split(path), cb, thisArg)\n },\n}\n\nfunction normalizePath(path) {\n return (\n pathCache.get(path) ||\n pathCache.set(\n path,\n split(path).map(function (part) {\n return part.replace(CLEAN_QUOTES_REGEX, '$2')\n })\n )\n )\n}\n\nfunction split(path) {\n return path.match(SPLIT_REGEX) || ['']\n}\n\nfunction forEach(parts, iter, thisArg) {\n var len = parts.length,\n part,\n idx,\n isArray,\n isBracket\n\n for (idx = 0; idx < len; idx++) {\n part = parts[idx]\n\n if (part) {\n if (shouldBeQuoted(part)) {\n part = '\"' + part + '\"'\n }\n\n isBracket = isQuoted(part)\n isArray = !isBracket && /^\\d+$/.test(part)\n\n iter.call(thisArg, part, isBracket, isArray, idx, parts)\n }\n }\n}\n\nfunction isQuoted(str) {\n return (\n typeof str === 'string' && str && [\"'\", '\"'].indexOf(str.charAt(0)) !== -1\n )\n}\n\nfunction hasLeadingNumber(part) {\n return part.match(LEAD_DIGIT_REGEX) && !part.match(DIGIT_REGEX)\n}\n\nfunction hasSpecialChars(part) {\n return SPEC_CHAR_REGEX.test(part)\n}\n\nfunction shouldBeQuoted(part) {\n return !isQuoted(part) && (hasLeadingNumber(part) || hasSpecialChars(part))\n}\n", "/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\nmodule.exports = arrayReduce;\n", "/**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n}\n\nmodule.exports = basePropertyOf;\n", "var basePropertyOf = require('./_basePropertyOf');\n\n/** Used to map Latin Unicode letters to basic Latin letters. */\nvar deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n};\n\n/**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\nvar deburrLetter = basePropertyOf(deburredLetters);\n\nmodule.exports = deburrLetter;\n", "var deburrLetter = require('./_deburrLetter'),\n toString = require('./toString');\n\n/** Used to match Latin Unicode letters (excluding mathematical operators). */\nvar reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n/** Used to compose unicode character classes. */\nvar rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange;\n\n/** Used to compose unicode capture groups. */\nvar rsCombo = '[' + rsComboRange + ']';\n\n/**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\nvar reComboMark = RegExp(rsCombo, 'g');\n\n/**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('d\u00E9j\u00E0 vu');\n * // => 'deja vu'\n */\nfunction deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n}\n\nmodule.exports = deburr;\n", "/** Used to match words composed of alphanumeric characters. */\nvar reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n/**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction asciiWords(string) {\n return string.match(reAsciiWord) || [];\n}\n\nmodule.exports = asciiWords;\n", "/** Used to detect strings that need a more robust regexp to match words. */\nvar reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n/**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\nfunction hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n}\n\nmodule.exports = hasUnicodeWord;\n", "/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\",\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq;\n\n/** Used to match complex or compound words. */\nvar reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n].join('|'), 'g');\n\n/**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n}\n\nmodule.exports = unicodeWords;\n", "var asciiWords = require('./_asciiWords'),\n hasUnicodeWord = require('./_hasUnicodeWord'),\n toString = require('./toString'),\n unicodeWords = require('./_unicodeWords');\n\n/**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\nfunction words(string, pattern, guard) {\n string = toString(string);\n pattern = guard ? undefined : pattern;\n\n if (pattern === undefined) {\n return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n }\n return string.match(pattern) || [];\n}\n\nmodule.exports = words;\n", "var arrayReduce = require('./_arrayReduce'),\n deburr = require('./deburr'),\n words = require('./words');\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\";\n\n/** Used to match apostrophes. */\nvar reApos = RegExp(rsApos, 'g');\n\n/**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\nfunction createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n}\n\nmodule.exports = createCompounder;\n", "var createCompounder = require('./_createCompounder');\n\n/**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\nvar snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n});\n\nmodule.exports = snakeCase;\n", "/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\nmodule.exports = baseSlice;\n", "var baseSlice = require('./_baseSlice');\n\n/**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\nfunction castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n}\n\nmodule.exports = castSlice;\n", "/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsZWJ = '\\\\u200d';\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n return reHasUnicode.test(string);\n}\n\nmodule.exports = hasUnicode;\n", "/**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction asciiToArray(string) {\n return string.split('');\n}\n\nmodule.exports = asciiToArray;\n", "/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction unicodeToArray(string) {\n return string.match(reUnicode) || [];\n}\n\nmodule.exports = unicodeToArray;\n", "var asciiToArray = require('./_asciiToArray'),\n hasUnicode = require('./_hasUnicode'),\n unicodeToArray = require('./_unicodeToArray');\n\n/**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n}\n\nmodule.exports = stringToArray;\n", "var castSlice = require('./_castSlice'),\n hasUnicode = require('./_hasUnicode'),\n stringToArray = require('./_stringToArray'),\n toString = require('./toString');\n\n/**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\nfunction createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n}\n\nmodule.exports = createCaseFirst;\n", "var createCaseFirst = require('./_createCaseFirst');\n\n/**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\nvar upperFirst = createCaseFirst('toUpperCase');\n\nmodule.exports = upperFirst;\n", "var toString = require('./toString'),\n upperFirst = require('./upperFirst');\n\n/**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\nfunction capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n}\n\nmodule.exports = capitalize;\n", "var capitalize = require('./capitalize'),\n createCompounder = require('./_createCompounder');\n\n/**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\nvar camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n});\n\nmodule.exports = camelCase;\n", "var baseAssignValue = require('./_baseAssignValue'),\n baseForOwn = require('./_baseForOwn'),\n baseIteratee = require('./_baseIteratee');\n\n/**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n * return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\nfunction mapKeys(object, iteratee) {\n var result = {};\n iteratee = baseIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, iteratee(value, key, object), value);\n });\n return result;\n}\n\nmodule.exports = mapKeys;\n", "\n/**\n * Topological sorting function\n *\n * @param {Array} edges\n * @returns {Array}\n */\n\nmodule.exports = function(edges) {\n return toposort(uniqueNodes(edges), edges)\n}\n\nmodule.exports.array = toposort\n\nfunction toposort(nodes, edges) {\n var cursor = nodes.length\n , sorted = new Array(cursor)\n , visited = {}\n , i = cursor\n // Better data structures make algorithm much faster.\n , outgoingEdges = makeOutgoingEdges(edges)\n , nodesHash = makeNodesHash(nodes)\n\n // check for unknown nodes\n edges.forEach(function(edge) {\n if (!nodesHash.has(edge[0]) || !nodesHash.has(edge[1])) {\n throw new Error('Unknown node. There is an unknown node in the supplied edges.')\n }\n })\n\n while (i--) {\n if (!visited[i]) visit(nodes[i], i, new Set())\n }\n\n return sorted\n\n function visit(node, i, predecessors) {\n if(predecessors.has(node)) {\n var nodeRep\n try {\n nodeRep = \", node was:\" + JSON.stringify(node)\n } catch(e) {\n nodeRep = \"\"\n }\n throw new Error('Cyclic dependency' + nodeRep)\n }\n\n if (!nodesHash.has(node)) {\n throw new Error('Found unknown node. Make sure to provided all involved nodes. Unknown node: '+JSON.stringify(node))\n }\n\n if (visited[i]) return;\n visited[i] = true\n\n var outgoing = outgoingEdges.get(node) || new Set()\n outgoing = Array.from(outgoing)\n\n if (i = outgoing.length) {\n predecessors.add(node)\n do {\n var child = outgoing[--i]\n visit(child, nodesHash.get(child), predecessors)\n } while (i)\n predecessors.delete(node)\n }\n\n sorted[--cursor] = node\n }\n}\n\nfunction uniqueNodes(arr){\n var res = new Set()\n for (var i = 0, len = arr.length; i < len; i++) {\n var edge = arr[i]\n res.add(edge[0])\n res.add(edge[1])\n }\n return Array.from(res)\n}\n\nfunction makeOutgoingEdges(arr){\n var edges = new Map()\n for (var i = 0, len = arr.length; i < len; i++) {\n var edge = arr[i]\n if (!edges.has(edge[0])) edges.set(edge[0], new Set())\n if (!edges.has(edge[1])) edges.set(edge[1], new Set())\n edges.get(edge[0]).add(edge[1])\n }\n return edges\n}\n\nfunction makeNodesHash(arr){\n var res = new Map()\n for (var i = 0, len = arr.length; i < len; i++) {\n res.set(arr[i], i)\n }\n return res\n}\n", "//---------------------------------------------------------------------\n//\n// QR Code Generator for JavaScript\n//\n// Copyright (c) 2009 Kazuhiko Arase\n//\n// URL: http://www.d-project.com/\n//\n// Licensed under the MIT license:\n// http://www.opensource.org/licenses/mit-license.php\n//\n// The word 'QR Code' is registered trademark of\n// DENSO WAVE INCORPORATED\n// http://www.denso-wave.com/qrcode/faqpatent-e.html\n//\n//---------------------------------------------------------------------\n\nvar qrcode = function() {\n\n //---------------------------------------------------------------------\n // qrcode\n //---------------------------------------------------------------------\n\n /**\n * qrcode\n * @param typeNumber 1 to 40\n * @param errorCorrectionLevel 'L','M','Q','H'\n */\n var qrcode = function(typeNumber, errorCorrectionLevel) {\n\n var PAD0 = 0xEC;\n var PAD1 = 0x11;\n\n var _typeNumber = typeNumber;\n var _errorCorrectionLevel = QRErrorCorrectionLevel[errorCorrectionLevel];\n var _modules = null;\n var _moduleCount = 0;\n var _dataCache = null;\n var _dataList = [];\n\n var _this = {};\n\n var makeImpl = function(test, maskPattern) {\n\n _moduleCount = _typeNumber * 4 + 17;\n _modules = function(moduleCount) {\n var modules = new Array(moduleCount);\n for (var row = 0; row < moduleCount; row += 1) {\n modules[row] = new Array(moduleCount);\n for (var col = 0; col < moduleCount; col += 1) {\n modules[row][col] = null;\n }\n }\n return modules;\n }(_moduleCount);\n\n setupPositionProbePattern(0, 0);\n setupPositionProbePattern(_moduleCount - 7, 0);\n setupPositionProbePattern(0, _moduleCount - 7);\n setupPositionAdjustPattern();\n setupTimingPattern();\n setupTypeInfo(test, maskPattern);\n\n if (_typeNumber >= 7) {\n setupTypeNumber(test);\n }\n\n if (_dataCache == null) {\n _dataCache = createData(_typeNumber, _errorCorrectionLevel, _dataList);\n }\n\n mapData(_dataCache, maskPattern);\n };\n\n var setupPositionProbePattern = function(row, col) {\n\n for (var r = -1; r <= 7; r += 1) {\n\n if (row + r <= -1 || _moduleCount <= row + r) continue;\n\n for (var c = -1; c <= 7; c += 1) {\n\n if (col + c <= -1 || _moduleCount <= col + c) continue;\n\n if ( (0 <= r && r <= 6 && (c == 0 || c == 6) )\n || (0 <= c && c <= 6 && (r == 0 || r == 6) )\n || (2 <= r && r <= 4 && 2 <= c && c <= 4) ) {\n _modules[row + r][col + c] = true;\n } else {\n _modules[row + r][col + c] = false;\n }\n }\n }\n };\n\n var getBestMaskPattern = function() {\n\n var minLostPoint = 0;\n var pattern = 0;\n\n for (var i = 0; i < 8; i += 1) {\n\n makeImpl(true, i);\n\n var lostPoint = QRUtil.getLostPoint(_this);\n\n if (i == 0 || minLostPoint > lostPoint) {\n minLostPoint = lostPoint;\n pattern = i;\n }\n }\n\n return pattern;\n };\n\n var setupTimingPattern = function() {\n\n for (var r = 8; r < _moduleCount - 8; r += 1) {\n if (_modules[r][6] != null) {\n continue;\n }\n _modules[r][6] = (r % 2 == 0);\n }\n\n for (var c = 8; c < _moduleCount - 8; c += 1) {\n if (_modules[6][c] != null) {\n continue;\n }\n _modules[6][c] = (c % 2 == 0);\n }\n };\n\n var setupPositionAdjustPattern = function() {\n\n var pos = QRUtil.getPatternPosition(_typeNumber);\n\n for (var i = 0; i < pos.length; i += 1) {\n\n for (var j = 0; j < pos.length; j += 1) {\n\n var row = pos[i];\n var col = pos[j];\n\n if (_modules[row][col] != null) {\n continue;\n }\n\n for (var r = -2; r <= 2; r += 1) {\n\n for (var c = -2; c <= 2; c += 1) {\n\n if (r == -2 || r == 2 || c == -2 || c == 2\n || (r == 0 && c == 0) ) {\n _modules[row + r][col + c] = true;\n } else {\n _modules[row + r][col + c] = false;\n }\n }\n }\n }\n }\n };\n\n var setupTypeNumber = function(test) {\n\n var bits = QRUtil.getBCHTypeNumber(_typeNumber);\n\n for (var i = 0; i < 18; i += 1) {\n var mod = (!test && ( (bits >> i) & 1) == 1);\n _modules[Math.floor(i / 3)][i % 3 + _moduleCount - 8 - 3] = mod;\n }\n\n for (var i = 0; i < 18; i += 1) {\n var mod = (!test && ( (bits >> i) & 1) == 1);\n _modules[i % 3 + _moduleCount - 8 - 3][Math.floor(i / 3)] = mod;\n }\n };\n\n var setupTypeInfo = function(test, maskPattern) {\n\n var data = (_errorCorrectionLevel << 3) | maskPattern;\n var bits = QRUtil.getBCHTypeInfo(data);\n\n // vertical\n for (var i = 0; i < 15; i += 1) {\n\n var mod = (!test && ( (bits >> i) & 1) == 1);\n\n if (i < 6) {\n _modules[i][8] = mod;\n } else if (i < 8) {\n _modules[i + 1][8] = mod;\n } else {\n _modules[_moduleCount - 15 + i][8] = mod;\n }\n }\n\n // horizontal\n for (var i = 0; i < 15; i += 1) {\n\n var mod = (!test && ( (bits >> i) & 1) == 1);\n\n if (i < 8) {\n _modules[8][_moduleCount - i - 1] = mod;\n } else if (i < 9) {\n _modules[8][15 - i - 1 + 1] = mod;\n } else {\n _modules[8][15 - i - 1] = mod;\n }\n }\n\n // fixed module\n _modules[_moduleCount - 8][8] = (!test);\n };\n\n var mapData = function(data, maskPattern) {\n\n var inc = -1;\n var row = _moduleCount - 1;\n var bitIndex = 7;\n var byteIndex = 0;\n var maskFunc = QRUtil.getMaskFunction(maskPattern);\n\n for (var col = _moduleCount - 1; col > 0; col -= 2) {\n\n if (col == 6) col -= 1;\n\n while (true) {\n\n for (var c = 0; c < 2; c += 1) {\n\n if (_modules[row][col - c] == null) {\n\n var dark = false;\n\n if (byteIndex < data.length) {\n dark = ( ( (data[byteIndex] >>> bitIndex) & 1) == 1);\n }\n\n var mask = maskFunc(row, col - c);\n\n if (mask) {\n dark = !dark;\n }\n\n _modules[row][col - c] = dark;\n bitIndex -= 1;\n\n if (bitIndex == -1) {\n byteIndex += 1;\n bitIndex = 7;\n }\n }\n }\n\n row += inc;\n\n if (row < 0 || _moduleCount <= row) {\n row -= inc;\n inc = -inc;\n break;\n }\n }\n }\n };\n\n var createBytes = function(buffer, rsBlocks) {\n\n var offset = 0;\n\n var maxDcCount = 0;\n var maxEcCount = 0;\n\n var dcdata = new Array(rsBlocks.length);\n var ecdata = new Array(rsBlocks.length);\n\n for (var r = 0; r < rsBlocks.length; r += 1) {\n\n var dcCount = rsBlocks[r].dataCount;\n var ecCount = rsBlocks[r].totalCount - dcCount;\n\n maxDcCount = Math.max(maxDcCount, dcCount);\n maxEcCount = Math.max(maxEcCount, ecCount);\n\n dcdata[r] = new Array(dcCount);\n\n for (var i = 0; i < dcdata[r].length; i += 1) {\n dcdata[r][i] = 0xff & buffer.getBuffer()[i + offset];\n }\n offset += dcCount;\n\n var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);\n var rawPoly = qrPolynomial(dcdata[r], rsPoly.getLength() - 1);\n\n var modPoly = rawPoly.mod(rsPoly);\n ecdata[r] = new Array(rsPoly.getLength() - 1);\n for (var i = 0; i < ecdata[r].length; i += 1) {\n var modIndex = i + modPoly.getLength() - ecdata[r].length;\n ecdata[r][i] = (modIndex >= 0)? modPoly.getAt(modIndex) : 0;\n }\n }\n\n var totalCodeCount = 0;\n for (var i = 0; i < rsBlocks.length; i += 1) {\n totalCodeCount += rsBlocks[i].totalCount;\n }\n\n var data = new Array(totalCodeCount);\n var index = 0;\n\n for (var i = 0; i < maxDcCount; i += 1) {\n for (var r = 0; r < rsBlocks.length; r += 1) {\n if (i < dcdata[r].length) {\n data[index] = dcdata[r][i];\n index += 1;\n }\n }\n }\n\n for (var i = 0; i < maxEcCount; i += 1) {\n for (var r = 0; r < rsBlocks.length; r += 1) {\n if (i < ecdata[r].length) {\n data[index] = ecdata[r][i];\n index += 1;\n }\n }\n }\n\n return data;\n };\n\n var createData = function(typeNumber, errorCorrectionLevel, dataList) {\n\n var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectionLevel);\n\n var buffer = qrBitBuffer();\n\n for (var i = 0; i < dataList.length; i += 1) {\n var data = dataList[i];\n buffer.put(data.getMode(), 4);\n buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) );\n data.write(buffer);\n }\n\n // calc num max data.\n var totalDataCount = 0;\n for (var i = 0; i < rsBlocks.length; i += 1) {\n totalDataCount += rsBlocks[i].dataCount;\n }\n\n if (buffer.getLengthInBits() > totalDataCount * 8) {\n throw 'code length overflow. ('\n + buffer.getLengthInBits()\n + '>'\n + totalDataCount * 8\n + ')';\n }\n\n // end code\n if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {\n buffer.put(0, 4);\n }\n\n // padding\n while (buffer.getLengthInBits() % 8 != 0) {\n buffer.putBit(false);\n }\n\n // padding\n while (true) {\n\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n buffer.put(PAD0, 8);\n\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n buffer.put(PAD1, 8);\n }\n\n return createBytes(buffer, rsBlocks);\n };\n\n _this.addData = function(data, mode) {\n\n mode = mode || 'Byte';\n\n var newData = null;\n\n switch(mode) {\n case 'Numeric' :\n newData = qrNumber(data);\n break;\n case 'Alphanumeric' :\n newData = qrAlphaNum(data);\n break;\n case 'Byte' :\n newData = qr8BitByte(data);\n break;\n case 'Kanji' :\n newData = qrKanji(data);\n break;\n default :\n throw 'mode:' + mode;\n }\n\n _dataList.push(newData);\n _dataCache = null;\n };\n\n _this.isDark = function(row, col) {\n if (row < 0 || _moduleCount <= row || col < 0 || _moduleCount <= col) {\n throw row + ',' + col;\n }\n return _modules[row][col];\n };\n\n _this.getModuleCount = function() {\n return _moduleCount;\n };\n\n _this.make = function() {\n if (_typeNumber < 1) {\n var typeNumber = 1;\n\n for (; typeNumber < 40; typeNumber++) {\n var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, _errorCorrectionLevel);\n var buffer = qrBitBuffer();\n\n for (var i = 0; i < _dataList.length; i++) {\n var data = _dataList[i];\n buffer.put(data.getMode(), 4);\n buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) );\n data.write(buffer);\n }\n\n var totalDataCount = 0;\n for (var i = 0; i < rsBlocks.length; i++) {\n totalDataCount += rsBlocks[i].dataCount;\n }\n\n if (buffer.getLengthInBits() <= totalDataCount * 8) {\n break;\n }\n }\n\n _typeNumber = typeNumber;\n }\n\n makeImpl(false, getBestMaskPattern() );\n };\n\n _this.createTableTag = function(cellSize, margin) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n var qrHtml = '';\n\n qrHtml += '<table style=\"';\n qrHtml += ' border-width: 0px; border-style: none;';\n qrHtml += ' border-collapse: collapse;';\n qrHtml += ' padding: 0px; margin: ' + margin + 'px;';\n qrHtml += '\">';\n qrHtml += '<tbody>';\n\n for (var r = 0; r < _this.getModuleCount(); r += 1) {\n\n qrHtml += '<tr>';\n\n for (var c = 0; c < _this.getModuleCount(); c += 1) {\n qrHtml += '<td style=\"';\n qrHtml += ' border-width: 0px; border-style: none;';\n qrHtml += ' border-collapse: collapse;';\n qrHtml += ' padding: 0px; margin: 0px;';\n qrHtml += ' width: ' + cellSize + 'px;';\n qrHtml += ' height: ' + cellSize + 'px;';\n qrHtml += ' background-color: ';\n qrHtml += _this.isDark(r, c)? '#000000' : '#ffffff';\n qrHtml += ';';\n qrHtml += '\"/>';\n }\n\n qrHtml += '</tr>';\n }\n\n qrHtml += '</tbody>';\n qrHtml += '</table>';\n\n return qrHtml;\n };\n\n _this.createSvgTag = function(cellSize, margin, alt, title) {\n\n var opts = {};\n if (typeof arguments[0] == 'object') {\n // Called by options.\n opts = arguments[0];\n // overwrite cellSize and margin.\n cellSize = opts.cellSize;\n margin = opts.margin;\n alt = opts.alt;\n title = opts.title;\n }\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n // Compose alt property surrogate\n alt = (typeof alt === 'string') ? {text: alt} : alt || {};\n alt.text = alt.text || null;\n alt.id = (alt.text) ? alt.id || 'qrcode-description' : null;\n\n // Compose title property surrogate\n title = (typeof title === 'string') ? {text: title} : title || {};\n title.text = title.text || null;\n title.id = (title.text) ? title.id || 'qrcode-title' : null;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n var c, mc, r, mr, qrSvg='', rect;\n\n rect = 'l' + cellSize + ',0 0,' + cellSize +\n ' -' + cellSize + ',0 0,-' + cellSize + 'z ';\n\n qrSvg += '<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"';\n qrSvg += !opts.scalable ? ' width=\"' + size + 'px\" height=\"' + size + 'px\"' : '';\n qrSvg += ' viewBox=\"0 0 ' + size + ' ' + size + '\" ';\n qrSvg += ' preserveAspectRatio=\"xMinYMin meet\"';\n qrSvg += (title.text || alt.text) ? ' role=\"img\" aria-labelledby=\"' +\n escapeXml([title.id, alt.id].join(' ').trim() ) + '\"' : '';\n qrSvg += '>';\n qrSvg += (title.text) ? '<title id=\"' + escapeXml(title.id) + '\">' +\n escapeXml(title.text) + '</title>' : '';\n qrSvg += (alt.text) ? '<description id=\"' + escapeXml(alt.id) + '\">' +\n escapeXml(alt.text) + '</description>' : '';\n qrSvg += '<rect width=\"100%\" height=\"100%\" fill=\"white\" cx=\"0\" cy=\"0\"/>';\n qrSvg += '<path d=\"';\n\n for (r = 0; r < _this.getModuleCount(); r += 1) {\n mr = r * cellSize + margin;\n for (c = 0; c < _this.getModuleCount(); c += 1) {\n if (_this.isDark(r, c) ) {\n mc = c*cellSize+margin;\n qrSvg += 'M' + mc + ',' + mr + rect;\n }\n }\n }\n\n qrSvg += '\" stroke=\"transparent\" fill=\"black\"/>';\n qrSvg += '</svg>';\n\n return qrSvg;\n };\n\n _this.createDataURL = function(cellSize, margin) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n var min = margin;\n var max = size - margin;\n\n return createDataURL(size, size, function(x, y) {\n if (min <= x && x < max && min <= y && y < max) {\n var c = Math.floor( (x - min) / cellSize);\n var r = Math.floor( (y - min) / cellSize);\n return _this.isDark(r, c)? 0 : 1;\n } else {\n return 1;\n }\n } );\n };\n\n _this.createImgTag = function(cellSize, margin, alt) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n\n var img = '';\n img += '<img';\n img += '\\u0020src=\"';\n img += _this.createDataURL(cellSize, margin);\n img += '\"';\n img += '\\u0020width=\"';\n img += size;\n img += '\"';\n img += '\\u0020height=\"';\n img += size;\n img += '\"';\n if (alt) {\n img += '\\u0020alt=\"';\n img += escapeXml(alt);\n img += '\"';\n }\n img += '/>';\n\n return img;\n };\n\n var escapeXml = function(s) {\n var escaped = '';\n for (var i = 0; i < s.length; i += 1) {\n var c = s.charAt(i);\n switch(c) {\n case '<': escaped += '&lt;'; break;\n case '>': escaped += '&gt;'; break;\n case '&': escaped += '&amp;'; break;\n case '\"': escaped += '&quot;'; break;\n default : escaped += c; break;\n }\n }\n return escaped;\n };\n\n var _createHalfASCII = function(margin) {\n var cellSize = 1;\n margin = (typeof margin == 'undefined')? cellSize * 2 : margin;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n var min = margin;\n var max = size - margin;\n\n var y, x, r1, r2, p;\n\n var blocks = {\n '\u2588\u2588': '\u2588',\n '\u2588 ': '\u2580',\n ' \u2588': '\u2584',\n ' ': ' '\n };\n\n var blocksLastLineNoMargin = {\n '\u2588\u2588': '\u2580',\n '\u2588 ': '\u2580',\n ' \u2588': ' ',\n ' ': ' '\n };\n\n var ascii = '';\n for (y = 0; y < size; y += 2) {\n r1 = Math.floor((y - min) / cellSize);\n r2 = Math.floor((y + 1 - min) / cellSize);\n for (x = 0; x < size; x += 1) {\n p = '\u2588';\n\n if (min <= x && x < max && min <= y && y < max && _this.isDark(r1, Math.floor((x - min) / cellSize))) {\n p = ' ';\n }\n\n if (min <= x && x < max && min <= y+1 && y+1 < max && _this.isDark(r2, Math.floor((x - min) / cellSize))) {\n p += ' ';\n }\n else {\n p += '\u2588';\n }\n\n // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square.\n ascii += (margin < 1 && y+1 >= max) ? blocksLastLineNoMargin[p] : blocks[p];\n }\n\n ascii += '\\n';\n }\n\n if (size % 2 && margin > 0) {\n return ascii.substring(0, ascii.length - size - 1) + Array(size+1).join('\u2580');\n }\n\n return ascii.substring(0, ascii.length-1);\n };\n\n _this.createASCII = function(cellSize, margin) {\n cellSize = cellSize || 1;\n\n if (cellSize < 2) {\n return _createHalfASCII(margin);\n }\n\n cellSize -= 1;\n margin = (typeof margin == 'undefined')? cellSize * 2 : margin;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n var min = margin;\n var max = size - margin;\n\n var y, x, r, p;\n\n var white = Array(cellSize+1).join('\u2588\u2588');\n var black = Array(cellSize+1).join(' ');\n\n var ascii = '';\n var line = '';\n for (y = 0; y < size; y += 1) {\n r = Math.floor( (y - min) / cellSize);\n line = '';\n for (x = 0; x < size; x += 1) {\n p = 1;\n\n if (min <= x && x < max && min <= y && y < max && _this.isDark(r, Math.floor((x - min) / cellSize))) {\n p = 0;\n }\n\n // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square.\n line += p ? white : black;\n }\n\n for (r = 0; r < cellSize; r += 1) {\n ascii += line + '\\n';\n }\n }\n\n return ascii.substring(0, ascii.length-1);\n };\n\n _this.renderTo2dContext = function(context, cellSize) {\n cellSize = cellSize || 2;\n var length = _this.getModuleCount();\n for (var row = 0; row < length; row++) {\n for (var col = 0; col < length; col++) {\n context.fillStyle = _this.isDark(row, col) ? 'black' : 'white';\n context.fillRect(row * cellSize, col * cellSize, cellSize, cellSize);\n }\n }\n }\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrcode.stringToBytes\n //---------------------------------------------------------------------\n\n qrcode.stringToBytesFuncs = {\n 'default' : function(s) {\n var bytes = [];\n for (var i = 0; i < s.length; i += 1) {\n var c = s.charCodeAt(i);\n bytes.push(c & 0xff);\n }\n return bytes;\n }\n };\n\n qrcode.stringToBytes = qrcode.stringToBytesFuncs['default'];\n\n //---------------------------------------------------------------------\n // qrcode.createStringToBytes\n //---------------------------------------------------------------------\n\n /**\n * @param unicodeData base64 string of byte array.\n * [16bit Unicode],[16bit Bytes], ...\n * @param numChars\n */\n qrcode.createStringToBytes = function(unicodeData, numChars) {\n\n // create conversion map.\n\n var unicodeMap = function() {\n\n var bin = base64DecodeInputStream(unicodeData);\n var read = function() {\n var b = bin.read();\n if (b == -1) throw 'eof';\n return b;\n };\n\n var count = 0;\n var unicodeMap = {};\n while (true) {\n var b0 = bin.read();\n if (b0 == -1) break;\n var b1 = read();\n var b2 = read();\n var b3 = read();\n var k = String.fromCharCode( (b0 << 8) | b1);\n var v = (b2 << 8) | b3;\n unicodeMap[k] = v;\n count += 1;\n }\n if (count != numChars) {\n throw count + ' != ' + numChars;\n }\n\n return unicodeMap;\n }();\n\n var unknownChar = '?'.charCodeAt(0);\n\n return function(s) {\n var bytes = [];\n for (var i = 0; i < s.length; i += 1) {\n var c = s.charCodeAt(i);\n if (c < 128) {\n bytes.push(c);\n } else {\n var b = unicodeMap[s.charAt(i)];\n if (typeof b == 'number') {\n if ( (b & 0xff) == b) {\n // 1byte\n bytes.push(b);\n } else {\n // 2bytes\n bytes.push(b >>> 8);\n bytes.push(b & 0xff);\n }\n } else {\n bytes.push(unknownChar);\n }\n }\n }\n return bytes;\n };\n };\n\n //---------------------------------------------------------------------\n // QRMode\n //---------------------------------------------------------------------\n\n var QRMode = {\n MODE_NUMBER : 1 << 0,\n MODE_ALPHA_NUM : 1 << 1,\n MODE_8BIT_BYTE : 1 << 2,\n MODE_KANJI : 1 << 3\n };\n\n //---------------------------------------------------------------------\n // QRErrorCorrectionLevel\n //---------------------------------------------------------------------\n\n var QRErrorCorrectionLevel = {\n L : 1,\n M : 0,\n Q : 3,\n H : 2\n };\n\n //---------------------------------------------------------------------\n // QRMaskPattern\n //---------------------------------------------------------------------\n\n var QRMaskPattern = {\n PATTERN000 : 0,\n PATTERN001 : 1,\n PATTERN010 : 2,\n PATTERN011 : 3,\n PATTERN100 : 4,\n PATTERN101 : 5,\n PATTERN110 : 6,\n PATTERN111 : 7\n };\n\n //---------------------------------------------------------------------\n // QRUtil\n //---------------------------------------------------------------------\n\n var QRUtil = function() {\n\n var PATTERN_POSITION_TABLE = [\n [],\n [6, 18],\n [6, 22],\n [6, 26],\n [6, 30],\n [6, 34],\n [6, 22, 38],\n [6, 24, 42],\n [6, 26, 46],\n [6, 28, 50],\n [6, 30, 54],\n [6, 32, 58],\n [6, 34, 62],\n [6, 26, 46, 66],\n [6, 26, 48, 70],\n [6, 26, 50, 74],\n [6, 30, 54, 78],\n [6, 30, 56, 82],\n [6, 30, 58, 86],\n [6, 34, 62, 90],\n [6, 28, 50, 72, 94],\n [6, 26, 50, 74, 98],\n [6, 30, 54, 78, 102],\n [6, 28, 54, 80, 106],\n [6, 32, 58, 84, 110],\n [6, 30, 58, 86, 114],\n [6, 34, 62, 90, 118],\n [6, 26, 50, 74, 98, 122],\n [6, 30, 54, 78, 102, 126],\n [6, 26, 52, 78, 104, 130],\n [6, 30, 56, 82, 108, 134],\n [6, 34, 60, 86, 112, 138],\n [6, 30, 58, 86, 114, 142],\n [6, 34, 62, 90, 118, 146],\n [6, 30, 54, 78, 102, 126, 150],\n [6, 24, 50, 76, 102, 128, 154],\n [6, 28, 54, 80, 106, 132, 158],\n [6, 32, 58, 84, 110, 136, 162],\n [6, 26, 54, 82, 110, 138, 166],\n [6, 30, 58, 86, 114, 142, 170]\n ];\n var G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);\n var G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0);\n var G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);\n\n var _this = {};\n\n var getBCHDigit = function(data) {\n var digit = 0;\n while (data != 0) {\n digit += 1;\n data >>>= 1;\n }\n return digit;\n };\n\n _this.getBCHTypeInfo = function(data) {\n var d = data << 10;\n while (getBCHDigit(d) - getBCHDigit(G15) >= 0) {\n d ^= (G15 << (getBCHDigit(d) - getBCHDigit(G15) ) );\n }\n return ( (data << 10) | d) ^ G15_MASK;\n };\n\n _this.getBCHTypeNumber = function(data) {\n var d = data << 12;\n while (getBCHDigit(d) - getBCHDigit(G18) >= 0) {\n d ^= (G18 << (getBCHDigit(d) - getBCHDigit(G18) ) );\n }\n return (data << 12) | d;\n };\n\n _this.getPatternPosition = function(typeNumber) {\n return PATTERN_POSITION_TABLE[typeNumber - 1];\n };\n\n _this.getMaskFunction = function(maskPattern) {\n\n switch (maskPattern) {\n\n case QRMaskPattern.PATTERN000 :\n return function(i, j) { return (i + j) % 2 == 0; };\n case QRMaskPattern.PATTERN001 :\n return function(i, j) { return i % 2 == 0; };\n case QRMaskPattern.PATTERN010 :\n return function(i, j) { return j % 3 == 0; };\n case QRMaskPattern.PATTERN011 :\n return function(i, j) { return (i + j) % 3 == 0; };\n case QRMaskPattern.PATTERN100 :\n return function(i, j) { return (Math.floor(i / 2) + Math.floor(j / 3) ) % 2 == 0; };\n case QRMaskPattern.PATTERN101 :\n return function(i, j) { return (i * j) % 2 + (i * j) % 3 == 0; };\n case QRMaskPattern.PATTERN110 :\n return function(i, j) { return ( (i * j) % 2 + (i * j) % 3) % 2 == 0; };\n case QRMaskPattern.PATTERN111 :\n return function(i, j) { return ( (i * j) % 3 + (i + j) % 2) % 2 == 0; };\n\n default :\n throw 'bad maskPattern:' + maskPattern;\n }\n };\n\n _this.getErrorCorrectPolynomial = function(errorCorrectLength) {\n var a = qrPolynomial([1], 0);\n for (var i = 0; i < errorCorrectLength; i += 1) {\n a = a.multiply(qrPolynomial([1, QRMath.gexp(i)], 0) );\n }\n return a;\n };\n\n _this.getLengthInBits = function(mode, type) {\n\n if (1 <= type && type < 10) {\n\n // 1 - 9\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 10;\n case QRMode.MODE_ALPHA_NUM : return 9;\n case QRMode.MODE_8BIT_BYTE : return 8;\n case QRMode.MODE_KANJI : return 8;\n default :\n throw 'mode:' + mode;\n }\n\n } else if (type < 27) {\n\n // 10 - 26\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 12;\n case QRMode.MODE_ALPHA_NUM : return 11;\n case QRMode.MODE_8BIT_BYTE : return 16;\n case QRMode.MODE_KANJI : return 10;\n default :\n throw 'mode:' + mode;\n }\n\n } else if (type < 41) {\n\n // 27 - 40\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 14;\n case QRMode.MODE_ALPHA_NUM : return 13;\n case QRMode.MODE_8BIT_BYTE : return 16;\n case QRMode.MODE_KANJI : return 12;\n default :\n throw 'mode:' + mode;\n }\n\n } else {\n throw 'type:' + type;\n }\n };\n\n _this.getLostPoint = function(qrcode) {\n\n var moduleCount = qrcode.getModuleCount();\n\n var lostPoint = 0;\n\n // LEVEL1\n\n for (var row = 0; row < moduleCount; row += 1) {\n for (var col = 0; col < moduleCount; col += 1) {\n\n var sameCount = 0;\n var dark = qrcode.isDark(row, col);\n\n for (var r = -1; r <= 1; r += 1) {\n\n if (row + r < 0 || moduleCount <= row + r) {\n continue;\n }\n\n for (var c = -1; c <= 1; c += 1) {\n\n if (col + c < 0 || moduleCount <= col + c) {\n continue;\n }\n\n if (r == 0 && c == 0) {\n continue;\n }\n\n if (dark == qrcode.isDark(row + r, col + c) ) {\n sameCount += 1;\n }\n }\n }\n\n if (sameCount > 5) {\n lostPoint += (3 + sameCount - 5);\n }\n }\n };\n\n // LEVEL2\n\n for (var row = 0; row < moduleCount - 1; row += 1) {\n for (var col = 0; col < moduleCount - 1; col += 1) {\n var count = 0;\n if (qrcode.isDark(row, col) ) count += 1;\n if (qrcode.isDark(row + 1, col) ) count += 1;\n if (qrcode.isDark(row, col + 1) ) count += 1;\n if (qrcode.isDark(row + 1, col + 1) ) count += 1;\n if (count == 0 || count == 4) {\n lostPoint += 3;\n }\n }\n }\n\n // LEVEL3\n\n for (var row = 0; row < moduleCount; row += 1) {\n for (var col = 0; col < moduleCount - 6; col += 1) {\n if (qrcode.isDark(row, col)\n && !qrcode.isDark(row, col + 1)\n && qrcode.isDark(row, col + 2)\n && qrcode.isDark(row, col + 3)\n && qrcode.isDark(row, col + 4)\n && !qrcode.isDark(row, col + 5)\n && qrcode.isDark(row, col + 6) ) {\n lostPoint += 40;\n }\n }\n }\n\n for (var col = 0; col < moduleCount; col += 1) {\n for (var row = 0; row < moduleCount - 6; row += 1) {\n if (qrcode.isDark(row, col)\n && !qrcode.isDark(row + 1, col)\n && qrcode.isDark(row + 2, col)\n && qrcode.isDark(row + 3, col)\n && qrcode.isDark(row + 4, col)\n && !qrcode.isDark(row + 5, col)\n && qrcode.isDark(row + 6, col) ) {\n lostPoint += 40;\n }\n }\n }\n\n // LEVEL4\n\n var darkCount = 0;\n\n for (var col = 0; col < moduleCount; col += 1) {\n for (var row = 0; row < moduleCount; row += 1) {\n if (qrcode.isDark(row, col) ) {\n darkCount += 1;\n }\n }\n }\n\n var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;\n lostPoint += ratio * 10;\n\n return lostPoint;\n };\n\n return _this;\n }();\n\n //---------------------------------------------------------------------\n // QRMath\n //---------------------------------------------------------------------\n\n var QRMath = function() {\n\n var EXP_TABLE = new Array(256);\n var LOG_TABLE = new Array(256);\n\n // initialize tables\n for (var i = 0; i < 8; i += 1) {\n EXP_TABLE[i] = 1 << i;\n }\n for (var i = 8; i < 256; i += 1) {\n EXP_TABLE[i] = EXP_TABLE[i - 4]\n ^ EXP_TABLE[i - 5]\n ^ EXP_TABLE[i - 6]\n ^ EXP_TABLE[i - 8];\n }\n for (var i = 0; i < 255; i += 1) {\n LOG_TABLE[EXP_TABLE[i] ] = i;\n }\n\n var _this = {};\n\n _this.glog = function(n) {\n\n if (n < 1) {\n throw 'glog(' + n + ')';\n }\n\n return LOG_TABLE[n];\n };\n\n _this.gexp = function(n) {\n\n while (n < 0) {\n n += 255;\n }\n\n while (n >= 256) {\n n -= 255;\n }\n\n return EXP_TABLE[n];\n };\n\n return _this;\n }();\n\n //---------------------------------------------------------------------\n // qrPolynomial\n //---------------------------------------------------------------------\n\n function qrPolynomial(num, shift) {\n\n if (typeof num.length == 'undefined') {\n throw num.length + '/' + shift;\n }\n\n var _num = function() {\n var offset = 0;\n while (offset < num.length && num[offset] == 0) {\n offset += 1;\n }\n var _num = new Array(num.length - offset + shift);\n for (var i = 0; i < num.length - offset; i += 1) {\n _num[i] = num[i + offset];\n }\n return _num;\n }();\n\n var _this = {};\n\n _this.getAt = function(index) {\n return _num[index];\n };\n\n _this.getLength = function() {\n return _num.length;\n };\n\n _this.multiply = function(e) {\n\n var num = new Array(_this.getLength() + e.getLength() - 1);\n\n for (var i = 0; i < _this.getLength(); i += 1) {\n for (var j = 0; j < e.getLength(); j += 1) {\n num[i + j] ^= QRMath.gexp(QRMath.glog(_this.getAt(i) ) + QRMath.glog(e.getAt(j) ) );\n }\n }\n\n return qrPolynomial(num, 0);\n };\n\n _this.mod = function(e) {\n\n if (_this.getLength() - e.getLength() < 0) {\n return _this;\n }\n\n var ratio = QRMath.glog(_this.getAt(0) ) - QRMath.glog(e.getAt(0) );\n\n var num = new Array(_this.getLength() );\n for (var i = 0; i < _this.getLength(); i += 1) {\n num[i] = _this.getAt(i);\n }\n\n for (var i = 0; i < e.getLength(); i += 1) {\n num[i] ^= QRMath.gexp(QRMath.glog(e.getAt(i) ) + ratio);\n }\n\n // recursive call\n return qrPolynomial(num, 0).mod(e);\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // QRRSBlock\n //---------------------------------------------------------------------\n\n var QRRSBlock = function() {\n\n var RS_BLOCK_TABLE = [\n\n // L\n // M\n // Q\n // H\n\n // 1\n [1, 26, 19],\n [1, 26, 16],\n [1, 26, 13],\n [1, 26, 9],\n\n // 2\n [1, 44, 34],\n [1, 44, 28],\n [1, 44, 22],\n [1, 44, 16],\n\n // 3\n [1, 70, 55],\n [1, 70, 44],\n [2, 35, 17],\n [2, 35, 13],\n\n // 4\n [1, 100, 80],\n [2, 50, 32],\n [2, 50, 24],\n [4, 25, 9],\n\n // 5\n [1, 134, 108],\n [2, 67, 43],\n [2, 33, 15, 2, 34, 16],\n [2, 33, 11, 2, 34, 12],\n\n // 6\n [2, 86, 68],\n [4, 43, 27],\n [4, 43, 19],\n [4, 43, 15],\n\n // 7\n [2, 98, 78],\n [4, 49, 31],\n [2, 32, 14, 4, 33, 15],\n [4, 39, 13, 1, 40, 14],\n\n // 8\n [2, 121, 97],\n [2, 60, 38, 2, 61, 39],\n [4, 40, 18, 2, 41, 19],\n [4, 40, 14, 2, 41, 15],\n\n // 9\n [2, 146, 116],\n [3, 58, 36, 2, 59, 37],\n [4, 36, 16, 4, 37, 17],\n [4, 36, 12, 4, 37, 13],\n\n // 10\n [2, 86, 68, 2, 87, 69],\n [4, 69, 43, 1, 70, 44],\n [6, 43, 19, 2, 44, 20],\n [6, 43, 15, 2, 44, 16],\n\n // 11\n [4, 101, 81],\n [1, 80, 50, 4, 81, 51],\n [4, 50, 22, 4, 51, 23],\n [3, 36, 12, 8, 37, 13],\n\n // 12\n [2, 116, 92, 2, 117, 93],\n [6, 58, 36, 2, 59, 37],\n [4, 46, 20, 6, 47, 21],\n [7, 42, 14, 4, 43, 15],\n\n // 13\n [4, 133, 107],\n [8, 59, 37, 1, 60, 38],\n [8, 44, 20, 4, 45, 21],\n [12, 33, 11, 4, 34, 12],\n\n // 14\n [3, 145, 115, 1, 146, 116],\n [4, 64, 40, 5, 65, 41],\n [11, 36, 16, 5, 37, 17],\n [11, 36, 12, 5, 37, 13],\n\n // 15\n [5, 109, 87, 1, 110, 88],\n [5, 65, 41, 5, 66, 42],\n [5, 54, 24, 7, 55, 25],\n [11, 36, 12, 7, 37, 13],\n\n // 16\n [5, 122, 98, 1, 123, 99],\n [7, 73, 45, 3, 74, 46],\n [15, 43, 19, 2, 44, 20],\n [3, 45, 15, 13, 46, 16],\n\n // 17\n [1, 135, 107, 5, 136, 108],\n [10, 74, 46, 1, 75, 47],\n [1, 50, 22, 15, 51, 23],\n [2, 42, 14, 17, 43, 15],\n\n // 18\n [5, 150, 120, 1, 151, 121],\n [9, 69, 43, 4, 70, 44],\n [17, 50, 22, 1, 51, 23],\n [2, 42, 14, 19, 43, 15],\n\n // 19\n [3, 141, 113, 4, 142, 114],\n [3, 70, 44, 11, 71, 45],\n [17, 47, 21, 4, 48, 22],\n [9, 39, 13, 16, 40, 14],\n\n // 20\n [3, 135, 107, 5, 136, 108],\n [3, 67, 41, 13, 68, 42],\n [15, 54, 24, 5, 55, 25],\n [15, 43, 15, 10, 44, 16],\n\n // 21\n [4, 144, 116, 4, 145, 117],\n [17, 68, 42],\n [17, 50, 22, 6, 51, 23],\n [19, 46, 16, 6, 47, 17],\n\n // 22\n [2, 139, 111, 7, 140, 112],\n [17, 74, 46],\n [7, 54, 24, 16, 55, 25],\n [34, 37, 13],\n\n // 23\n [4, 151, 121, 5, 152, 122],\n [4, 75, 47, 14, 76, 48],\n [11, 54, 24, 14, 55, 25],\n [16, 45, 15, 14, 46, 16],\n\n // 24\n [6, 147, 117, 4, 148, 118],\n [6, 73, 45, 14, 74, 46],\n [11, 54, 24, 16, 55, 25],\n [30, 46, 16, 2, 47, 17],\n\n // 25\n [8, 132, 106, 4, 133, 107],\n [8, 75, 47, 13, 76, 48],\n [7, 54, 24, 22, 55, 25],\n [22, 45, 15, 13, 46, 16],\n\n // 26\n [10, 142, 114, 2, 143, 115],\n [19, 74, 46, 4, 75, 47],\n [28, 50, 22, 6, 51, 23],\n [33, 46, 16, 4, 47, 17],\n\n // 27\n [8, 152, 122, 4, 153, 123],\n [22, 73, 45, 3, 74, 46],\n [8, 53, 23, 26, 54, 24],\n [12, 45, 15, 28, 46, 16],\n\n // 28\n [3, 147, 117, 10, 148, 118],\n [3, 73, 45, 23, 74, 46],\n [4, 54, 24, 31, 55, 25],\n [11, 45, 15, 31, 46, 16],\n\n // 29\n [7, 146, 116, 7, 147, 117],\n [21, 73, 45, 7, 74, 46],\n [1, 53, 23, 37, 54, 24],\n [19, 45, 15, 26, 46, 16],\n\n // 30\n [5, 145, 115, 10, 146, 116],\n [19, 75, 47, 10, 76, 48],\n [15, 54, 24, 25, 55, 25],\n [23, 45, 15, 25, 46, 16],\n\n // 31\n [13, 145, 115, 3, 146, 116],\n [2, 74, 46, 29, 75, 47],\n [42, 54, 24, 1, 55, 25],\n [23, 45, 15, 28, 46, 16],\n\n // 32\n [17, 145, 115],\n [10, 74, 46, 23, 75, 47],\n [10, 54, 24, 35, 55, 25],\n [19, 45, 15, 35, 46, 16],\n\n // 33\n [17, 145, 115, 1, 146, 116],\n [14, 74, 46, 21, 75, 47],\n [29, 54, 24, 19, 55, 25],\n [11, 45, 15, 46, 46, 16],\n\n // 34\n [13, 145, 115, 6, 146, 116],\n [14, 74, 46, 23, 75, 47],\n [44, 54, 24, 7, 55, 25],\n [59, 46, 16, 1, 47, 17],\n\n // 35\n [12, 151, 121, 7, 152, 122],\n [12, 75, 47, 26, 76, 48],\n [39, 54, 24, 14, 55, 25],\n [22, 45, 15, 41, 46, 16],\n\n // 36\n [6, 151, 121, 14, 152, 122],\n [6, 75, 47, 34, 76, 48],\n [46, 54, 24, 10, 55, 25],\n [2, 45, 15, 64, 46, 16],\n\n // 37\n [17, 152, 122, 4, 153, 123],\n [29, 74, 46, 14, 75, 47],\n [49, 54, 24, 10, 55, 25],\n [24, 45, 15, 46, 46, 16],\n\n // 38\n [4, 152, 122, 18, 153, 123],\n [13, 74, 46, 32, 75, 47],\n [48, 54, 24, 14, 55, 25],\n [42, 45, 15, 32, 46, 16],\n\n // 39\n [20, 147, 117, 4, 148, 118],\n [40, 75, 47, 7, 76, 48],\n [43, 54, 24, 22, 55, 25],\n [10, 45, 15, 67, 46, 16],\n\n // 40\n [19, 148, 118, 6, 149, 119],\n [18, 75, 47, 31, 76, 48],\n [34, 54, 24, 34, 55, 25],\n [20, 45, 15, 61, 46, 16]\n ];\n\n var qrRSBlock = function(totalCount, dataCount) {\n var _this = {};\n _this.totalCount = totalCount;\n _this.dataCount = dataCount;\n return _this;\n };\n\n var _this = {};\n\n var getRsBlockTable = function(typeNumber, errorCorrectionLevel) {\n\n switch(errorCorrectionLevel) {\n case QRErrorCorrectionLevel.L :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];\n case QRErrorCorrectionLevel.M :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];\n case QRErrorCorrectionLevel.Q :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];\n case QRErrorCorrectionLevel.H :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];\n default :\n return undefined;\n }\n };\n\n _this.getRSBlocks = function(typeNumber, errorCorrectionLevel) {\n\n var rsBlock = getRsBlockTable(typeNumber, errorCorrectionLevel);\n\n if (typeof rsBlock == 'undefined') {\n throw 'bad rs block @ typeNumber:' + typeNumber +\n '/errorCorrectionLevel:' + errorCorrectionLevel;\n }\n\n var length = rsBlock.length / 3;\n\n var list = [];\n\n for (var i = 0; i < length; i += 1) {\n\n var count = rsBlock[i * 3 + 0];\n var totalCount = rsBlock[i * 3 + 1];\n var dataCount = rsBlock[i * 3 + 2];\n\n for (var j = 0; j < count; j += 1) {\n list.push(qrRSBlock(totalCount, dataCount) );\n }\n }\n\n return list;\n };\n\n return _this;\n }();\n\n //---------------------------------------------------------------------\n // qrBitBuffer\n //---------------------------------------------------------------------\n\n var qrBitBuffer = function() {\n\n var _buffer = [];\n var _length = 0;\n\n var _this = {};\n\n _this.getBuffer = function() {\n return _buffer;\n };\n\n _this.getAt = function(index) {\n var bufIndex = Math.floor(index / 8);\n return ( (_buffer[bufIndex] >>> (7 - index % 8) ) & 1) == 1;\n };\n\n _this.put = function(num, length) {\n for (var i = 0; i < length; i += 1) {\n _this.putBit( ( (num >>> (length - i - 1) ) & 1) == 1);\n }\n };\n\n _this.getLengthInBits = function() {\n return _length;\n };\n\n _this.putBit = function(bit) {\n\n var bufIndex = Math.floor(_length / 8);\n if (_buffer.length <= bufIndex) {\n _buffer.push(0);\n }\n\n if (bit) {\n _buffer[bufIndex] |= (0x80 >>> (_length % 8) );\n }\n\n _length += 1;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrNumber\n //---------------------------------------------------------------------\n\n var qrNumber = function(data) {\n\n var _mode = QRMode.MODE_NUMBER;\n var _data = data;\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _data.length;\n };\n\n _this.write = function(buffer) {\n\n var data = _data;\n\n var i = 0;\n\n while (i + 2 < data.length) {\n buffer.put(strToNum(data.substring(i, i + 3) ), 10);\n i += 3;\n }\n\n if (i < data.length) {\n if (data.length - i == 1) {\n buffer.put(strToNum(data.substring(i, i + 1) ), 4);\n } else if (data.length - i == 2) {\n buffer.put(strToNum(data.substring(i, i + 2) ), 7);\n }\n }\n };\n\n var strToNum = function(s) {\n var num = 0;\n for (var i = 0; i < s.length; i += 1) {\n num = num * 10 + chatToNum(s.charAt(i) );\n }\n return num;\n };\n\n var chatToNum = function(c) {\n if ('0' <= c && c <= '9') {\n return c.charCodeAt(0) - '0'.charCodeAt(0);\n }\n throw 'illegal char :' + c;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrAlphaNum\n //---------------------------------------------------------------------\n\n var qrAlphaNum = function(data) {\n\n var _mode = QRMode.MODE_ALPHA_NUM;\n var _data = data;\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _data.length;\n };\n\n _this.write = function(buffer) {\n\n var s = _data;\n\n var i = 0;\n\n while (i + 1 < s.length) {\n buffer.put(\n getCode(s.charAt(i) ) * 45 +\n getCode(s.charAt(i + 1) ), 11);\n i += 2;\n }\n\n if (i < s.length) {\n buffer.put(getCode(s.charAt(i) ), 6);\n }\n };\n\n var getCode = function(c) {\n\n if ('0' <= c && c <= '9') {\n return c.charCodeAt(0) - '0'.charCodeAt(0);\n } else if ('A' <= c && c <= 'Z') {\n return c.charCodeAt(0) - 'A'.charCodeAt(0) + 10;\n } else {\n switch (c) {\n case ' ' : return 36;\n case '$' : return 37;\n case '%' : return 38;\n case '*' : return 39;\n case '+' : return 40;\n case '-' : return 41;\n case '.' : return 42;\n case '/' : return 43;\n case ':' : return 44;\n default :\n throw 'illegal char :' + c;\n }\n }\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qr8BitByte\n //---------------------------------------------------------------------\n\n var qr8BitByte = function(data) {\n\n var _mode = QRMode.MODE_8BIT_BYTE;\n var _data = data;\n var _bytes = qrcode.stringToBytes(data);\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _bytes.length;\n };\n\n _this.write = function(buffer) {\n for (var i = 0; i < _bytes.length; i += 1) {\n buffer.put(_bytes[i], 8);\n }\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrKanji\n //---------------------------------------------------------------------\n\n var qrKanji = function(data) {\n\n var _mode = QRMode.MODE_KANJI;\n var _data = data;\n\n var stringToBytes = qrcode.stringToBytesFuncs['SJIS'];\n if (!stringToBytes) {\n throw 'sjis not supported.';\n }\n !function(c, code) {\n // self test for sjis support.\n var test = stringToBytes(c);\n if (test.length != 2 || ( (test[0] << 8) | test[1]) != code) {\n throw 'sjis not supported.';\n }\n }('\\u53cb', 0x9746);\n\n var _bytes = stringToBytes(data);\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return ~~(_bytes.length / 2);\n };\n\n _this.write = function(buffer) {\n\n var data = _bytes;\n\n var i = 0;\n\n while (i + 1 < data.length) {\n\n var c = ( (0xff & data[i]) << 8) | (0xff & data[i + 1]);\n\n if (0x8140 <= c && c <= 0x9FFC) {\n c -= 0x8140;\n } else if (0xE040 <= c && c <= 0xEBBF) {\n c -= 0xC140;\n } else {\n throw 'illegal char at ' + (i + 1) + '/' + c;\n }\n\n c = ( (c >>> 8) & 0xff) * 0xC0 + (c & 0xff);\n\n buffer.put(c, 13);\n\n i += 2;\n }\n\n if (i < data.length) {\n throw 'illegal char at ' + (i + 1);\n }\n };\n\n return _this;\n };\n\n //=====================================================================\n // GIF Support etc.\n //\n\n //---------------------------------------------------------------------\n // byteArrayOutputStream\n //---------------------------------------------------------------------\n\n var byteArrayOutputStream = function() {\n\n var _bytes = [];\n\n var _this = {};\n\n _this.writeByte = function(b) {\n _bytes.push(b & 0xff);\n };\n\n _this.writeShort = function(i) {\n _this.writeByte(i);\n _this.writeByte(i >>> 8);\n };\n\n _this.writeBytes = function(b, off, len) {\n off = off || 0;\n len = len || b.length;\n for (var i = 0; i < len; i += 1) {\n _this.writeByte(b[i + off]);\n }\n };\n\n _this.writeString = function(s) {\n for (var i = 0; i < s.length; i += 1) {\n _this.writeByte(s.charCodeAt(i) );\n }\n };\n\n _this.toByteArray = function() {\n return _bytes;\n };\n\n _this.toString = function() {\n var s = '';\n s += '[';\n for (var i = 0; i < _bytes.length; i += 1) {\n if (i > 0) {\n s += ',';\n }\n s += _bytes[i];\n }\n s += ']';\n return s;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // base64EncodeOutputStream\n //---------------------------------------------------------------------\n\n var base64EncodeOutputStream = function() {\n\n var _buffer = 0;\n var _buflen = 0;\n var _length = 0;\n var _base64 = '';\n\n var _this = {};\n\n var writeEncoded = function(b) {\n _base64 += String.fromCharCode(encode(b & 0x3f) );\n };\n\n var encode = function(n) {\n if (n < 0) {\n // error.\n } else if (n < 26) {\n return 0x41 + n;\n } else if (n < 52) {\n return 0x61 + (n - 26);\n } else if (n < 62) {\n return 0x30 + (n - 52);\n } else if (n == 62) {\n return 0x2b;\n } else if (n == 63) {\n return 0x2f;\n }\n throw 'n:' + n;\n };\n\n _this.writeByte = function(n) {\n\n _buffer = (_buffer << 8) | (n & 0xff);\n _buflen += 8;\n _length += 1;\n\n while (_buflen >= 6) {\n writeEncoded(_buffer >>> (_buflen - 6) );\n _buflen -= 6;\n }\n };\n\n _this.flush = function() {\n\n if (_buflen > 0) {\n writeEncoded(_buffer << (6 - _buflen) );\n _buffer = 0;\n _buflen = 0;\n }\n\n if (_length % 3 != 0) {\n // padding\n var padlen = 3 - _length % 3;\n for (var i = 0; i < padlen; i += 1) {\n _base64 += '=';\n }\n }\n };\n\n _this.toString = function() {\n return _base64;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // base64DecodeInputStream\n //---------------------------------------------------------------------\n\n var base64DecodeInputStream = function(str) {\n\n var _str = str;\n var _pos = 0;\n var _buffer = 0;\n var _buflen = 0;\n\n var _this = {};\n\n _this.read = function() {\n\n while (_buflen < 8) {\n\n if (_pos >= _str.length) {\n if (_buflen == 0) {\n return -1;\n }\n throw 'unexpected end of file./' + _buflen;\n }\n\n var c = _str.charAt(_pos);\n _pos += 1;\n\n if (c == '=') {\n _buflen = 0;\n return -1;\n } else if (c.match(/^\\s$/) ) {\n // ignore if whitespace.\n continue;\n }\n\n _buffer = (_buffer << 6) | decode(c.charCodeAt(0) );\n _buflen += 6;\n }\n\n var n = (_buffer >>> (_buflen - 8) ) & 0xff;\n _buflen -= 8;\n return n;\n };\n\n var decode = function(c) {\n if (0x41 <= c && c <= 0x5a) {\n return c - 0x41;\n } else if (0x61 <= c && c <= 0x7a) {\n return c - 0x61 + 26;\n } else if (0x30 <= c && c <= 0x39) {\n return c - 0x30 + 52;\n } else if (c == 0x2b) {\n return 62;\n } else if (c == 0x2f) {\n return 63;\n } else {\n throw 'c:' + c;\n }\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // gifImage (B/W)\n //---------------------------------------------------------------------\n\n var gifImage = function(width, height) {\n\n var _width = width;\n var _height = height;\n var _data = new Array(width * height);\n\n var _this = {};\n\n _this.setPixel = function(x, y, pixel) {\n _data[y * _width + x] = pixel;\n };\n\n _this.write = function(out) {\n\n //---------------------------------\n // GIF Signature\n\n out.writeString('GIF87a');\n\n //---------------------------------\n // Screen Descriptor\n\n out.writeShort(_width);\n out.writeShort(_height);\n\n out.writeByte(0x80); // 2bit\n out.writeByte(0);\n out.writeByte(0);\n\n //---------------------------------\n // Global Color Map\n\n // black\n out.writeByte(0x00);\n out.writeByte(0x00);\n out.writeByte(0x00);\n\n // white\n out.writeByte(0xff);\n out.writeByte(0xff);\n out.writeByte(0xff);\n\n //---------------------------------\n // Image Descriptor\n\n out.writeString(',');\n out.writeShort(0);\n out.writeShort(0);\n out.writeShort(_width);\n out.writeShort(_height);\n out.writeByte(0);\n\n //---------------------------------\n // Local Color Map\n\n //---------------------------------\n // Raster Data\n\n var lzwMinCodeSize = 2;\n var raster = getLZWRaster(lzwMinCodeSize);\n\n out.writeByte(lzwMinCodeSize);\n\n var offset = 0;\n\n while (raster.length - offset > 255) {\n out.writeByte(255);\n out.writeBytes(raster, offset, 255);\n offset += 255;\n }\n\n out.writeByte(raster.length - offset);\n out.writeBytes(raster, offset, raster.length - offset);\n out.writeByte(0x00);\n\n //---------------------------------\n // GIF Terminator\n out.writeString(';');\n };\n\n var bitOutputStream = function(out) {\n\n var _out = out;\n var _bitLength = 0;\n var _bitBuffer = 0;\n\n var _this = {};\n\n _this.write = function(data, length) {\n\n if ( (data >>> length) != 0) {\n throw 'length over';\n }\n\n while (_bitLength + length >= 8) {\n _out.writeByte(0xff & ( (data << _bitLength) | _bitBuffer) );\n length -= (8 - _bitLength);\n data >>>= (8 - _bitLength);\n _bitBuffer = 0;\n _bitLength = 0;\n }\n\n _bitBuffer = (data << _bitLength) | _bitBuffer;\n _bitLength = _bitLength + length;\n };\n\n _this.flush = function() {\n if (_bitLength > 0) {\n _out.writeByte(_bitBuffer);\n }\n };\n\n return _this;\n };\n\n var getLZWRaster = function(lzwMinCodeSize) {\n\n var clearCode = 1 << lzwMinCodeSize;\n var endCode = (1 << lzwMinCodeSize) + 1;\n var bitLength = lzwMinCodeSize + 1;\n\n // Setup LZWTable\n var table = lzwTable();\n\n for (var i = 0; i < clearCode; i += 1) {\n table.add(String.fromCharCode(i) );\n }\n table.add(String.fromCharCode(clearCode) );\n table.add(String.fromCharCode(endCode) );\n\n var byteOut = byteArrayOutputStream();\n var bitOut = bitOutputStream(byteOut);\n\n // clear code\n bitOut.write(clearCode, bitLength);\n\n var dataIndex = 0;\n\n var s = String.fromCharCode(_data[dataIndex]);\n dataIndex += 1;\n\n while (dataIndex < _data.length) {\n\n var c = String.fromCharCode(_data[dataIndex]);\n dataIndex += 1;\n\n if (table.contains(s + c) ) {\n\n s = s + c;\n\n } else {\n\n bitOut.write(table.indexOf(s), bitLength);\n\n if (table.size() < 0xfff) {\n\n if (table.size() == (1 << bitLength) ) {\n bitLength += 1;\n }\n\n table.add(s + c);\n }\n\n s = c;\n }\n }\n\n bitOut.write(table.indexOf(s), bitLength);\n\n // end code\n bitOut.write(endCode, bitLength);\n\n bitOut.flush();\n\n return byteOut.toByteArray();\n };\n\n var lzwTable = function() {\n\n var _map = {};\n var _size = 0;\n\n var _this = {};\n\n _this.add = function(key) {\n if (_this.contains(key) ) {\n throw 'dup key:' + key;\n }\n _map[key] = _size;\n _size += 1;\n };\n\n _this.size = function() {\n return _size;\n };\n\n _this.indexOf = function(key) {\n return _map[key];\n };\n\n _this.contains = function(key) {\n return typeof _map[key] != 'undefined';\n };\n\n return _this;\n };\n\n return _this;\n };\n\n var createDataURL = function(width, height, getPixel) {\n var gif = gifImage(width, height);\n for (var y = 0; y < height; y += 1) {\n for (var x = 0; x < width; x += 1) {\n gif.setPixel(x, y, getPixel(x, y) );\n }\n }\n\n var b = byteArrayOutputStream();\n gif.write(b);\n\n var base64 = base64EncodeOutputStream();\n var bytes = b.toByteArray();\n for (var i = 0; i < bytes.length; i += 1) {\n base64.writeByte(bytes[i]);\n }\n base64.flush();\n\n return 'data:image/gif;base64,' + base64;\n };\n\n //---------------------------------------------------------------------\n // returns qrcode function.\n\n return qrcode;\n}();\n\n// multibyte support\n!function() {\n\n qrcode.stringToBytesFuncs['UTF-8'] = function(s) {\n // http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\n function toUTF8Array(str) {\n var utf8 = [];\n for (var i=0; i < str.length; i++) {\n var charcode = str.charCodeAt(i);\n if (charcode < 0x80) utf8.push(charcode);\n else if (charcode < 0x800) {\n utf8.push(0xc0 | (charcode >> 6),\n 0x80 | (charcode & 0x3f));\n }\n else if (charcode < 0xd800 || charcode >= 0xe000) {\n utf8.push(0xe0 | (charcode >> 12),\n 0x80 | ((charcode>>6) & 0x3f),\n 0x80 | (charcode & 0x3f));\n }\n // surrogate pair\n else {\n i++;\n // UTF-16 encodes 0x10000-0x10FFFF by\n // subtracting 0x10000 and splitting the\n // 20 bits of 0x0-0xFFFFF into two halves\n charcode = 0x10000 + (((charcode & 0x3ff)<<10)\n | (str.charCodeAt(i) & 0x3ff));\n utf8.push(0xf0 | (charcode >>18),\n 0x80 | ((charcode>>12) & 0x3f),\n 0x80 | ((charcode>>6) & 0x3f),\n 0x80 | (charcode & 0x3f));\n }\n }\n return utf8;\n }\n return toUTF8Array(s);\n };\n\n}();\n\n(function (factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n }\n}(function () {\n return qrcode;\n}));\n", "import { EMPTY_ARR } from \"./constants\";\n\n/**\n * Assign properties from `props` to `obj`\n * @template O, P The obj and props types\n * @param {O} obj The object to copy properties to\n * @param {P} props The object to copy properties from\n * @returns {O & P}\n */\nexport function assign(obj, props) {\n\t// @ts-ignore We change the type of `obj` to be `O & P`\n\tfor (let i in props) obj[i] = props[i];\n\treturn /** @type {O & P} */ (obj);\n}\n\n/**\n * Remove a child node from its parent if attached. This is a workaround for\n * IE11 which doesn't support `Element.prototype.remove()`. Using this function\n * is smaller than including a dedicated polyfill.\n * @param {Node} node The node to remove\n */\nexport function removeNode(node) {\n\tlet parentNode = node.parentNode;\n\tif (parentNode) parentNode.removeChild(node);\n}\n\nexport const slice = EMPTY_ARR.slice;\n", "import { _catchError } from './diff/catch-error';\n\n/**\n * The `option` object can potentially contain callback functions\n * that are called during various stages of our renderer. This is the\n * foundation on which all our addons like `preact/debug`, `preact/compat`,\n * and `preact/hooks` are based on. See the `Options` type in `internal.d.ts`\n * for a full list of available option hooks (most editors/IDEs allow you to\n * ctrl+click or cmd+click on mac the type definition below).\n * @type {import('./internal').Options}\n */\nconst options = {\n\t_catchError\n};\n\nexport default options;\n", "import { slice } from './util';\nimport options from './options';\n\nlet vnodeId = 0;\n\n/**\n * Create an virtual node (used for JSX)\n * @param {import('./internal').VNode[\"type\"]} type The node name or Component\n * constructor for this virtual node\n * @param {object | null | undefined} [props] The properties of the virtual node\n * @param {Array<import('.').ComponentChildren>} [children] The children of the virtual node\n * @returns {import('./internal').VNode}\n */\nexport function createElement(type, props, children) {\n\tlet normalizedProps = {},\n\t\tkey,\n\t\tref,\n\t\ti;\n\tfor (i in props) {\n\t\tif (i == 'key') key = props[i];\n\t\telse if (i == 'ref') ref = props[i];\n\t\telse normalizedProps[i] = props[i];\n\t}\n\n\tif (arguments.length > 2) {\n\t\tnormalizedProps.children =\n\t\t\targuments.length > 3 ? slice.call(arguments, 2) : children;\n\t}\n\n\t// If a Component VNode, check for and apply defaultProps\n\t// Note: type may be undefined in development, must never error here.\n\tif (typeof type == 'function' && type.defaultProps != null) {\n\t\tfor (i in type.defaultProps) {\n\t\t\tif (normalizedProps[i] === undefined) {\n\t\t\t\tnormalizedProps[i] = type.defaultProps[i];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn createVNode(type, normalizedProps, key, ref, null);\n}\n\n/**\n * Create a VNode (used internally by Preact)\n * @param {import('./internal').VNode[\"type\"]} type The node name or Component\n * Constructor for this virtual node\n * @param {object | string | number | null} props The properties of this virtual node.\n * If this virtual node represents a text node, this is the text of the node (string or number).\n * @param {string | number | null} key The key for this virtual node, used when\n * diffing it against its children\n * @param {import('./internal').VNode[\"ref\"]} ref The ref property that will\n * receive a reference to its created child\n * @returns {import('./internal').VNode}\n */\nexport function createVNode(type, props, key, ref, original) {\n\t// V8 seems to be better at detecting type shapes if the object is allocated from the same call site\n\t// Do not inline into createElement and coerceToVNode!\n\tconst vnode = {\n\t\ttype,\n\t\tprops,\n\t\tkey,\n\t\tref,\n\t\t_children: null,\n\t\t_parent: null,\n\t\t_depth: 0,\n\t\t_dom: null,\n\t\t// _nextDom must be initialized to undefined b/c it will eventually\n\t\t// be set to dom.nextSibling which can return `null` and it is important\n\t\t// to be able to distinguish between an uninitialized _nextDom and\n\t\t// a _nextDom that has been set to `null`\n\t\t_nextDom: undefined,\n\t\t_component: null,\n\t\t_hydrating: null,\n\t\tconstructor: undefined,\n\t\t_original: original == null ? ++vnodeId : original\n\t};\n\n\t// Only invoke the vnode hook if this was *not* a direct copy:\n\tif (original == null && options.vnode != null) options.vnode(vnode);\n\n\treturn vnode;\n}\n\nexport function createRef() {\n\treturn { current: null };\n}\n\nexport function Fragment(props) {\n\treturn props.children;\n}\n\n/**\n * Check if a the argument is a valid Preact VNode.\n * @param {*} vnode\n * @returns {vnode is import('./internal').VNode}\n */\nexport const isValidElement = vnode =>\n\tvnode != null && vnode.constructor === undefined;\n", "import { assign } from './util';\nimport { diff, commitRoot } from './diff/index';\nimport options from './options';\nimport { Fragment } from './create-element';\n\n/**\n * Base Component class. Provides `setState()` and `forceUpdate()`, which\n * trigger rendering\n * @param {object} props The initial component props\n * @param {object} context The initial context from parent components'\n * getChildContext\n */\nexport function Component(props, context) {\n\tthis.props = props;\n\tthis.context = context;\n}\n\n/**\n * Update component state and schedule a re-render.\n * @this {import('./internal').Component}\n * @param {object | ((s: object, p: object) => object)} update A hash of state\n * properties to update with new values or a function that given the current\n * state and props returns a new partial state\n * @param {() => void} [callback] A function to be called once component state is\n * updated\n */\nComponent.prototype.setState = function(update, callback) {\n\t// only clone state when copying to nextState the first time.\n\tlet s;\n\tif (this._nextState != null && this._nextState !== this.state) {\n\t\ts = this._nextState;\n\t} else {\n\t\ts = this._nextState = assign({}, this.state);\n\t}\n\n\tif (typeof update == 'function') {\n\t\t// Some libraries like `immer` mark the current state as readonly,\n\t\t// preventing us from mutating it, so we need to clone it. See #2716\n\t\tupdate = update(assign({}, s), this.props);\n\t}\n\n\tif (update) {\n\t\tassign(s, update);\n\t}\n\n\t// Skip update if updater function returned null\n\tif (update == null) return;\n\n\tif (this._vnode) {\n\t\tif (callback) {\n\t\t\tthis._stateCallbacks.push(callback);\n\t\t}\n\t\tenqueueRender(this);\n\t}\n};\n\n/**\n * Immediately perform a synchronous re-render of the component\n * @this {import('./internal').Component}\n * @param {() => void} [callback] A function to be called after component is\n * re-rendered\n */\nComponent.prototype.forceUpdate = function(callback) {\n\tif (this._vnode) {\n\t\t// Set render mode so that we can differentiate where the render request\n\t\t// is coming from. We need this because forceUpdate should never call\n\t\t// shouldComponentUpdate\n\t\tthis._force = true;\n\t\tif (callback) this._renderCallbacks.push(callback);\n\t\tenqueueRender(this);\n\t}\n};\n\n/**\n * Accepts `props` and `state`, and returns a new Virtual DOM tree to build.\n * Virtual DOM is generally constructed via [JSX](http://jasonformat.com/wtf-is-jsx).\n * @param {object} props Props (eg: JSX attributes) received from parent\n * element/component\n * @param {object} state The component's current state\n * @param {object} context Context object, as returned by the nearest\n * ancestor's `getChildContext()`\n * @returns {import('./index').ComponentChildren | void}\n */\nComponent.prototype.render = Fragment;\n\n/**\n * @param {import('./internal').VNode} vnode\n * @param {number | null} [childIndex]\n */\nexport function getDomSibling(vnode, childIndex) {\n\tif (childIndex == null) {\n\t\t// Use childIndex==null as a signal to resume the search from the vnode's sibling\n\t\treturn vnode._parent\n\t\t\t? getDomSibling(vnode._parent, vnode._parent._children.indexOf(vnode) + 1)\n\t\t\t: null;\n\t}\n\n\tlet sibling;\n\tfor (; childIndex < vnode._children.length; childIndex++) {\n\t\tsibling = vnode._children[childIndex];\n\n\t\tif (sibling != null && sibling._dom != null) {\n\t\t\t// Since updateParentDomPointers keeps _dom pointer correct,\n\t\t\t// we can rely on _dom to tell us if this subtree contains a\n\t\t\t// rendered DOM node, and what the first rendered DOM node is\n\t\t\treturn sibling._dom;\n\t\t}\n\t}\n\n\t// If we get here, we have not found a DOM node in this vnode's children.\n\t// We must resume from this vnode's sibling (in it's parent _children array)\n\t// Only climb up and search the parent if we aren't searching through a DOM\n\t// VNode (meaning we reached the DOM parent of the original vnode that began\n\t// the search)\n\treturn typeof vnode.type == 'function' ? getDomSibling(vnode) : null;\n}\n\n/**\n * Trigger in-place re-rendering of a component.\n * @param {import('./internal').Component} component The component to rerender\n */\nfunction renderComponent(component) {\n\tlet vnode = component._vnode,\n\t\toldDom = vnode._dom,\n\t\tparentDom = component._parentDom;\n\n\tif (parentDom) {\n\t\tlet commitQueue = [];\n\t\tconst oldVNode = assign({}, vnode);\n\t\toldVNode._original = vnode._original + 1;\n\n\t\tdiff(\n\t\t\tparentDom,\n\t\t\tvnode,\n\t\t\toldVNode,\n\t\t\tcomponent._globalContext,\n\t\t\tparentDom.ownerSVGElement !== undefined,\n\t\t\tvnode._hydrating != null ? [oldDom] : null,\n\t\t\tcommitQueue,\n\t\t\toldDom == null ? getDomSibling(vnode) : oldDom,\n\t\t\tvnode._hydrating\n\t\t);\n\t\tcommitRoot(commitQueue, vnode);\n\n\t\tif (vnode._dom != oldDom) {\n\t\t\tupdateParentDomPointers(vnode);\n\t\t}\n\t}\n}\n\n/**\n * @param {import('./internal').VNode} vnode\n */\nfunction updateParentDomPointers(vnode) {\n\tif ((vnode = vnode._parent) != null && vnode._component != null) {\n\t\tvnode._dom = vnode._component.base = null;\n\t\tfor (let i = 0; i < vnode._children.length; i++) {\n\t\t\tlet child = vnode._children[i];\n\t\t\tif (child != null && child._dom != null) {\n\t\t\t\tvnode._dom = vnode._component.base = child._dom;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn updateParentDomPointers(vnode);\n\t}\n}\n\n/**\n * The render queue\n * @type {Array<import('./internal').Component>}\n */\nlet rerenderQueue = [];\n\n/*\n * The value of `Component.debounce` must asynchronously invoke the passed in callback. It is\n * important that contributors to Preact can consistently reason about what calls to `setState`, etc.\n * do, and when their effects will be applied. See the links below for some further reading on designing\n * asynchronous APIs.\n * * [Designing APIs for Asynchrony](https://blog.izs.me/2013/08/designing-apis-for-asynchrony)\n * * [Callbacks synchronous and asynchronous](https://blog.ometer.com/2011/07/24/callbacks-synchronous-and-asynchronous/)\n */\n\nlet prevDebounce;\n\n/**\n * Enqueue a rerender of a component\n * @param {import('./internal').Component} c The component to rerender\n */\nexport function enqueueRender(c) {\n\tif (\n\t\t(!c._dirty &&\n\t\t\t(c._dirty = true) &&\n\t\t\trerenderQueue.push(c) &&\n\t\t\t!process._rerenderCount++) ||\n\t\tprevDebounce !== options.debounceRendering\n\t) {\n\t\tprevDebounce = options.debounceRendering;\n\t\t(prevDebounce || setTimeout)(process);\n\t}\n}\n\n/** Flush the render queue by rerendering all queued components */\nfunction process() {\n\tlet queue;\n\twhile ((process._rerenderCount = rerenderQueue.length)) {\n\t\tqueue = rerenderQueue.sort((a, b) => a._vnode._depth - b._vnode._depth);\n\t\trerenderQueue = [];\n\t\t// Don't update `renderCount` yet. Keep its value non-zero to prevent unnecessary\n\t\t// process() calls from getting scheduled while `queue` is still being consumed.\n\t\tqueue.some(c => {\n\t\t\tif (c._dirty) renderComponent(c);\n\t\t});\n\t}\n}\n\nprocess._rerenderCount = 0;\n", "import { enqueueRender } from './component';\n\nexport let i = 0;\n\nexport function createContext(defaultValue, contextId) {\n\tcontextId = '__cC' + i++;\n\n\tconst context = {\n\t\t_id: contextId,\n\t\t_defaultValue: defaultValue,\n\t\t/** @type {import('./internal').FunctionComponent} */\n\t\tConsumer(props, contextValue) {\n\t\t\t// return props.children(\n\t\t\t// \tcontext[contextId] ? context[contextId].props.value : defaultValue\n\t\t\t// );\n\t\t\treturn props.children(contextValue);\n\t\t},\n\t\t/** @type {import('./internal').FunctionComponent} */\n\t\tProvider(props) {\n\t\t\tif (!this.getChildContext) {\n\t\t\t\tlet subs = [];\n\t\t\t\tlet ctx = {};\n\t\t\t\tctx[contextId] = this;\n\n\t\t\t\tthis.getChildContext = () => ctx;\n\n\t\t\t\tthis.shouldComponentUpdate = function(_props) {\n\t\t\t\t\tif (this.props.value !== _props.value) {\n\t\t\t\t\t\t// I think the forced value propagation here was only needed when `options.debounceRendering` was being bypassed:\n\t\t\t\t\t\t// https://github.com/preactjs/preact/commit/4d339fb803bea09e9f198abf38ca1bf8ea4b7771#diff-54682ce380935a717e41b8bfc54737f6R358\n\t\t\t\t\t\t// In those cases though, even with the value corrected, we're double-rendering all nodes.\n\t\t\t\t\t\t// It might be better to just tell folks not to use force-sync mode.\n\t\t\t\t\t\t// Currently, using `useContext()` in a class component will overwrite its `this.context` value.\n\t\t\t\t\t\t// subs.some(c => {\n\t\t\t\t\t\t// \tc.context = _props.value;\n\t\t\t\t\t\t// \tenqueueRender(c);\n\t\t\t\t\t\t// });\n\n\t\t\t\t\t\t// subs.some(c => {\n\t\t\t\t\t\t// \tc.context[contextId] = _props.value;\n\t\t\t\t\t\t// \tenqueueRender(c);\n\t\t\t\t\t\t// });\n\t\t\t\t\t\tsubs.some(enqueueRender);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tthis.sub = c => {\n\t\t\t\t\tsubs.push(c);\n\t\t\t\t\tlet old = c.componentWillUnmount;\n\t\t\t\t\tc.componentWillUnmount = () => {\n\t\t\t\t\t\tsubs.splice(subs.indexOf(c), 1);\n\t\t\t\t\t\tif (old) old.call(c);\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn props.children;\n\t\t}\n\t};\n\n\t// Devtools needs access to the context object when it\n\t// encounters a Provider. This is necessary to support\n\t// setting `displayName` on the context object instead\n\t// of on the component itself. See:\n\t// https://reactjs.org/docs/context.html#contextdisplayname\n\n\treturn (context.Provider._contextRef = context.Consumer.contextType = context);\n}\n", "export const EMPTY_OBJ = {};\nexport const EMPTY_ARR = [];\nexport const IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;\n", "import { diff, unmount, applyRef } from './index';\nimport { createVNode, Fragment } from '../create-element';\nimport { EMPTY_OBJ, EMPTY_ARR } from '../constants';\nimport { getDomSibling } from '../component';\n\n/**\n * Diff the children of a virtual node\n * @param {import('../internal').PreactElement} parentDom The DOM element whose\n * children are being diffed\n * @param {import('../internal').ComponentChildren[]} renderResult\n * @param {import('../internal').VNode} newParentVNode The new virtual\n * node whose children should be diff'ed against oldParentVNode\n * @param {import('../internal').VNode} oldParentVNode The old virtual\n * node whose children should be diff'ed against newParentVNode\n * @param {object} globalContext The current context object - modified by getChildContext\n * @param {boolean} isSvg Whether or not this DOM node is an SVG node\n * @param {Array<import('../internal').PreactElement>} excessDomChildren\n * @param {Array<import('../internal').Component>} commitQueue List of components\n * which have callbacks to invoke in commitRoot\n * @param {import('../internal').PreactElement} oldDom The current attached DOM\n * element any new dom elements should be placed around. Likely `null` on first\n * render (except when hydrating). Can be a sibling DOM element when diffing\n * Fragments that have siblings. In most cases, it starts out as `oldChildren[0]._dom`.\n * @param {boolean} isHydrating Whether or not we are in hydration\n */\nexport function diffChildren(\n\tparentDom,\n\trenderResult,\n\tnewParentVNode,\n\toldParentVNode,\n\tglobalContext,\n\tisSvg,\n\texcessDomChildren,\n\tcommitQueue,\n\toldDom,\n\tisHydrating\n) {\n\tlet i, j, oldVNode, childVNode, newDom, firstChildDom, refs;\n\n\t// This is a compression of oldParentVNode!=null && oldParentVNode != EMPTY_OBJ && oldParentVNode._children || EMPTY_ARR\n\t// as EMPTY_OBJ._children should be `undefined`.\n\tlet oldChildren = (oldParentVNode && oldParentVNode._children) || EMPTY_ARR;\n\n\tlet oldChildrenLength = oldChildren.length;\n\n\tnewParentVNode._children = [];\n\tfor (i = 0; i < renderResult.length; i++) {\n\t\tchildVNode = renderResult[i];\n\n\t\tif (childVNode == null || typeof childVNode == 'boolean') {\n\t\t\tchildVNode = newParentVNode._children[i] = null;\n\t\t}\n\t\t// If this newVNode is being reused (e.g. <div>{reuse}{reuse}</div>) in the same diff,\n\t\t// or we are rendering a component (e.g. setState) copy the oldVNodes so it can have\n\t\t// it's own DOM & etc. pointers\n\t\telse if (\n\t\t\ttypeof childVNode == 'string' ||\n\t\t\ttypeof childVNode == 'number' ||\n\t\t\t// eslint-disable-next-line valid-typeof\n\t\t\ttypeof childVNode == 'bigint'\n\t\t) {\n\t\t\tchildVNode = newParentVNode._children[i] = createVNode(\n\t\t\t\tnull,\n\t\t\t\tchildVNode,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tchildVNode\n\t\t\t);\n\t\t} else if (Array.isArray(childVNode)) {\n\t\t\tchildVNode = newParentVNode._children[i] = createVNode(\n\t\t\t\tFragment,\n\t\t\t\t{ children: childVNode },\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull\n\t\t\t);\n\t\t} else if (childVNode._depth > 0) {\n\t\t\t// VNode is already in use, clone it. This can happen in the following\n\t\t\t// scenario:\n\t\t\t// const reuse = <div />\n\t\t\t// <div>{reuse}<span />{reuse}</div>\n\t\t\tchildVNode = newParentVNode._children[i] = createVNode(\n\t\t\t\tchildVNode.type,\n\t\t\t\tchildVNode.props,\n\t\t\t\tchildVNode.key,\n\t\t\t\tchildVNode.ref ? childVNode.ref : null,\n\t\t\t\tchildVNode._original\n\t\t\t);\n\t\t} else {\n\t\t\tchildVNode = newParentVNode._children[i] = childVNode;\n\t\t}\n\n\t\t// Terser removes the `continue` here and wraps the loop body\n\t\t// in a `if (childVNode) { ... } condition\n\t\tif (childVNode == null) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tchildVNode._parent = newParentVNode;\n\t\tchildVNode._depth = newParentVNode._depth + 1;\n\n\t\t// Check if we find a corresponding element in oldChildren.\n\t\t// If found, delete the array item by setting to `undefined`.\n\t\t// We use `undefined`, as `null` is reserved for empty placeholders\n\t\t// (holes).\n\t\toldVNode = oldChildren[i];\n\n\t\tif (\n\t\t\toldVNode === null ||\n\t\t\t(oldVNode &&\n\t\t\t\tchildVNode.key == oldVNode.key &&\n\t\t\t\tchildVNode.type === oldVNode.type)\n\t\t) {\n\t\t\toldChildren[i] = undefined;\n\t\t} else {\n\t\t\t// Either oldVNode === undefined or oldChildrenLength > 0,\n\t\t\t// so after this loop oldVNode == null or oldVNode is a valid value.\n\t\t\tfor (j = 0; j < oldChildrenLength; j++) {\n\t\t\t\toldVNode = oldChildren[j];\n\t\t\t\t// If childVNode is unkeyed, we only match similarly unkeyed nodes, otherwise we match by key.\n\t\t\t\t// We always match by type (in either case).\n\t\t\t\tif (\n\t\t\t\t\toldVNode &&\n\t\t\t\t\tchildVNode.key == oldVNode.key &&\n\t\t\t\t\tchildVNode.type === oldVNode.type\n\t\t\t\t) {\n\t\t\t\t\toldChildren[j] = undefined;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\toldVNode = null;\n\t\t\t}\n\t\t}\n\n\t\toldVNode = oldVNode || EMPTY_OBJ;\n\n\t\t// Morph the old element into the new one, but don't append it to the dom yet\n\t\tdiff(\n\t\t\tparentDom,\n\t\t\tchildVNode,\n\t\t\toldVNode,\n\t\t\tglobalContext,\n\t\t\tisSvg,\n\t\t\texcessDomChildren,\n\t\t\tcommitQueue,\n\t\t\toldDom,\n\t\t\tisHydrating\n\t\t);\n\n\t\tnewDom = childVNode._dom;\n\n\t\tif ((j = childVNode.ref) && oldVNode.ref != j) {\n\t\t\tif (!refs) refs = [];\n\t\t\tif (oldVNode.ref) refs.push(oldVNode.ref, null, childVNode);\n\t\t\trefs.push(j, childVNode._component || newDom, childVNode);\n\t\t}\n\n\t\tif (newDom != null) {\n\t\t\tif (firstChildDom == null) {\n\t\t\t\tfirstChildDom = newDom;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\ttypeof childVNode.type == 'function' &&\n\t\t\t\tchildVNode._children === oldVNode._children\n\t\t\t) {\n\t\t\t\tchildVNode._nextDom = oldDom = reorderChildren(\n\t\t\t\t\tchildVNode,\n\t\t\t\t\toldDom,\n\t\t\t\t\tparentDom\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\toldDom = placeChild(\n\t\t\t\t\tparentDom,\n\t\t\t\t\tchildVNode,\n\t\t\t\t\toldVNode,\n\t\t\t\t\toldChildren,\n\t\t\t\t\tnewDom,\n\t\t\t\t\toldDom\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (typeof newParentVNode.type == 'function') {\n\t\t\t\t// Because the newParentVNode is Fragment-like, we need to set it's\n\t\t\t\t// _nextDom property to the nextSibling of its last child DOM node.\n\t\t\t\t//\n\t\t\t\t// `oldDom` contains the correct value here because if the last child\n\t\t\t\t// is a Fragment-like, then oldDom has already been set to that child's _nextDom.\n\t\t\t\t// If the last child is a DOM VNode, then oldDom will be set to that DOM\n\t\t\t\t// node's nextSibling.\n\t\t\t\tnewParentVNode._nextDom = oldDom;\n\t\t\t}\n\t\t} else if (\n\t\t\toldDom &&\n\t\t\toldVNode._dom == oldDom &&\n\t\t\toldDom.parentNode != parentDom\n\t\t) {\n\t\t\t// The above condition is to handle null placeholders. See test in placeholder.test.js:\n\t\t\t// `efficiently replace null placeholders in parent rerenders`\n\t\t\toldDom = getDomSibling(oldVNode);\n\t\t}\n\t}\n\n\tnewParentVNode._dom = firstChildDom;\n\n\t// Remove remaining oldChildren if there are any.\n\tfor (i = oldChildrenLength; i--; ) {\n\t\tif (oldChildren[i] != null) {\n\t\t\tunmount(oldChildren[i], oldChildren[i]);\n\t\t}\n\t}\n\n\t// Set refs only after unmount\n\tif (refs) {\n\t\tfor (i = 0; i < refs.length; i++) {\n\t\t\tapplyRef(refs[i], refs[++i], refs[++i]);\n\t\t}\n\t}\n}\n\nfunction reorderChildren(childVNode, oldDom, parentDom) {\n\t// Note: VNodes in nested suspended trees may be missing _children.\n\tlet c = childVNode._children;\n\tlet tmp = 0;\n\tfor (; c && tmp < c.length; tmp++) {\n\t\tlet vnode = c[tmp];\n\t\tif (vnode) {\n\t\t\t// We typically enter this code path on sCU bailout, where we copy\n\t\t\t// oldVNode._children to newVNode._children. If that is the case, we need\n\t\t\t// to update the old children's _parent pointer to point to the newVNode\n\t\t\t// (childVNode here).\n\t\t\tvnode._parent = childVNode;\n\n\t\t\tif (typeof vnode.type == 'function') {\n\t\t\t\toldDom = reorderChildren(vnode, oldDom, parentDom);\n\t\t\t} else {\n\t\t\t\toldDom = placeChild(parentDom, vnode, vnode, c, vnode._dom, oldDom);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn oldDom;\n}\n\n/**\n * Flatten and loop through the children of a virtual node\n * @param {import('../index').ComponentChildren} children The unflattened\n * children of a virtual node\n * @returns {import('../internal').VNode[]}\n */\nexport function toChildArray(children, out) {\n\tout = out || [];\n\tif (children == null || typeof children == 'boolean') {\n\t} else if (Array.isArray(children)) {\n\t\tchildren.some(child => {\n\t\t\ttoChildArray(child, out);\n\t\t});\n\t} else {\n\t\tout.push(children);\n\t}\n\treturn out;\n}\n\nfunction placeChild(\n\tparentDom,\n\tchildVNode,\n\toldVNode,\n\toldChildren,\n\tnewDom,\n\toldDom\n) {\n\tlet nextDom;\n\tif (childVNode._nextDom !== undefined) {\n\t\t// Only Fragments or components that return Fragment like VNodes will\n\t\t// have a non-undefined _nextDom. Continue the diff from the sibling\n\t\t// of last DOM child of this child VNode\n\t\tnextDom = childVNode._nextDom;\n\n\t\t// Eagerly cleanup _nextDom. We don't need to persist the value because\n\t\t// it is only used by `diffChildren` to determine where to resume the diff after\n\t\t// diffing Components and Fragments. Once we store it the nextDOM local var, we\n\t\t// can clean up the property\n\t\tchildVNode._nextDom = undefined;\n\t} else if (\n\t\toldVNode == null ||\n\t\tnewDom != oldDom ||\n\t\tnewDom.parentNode == null\n\t) {\n\t\touter: if (oldDom == null || oldDom.parentNode !== parentDom) {\n\t\t\tparentDom.appendChild(newDom);\n\t\t\tnextDom = null;\n\t\t} else {\n\t\t\t// `j<oldChildrenLength; j+=2` is an alternative to `j++<oldChildrenLength/2`\n\t\t\tfor (\n\t\t\t\tlet sibDom = oldDom, j = 0;\n\t\t\t\t(sibDom = sibDom.nextSibling) && j < oldChildren.length;\n\t\t\t\tj += 1\n\t\t\t) {\n\t\t\t\tif (sibDom == newDom) {\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t}\n\t\t\tparentDom.insertBefore(newDom, oldDom);\n\t\t\tnextDom = oldDom;\n\t\t}\n\t}\n\n\t// If we have pre-calculated the nextDOM node, use it. Else calculate it now\n\t// Strictly check for `undefined` here cuz `null` is a valid value of `nextDom`.\n\t// See more detail in create-element.js:createVNode\n\tif (nextDom !== undefined) {\n\t\toldDom = nextDom;\n\t} else {\n\t\toldDom = newDom.nextSibling;\n\t}\n\n\treturn oldDom;\n}\n", "import { IS_NON_DIMENSIONAL } from '../constants';\nimport options from '../options';\n\n/**\n * Diff the old and new properties of a VNode and apply changes to the DOM node\n * @param {import('../internal').PreactElement} dom The DOM node to apply\n * changes to\n * @param {object} newProps The new props\n * @param {object} oldProps The old props\n * @param {boolean} isSvg Whether or not this node is an SVG node\n * @param {boolean} hydrate Whether or not we are in hydration mode\n */\nexport function diffProps(dom, newProps, oldProps, isSvg, hydrate) {\n\tlet i;\n\n\tfor (i in oldProps) {\n\t\tif (i !== 'children' && i !== 'key' && !(i in newProps)) {\n\t\t\tsetProperty(dom, i, null, oldProps[i], isSvg);\n\t\t}\n\t}\n\n\tfor (i in newProps) {\n\t\tif (\n\t\t\t(!hydrate || typeof newProps[i] == 'function') &&\n\t\t\ti !== 'children' &&\n\t\t\ti !== 'key' &&\n\t\t\ti !== 'value' &&\n\t\t\ti !== 'checked' &&\n\t\t\toldProps[i] !== newProps[i]\n\t\t) {\n\t\t\tsetProperty(dom, i, newProps[i], oldProps[i], isSvg);\n\t\t}\n\t}\n}\n\nfunction setStyle(style, key, value) {\n\tif (key[0] === '-') {\n\t\tstyle.setProperty(key, value);\n\t} else if (value == null) {\n\t\tstyle[key] = '';\n\t} else if (typeof value != 'number' || IS_NON_DIMENSIONAL.test(key)) {\n\t\tstyle[key] = value;\n\t} else {\n\t\tstyle[key] = value + 'px';\n\t}\n}\n\n/**\n * Set a property value on a DOM node\n * @param {import('../internal').PreactElement} dom The DOM node to modify\n * @param {string} name The name of the property to set\n * @param {*} value The value to set the property to\n * @param {*} oldValue The old value the property had\n * @param {boolean} isSvg Whether or not this DOM node is an SVG node or not\n */\nexport function setProperty(dom, name, value, oldValue, isSvg) {\n\tlet useCapture;\n\n\to: if (name === 'style') {\n\t\tif (typeof value == 'string') {\n\t\t\tdom.style.cssText = value;\n\t\t} else {\n\t\t\tif (typeof oldValue == 'string') {\n\t\t\t\tdom.style.cssText = oldValue = '';\n\t\t\t}\n\n\t\t\tif (oldValue) {\n\t\t\t\tfor (name in oldValue) {\n\t\t\t\t\tif (!(value && name in value)) {\n\t\t\t\t\t\tsetStyle(dom.style, name, '');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (value) {\n\t\t\t\tfor (name in value) {\n\t\t\t\t\tif (!oldValue || value[name] !== oldValue[name]) {\n\t\t\t\t\t\tsetStyle(dom.style, name, value[name]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t// Benchmark for comparison: https://esbench.com/bench/574c954bdb965b9a00965ac6\n\telse if (name[0] === 'o' && name[1] === 'n') {\n\t\tuseCapture = name !== (name = name.replace(/Capture$/, ''));\n\n\t\t// Infer correct casing for DOM built-in events:\n\t\tif (name.toLowerCase() in dom) name = name.toLowerCase().slice(2);\n\t\telse name = name.slice(2);\n\n\t\tif (!dom._listeners) dom._listeners = {};\n\t\tdom._listeners[name + useCapture] = value;\n\n\t\tif (value) {\n\t\t\tif (!oldValue) {\n\t\t\t\tconst handler = useCapture ? eventProxyCapture : eventProxy;\n\t\t\t\tdom.addEventListener(name, handler, useCapture);\n\t\t\t}\n\t\t} else {\n\t\t\tconst handler = useCapture ? eventProxyCapture : eventProxy;\n\t\t\tdom.removeEventListener(name, handler, useCapture);\n\t\t}\n\t} else if (name !== 'dangerouslySetInnerHTML') {\n\t\tif (isSvg) {\n\t\t\t// Normalize incorrect prop usage for SVG:\n\t\t\t// - xlink:href / xlinkHref --> href (xlink:href was removed from SVG and isn't needed)\n\t\t\t// - className --> class\n\t\t\tname = name.replace(/xlink(H|:h)/, 'h').replace(/sName$/, 's');\n\t\t} else if (\n\t\t\tname !== 'href' &&\n\t\t\tname !== 'list' &&\n\t\t\tname !== 'form' &&\n\t\t\t// Default value in browsers is `-1` and an empty string is\n\t\t\t// cast to `0` instead\n\t\t\tname !== 'tabIndex' &&\n\t\t\tname !== 'download' &&\n\t\t\tname in dom\n\t\t) {\n\t\t\ttry {\n\t\t\t\tdom[name] = value == null ? '' : value;\n\t\t\t\t// labelled break is 1b smaller here than a return statement (sorry)\n\t\t\t\tbreak o;\n\t\t\t} catch (e) {}\n\t\t}\n\n\t\t// ARIA-attributes have a different notion of boolean values.\n\t\t// The value `false` is different from the attribute not\n\t\t// existing on the DOM, so we can't remove it. For non-boolean\n\t\t// ARIA-attributes we could treat false as a removal, but the\n\t\t// amount of exceptions would cost us too many bytes. On top of\n\t\t// that other VDOM frameworks also always stringify `false`.\n\n\t\tif (typeof value === 'function') {\n\t\t\t// never serialize functions as attribute values\n\t\t} else if (value != null && (value !== false || name.indexOf('-') != -1)) {\n\t\t\tdom.setAttribute(name, value);\n\t\t} else {\n\t\t\tdom.removeAttribute(name);\n\t\t}\n\t}\n}\n\n/**\n * Proxy an event to hooked event handlers\n * @param {Event} e The event object from the browser\n * @private\n */\nfunction eventProxy(e) {\n\tthis._listeners[e.type + false](options.event ? options.event(e) : e);\n}\n\nfunction eventProxyCapture(e) {\n\tthis._listeners[e.type + true](options.event ? options.event(e) : e);\n}\n", "import { EMPTY_OBJ } from '../constants';\nimport { Component, getDomSibling } from '../component';\nimport { Fragment } from '../create-element';\nimport { diffChildren } from './children';\nimport { diffProps, setProperty } from './props';\nimport { assign, removeNode, slice } from '../util';\nimport options from '../options';\n\n/**\n * Diff two virtual nodes and apply proper changes to the DOM\n * @param {import('../internal').PreactElement} parentDom The parent of the DOM element\n * @param {import('../internal').VNode} newVNode The new virtual node\n * @param {import('../internal').VNode} oldVNode The old virtual node\n * @param {object} globalContext The current context object. Modified by getChildContext\n * @param {boolean} isSvg Whether or not this element is an SVG node\n * @param {Array<import('../internal').PreactElement>} excessDomChildren\n * @param {Array<import('../internal').Component>} commitQueue List of components\n * which have callbacks to invoke in commitRoot\n * @param {import('../internal').PreactElement} oldDom The current attached DOM\n * element any new dom elements should be placed around. Likely `null` on first\n * render (except when hydrating). Can be a sibling DOM element when diffing\n * Fragments that have siblings. In most cases, it starts out as `oldChildren[0]._dom`.\n * @param {boolean} [isHydrating] Whether or not we are in hydration\n */\nexport function diff(\n\tparentDom,\n\tnewVNode,\n\toldVNode,\n\tglobalContext,\n\tisSvg,\n\texcessDomChildren,\n\tcommitQueue,\n\toldDom,\n\tisHydrating\n) {\n\tlet tmp,\n\t\tnewType = newVNode.type;\n\n\t// When passing through createElement it assigns the object\n\t// constructor as undefined. This to prevent JSON-injection.\n\tif (newVNode.constructor !== undefined) return null;\n\n\t// If the previous diff bailed out, resume creating/hydrating.\n\tif (oldVNode._hydrating != null) {\n\t\tisHydrating = oldVNode._hydrating;\n\t\toldDom = newVNode._dom = oldVNode._dom;\n\t\t// if we resume, we want the tree to be \"unlocked\"\n\t\tnewVNode._hydrating = null;\n\t\texcessDomChildren = [oldDom];\n\t}\n\n\tif ((tmp = options._diff)) tmp(newVNode);\n\n\ttry {\n\t\touter: if (typeof newType == 'function') {\n\t\t\tlet c, isNew, oldProps, oldState, snapshot, clearProcessingException;\n\t\t\tlet newProps = newVNode.props;\n\n\t\t\t// Necessary for createContext api. Setting this property will pass\n\t\t\t// the context value as `this.context` just for this component.\n\t\t\ttmp = newType.contextType;\n\t\t\tlet provider = tmp && globalContext[tmp._id];\n\t\t\tlet componentContext = tmp\n\t\t\t\t? provider\n\t\t\t\t\t? provider.props.value\n\t\t\t\t\t: tmp._defaultValue\n\t\t\t\t: globalContext;\n\n\t\t\t// Get component and set it to `c`\n\t\t\tif (oldVNode._component) {\n\t\t\t\tc = newVNode._component = oldVNode._component;\n\t\t\t\tclearProcessingException = c._processingException = c._pendingError;\n\t\t\t} else {\n\t\t\t\t// Instantiate the new component\n\t\t\t\tif ('prototype' in newType && newType.prototype.render) {\n\t\t\t\t\t// @ts-ignore The check above verifies that newType is suppose to be constructed\n\t\t\t\t\tnewVNode._component = c = new newType(newProps, componentContext); // eslint-disable-line new-cap\n\t\t\t\t} else {\n\t\t\t\t\t// @ts-ignore Trust me, Component implements the interface we want\n\t\t\t\t\tnewVNode._component = c = new Component(newProps, componentContext);\n\t\t\t\t\tc.constructor = newType;\n\t\t\t\t\tc.render = doRender;\n\t\t\t\t}\n\t\t\t\tif (provider) provider.sub(c);\n\n\t\t\t\tc.props = newProps;\n\t\t\t\tif (!c.state) c.state = {};\n\t\t\t\tc.context = componentContext;\n\t\t\t\tc._globalContext = globalContext;\n\t\t\t\tisNew = c._dirty = true;\n\t\t\t\tc._renderCallbacks = [];\n\t\t\t\tc._stateCallbacks = [];\n\t\t\t}\n\n\t\t\t// Invoke getDerivedStateFromProps\n\t\t\tif (c._nextState == null) {\n\t\t\t\tc._nextState = c.state;\n\t\t\t}\n\n\t\t\tif (newType.getDerivedStateFromProps != null) {\n\t\t\t\tif (c._nextState == c.state) {\n\t\t\t\t\tc._nextState = assign({}, c._nextState);\n\t\t\t\t}\n\n\t\t\t\tassign(\n\t\t\t\t\tc._nextState,\n\t\t\t\t\tnewType.getDerivedStateFromProps(newProps, c._nextState)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\toldProps = c.props;\n\t\t\toldState = c.state;\n\n\t\t\t// Invoke pre-render lifecycle methods\n\t\t\tif (isNew) {\n\t\t\t\tif (\n\t\t\t\t\tnewType.getDerivedStateFromProps == null &&\n\t\t\t\t\tc.componentWillMount != null\n\t\t\t\t) {\n\t\t\t\t\tc.componentWillMount();\n\t\t\t\t}\n\n\t\t\t\tif (c.componentDidMount != null) {\n\t\t\t\t\tc._renderCallbacks.push(c.componentDidMount);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (\n\t\t\t\t\tnewType.getDerivedStateFromProps == null &&\n\t\t\t\t\tnewProps !== oldProps &&\n\t\t\t\t\tc.componentWillReceiveProps != null\n\t\t\t\t) {\n\t\t\t\t\tc.componentWillReceiveProps(newProps, componentContext);\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\t(!c._force &&\n\t\t\t\t\t\tc.shouldComponentUpdate != null &&\n\t\t\t\t\t\tc.shouldComponentUpdate(\n\t\t\t\t\t\t\tnewProps,\n\t\t\t\t\t\t\tc._nextState,\n\t\t\t\t\t\t\tcomponentContext\n\t\t\t\t\t\t) === false) ||\n\t\t\t\t\tnewVNode._original === oldVNode._original\n\t\t\t\t) {\n\t\t\t\t\tc.props = newProps;\n\t\t\t\t\tc.state = c._nextState;\n\t\t\t\t\t// More info about this here: https://gist.github.com/JoviDeCroock/bec5f2ce93544d2e6070ef8e0036e4e8\n\t\t\t\t\tif (newVNode._original !== oldVNode._original) c._dirty = false;\n\t\t\t\t\tc._vnode = newVNode;\n\t\t\t\t\tnewVNode._dom = oldVNode._dom;\n\t\t\t\t\tnewVNode._children = oldVNode._children;\n\t\t\t\t\tnewVNode._children.forEach(vnode => {\n\t\t\t\t\t\tif (vnode) vnode._parent = newVNode;\n\t\t\t\t\t});\n\n\t\t\t\t\tfor (let i = 0; i < c._stateCallbacks.length; i++) {\n\t\t\t\t\t\tc._renderCallbacks.push(c._stateCallbacks[i]);\n\t\t\t\t\t}\n\t\t\t\t\tc._stateCallbacks = [];\n\n\t\t\t\t\tif (c._renderCallbacks.length) {\n\t\t\t\t\t\tcommitQueue.push(c);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\n\t\t\t\tif (c.componentWillUpdate != null) {\n\t\t\t\t\tc.componentWillUpdate(newProps, c._nextState, componentContext);\n\t\t\t\t}\n\n\t\t\t\tif (c.componentDidUpdate != null) {\n\t\t\t\t\tc._renderCallbacks.push(() => {\n\t\t\t\t\t\tc.componentDidUpdate(oldProps, oldState, snapshot);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tc.context = componentContext;\n\t\t\tc.props = newProps;\n\t\t\tc._vnode = newVNode;\n\t\t\tc._parentDom = parentDom;\n\n\t\t\tlet renderHook = options._render,\n\t\t\t\tcount = 0;\n\t\t\tif ('prototype' in newType && newType.prototype.render) {\n\t\t\t\tc.state = c._nextState;\n\t\t\t\tc._dirty = false;\n\n\t\t\t\tif (renderHook) renderHook(newVNode);\n\n\t\t\t\ttmp = c.render(c.props, c.state, c.context);\n\n\t\t\t\tfor (let i = 0; i < c._stateCallbacks.length; i++) {\n\t\t\t\t\tc._renderCallbacks.push(c._stateCallbacks[i]);\n\t\t\t\t}\n\t\t\t\tc._stateCallbacks = [];\n\t\t\t} else {\n\t\t\t\tdo {\n\t\t\t\t\tc._dirty = false;\n\t\t\t\t\tif (renderHook) renderHook(newVNode);\n\n\t\t\t\t\ttmp = c.render(c.props, c.state, c.context);\n\n\t\t\t\t\t// Handle setState called in render, see #2553\n\t\t\t\t\tc.state = c._nextState;\n\t\t\t\t} while (c._dirty && ++count < 25);\n\t\t\t}\n\n\t\t\t// Handle setState called in render, see #2553\n\t\t\tc.state = c._nextState;\n\n\t\t\tif (c.getChildContext != null) {\n\t\t\t\tglobalContext = assign(assign({}, globalContext), c.getChildContext());\n\t\t\t}\n\n\t\t\tif (!isNew && c.getSnapshotBeforeUpdate != null) {\n\t\t\t\tsnapshot = c.getSnapshotBeforeUpdate(oldProps, oldState);\n\t\t\t}\n\n\t\t\tlet isTopLevelFragment =\n\t\t\t\ttmp != null && tmp.type === Fragment && tmp.key == null;\n\t\t\tlet renderResult = isTopLevelFragment ? tmp.props.children : tmp;\n\n\t\t\tdiffChildren(\n\t\t\t\tparentDom,\n\t\t\t\tArray.isArray(renderResult) ? renderResult : [renderResult],\n\t\t\t\tnewVNode,\n\t\t\t\toldVNode,\n\t\t\t\tglobalContext,\n\t\t\t\tisSvg,\n\t\t\t\texcessDomChildren,\n\t\t\t\tcommitQueue,\n\t\t\t\toldDom,\n\t\t\t\tisHydrating\n\t\t\t);\n\n\t\t\tc.base = newVNode._dom;\n\n\t\t\t// We successfully rendered this VNode, unset any stored hydration/bailout state:\n\t\t\tnewVNode._hydrating = null;\n\n\t\t\tif (c._renderCallbacks.length) {\n\t\t\t\tcommitQueue.push(c);\n\t\t\t}\n\n\t\t\tif (clearProcessingException) {\n\t\t\t\tc._pendingError = c._processingException = null;\n\t\t\t}\n\n\t\t\tc._force = false;\n\t\t} else if (\n\t\t\texcessDomChildren == null &&\n\t\t\tnewVNode._original === oldVNode._original\n\t\t) {\n\t\t\tnewVNode._children = oldVNode._children;\n\t\t\tnewVNode._dom = oldVNode._dom;\n\t\t} else {\n\t\t\tnewVNode._dom = diffElementNodes(\n\t\t\t\toldVNode._dom,\n\t\t\t\tnewVNode,\n\t\t\t\toldVNode,\n\t\t\t\tglobalContext,\n\t\t\t\tisSvg,\n\t\t\t\texcessDomChildren,\n\t\t\t\tcommitQueue,\n\t\t\t\tisHydrating\n\t\t\t);\n\t\t}\n\n\t\tif ((tmp = options.diffed)) tmp(newVNode);\n\t} catch (e) {\n\t\tnewVNode._original = null;\n\t\t// if hydrating or creating initial tree, bailout preserves DOM:\n\t\tif (isHydrating || excessDomChildren != null) {\n\t\t\tnewVNode._dom = oldDom;\n\t\t\tnewVNode._hydrating = !!isHydrating;\n\t\t\texcessDomChildren[excessDomChildren.indexOf(oldDom)] = null;\n\t\t\t// ^ could possibly be simplified to:\n\t\t\t// excessDomChildren.length = 0;\n\t\t}\n\t\toptions._catchError(e, newVNode, oldVNode);\n\t}\n}\n\n/**\n * @param {Array<import('../internal').Component>} commitQueue List of components\n * which have callbacks to invoke in commitRoot\n * @param {import('../internal').VNode} root\n */\nexport function commitRoot(commitQueue, root) {\n\tif (options._commit) options._commit(root, commitQueue);\n\n\tcommitQueue.some(c => {\n\t\ttry {\n\t\t\t// @ts-ignore Reuse the commitQueue variable here so the type changes\n\t\t\tcommitQueue = c._renderCallbacks;\n\t\t\tc._renderCallbacks = [];\n\t\t\tcommitQueue.some(cb => {\n\t\t\t\t// @ts-ignore See above ts-ignore on commitQueue\n\t\t\t\tcb.call(c);\n\t\t\t});\n\t\t} catch (e) {\n\t\t\toptions._catchError(e, c._vnode);\n\t\t}\n\t});\n}\n\n/**\n * Diff two virtual nodes representing DOM element\n * @param {import('../internal').PreactElement} dom The DOM element representing\n * the virtual nodes being diffed\n * @param {import('../internal').VNode} newVNode The new virtual node\n * @param {import('../internal').VNode} oldVNode The old virtual node\n * @param {object} globalContext The current context object\n * @param {boolean} isSvg Whether or not this DOM node is an SVG node\n * @param {*} excessDomChildren\n * @param {Array<import('../internal').Component>} commitQueue List of components\n * which have callbacks to invoke in commitRoot\n * @param {boolean} isHydrating Whether or not we are in hydration\n * @returns {import('../internal').PreactElement}\n */\nfunction diffElementNodes(\n\tdom,\n\tnewVNode,\n\toldVNode,\n\tglobalContext,\n\tisSvg,\n\texcessDomChildren,\n\tcommitQueue,\n\tisHydrating\n) {\n\tlet oldProps = oldVNode.props;\n\tlet newProps = newVNode.props;\n\tlet nodeType = newVNode.type;\n\tlet i = 0;\n\n\t// Tracks entering and exiting SVG namespace when descending through the tree.\n\tif (nodeType === 'svg') isSvg = true;\n\n\tif (excessDomChildren != null) {\n\t\tfor (; i < excessDomChildren.length; i++) {\n\t\t\tconst child = excessDomChildren[i];\n\n\t\t\t// if newVNode matches an element in excessDomChildren or the `dom`\n\t\t\t// argument matches an element in excessDomChildren, remove it from\n\t\t\t// excessDomChildren so it isn't later removed in diffChildren\n\t\t\tif (\n\t\t\t\tchild &&\n\t\t\t\t'setAttribute' in child === !!nodeType &&\n\t\t\t\t(nodeType ? child.localName === nodeType : child.nodeType === 3)\n\t\t\t) {\n\t\t\t\tdom = child;\n\t\t\t\texcessDomChildren[i] = null;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (dom == null) {\n\t\tif (nodeType === null) {\n\t\t\t// @ts-ignore createTextNode returns Text, we expect PreactElement\n\t\t\treturn document.createTextNode(newProps);\n\t\t}\n\n\t\tif (isSvg) {\n\t\t\tdom = document.createElementNS(\n\t\t\t\t'http://www.w3.org/2000/svg',\n\t\t\t\t// @ts-ignore We know `newVNode.type` is a string\n\t\t\t\tnodeType\n\t\t\t);\n\t\t} else {\n\t\t\tdom = document.createElement(\n\t\t\t\t// @ts-ignore We know `newVNode.type` is a string\n\t\t\t\tnodeType,\n\t\t\t\tnewProps.is && newProps\n\t\t\t);\n\t\t}\n\n\t\t// we created a new parent, so none of the previously attached children can be reused:\n\t\texcessDomChildren = null;\n\t\t// we are creating a new node, so we can assume this is a new subtree (in case we are hydrating), this deopts the hydrate\n\t\tisHydrating = false;\n\t}\n\n\tif (nodeType === null) {\n\t\t// During hydration, we still have to split merged text from SSR'd HTML.\n\t\tif (oldProps !== newProps && (!isHydrating || dom.data !== newProps)) {\n\t\t\tdom.data = newProps;\n\t\t}\n\t} else {\n\t\t// If excessDomChildren was not null, repopulate it with the current element's children:\n\t\texcessDomChildren = excessDomChildren && slice.call(dom.childNodes);\n\n\t\toldProps = oldVNode.props || EMPTY_OBJ;\n\n\t\tlet oldHtml = oldProps.dangerouslySetInnerHTML;\n\t\tlet newHtml = newProps.dangerouslySetInnerHTML;\n\n\t\t// During hydration, props are not diffed at all (including dangerouslySetInnerHTML)\n\t\t// @TODO we should warn in debug mode when props don't match here.\n\t\tif (!isHydrating) {\n\t\t\t// But, if we are in a situation where we are using existing DOM (e.g. replaceNode)\n\t\t\t// we should read the existing DOM attributes to diff them\n\t\t\tif (excessDomChildren != null) {\n\t\t\t\toldProps = {};\n\t\t\t\tfor (i = 0; i < dom.attributes.length; i++) {\n\t\t\t\t\toldProps[dom.attributes[i].name] = dom.attributes[i].value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (newHtml || oldHtml) {\n\t\t\t\t// Avoid re-applying the same '__html' if it did not changed between re-render\n\t\t\t\tif (\n\t\t\t\t\t!newHtml ||\n\t\t\t\t\t((!oldHtml || newHtml.__html != oldHtml.__html) &&\n\t\t\t\t\t\tnewHtml.__html !== dom.innerHTML)\n\t\t\t\t) {\n\t\t\t\t\tdom.innerHTML = (newHtml && newHtml.__html) || '';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tdiffProps(dom, newProps, oldProps, isSvg, isHydrating);\n\n\t\t// If the new vnode didn't have dangerouslySetInnerHTML, diff its children\n\t\tif (newHtml) {\n\t\t\tnewVNode._children = [];\n\t\t} else {\n\t\t\ti = newVNode.props.children;\n\t\t\tdiffChildren(\n\t\t\t\tdom,\n\t\t\t\tArray.isArray(i) ? i : [i],\n\t\t\t\tnewVNode,\n\t\t\t\toldVNode,\n\t\t\t\tglobalContext,\n\t\t\t\tisSvg && nodeType !== 'foreignObject',\n\t\t\t\texcessDomChildren,\n\t\t\t\tcommitQueue,\n\t\t\t\texcessDomChildren\n\t\t\t\t\t? excessDomChildren[0]\n\t\t\t\t\t: oldVNode._children && getDomSibling(oldVNode, 0),\n\t\t\t\tisHydrating\n\t\t\t);\n\n\t\t\t// Remove children that are not part of any vnode.\n\t\t\tif (excessDomChildren != null) {\n\t\t\t\tfor (i = excessDomChildren.length; i--; ) {\n\t\t\t\t\tif (excessDomChildren[i] != null) removeNode(excessDomChildren[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// (as above, don't diff props during hydration)\n\t\tif (!isHydrating) {\n\t\t\tif (\n\t\t\t\t'value' in newProps &&\n\t\t\t\t(i = newProps.value) !== undefined &&\n\t\t\t\t// #2756 For the <progress>-element the initial value is 0,\n\t\t\t\t// despite the attribute not being present. When the attribute\n\t\t\t\t// is missing the progress bar is treated as indeterminate.\n\t\t\t\t// To fix that we'll always update it when it is 0 for progress elements\n\t\t\t\t(i !== dom.value ||\n\t\t\t\t\t(nodeType === 'progress' && !i) ||\n\t\t\t\t\t// This is only for IE 11 to fix <select> value not being updated.\n\t\t\t\t\t// To avoid a stale select value we need to set the option.value\n\t\t\t\t\t// again, which triggers IE11 to re-evaluate the select value\n\t\t\t\t\t(nodeType === 'option' && i !== oldProps.value))\n\t\t\t) {\n\t\t\t\tsetProperty(dom, 'value', i, oldProps.value, false);\n\t\t\t}\n\t\t\tif (\n\t\t\t\t'checked' in newProps &&\n\t\t\t\t(i = newProps.checked) !== undefined &&\n\t\t\t\ti !== dom.checked\n\t\t\t) {\n\t\t\t\tsetProperty(dom, 'checked', i, oldProps.checked, false);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn dom;\n}\n\n/**\n * Invoke or update a ref, depending on whether it is a function or object ref.\n * @param {object|function} ref\n * @param {any} value\n * @param {import('../internal').VNode} vnode\n */\nexport function applyRef(ref, value, vnode) {\n\ttry {\n\t\tif (typeof ref == 'function') ref(value);\n\t\telse ref.current = value;\n\t} catch (e) {\n\t\toptions._catchError(e, vnode);\n\t}\n}\n\n/**\n * Unmount a virtual node from the tree and apply DOM changes\n * @param {import('../internal').VNode} vnode The virtual node to unmount\n * @param {import('../internal').VNode} parentVNode The parent of the VNode that\n * initiated the unmount\n * @param {boolean} [skipRemove] Flag that indicates that a parent node of the\n * current element is already detached from the DOM.\n */\nexport function unmount(vnode, parentVNode, skipRemove) {\n\tlet r;\n\tif (options.unmount) options.unmount(vnode);\n\n\tif ((r = vnode.ref)) {\n\t\tif (!r.current || r.current === vnode._dom) {\n\t\t\tapplyRef(r, null, parentVNode);\n\t\t}\n\t}\n\n\tif ((r = vnode._component) != null) {\n\t\tif (r.componentWillUnmount) {\n\t\t\ttry {\n\t\t\t\tr.componentWillUnmount();\n\t\t\t} catch (e) {\n\t\t\t\toptions._catchError(e, parentVNode);\n\t\t\t}\n\t\t}\n\n\t\tr.base = r._parentDom = null;\n\t\tvnode._component = undefined;\n\t}\n\n\tif ((r = vnode._children)) {\n\t\tfor (let i = 0; i < r.length; i++) {\n\t\t\tif (r[i]) {\n\t\t\t\tunmount(\n\t\t\t\t\tr[i],\n\t\t\t\t\tparentVNode,\n\t\t\t\t\tskipRemove || typeof vnode.type !== 'function'\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!skipRemove && vnode._dom != null) {\n\t\tremoveNode(vnode._dom);\n\t}\n\n\t// Must be set to `undefined` to properly clean up `_nextDom`\n\t// for which `null` is a valid value. See comment in `create-element.js`\n\tvnode._parent = vnode._dom = vnode._nextDom = undefined;\n}\n\n/** The `.render()` method for a PFC backing instance. */\nfunction doRender(props, state, context) {\n\treturn this.constructor(props, context);\n}\n", "import { EMPTY_OBJ } from './constants';\nimport { commitRoot, diff } from './diff/index';\nimport { createElement, Fragment } from './create-element';\nimport options from './options';\nimport { slice } from './util';\n\n/**\n * Render a Preact virtual node into a DOM element\n * @param {import('./internal').ComponentChild} vnode The virtual node to render\n * @param {import('./internal').PreactElement} parentDom The DOM element to\n * render into\n * @param {import('./internal').PreactElement | object} [replaceNode] Optional: Attempt to re-use an\n * existing DOM tree rooted at `replaceNode`\n */\nexport function render(vnode, parentDom, replaceNode) {\n\tif (options._root) options._root(vnode, parentDom);\n\n\t// We abuse the `replaceNode` parameter in `hydrate()` to signal if we are in\n\t// hydration mode or not by passing the `hydrate` function instead of a DOM\n\t// element..\n\tlet isHydrating = typeof replaceNode === 'function';\n\n\t// To be able to support calling `render()` multiple times on the same\n\t// DOM node, we need to obtain a reference to the previous tree. We do\n\t// this by assigning a new `_children` property to DOM nodes which points\n\t// to the last rendered tree. By default this property is not present, which\n\t// means that we are mounting a new tree for the first time.\n\tlet oldVNode = isHydrating\n\t\t? null\n\t\t: (replaceNode && replaceNode._children) || parentDom._children;\n\n\tvnode = (\n\t\t(!isHydrating && replaceNode) ||\n\t\tparentDom\n\t)._children = createElement(Fragment, null, [vnode]);\n\n\t// List of effects that need to be called after diffing.\n\tlet commitQueue = [];\n\tdiff(\n\t\tparentDom,\n\t\t// Determine the new vnode tree and store it on the DOM element on\n\t\t// our custom `_children` property.\n\t\tvnode,\n\t\toldVNode || EMPTY_OBJ,\n\t\tEMPTY_OBJ,\n\t\tparentDom.ownerSVGElement !== undefined,\n\t\t!isHydrating && replaceNode\n\t\t\t? [replaceNode]\n\t\t\t: oldVNode\n\t\t\t? null\n\t\t\t: parentDom.firstChild\n\t\t\t? slice.call(parentDom.childNodes)\n\t\t\t: null,\n\t\tcommitQueue,\n\t\t!isHydrating && replaceNode\n\t\t\t? replaceNode\n\t\t\t: oldVNode\n\t\t\t? oldVNode._dom\n\t\t\t: parentDom.firstChild,\n\t\tisHydrating\n\t);\n\n\t// Flush all queued effects\n\tcommitRoot(commitQueue, vnode);\n}\n\n/**\n * Update an existing DOM element with data from a Preact virtual node\n * @param {import('./internal').ComponentChild} vnode The virtual node to render\n * @param {import('./internal').PreactElement} parentDom The DOM element to\n * update\n */\nexport function hydrate(vnode, parentDom) {\n\trender(vnode, parentDom, hydrate);\n}\n", "import { assign, slice } from './util';\nimport { createVNode } from './create-element';\n\n/**\n * Clones the given VNode, optionally adding attributes/props and replacing its children.\n * @param {import('./internal').VNode} vnode The virtual DOM element to clone\n * @param {object} props Attributes/props to add when cloning\n * @param {Array<import('./internal').ComponentChildren>} rest Any additional arguments will be used as replacement children.\n * @returns {import('./internal').VNode}\n */\nexport function cloneElement(vnode, props, children) {\n\tlet normalizedProps = assign({}, vnode.props),\n\t\tkey,\n\t\tref,\n\t\ti;\n\tfor (i in props) {\n\t\tif (i == 'key') key = props[i];\n\t\telse if (i == 'ref') ref = props[i];\n\t\telse normalizedProps[i] = props[i];\n\t}\n\n\tif (arguments.length > 2) {\n\t\tnormalizedProps.children =\n\t\t\targuments.length > 3 ? slice.call(arguments, 2) : children;\n\t}\n\n\treturn createVNode(\n\t\tvnode.type,\n\t\tnormalizedProps,\n\t\tkey || vnode.key,\n\t\tref || vnode.ref,\n\t\tnull\n\t);\n}\n", "/**\n * Find the closest error boundary to a thrown error and call it\n * @param {object} error The thrown value\n * @param {import('../internal').VNode} vnode The vnode that threw\n * the error that was caught (except for unmounting when this parameter\n * is the highest parent that was being unmounted)\n * @param {import('../internal').VNode} [oldVNode]\n * @param {import('../internal').ErrorInfo} [errorInfo]\n */\nexport function _catchError(error, vnode, oldVNode, errorInfo) {\n\t/** @type {import('../internal').Component} */\n\tlet component, ctor, handled;\n\n\tfor (; (vnode = vnode._parent); ) {\n\t\tif ((component = vnode._component) && !component._processingException) {\n\t\t\ttry {\n\t\t\t\tctor = component.constructor;\n\n\t\t\t\tif (ctor && ctor.getDerivedStateFromError != null) {\n\t\t\t\t\tcomponent.setState(ctor.getDerivedStateFromError(error));\n\t\t\t\t\thandled = component._dirty;\n\t\t\t\t}\n\n\t\t\t\tif (component.componentDidCatch != null) {\n\t\t\t\t\tcomponent.componentDidCatch(error, errorInfo || {});\n\t\t\t\t\thandled = component._dirty;\n\t\t\t\t}\n\n\t\t\t\t// This is an error boundary. Mark it as having bailed out, and whether it was mid-hydration.\n\t\t\t\tif (handled) {\n\t\t\t\t\treturn (component._pendingError = component);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\terror = e;\n\t\t\t}\n\t\t}\n\t}\n\n\tthrow error;\n}\n", "import { options } from 'preact';\n\n/** @type {number} */\nlet currentIndex;\n\n/** @type {import('./internal').Component} */\nlet currentComponent;\n\n/** @type {import('./internal').Component} */\nlet previousComponent;\n\n/** @type {number} */\nlet currentHook = 0;\n\n/** @type {Array<import('./internal').Component>} */\nlet afterPaintEffects = [];\n\nlet EMPTY = [];\n\nlet oldBeforeDiff = options._diff;\nlet oldBeforeRender = options._render;\nlet oldAfterDiff = options.diffed;\nlet oldCommit = options._commit;\nlet oldBeforeUnmount = options.unmount;\n\nconst RAF_TIMEOUT = 100;\nlet prevRaf;\n\noptions._diff = vnode => {\n\tcurrentComponent = null;\n\tif (oldBeforeDiff) oldBeforeDiff(vnode);\n};\n\noptions._render = vnode => {\n\tif (oldBeforeRender) oldBeforeRender(vnode);\n\n\tcurrentComponent = vnode._component;\n\tcurrentIndex = 0;\n\n\tconst hooks = currentComponent.__hooks;\n\tif (hooks) {\n\t\tif (previousComponent === currentComponent) {\n\t\t\thooks._pendingEffects = [];\n\t\t\tcurrentComponent._renderCallbacks = [];\n\t\t\thooks._list.forEach(hookItem => {\n\t\t\t\tif (hookItem._nextValue) {\n\t\t\t\t\thookItem._value = hookItem._nextValue;\n\t\t\t\t}\n\t\t\t\thookItem._pendingValue = EMPTY;\n\t\t\t\thookItem._nextValue = hookItem._pendingArgs = undefined;\n\t\t\t});\n\t\t} else {\n\t\t\thooks._pendingEffects.forEach(invokeCleanup);\n\t\t\thooks._pendingEffects.forEach(invokeEffect);\n\t\t\thooks._pendingEffects = [];\n\t\t}\n\t}\n\tpreviousComponent = currentComponent;\n};\n\noptions.diffed = vnode => {\n\tif (oldAfterDiff) oldAfterDiff(vnode);\n\n\tconst c = vnode._component;\n\tif (c && c.__hooks) {\n\t\tif (c.__hooks._pendingEffects.length) afterPaint(afterPaintEffects.push(c));\n\t\tc.__hooks._list.forEach(hookItem => {\n\t\t\tif (hookItem._pendingArgs) {\n\t\t\t\thookItem._args = hookItem._pendingArgs;\n\t\t\t}\n\t\t\tif (hookItem._pendingValue !== EMPTY) {\n\t\t\t\thookItem._value = hookItem._pendingValue;\n\t\t\t}\n\t\t\thookItem._pendingArgs = undefined;\n\t\t\thookItem._pendingValue = EMPTY;\n\t\t});\n\t}\n\tpreviousComponent = currentComponent = null;\n};\n\noptions._commit = (vnode, commitQueue) => {\n\tcommitQueue.some(component => {\n\t\ttry {\n\t\t\tcomponent._renderCallbacks.forEach(invokeCleanup);\n\t\t\tcomponent._renderCallbacks = component._renderCallbacks.filter(cb =>\n\t\t\t\tcb._value ? invokeEffect(cb) : true\n\t\t\t);\n\t\t} catch (e) {\n\t\t\tcommitQueue.some(c => {\n\t\t\t\tif (c._renderCallbacks) c._renderCallbacks = [];\n\t\t\t});\n\t\t\tcommitQueue = [];\n\t\t\toptions._catchError(e, component._vnode);\n\t\t}\n\t});\n\n\tif (oldCommit) oldCommit(vnode, commitQueue);\n};\n\noptions.unmount = vnode => {\n\tif (oldBeforeUnmount) oldBeforeUnmount(vnode);\n\n\tconst c = vnode._component;\n\tif (c && c.__hooks) {\n\t\tlet hasErrored;\n\t\tc.__hooks._list.forEach(s => {\n\t\t\ttry {\n\t\t\t\tinvokeCleanup(s);\n\t\t\t} catch (e) {\n\t\t\t\thasErrored = e;\n\t\t\t}\n\t\t});\n\t\tc.__hooks = undefined;\n\t\tif (hasErrored) options._catchError(hasErrored, c._vnode);\n\t}\n};\n\n/**\n * Get a hook's state from the currentComponent\n * @param {number} index The index of the hook to get\n * @param {number} type The index of the hook to get\n * @returns {any}\n */\nfunction getHookState(index, type) {\n\tif (options._hook) {\n\t\toptions._hook(currentComponent, index, currentHook || type);\n\t}\n\tcurrentHook = 0;\n\n\t// Largely inspired by:\n\t// * https://github.com/michael-klein/funcy.js/blob/f6be73468e6ec46b0ff5aa3cc4c9baf72a29025a/src/hooks/core_hooks.mjs\n\t// * https://github.com/michael-klein/funcy.js/blob/650beaa58c43c33a74820a3c98b3c7079cf2e333/src/renderer.mjs\n\t// Other implementations to look at:\n\t// * https://codesandbox.io/s/mnox05qp8\n\tconst hooks =\n\t\tcurrentComponent.__hooks ||\n\t\t(currentComponent.__hooks = {\n\t\t\t_list: [],\n\t\t\t_pendingEffects: []\n\t\t});\n\n\tif (index >= hooks._list.length) {\n\t\thooks._list.push({ _pendingValue: EMPTY });\n\t}\n\treturn hooks._list[index];\n}\n\n/**\n * @param {import('./index').StateUpdater<any>} [initialState]\n */\nexport function useState(initialState) {\n\tcurrentHook = 1;\n\treturn useReducer(invokeOrReturn, initialState);\n}\n\n/**\n * @param {import('./index').Reducer<any, any>} reducer\n * @param {import('./index').StateUpdater<any>} initialState\n * @param {(initialState: any) => void} [init]\n * @returns {[ any, (state: any) => void ]}\n */\nexport function useReducer(reducer, initialState, init) {\n\t/** @type {import('./internal').ReducerHookState} */\n\tconst hookState = getHookState(currentIndex++, 2);\n\thookState._reducer = reducer;\n\tif (!hookState._component) {\n\t\thookState._value = [\n\t\t\t!init ? invokeOrReturn(undefined, initialState) : init(initialState),\n\n\t\t\taction => {\n\t\t\t\tconst currentValue = hookState._nextValue\n\t\t\t\t\t? hookState._nextValue[0]\n\t\t\t\t\t: hookState._value[0];\n\t\t\t\tconst nextValue = hookState._reducer(currentValue, action);\n\n\t\t\t\tif (currentValue !== nextValue) {\n\t\t\t\t\thookState._nextValue = [nextValue, hookState._value[1]];\n\t\t\t\t\thookState._component.setState({});\n\t\t\t\t}\n\t\t\t}\n\t\t];\n\n\t\thookState._component = currentComponent;\n\n\t\tif (!currentComponent._hasScuFromHooks) {\n\t\t\tcurrentComponent._hasScuFromHooks = true;\n\t\t\tconst prevScu = currentComponent.shouldComponentUpdate;\n\n\t\t\t// This SCU has the purpose of bailing out after repeated updates\n\t\t\t// to stateful hooks.\n\t\t\t// we store the next value in _nextValue[0] and keep doing that for all\n\t\t\t// state setters, if we have next states and\n\t\t\t// all next states within a component end up being equal to their original state\n\t\t\t// we are safe to bail out for this specific component.\n\t\t\tcurrentComponent.shouldComponentUpdate = function(p, s, c) {\n\t\t\t\tif (!hookState._component.__hooks) return true;\n\n\t\t\t\tconst stateHooks = hookState._component.__hooks._list.filter(\n\t\t\t\t\tx => x._component\n\t\t\t\t);\n\t\t\t\tconst allHooksEmpty = stateHooks.every(x => !x._nextValue);\n\t\t\t\t// When we have no updated hooks in the component we invoke the previous SCU or\n\t\t\t\t// traverse the VDOM tree further.\n\t\t\t\tif (allHooksEmpty) {\n\t\t\t\t\treturn prevScu ? prevScu.call(this, p, s, c) : true;\n\t\t\t\t}\n\n\t\t\t\t// We check whether we have components with a nextValue set that\n\t\t\t\t// have values that aren't equal to one another this pushes\n\t\t\t\t// us to update further down the tree\n\t\t\t\tlet shouldUpdate = false;\n\t\t\t\tstateHooks.forEach(hookItem => {\n\t\t\t\t\tif (hookItem._nextValue) {\n\t\t\t\t\t\tconst currentValue = hookItem._value[0];\n\t\t\t\t\t\thookItem._value = hookItem._nextValue;\n\t\t\t\t\t\thookItem._nextValue = undefined;\n\t\t\t\t\t\tif (currentValue !== hookItem._value[0]) shouldUpdate = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn shouldUpdate || hookState._component.props !== p\n\t\t\t\t\t? prevScu\n\t\t\t\t\t\t? prevScu.call(this, p, s, c)\n\t\t\t\t\t\t: true\n\t\t\t\t\t: false;\n\t\t\t};\n\t\t}\n\t}\n\n\treturn hookState._nextValue || hookState._value;\n}\n\n/**\n * @param {import('./internal').Effect} callback\n * @param {any[]} args\n */\nexport function useEffect(callback, args) {\n\t/** @type {import('./internal').EffectHookState} */\n\tconst state = getHookState(currentIndex++, 3);\n\tif (!options._skipEffects && argsChanged(state._args, args)) {\n\t\tstate._value = callback;\n\t\tstate._pendingArgs = args;\n\n\t\tcurrentComponent.__hooks._pendingEffects.push(state);\n\t}\n}\n\n/**\n * @param {import('./internal').Effect} callback\n * @param {any[]} args\n */\nexport function useLayoutEffect(callback, args) {\n\t/** @type {import('./internal').EffectHookState} */\n\tconst state = getHookState(currentIndex++, 4);\n\tif (!options._skipEffects && argsChanged(state._args, args)) {\n\t\tstate._value = callback;\n\t\tstate._pendingArgs = args;\n\n\t\tcurrentComponent._renderCallbacks.push(state);\n\t}\n}\n\nexport function useRef(initialValue) {\n\tcurrentHook = 5;\n\treturn useMemo(() => ({ current: initialValue }), []);\n}\n\n/**\n * @param {object} ref\n * @param {() => object} createHandle\n * @param {any[]} args\n */\nexport function useImperativeHandle(ref, createHandle, args) {\n\tcurrentHook = 6;\n\tuseLayoutEffect(\n\t\t() => {\n\t\t\tif (typeof ref == 'function') {\n\t\t\t\tref(createHandle());\n\t\t\t\treturn () => ref(null);\n\t\t\t} else if (ref) {\n\t\t\t\tref.current = createHandle();\n\t\t\t\treturn () => (ref.current = null);\n\t\t\t}\n\t\t},\n\t\targs == null ? args : args.concat(ref)\n\t);\n}\n\n/**\n * @param {() => any} factory\n * @param {any[]} args\n */\nexport function useMemo(factory, args) {\n\t/** @type {import('./internal').MemoHookState} */\n\tconst state = getHookState(currentIndex++, 7);\n\tif (argsChanged(state._args, args)) {\n\t\tstate._pendingValue = factory();\n\t\tstate._pendingArgs = args;\n\t\tstate._factory = factory;\n\t\treturn state._pendingValue;\n\t}\n\n\treturn state._value;\n}\n\n/**\n * @param {() => void} callback\n * @param {any[]} args\n */\nexport function useCallback(callback, args) {\n\tcurrentHook = 8;\n\treturn useMemo(() => callback, args);\n}\n\n/**\n * @param {import('./internal').PreactContext} context\n */\nexport function useContext(context) {\n\tconst provider = currentComponent.context[context._id];\n\t// We could skip this call here, but than we'd not call\n\t// `options._hook`. We need to do that in order to make\n\t// the devtools aware of this hook.\n\t/** @type {import('./internal').ContextHookState} */\n\tconst state = getHookState(currentIndex++, 9);\n\t// The devtools needs access to the context object to\n\t// be able to pull of the default value when no provider\n\t// is present in the tree.\n\tstate._context = context;\n\tif (!provider) return context._defaultValue;\n\t// This is probably not safe to convert to \"!\"\n\tif (state._value == null) {\n\t\tstate._value = true;\n\t\tprovider.sub(currentComponent);\n\t}\n\treturn provider.props.value;\n}\n\n/**\n * Display a custom label for a custom hook for the devtools panel\n * @type {<T>(value: T, cb?: (value: T) => string | number) => void}\n */\nexport function useDebugValue(value, formatter) {\n\tif (options.useDebugValue) {\n\t\toptions.useDebugValue(formatter ? formatter(value) : value);\n\t}\n}\n\n/**\n * @param {(error: any, errorInfo: import('preact').ErrorInfo) => void} cb\n */\nexport function useErrorBoundary(cb) {\n\t/** @type {import('./internal').ErrorBoundaryHookState} */\n\tconst state = getHookState(currentIndex++, 10);\n\tconst errState = useState();\n\tstate._value = cb;\n\tif (!currentComponent.componentDidCatch) {\n\t\tcurrentComponent.componentDidCatch = (err, errorInfo) => {\n\t\t\tif (state._value) state._value(err, errorInfo);\n\t\t\terrState[1](err);\n\t\t};\n\t}\n\treturn [\n\t\terrState[0],\n\t\t() => {\n\t\t\terrState[1](undefined);\n\t\t}\n\t];\n}\n\nexport function useId() {\n\tconst state = getHookState(currentIndex++, 11);\n\tif (!state._value) {\n\t\t// Grab either the root node or the nearest async boundary node.\n\t\t/** @type {import('./internal.d').VNode} */\n\t\tlet root = currentComponent._vnode;\n\t\twhile (root !== null && !root._mask && root._parent !== null) {\n\t\t\troot = root._parent;\n\t\t}\n\n\t\tlet mask = root._mask || (root._mask = [0, 0]);\n\t\tstate._value = 'P' + mask[0] + '-' + mask[1]++;\n\t}\n\n\treturn state._value;\n}\n/**\n * After paint effects consumer.\n */\nfunction flushAfterPaintEffects() {\n\tlet component;\n\twhile ((component = afterPaintEffects.shift())) {\n\t\tif (!component._parentDom || !component.__hooks) continue;\n\t\ttry {\n\t\t\tcomponent.__hooks._pendingEffects.forEach(invokeCleanup);\n\t\t\tcomponent.__hooks._pendingEffects.forEach(invokeEffect);\n\t\t\tcomponent.__hooks._pendingEffects = [];\n\t\t} catch (e) {\n\t\t\tcomponent.__hooks._pendingEffects = [];\n\t\t\toptions._catchError(e, component._vnode);\n\t\t}\n\t}\n}\n\nlet HAS_RAF = typeof requestAnimationFrame == 'function';\n\n/**\n * Schedule a callback to be invoked after the browser has a chance to paint a new frame.\n * Do this by combining requestAnimationFrame (rAF) + setTimeout to invoke a callback after\n * the next browser frame.\n *\n * Also, schedule a timeout in parallel to the the rAF to ensure the callback is invoked\n * even if RAF doesn't fire (for example if the browser tab is not visible)\n *\n * @param {() => void} callback\n */\nfunction afterNextFrame(callback) {\n\tconst done = () => {\n\t\tclearTimeout(timeout);\n\t\tif (HAS_RAF) cancelAnimationFrame(raf);\n\t\tsetTimeout(callback);\n\t};\n\tconst timeout = setTimeout(done, RAF_TIMEOUT);\n\n\tlet raf;\n\tif (HAS_RAF) {\n\t\traf = requestAnimationFrame(done);\n\t}\n}\n\n// Note: if someone used options.debounceRendering = requestAnimationFrame,\n// then effects will ALWAYS run on the NEXT frame instead of the current one, incurring a ~16ms delay.\n// Perhaps this is not such a big deal.\n/**\n * Schedule afterPaintEffects flush after the browser paints\n * @param {number} newQueueLength\n */\nfunction afterPaint(newQueueLength) {\n\tif (newQueueLength === 1 || prevRaf !== options.requestAnimationFrame) {\n\t\tprevRaf = options.requestAnimationFrame;\n\t\t(prevRaf || afterNextFrame)(flushAfterPaintEffects);\n\t}\n}\n\n/**\n * @param {import('./internal').EffectHookState} hook\n */\nfunction invokeCleanup(hook) {\n\t// A hook cleanup can introduce a call to render which creates a new root, this will call options.vnode\n\t// and move the currentComponent away.\n\tconst comp = currentComponent;\n\tlet cleanup = hook._cleanup;\n\tif (typeof cleanup == 'function') {\n\t\thook._cleanup = undefined;\n\t\tcleanup();\n\t}\n\n\tcurrentComponent = comp;\n}\n\n/**\n * Invoke a Hook's effect\n * @param {import('./internal').EffectHookState} hook\n */\nfunction invokeEffect(hook) {\n\t// A hook call can introduce a call to render which creates a new root, this will call options.vnode\n\t// and move the currentComponent away.\n\tconst comp = currentComponent;\n\thook._cleanup = hook._value();\n\tcurrentComponent = comp;\n}\n\n/**\n * @param {any[]} oldArgs\n * @param {any[]} newArgs\n */\nfunction argsChanged(oldArgs, newArgs) {\n\treturn (\n\t\t!oldArgs ||\n\t\toldArgs.length !== newArgs.length ||\n\t\tnewArgs.some((arg, index) => arg !== oldArgs[index])\n\t);\n}\n\nfunction invokeOrReturn(arg, f) {\n\treturn typeof f == 'function' ? f(arg) : f;\n}\n", "// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.\n// TypeScript port in 2019 by Florian Dold.\n// Public domain.\n//\n// Implementation derived from TweetNaCl version 20140427.\n// See for details: http://tweetnacl.cr.yp.to/\n\nconst gf = function (init: number[] = []): Float64Array {\n const r = new Float64Array(16);\n if (init) for (let i = 0; i < init.length; i++) r[i] = init[i];\n return r;\n};\n\n// Pluggable, initialized in high-level API below.\nlet randombytes = function (x: Uint8Array, n: number): void {\n throw new Error(\"no PRNG\");\n};\n\nconst _9 = new Uint8Array(32);\n_9[0] = 9;\n\n// prettier-ignore\nconst gf0 = gf();\nconst gf1 = gf([1]);\nconst _121665 = gf([0xdb41, 1]);\nconst D = gf([\n 0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898,\n 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203,\n]);\nconst D2 = gf([\n 0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130,\n 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406,\n]);\nconst X = gf([\n 0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c,\n 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169,\n]);\nconst Y = gf([\n 0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666,\n 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666,\n]);\nconst I = gf([\n 0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7,\n 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83,\n]);\n\nfunction ts64(x: Uint8Array, i: number, h: number, l: number): void {\n x[i] = (h >> 24) & 0xff;\n x[i + 1] = (h >> 16) & 0xff;\n x[i + 2] = (h >> 8) & 0xff;\n x[i + 3] = h & 0xff;\n x[i + 4] = (l >> 24) & 0xff;\n x[i + 5] = (l >> 16) & 0xff;\n x[i + 6] = (l >> 8) & 0xff;\n x[i + 7] = l & 0xff;\n}\n\nfunction vn(\n x: Uint8Array,\n xi: number,\n y: Uint8Array,\n yi: number,\n n: number,\n): number {\n let i,\n d = 0;\n for (i = 0; i < n; i++) d |= x[xi + i] ^ y[yi + i];\n return (1 & ((d - 1) >>> 8)) - 1;\n}\n\nfunction crypto_verify_16(\n x: Uint8Array,\n xi: number,\n y: Uint8Array,\n yi: number,\n) {\n return vn(x, xi, y, yi, 16);\n}\n\nfunction crypto_verify_32(\n x: Uint8Array,\n xi: number,\n y: Uint8Array,\n yi: number,\n): number {\n return vn(x, xi, y, yi, 32);\n}\n\nfunction core_salsa20(\n o: Uint8Array,\n p: Uint8Array,\n k: Uint8Array,\n c: Uint8Array,\n) {\n var j0 =\n (c[0] & 0xff) |\n ((c[1] & 0xff) << 8) |\n ((c[2] & 0xff) << 16) |\n ((c[3] & 0xff) << 24),\n j1 =\n (k[0] & 0xff) |\n ((k[1] & 0xff) << 8) |\n ((k[2] & 0xff) << 16) |\n ((k[3] & 0xff) << 24),\n j2 =\n (k[4] & 0xff) |\n ((k[5] & 0xff) << 8) |\n ((k[6] & 0xff) << 16) |\n ((k[7] & 0xff) << 24),\n j3 =\n (k[8] & 0xff) |\n ((k[9] & 0xff) << 8) |\n ((k[10] & 0xff) << 16) |\n ((k[11] & 0xff) << 24),\n j4 =\n (k[12] & 0xff) |\n ((k[13] & 0xff) << 8) |\n ((k[14] & 0xff) << 16) |\n ((k[15] & 0xff) << 24),\n j5 =\n (c[4] & 0xff) |\n ((c[5] & 0xff) << 8) |\n ((c[6] & 0xff) << 16) |\n ((c[7] & 0xff) << 24),\n j6 =\n (p[0] & 0xff) |\n ((p[1] & 0xff) << 8) |\n ((p[2] & 0xff) << 16) |\n ((p[3] & 0xff) << 24),\n j7 =\n (p[4] & 0xff) |\n ((p[5] & 0xff) << 8) |\n ((p[6] & 0xff) << 16) |\n ((p[7] & 0xff) << 24),\n j8 =\n (p[8] & 0xff) |\n ((p[9] & 0xff) << 8) |\n ((p[10] & 0xff) << 16) |\n ((p[11] & 0xff) << 24),\n j9 =\n (p[12] & 0xff) |\n ((p[13] & 0xff) << 8) |\n ((p[14] & 0xff) << 16) |\n ((p[15] & 0xff) << 24),\n j10 =\n (c[8] & 0xff) |\n ((c[9] & 0xff) << 8) |\n ((c[10] & 0xff) << 16) |\n ((c[11] & 0xff) << 24),\n j11 =\n (k[16] & 0xff) |\n ((k[17] & 0xff) << 8) |\n ((k[18] & 0xff) << 16) |\n ((k[19] & 0xff) << 24),\n j12 =\n (k[20] & 0xff) |\n ((k[21] & 0xff) << 8) |\n ((k[22] & 0xff) << 16) |\n ((k[23] & 0xff) << 24),\n j13 =\n (k[24] & 0xff) |\n ((k[25] & 0xff) << 8) |\n ((k[26] & 0xff) << 16) |\n ((k[27] & 0xff) << 24),\n j14 =\n (k[28] & 0xff) |\n ((k[29] & 0xff) << 8) |\n ((k[30] & 0xff) << 16) |\n ((k[31] & 0xff) << 24),\n j15 =\n (c[12] & 0xff) |\n ((c[13] & 0xff) << 8) |\n ((c[14] & 0xff) << 16) |\n ((c[15] & 0xff) << 24);\n\n var x0 = j0,\n x1 = j1,\n x2 = j2,\n x3 = j3,\n x4 = j4,\n x5 = j5,\n x6 = j6,\n x7 = j7,\n x8 = j8,\n x9 = j9,\n x10 = j10,\n x11 = j11,\n x12 = j12,\n x13 = j13,\n x14 = j14,\n x15 = j15,\n u;\n\n for (var i = 0; i < 20; i += 2) {\n u = (x0 + x12) | 0;\n x4 ^= (u << 7) | (u >>> (32 - 7));\n u = (x4 + x0) | 0;\n x8 ^= (u << 9) | (u >>> (32 - 9));\n u = (x8 + x4) | 0;\n x12 ^= (u << 13) | (u >>> (32 - 13));\n u = (x12 + x8) | 0;\n x0 ^= (u << 18) | (u >>> (32 - 18));\n\n u = (x5 + x1) | 0;\n x9 ^= (u << 7) | (u >>> (32 - 7));\n u = (x9 + x5) | 0;\n x13 ^= (u << 9) | (u >>> (32 - 9));\n u = (x13 + x9) | 0;\n x1 ^= (u << 13) | (u >>> (32 - 13));\n u = (x1 + x13) | 0;\n x5 ^= (u << 18) | (u >>> (32 - 18));\n\n u = (x10 + x6) | 0;\n x14 ^= (u << 7) | (u >>> (32 - 7));\n u = (x14 + x10) | 0;\n x2 ^= (u << 9) | (u >>> (32 - 9));\n u = (x2 + x14) | 0;\n x6 ^= (u << 13) | (u >>> (32 - 13));\n u = (x6 + x2) | 0;\n x10 ^= (u << 18) | (u >>> (32 - 18));\n\n u = (x15 + x11) | 0;\n x3 ^= (u << 7) | (u >>> (32 - 7));\n u = (x3 + x15) | 0;\n x7 ^= (u << 9) | (u >>> (32 - 9));\n u = (x7 + x3) | 0;\n x11 ^= (u << 13) | (u >>> (32 - 13));\n u = (x11 + x7) | 0;\n x15 ^= (u << 18) | (u >>> (32 - 18));\n\n u = (x0 + x3) | 0;\n x1 ^= (u << 7) | (u >>> (32 - 7));\n u = (x1 + x0) | 0;\n x2 ^= (u << 9) | (u >>> (32 - 9));\n u = (x2 + x1) | 0;\n x3 ^= (u << 13) | (u >>> (32 - 13));\n u = (x3 + x2) | 0;\n x0 ^= (u << 18) | (u >>> (32 - 18));\n\n u = (x5 + x4) | 0;\n x6 ^= (u << 7) | (u >>> (32 - 7));\n u = (x6 + x5) | 0;\n x7 ^= (u << 9) | (u >>> (32 - 9));\n u = (x7 + x6) | 0;\n x4 ^= (u << 13) | (u >>> (32 - 13));\n u = (x4 + x7) | 0;\n x5 ^= (u << 18) | (u >>> (32 - 18));\n\n u = (x10 + x9) | 0;\n x11 ^= (u << 7) | (u >>> (32 - 7));\n u = (x11 + x10) | 0;\n x8 ^= (u << 9) | (u >>> (32 - 9));\n u = (x8 + x11) | 0;\n x9 ^= (u << 13) | (u >>> (32 - 13));\n u = (x9 + x8) | 0;\n x10 ^= (u << 18) | (u >>> (32 - 18));\n\n u = (x15 + x14) | 0;\n x12 ^= (u << 7) | (u >>> (32 - 7));\n u = (x12 + x15) | 0;\n x13 ^= (u << 9) | (u >>> (32 - 9));\n u = (x13 + x12) | 0;\n x14 ^= (u << 13) | (u >>> (32 - 13));\n u = (x14 + x13) | 0;\n x15 ^= (u << 18) | (u >>> (32 - 18));\n }\n x0 = (x0 + j0) | 0;\n x1 = (x1 + j1) | 0;\n x2 = (x2 + j2) | 0;\n x3 = (x3 + j3) | 0;\n x4 = (x4 + j4) | 0;\n x5 = (x5 + j5) | 0;\n x6 = (x6 + j6) | 0;\n x7 = (x7 + j7) | 0;\n x8 = (x8 + j8) | 0;\n x9 = (x9 + j9) | 0;\n x10 = (x10 + j10) | 0;\n x11 = (x11 + j11) | 0;\n x12 = (x12 + j12) | 0;\n x13 = (x13 + j13) | 0;\n x14 = (x14 + j14) | 0;\n x15 = (x15 + j15) | 0;\n\n o[0] = (x0 >>> 0) & 0xff;\n o[1] = (x0 >>> 8) & 0xff;\n o[2] = (x0 >>> 16) & 0xff;\n o[3] = (x0 >>> 24) & 0xff;\n\n o[4] = (x1 >>> 0) & 0xff;\n o[5] = (x1 >>> 8) & 0xff;\n o[6] = (x1 >>> 16) & 0xff;\n o[7] = (x1 >>> 24) & 0xff;\n\n o[8] = (x2 >>> 0) & 0xff;\n o[9] = (x2 >>> 8) & 0xff;\n o[10] = (x2 >>> 16) & 0xff;\n o[11] = (x2 >>> 24) & 0xff;\n\n o[12] = (x3 >>> 0) & 0xff;\n o[13] = (x3 >>> 8) & 0xff;\n o[14] = (x3 >>> 16) & 0xff;\n o[15] = (x3 >>> 24) & 0xff;\n\n o[16] = (x4 >>> 0) & 0xff;\n o[17] = (x4 >>> 8) & 0xff;\n o[18] = (x4 >>> 16) & 0xff;\n o[19] = (x4 >>> 24) & 0xff;\n\n o[20] = (x5 >>> 0) & 0xff;\n o[21] = (x5 >>> 8) & 0xff;\n o[22] = (x5 >>> 16) & 0xff;\n o[23] = (x5 >>> 24) & 0xff;\n\n o[24] = (x6 >>> 0) & 0xff;\n o[25] = (x6 >>> 8) & 0xff;\n o[26] = (x6 >>> 16) & 0xff;\n o[27] = (x6 >>> 24) & 0xff;\n\n o[28] = (x7 >>> 0) & 0xff;\n o[29] = (x7 >>> 8) & 0xff;\n o[30] = (x7 >>> 16) & 0xff;\n o[31] = (x7 >>> 24) & 0xff;\n\n o[32] = (x8 >>> 0) & 0xff;\n o[33] = (x8 >>> 8) & 0xff;\n o[34] = (x8 >>> 16) & 0xff;\n o[35] = (x8 >>> 24) & 0xff;\n\n o[36] = (x9 >>> 0) & 0xff;\n o[37] = (x9 >>> 8) & 0xff;\n o[38] = (x9 >>> 16) & 0xff;\n o[39] = (x9 >>> 24) & 0xff;\n\n o[40] = (x10 >>> 0) & 0xff;\n o[41] = (x10 >>> 8) & 0xff;\n o[42] = (x10 >>> 16) & 0xff;\n o[43] = (x10 >>> 24) & 0xff;\n\n o[44] = (x11 >>> 0) & 0xff;\n o[45] = (x11 >>> 8) & 0xff;\n o[46] = (x11 >>> 16) & 0xff;\n o[47] = (x11 >>> 24) & 0xff;\n\n o[48] = (x12 >>> 0) & 0xff;\n o[49] = (x12 >>> 8) & 0xff;\n o[50] = (x12 >>> 16) & 0xff;\n o[51] = (x12 >>> 24) & 0xff;\n\n o[52] = (x13 >>> 0) & 0xff;\n o[53] = (x13 >>> 8) & 0xff;\n o[54] = (x13 >>> 16) & 0xff;\n o[55] = (x13 >>> 24) & 0xff;\n\n o[56] = (x14 >>> 0) & 0xff;\n o[57] = (x14 >>> 8) & 0xff;\n o[58] = (x14 >>> 16) & 0xff;\n o[59] = (x14 >>> 24) & 0xff;\n\n o[60] = (x15 >>> 0) & 0xff;\n o[61] = (x15 >>> 8) & 0xff;\n o[62] = (x15 >>> 16) & 0xff;\n o[63] = (x15 >>> 24) & 0xff;\n}\n\nfunction core_hsalsa20(\n o: Uint8Array,\n p: Uint8Array,\n k: Uint8Array,\n c: Uint8Array,\n) {\n var j0 =\n (c[0] & 0xff) |\n ((c[1] & 0xff) << 8) |\n ((c[2] & 0xff) << 16) |\n ((c[3] & 0xff) << 24),\n j1 =\n (k[0] & 0xff) |\n ((k[1] & 0xff) << 8) |\n ((k[2] & 0xff) << 16) |\n ((k[3] & 0xff) << 24),\n j2 =\n (k[4] & 0xff) |\n ((k[5] & 0xff) << 8) |\n ((k[6] & 0xff) << 16) |\n ((k[7] & 0xff) << 24),\n j3 =\n (k[8] & 0xff) |\n ((k[9] & 0xff) << 8) |\n ((k[10] & 0xff) << 16) |\n ((k[11] & 0xff) << 24),\n j4 =\n (k[12] & 0xff) |\n ((k[13] & 0xff) << 8) |\n ((k[14] & 0xff) << 16) |\n ((k[15] & 0xff) << 24),\n j5 =\n (c[4] & 0xff) |\n ((c[5] & 0xff) << 8) |\n ((c[6] & 0xff) << 16) |\n ((c[7] & 0xff) << 24),\n j6 =\n (p[0] & 0xff) |\n ((p[1] & 0xff) << 8) |\n ((p[2] & 0xff) << 16) |\n ((p[3] & 0xff) << 24),\n j7 =\n (p[4] & 0xff) |\n ((p[5] & 0xff) << 8) |\n ((p[6] & 0xff) << 16) |\n ((p[7] & 0xff) << 24),\n j8 =\n (p[8] & 0xff) |\n ((p[9] & 0xff) << 8) |\n ((p[10] & 0xff) << 16) |\n ((p[11] & 0xff) << 24),\n j9 =\n (p[12] & 0xff) |\n ((p[13] & 0xff) << 8) |\n ((p[14] & 0xff) << 16) |\n ((p[15] & 0xff) << 24),\n j10 =\n (c[8] & 0xff) |\n ((c[9] & 0xff) << 8) |\n ((c[10] & 0xff) << 16) |\n ((c[11] & 0xff) << 24),\n j11 =\n (k[16] & 0xff) |\n ((k[17] & 0xff) << 8) |\n ((k[18] & 0xff) << 16) |\n ((k[19] & 0xff) << 24),\n j12 =\n (k[20] & 0xff) |\n ((k[21] & 0xff) << 8) |\n ((k[22] & 0xff) << 16) |\n ((k[23] & 0xff) << 24),\n j13 =\n (k[24] & 0xff) |\n ((k[25] & 0xff) << 8) |\n ((k[26] & 0xff) << 16) |\n ((k[27] & 0xff) << 24),\n j14 =\n (k[28] & 0xff) |\n ((k[29] & 0xff) << 8) |\n ((k[30] & 0xff) << 16) |\n ((k[31] & 0xff) << 24),\n j15 =\n (c[12] & 0xff) |\n ((c[13] & 0xff) << 8) |\n ((c[14] & 0xff) << 16) |\n ((c[15] & 0xff) << 24);\n\n var x0 = j0,\n x1 = j1,\n x2 = j2,\n x3 = j3,\n x4 = j4,\n x5 = j5,\n x6 = j6,\n x7 = j7,\n x8 = j8,\n x9 = j9,\n x10 = j10,\n x11 = j11,\n x12 = j12,\n x13 = j13,\n x14 = j14,\n x15 = j15,\n u;\n\n for (var i = 0; i < 20; i += 2) {\n u = (x0 + x12) | 0;\n x4 ^= (u << 7) | (u >>> (32 - 7));\n u = (x4 + x0) | 0;\n x8 ^= (u << 9) | (u >>> (32 - 9));\n u = (x8 + x4) | 0;\n x12 ^= (u << 13) | (u >>> (32 - 13));\n u = (x12 + x8) | 0;\n x0 ^= (u << 18) | (u >>> (32 - 18));\n\n u = (x5 + x1) | 0;\n x9 ^= (u << 7) | (u >>> (32 - 7));\n u = (x9 + x5) | 0;\n x13 ^= (u << 9) | (u >>> (32 - 9));\n u = (x13 + x9) | 0;\n x1 ^= (u << 13) | (u >>> (32 - 13));\n u = (x1 + x13) | 0;\n x5 ^= (u << 18) | (u >>> (32 - 18));\n\n u = (x10 + x6) | 0;\n x14 ^= (u << 7) | (u >>> (32 - 7));\n u = (x14 + x10) | 0;\n x2 ^= (u << 9) | (u >>> (32 - 9));\n u = (x2 + x14) | 0;\n x6 ^= (u << 13) | (u >>> (32 - 13));\n u = (x6 + x2) | 0;\n x10 ^= (u << 18) | (u >>> (32 - 18));\n\n u = (x15 + x11) | 0;\n x3 ^= (u << 7) | (u >>> (32 - 7));\n u = (x3 + x15) | 0;\n x7 ^= (u << 9) | (u >>> (32 - 9));\n u = (x7 + x3) | 0;\n x11 ^= (u << 13) | (u >>> (32 - 13));\n u = (x11 + x7) | 0;\n x15 ^= (u << 18) | (u >>> (32 - 18));\n\n u = (x0 + x3) | 0;\n x1 ^= (u << 7) | (u >>> (32 - 7));\n u = (x1 + x0) | 0;\n x2 ^= (u << 9) | (u >>> (32 - 9));\n u = (x2 + x1) | 0;\n x3 ^= (u << 13) | (u >>> (32 - 13));\n u = (x3 + x2) | 0;\n x0 ^= (u << 18) | (u >>> (32 - 18));\n\n u = (x5 + x4) | 0;\n x6 ^= (u << 7) | (u >>> (32 - 7));\n u = (x6 + x5) | 0;\n x7 ^= (u << 9) | (u >>> (32 - 9));\n u = (x7 + x6) | 0;\n x4 ^= (u << 13) | (u >>> (32 - 13));\n u = (x4 + x7) | 0;\n x5 ^= (u << 18) | (u >>> (32 - 18));\n\n u = (x10 + x9) | 0;\n x11 ^= (u << 7) | (u >>> (32 - 7));\n u = (x11 + x10) | 0;\n x8 ^= (u << 9) | (u >>> (32 - 9));\n u = (x8 + x11) | 0;\n x9 ^= (u << 13) | (u >>> (32 - 13));\n u = (x9 + x8) | 0;\n x10 ^= (u << 18) | (u >>> (32 - 18));\n\n u = (x15 + x14) | 0;\n x12 ^= (u << 7) | (u >>> (32 - 7));\n u = (x12 + x15) | 0;\n x13 ^= (u << 9) | (u >>> (32 - 9));\n u = (x13 + x12) | 0;\n x14 ^= (u << 13) | (u >>> (32 - 13));\n u = (x14 + x13) | 0;\n x15 ^= (u << 18) | (u >>> (32 - 18));\n }\n\n o[0] = (x0 >>> 0) & 0xff;\n o[1] = (x0 >>> 8) & 0xff;\n o[2] = (x0 >>> 16) & 0xff;\n o[3] = (x0 >>> 24) & 0xff;\n\n o[4] = (x5 >>> 0) & 0xff;\n o[5] = (x5 >>> 8) & 0xff;\n o[6] = (x5 >>> 16) & 0xff;\n o[7] = (x5 >>> 24) & 0xff;\n\n o[8] = (x10 >>> 0) & 0xff;\n o[9] = (x10 >>> 8) & 0xff;\n o[10] = (x10 >>> 16) & 0xff;\n o[11] = (x10 >>> 24) & 0xff;\n\n o[12] = (x15 >>> 0) & 0xff;\n o[13] = (x15 >>> 8) & 0xff;\n o[14] = (x15 >>> 16) & 0xff;\n o[15] = (x15 >>> 24) & 0xff;\n\n o[16] = (x6 >>> 0) & 0xff;\n o[17] = (x6 >>> 8) & 0xff;\n o[18] = (x6 >>> 16) & 0xff;\n o[19] = (x6 >>> 24) & 0xff;\n\n o[20] = (x7 >>> 0) & 0xff;\n o[21] = (x7 >>> 8) & 0xff;\n o[22] = (x7 >>> 16) & 0xff;\n o[23] = (x7 >>> 24) & 0xff;\n\n o[24] = (x8 >>> 0) & 0xff;\n o[25] = (x8 >>> 8) & 0xff;\n o[26] = (x8 >>> 16) & 0xff;\n o[27] = (x8 >>> 24) & 0xff;\n\n o[28] = (x9 >>> 0) & 0xff;\n o[29] = (x9 >>> 8) & 0xff;\n o[30] = (x9 >>> 16) & 0xff;\n o[31] = (x9 >>> 24) & 0xff;\n}\n\nvar sigma = new Uint8Array([\n 101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107,\n]);\n// \"expand 32-byte k\"\n\nfunction crypto_stream_salsa20_xor(\n c: Uint8Array,\n cpos: number,\n m: Uint8Array,\n mpos: number,\n b: number,\n n: Uint8Array,\n k: Uint8Array,\n) {\n var z = new Uint8Array(16),\n x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n core_salsa20(x, z, k, sigma);\n for (i = 0; i < 64; i++) c[cpos + i] = m[mpos + i] ^ x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = (u + (z[i] & 0xff)) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n mpos += 64;\n }\n if (b > 0) {\n core_salsa20(x, z, k, sigma);\n for (i = 0; i < b; i++) c[cpos + i] = m[mpos + i] ^ x[i];\n }\n return 0;\n}\n\nfunction crypto_stream_salsa20(\n c: Uint8Array,\n cpos: number,\n b: number,\n n: Uint8Array,\n k: Uint8Array,\n) {\n var z = new Uint8Array(16),\n x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n core_salsa20(x, z, k, sigma);\n for (i = 0; i < 64; i++) c[cpos + i] = x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = (u + (z[i] & 0xff)) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n }\n if (b > 0) {\n core_salsa20(x, z, k, sigma);\n for (i = 0; i < b; i++) c[cpos + i] = x[i];\n }\n return 0;\n}\n\nfunction crypto_stream(\n c: Uint8Array,\n cpos: number,\n d: number,\n n: Uint8Array,\n k: Uint8Array,\n) {\n var s = new Uint8Array(32);\n core_hsalsa20(s, n, k, sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i + 16];\n return crypto_stream_salsa20(c, cpos, d, sn, s);\n}\n\nfunction crypto_stream_xor(\n c: Uint8Array,\n cpos: number,\n m: Uint8Array,\n mpos: number,\n d: number,\n n: Uint8Array,\n k: Uint8Array,\n) {\n var s = new Uint8Array(32);\n core_hsalsa20(s, n, k, sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i + 16];\n return crypto_stream_salsa20_xor(c, cpos, m, mpos, d, sn, s);\n}\n\n/*\n * Port of Andrew Moon's Poly1305-donna-16. Public domain.\n * https://github.com/floodyberry/poly1305-donna\n */\n\nclass poly1305 {\n buffer = new Uint8Array(16);\n r = new Uint16Array(10);\n h = new Uint16Array(10);\n pad = new Uint16Array(8);\n leftover = 0;\n fin = 0;\n\n constructor(key: Uint8Array) {\n var t0, t1, t2, t3, t4, t5, t6, t7;\n\n t0 = (key[0] & 0xff) | ((key[1] & 0xff) << 8);\n this.r[0] = t0 & 0x1fff;\n t1 = (key[2] & 0xff) | ((key[3] & 0xff) << 8);\n this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = (key[4] & 0xff) | ((key[5] & 0xff) << 8);\n this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;\n t3 = (key[6] & 0xff) | ((key[7] & 0xff) << 8);\n this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = (key[8] & 0xff) | ((key[9] & 0xff) << 8);\n this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;\n this.r[5] = (t4 >>> 1) & 0x1ffe;\n t5 = (key[10] & 0xff) | ((key[11] & 0xff) << 8);\n this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = (key[12] & 0xff) | ((key[13] & 0xff) << 8);\n this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;\n t7 = (key[14] & 0xff) | ((key[15] & 0xff) << 8);\n this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n this.r[9] = (t7 >>> 5) & 0x007f;\n\n this.pad[0] = (key[16] & 0xff) | ((key[17] & 0xff) << 8);\n this.pad[1] = (key[18] & 0xff) | ((key[19] & 0xff) << 8);\n this.pad[2] = (key[20] & 0xff) | ((key[21] & 0xff) << 8);\n this.pad[3] = (key[22] & 0xff) | ((key[23] & 0xff) << 8);\n this.pad[4] = (key[24] & 0xff) | ((key[25] & 0xff) << 8);\n this.pad[5] = (key[26] & 0xff) | ((key[27] & 0xff) << 8);\n this.pad[6] = (key[28] & 0xff) | ((key[29] & 0xff) << 8);\n this.pad[7] = (key[30] & 0xff) | ((key[31] & 0xff) << 8);\n }\n\n blocks(m: Uint8Array, mpos: number, bytes: number) {\n var hibit = this.fin ? 0 : 1 << 11;\n var t0, t1, t2, t3, t4, t5, t6, t7, c;\n var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;\n\n var h0 = this.h[0],\n h1 = this.h[1],\n h2 = this.h[2],\n h3 = this.h[3],\n h4 = this.h[4],\n h5 = this.h[5],\n h6 = this.h[6],\n h7 = this.h[7],\n h8 = this.h[8],\n h9 = this.h[9];\n\n var r0 = this.r[0],\n r1 = this.r[1],\n r2 = this.r[2],\n r3 = this.r[3],\n r4 = this.r[4],\n r5 = this.r[5],\n r6 = this.r[6],\n r7 = this.r[7],\n r8 = this.r[8],\n r9 = this.r[9];\n\n while (bytes >= 16) {\n t0 = (m[mpos + 0] & 0xff) | ((m[mpos + 1] & 0xff) << 8);\n h0 += t0 & 0x1fff;\n t1 = (m[mpos + 2] & 0xff) | ((m[mpos + 3] & 0xff) << 8);\n h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = (m[mpos + 4] & 0xff) | ((m[mpos + 5] & 0xff) << 8);\n h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff;\n t3 = (m[mpos + 6] & 0xff) | ((m[mpos + 7] & 0xff) << 8);\n h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = (m[mpos + 8] & 0xff) | ((m[mpos + 9] & 0xff) << 8);\n h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff;\n h5 += (t4 >>> 1) & 0x1fff;\n t5 = (m[mpos + 10] & 0xff) | ((m[mpos + 11] & 0xff) << 8);\n h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = (m[mpos + 12] & 0xff) | ((m[mpos + 13] & 0xff) << 8);\n h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff;\n t7 = (m[mpos + 14] & 0xff) | ((m[mpos + 15] & 0xff) << 8);\n h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n h9 += (t7 >>> 5) | hibit;\n\n c = 0;\n\n d0 = c;\n d0 += h0 * r0;\n d0 += h1 * (5 * r9);\n d0 += h2 * (5 * r8);\n d0 += h3 * (5 * r7);\n d0 += h4 * (5 * r6);\n c = d0 >>> 13;\n d0 &= 0x1fff;\n d0 += h5 * (5 * r5);\n d0 += h6 * (5 * r4);\n d0 += h7 * (5 * r3);\n d0 += h8 * (5 * r2);\n d0 += h9 * (5 * r1);\n c += d0 >>> 13;\n d0 &= 0x1fff;\n\n d1 = c;\n d1 += h0 * r1;\n d1 += h1 * r0;\n d1 += h2 * (5 * r9);\n d1 += h3 * (5 * r8);\n d1 += h4 * (5 * r7);\n c = d1 >>> 13;\n d1 &= 0x1fff;\n d1 += h5 * (5 * r6);\n d1 += h6 * (5 * r5);\n d1 += h7 * (5 * r4);\n d1 += h8 * (5 * r3);\n d1 += h9 * (5 * r2);\n c += d1 >>> 13;\n d1 &= 0x1fff;\n\n d2 = c;\n d2 += h0 * r2;\n d2 += h1 * r1;\n d2 += h2 * r0;\n d2 += h3 * (5 * r9);\n d2 += h4 * (5 * r8);\n c = d2 >>> 13;\n d2 &= 0x1fff;\n d2 += h5 * (5 * r7);\n d2 += h6 * (5 * r6);\n d2 += h7 * (5 * r5);\n d2 += h8 * (5 * r4);\n d2 += h9 * (5 * r3);\n c += d2 >>> 13;\n d2 &= 0x1fff;\n\n d3 = c;\n d3 += h0 * r3;\n d3 += h1 * r2;\n d3 += h2 * r1;\n d3 += h3 * r0;\n d3 += h4 * (5 * r9);\n c = d3 >>> 13;\n d3 &= 0x1fff;\n d3 += h5 * (5 * r8);\n d3 += h6 * (5 * r7);\n d3 += h7 * (5 * r6);\n d3 += h8 * (5 * r5);\n d3 += h9 * (5 * r4);\n c += d3 >>> 13;\n d3 &= 0x1fff;\n\n d4 = c;\n d4 += h0 * r4;\n d4 += h1 * r3;\n d4 += h2 * r2;\n d4 += h3 * r1;\n d4 += h4 * r0;\n c = d4 >>> 13;\n d4 &= 0x1fff;\n d4 += h5 * (5 * r9);\n d4 += h6 * (5 * r8);\n d4 += h7 * (5 * r7);\n d4 += h8 * (5 * r6);\n d4 += h9 * (5 * r5);\n c += d4 >>> 13;\n d4 &= 0x1fff;\n\n d5 = c;\n d5 += h0 * r5;\n d5 += h1 * r4;\n d5 += h2 * r3;\n d5 += h3 * r2;\n d5 += h4 * r1;\n c = d5 >>> 13;\n d5 &= 0x1fff;\n d5 += h5 * r0;\n d5 += h6 * (5 * r9);\n d5 += h7 * (5 * r8);\n d5 += h8 * (5 * r7);\n d5 += h9 * (5 * r6);\n c += d5 >>> 13;\n d5 &= 0x1fff;\n\n d6 = c;\n d6 += h0 * r6;\n d6 += h1 * r5;\n d6 += h2 * r4;\n d6 += h3 * r3;\n d6 += h4 * r2;\n c = d6 >>> 13;\n d6 &= 0x1fff;\n d6 += h5 * r1;\n d6 += h6 * r0;\n d6 += h7 * (5 * r9);\n d6 += h8 * (5 * r8);\n d6 += h9 * (5 * r7);\n c += d6 >>> 13;\n d6 &= 0x1fff;\n\n d7 = c;\n d7 += h0 * r7;\n d7 += h1 * r6;\n d7 += h2 * r5;\n d7 += h3 * r4;\n d7 += h4 * r3;\n c = d7 >>> 13;\n d7 &= 0x1fff;\n d7 += h5 * r2;\n d7 += h6 * r1;\n d7 += h7 * r0;\n d7 += h8 * (5 * r9);\n d7 += h9 * (5 * r8);\n c += d7 >>> 13;\n d7 &= 0x1fff;\n\n d8 = c;\n d8 += h0 * r8;\n d8 += h1 * r7;\n d8 += h2 * r6;\n d8 += h3 * r5;\n d8 += h4 * r4;\n c = d8 >>> 13;\n d8 &= 0x1fff;\n d8 += h5 * r3;\n d8 += h6 * r2;\n d8 += h7 * r1;\n d8 += h8 * r0;\n d8 += h9 * (5 * r9);\n c += d8 >>> 13;\n d8 &= 0x1fff;\n\n d9 = c;\n d9 += h0 * r9;\n d9 += h1 * r8;\n d9 += h2 * r7;\n d9 += h3 * r6;\n d9 += h4 * r5;\n c = d9 >>> 13;\n d9 &= 0x1fff;\n d9 += h5 * r4;\n d9 += h6 * r3;\n d9 += h7 * r2;\n d9 += h8 * r1;\n d9 += h9 * r0;\n c += d9 >>> 13;\n d9 &= 0x1fff;\n\n c = ((c << 2) + c) | 0;\n c = (c + d0) | 0;\n d0 = c & 0x1fff;\n c = c >>> 13;\n d1 += c;\n\n h0 = d0;\n h1 = d1;\n h2 = d2;\n h3 = d3;\n h4 = d4;\n h5 = d5;\n h6 = d6;\n h7 = d7;\n h8 = d8;\n h9 = d9;\n\n mpos += 16;\n bytes -= 16;\n }\n this.h[0] = h0;\n this.h[1] = h1;\n this.h[2] = h2;\n this.h[3] = h3;\n this.h[4] = h4;\n this.h[5] = h5;\n this.h[6] = h6;\n this.h[7] = h7;\n this.h[8] = h8;\n this.h[9] = h9;\n }\n\n finish(mac: Uint8Array, macpos: number) {\n var g = new Uint16Array(10);\n var c, mask, f, i;\n\n if (this.leftover) {\n i = this.leftover;\n this.buffer[i++] = 1;\n for (; i < 16; i++) this.buffer[i] = 0;\n this.fin = 1;\n this.blocks(this.buffer, 0, 16);\n }\n\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n for (i = 2; i < 10; i++) {\n this.h[i] += c;\n c = this.h[i] >>> 13;\n this.h[i] &= 0x1fff;\n }\n this.h[0] += c * 5;\n c = this.h[0] >>> 13;\n this.h[0] &= 0x1fff;\n this.h[1] += c;\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n this.h[2] += c;\n\n g[0] = this.h[0] + 5;\n c = g[0] >>> 13;\n g[0] &= 0x1fff;\n for (i = 1; i < 10; i++) {\n g[i] = this.h[i] + c;\n c = g[i] >>> 13;\n g[i] &= 0x1fff;\n }\n g[9] -= 1 << 13;\n\n mask = (c ^ 1) - 1;\n for (i = 0; i < 10; i++) g[i] &= mask;\n mask = ~mask;\n for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];\n\n this.h[0] = (this.h[0] | (this.h[1] << 13)) & 0xffff;\n this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10)) & 0xffff;\n this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7)) & 0xffff;\n this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4)) & 0xffff;\n this.h[4] =\n ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff;\n this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11)) & 0xffff;\n this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8)) & 0xffff;\n this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5)) & 0xffff;\n\n f = this.h[0] + this.pad[0];\n this.h[0] = f & 0xffff;\n for (i = 1; i < 8; i++) {\n f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;\n this.h[i] = f & 0xffff;\n }\n\n mac[macpos + 0] = (this.h[0] >>> 0) & 0xff;\n mac[macpos + 1] = (this.h[0] >>> 8) & 0xff;\n mac[macpos + 2] = (this.h[1] >>> 0) & 0xff;\n mac[macpos + 3] = (this.h[1] >>> 8) & 0xff;\n mac[macpos + 4] = (this.h[2] >>> 0) & 0xff;\n mac[macpos + 5] = (this.h[2] >>> 8) & 0xff;\n mac[macpos + 6] = (this.h[3] >>> 0) & 0xff;\n mac[macpos + 7] = (this.h[3] >>> 8) & 0xff;\n mac[macpos + 8] = (this.h[4] >>> 0) & 0xff;\n mac[macpos + 9] = (this.h[4] >>> 8) & 0xff;\n mac[macpos + 10] = (this.h[5] >>> 0) & 0xff;\n mac[macpos + 11] = (this.h[5] >>> 8) & 0xff;\n mac[macpos + 12] = (this.h[6] >>> 0) & 0xff;\n mac[macpos + 13] = (this.h[6] >>> 8) & 0xff;\n mac[macpos + 14] = (this.h[7] >>> 0) & 0xff;\n mac[macpos + 15] = (this.h[7] >>> 8) & 0xff;\n }\n\n update(m: Uint8Array, mpos: number, bytes: number) {\n let i: number;\n let want: number;\n if (this.leftover) {\n want = 16 - this.leftover;\n if (want > bytes) want = bytes;\n for (i = 0; i < want; i++) this.buffer[this.leftover + i] = m[mpos + i];\n bytes -= want;\n mpos += want;\n this.leftover += want;\n if (this.leftover < 16) return;\n this.blocks(this.buffer, 0, 16);\n this.leftover = 0;\n }\n\n if (bytes >= 16) {\n want = bytes - (bytes % 16);\n this.blocks(m, mpos, want);\n mpos += want;\n bytes -= want;\n }\n\n if (bytes) {\n for (i = 0; i < bytes; i++) this.buffer[this.leftover + i] = m[mpos + i];\n this.leftover += bytes;\n }\n }\n}\n\nfunction crypto_onetimeauth(\n out: Uint8Array,\n outpos: number,\n m: any,\n mpos: number,\n n: number,\n k: Uint8Array,\n) {\n var s = new poly1305(k);\n s.update(m, mpos, n);\n s.finish(out, outpos);\n return 0;\n}\n\nfunction crypto_onetimeauth_verify(\n h: Uint8Array,\n hpos: number,\n m: any,\n mpos: number,\n n: number,\n k: Uint8Array,\n) {\n var x = new Uint8Array(16);\n crypto_onetimeauth(x, 0, m, mpos, n, k);\n return crypto_verify_16(h, hpos, x, 0);\n}\n\nfunction crypto_secretbox(\n c: Uint8Array,\n m: Uint8Array,\n d: number,\n n: Uint8Array,\n k: Uint8Array,\n): number {\n var i;\n if (d < 32) return -1;\n crypto_stream_xor(c, 0, m, 0, d, n, k);\n crypto_onetimeauth(c, 16, c, 32, d - 32, c);\n for (i = 0; i < 16; i++) c[i] = 0;\n return 0;\n}\n\nfunction crypto_secretbox_open(\n m: Uint8Array,\n c: Uint8Array,\n d: number,\n n: Uint8Array,\n k: Uint8Array,\n): number {\n var i;\n var x = new Uint8Array(32);\n if (d < 32) return -1;\n crypto_stream(x, 0, 32, n, k);\n if (crypto_onetimeauth_verify(c, 16, c, 32, d - 32, x) !== 0) return -1;\n crypto_stream_xor(m, 0, c, 0, d, n, k);\n for (i = 0; i < 32; i++) m[i] = 0;\n return 0;\n}\n\nfunction set25519(r: Float64Array, a: Float64Array): void {\n let i;\n for (i = 0; i < 16; i++) r[i] = a[i] | 0;\n}\n\nfunction car25519(o: Float64Array): void {\n let i,\n v,\n c = 1;\n for (i = 0; i < 16; i++) {\n v = o[i] + c + 65535;\n c = Math.floor(v / 65536);\n o[i] = v - c * 65536;\n }\n o[0] += c - 1 + 37 * (c - 1);\n}\n\nfunction sel25519(p: Float64Array, q: Float64Array, b: number): void {\n let t;\n const c = ~(b - 1);\n for (let i = 0; i < 16; i++) {\n t = c & (p[i] ^ q[i]);\n p[i] ^= t;\n q[i] ^= t;\n }\n}\n\nfunction pack25519(o: Uint8Array, n: Float64Array): void {\n let i, j, b;\n const m = gf(),\n t = gf();\n for (i = 0; i < 16; i++) t[i] = n[i];\n car25519(t);\n car25519(t);\n car25519(t);\n for (j = 0; j < 2; j++) {\n m[0] = t[0] - 0xffed;\n for (i = 1; i < 15; i++) {\n m[i] = t[i] - 0xffff - ((m[i - 1] >> 16) & 1);\n m[i - 1] &= 0xffff;\n }\n m[15] = t[15] - 0x7fff - ((m[14] >> 16) & 1);\n b = (m[15] >> 16) & 1;\n m[14] &= 0xffff;\n sel25519(t, m, 1 - b);\n }\n for (i = 0; i < 16; i++) {\n o[2 * i] = t[i] & 0xff;\n o[2 * i + 1] = t[i] >> 8;\n }\n}\n\nfunction neq25519(a: Float64Array, b: Float64Array): number {\n const c = new Uint8Array(32),\n d = new Uint8Array(32);\n pack25519(c, a);\n pack25519(d, b);\n return crypto_verify_32(c, 0, d, 0);\n}\n\nfunction par25519(a: Float64Array): number {\n const d = new Uint8Array(32);\n pack25519(d, a);\n return d[0] & 1;\n}\n\nfunction unpack25519(o: Float64Array, n: Uint8Array): void {\n let i;\n for (i = 0; i < 16; i++) o[i] = n[2 * i] + (n[2 * i + 1] << 8);\n o[15] &= 0x7fff;\n}\n\nfunction A(o: Float64Array, a: Float64Array, b: Float64Array): void {\n for (let i = 0; i < 16; i++) o[i] = a[i] + b[i];\n}\n\nfunction Z(o: Float64Array, a: Float64Array, b: Float64Array): void {\n for (let i = 0; i < 16; i++) o[i] = a[i] - b[i];\n}\n\nfunction M(o: Float64Array, a: Float64Array, b: Float64Array): void {\n let v,\n c,\n t0 = 0,\n t1 = 0,\n t2 = 0,\n t3 = 0,\n t4 = 0,\n t5 = 0,\n t6 = 0,\n t7 = 0,\n t8 = 0,\n t9 = 0,\n t10 = 0,\n t11 = 0,\n t12 = 0,\n t13 = 0,\n t14 = 0,\n t15 = 0,\n t16 = 0,\n t17 = 0,\n t18 = 0,\n t19 = 0,\n t20 = 0,\n t21 = 0,\n t22 = 0,\n t23 = 0,\n t24 = 0,\n t25 = 0,\n t26 = 0,\n t27 = 0,\n t28 = 0,\n t29 = 0,\n t30 = 0;\n const b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11],\n b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n\n v = a[0];\n t0 += v * b0;\n t1 += v * b1;\n t2 += v * b2;\n t3 += v * b3;\n t4 += v * b4;\n t5 += v * b5;\n t6 += v * b6;\n t7 += v * b7;\n t8 += v * b8;\n t9 += v * b9;\n t10 += v * b10;\n t11 += v * b11;\n t12 += v * b12;\n t13 += v * b13;\n t14 += v * b14;\n t15 += v * b15;\n v = a[1];\n t1 += v * b0;\n t2 += v * b1;\n t3 += v * b2;\n t4 += v * b3;\n t5 += v * b4;\n t6 += v * b5;\n t7 += v * b6;\n t8 += v * b7;\n t9 += v * b8;\n t10 += v * b9;\n t11 += v * b10;\n t12 += v * b11;\n t13 += v * b12;\n t14 += v * b13;\n t15 += v * b14;\n t16 += v * b15;\n v = a[2];\n t2 += v * b0;\n t3 += v * b1;\n t4 += v * b2;\n t5 += v * b3;\n t6 += v * b4;\n t7 += v * b5;\n t8 += v * b6;\n t9 += v * b7;\n t10 += v * b8;\n t11 += v * b9;\n t12 += v * b10;\n t13 += v * b11;\n t14 += v * b12;\n t15 += v * b13;\n t16 += v * b14;\n t17 += v * b15;\n v = a[3];\n t3 += v * b0;\n t4 += v * b1;\n t5 += v * b2;\n t6 += v * b3;\n t7 += v * b4;\n t8 += v * b5;\n t9 += v * b6;\n t10 += v * b7;\n t11 += v * b8;\n t12 += v * b9;\n t13 += v * b10;\n t14 += v * b11;\n t15 += v * b12;\n t16 += v * b13;\n t17 += v * b14;\n t18 += v * b15;\n v = a[4];\n t4 += v * b0;\n t5 += v * b1;\n t6 += v * b2;\n t7 += v * b3;\n t8 += v * b4;\n t9 += v * b5;\n t10 += v * b6;\n t11 += v * b7;\n t12 += v * b8;\n t13 += v * b9;\n t14 += v * b10;\n t15 += v * b11;\n t16 += v * b12;\n t17 += v * b13;\n t18 += v * b14;\n t19 += v * b15;\n v = a[5];\n t5 += v * b0;\n t6 += v * b1;\n t7 += v * b2;\n t8 += v * b3;\n t9 += v * b4;\n t10 += v * b5;\n t11 += v * b6;\n t12 += v * b7;\n t13 += v * b8;\n t14 += v * b9;\n t15 += v * b10;\n t16 += v * b11;\n t17 += v * b12;\n t18 += v * b13;\n t19 += v * b14;\n t20 += v * b15;\n v = a[6];\n t6 += v * b0;\n t7 += v * b1;\n t8 += v * b2;\n t9 += v * b3;\n t10 += v * b4;\n t11 += v * b5;\n t12 += v * b6;\n t13 += v * b7;\n t14 += v * b8;\n t15 += v * b9;\n t16 += v * b10;\n t17 += v * b11;\n t18 += v * b12;\n t19 += v * b13;\n t20 += v * b14;\n t21 += v * b15;\n v = a[7];\n t7 += v * b0;\n t8 += v * b1;\n t9 += v * b2;\n t10 += v * b3;\n t11 += v * b4;\n t12 += v * b5;\n t13 += v * b6;\n t14 += v * b7;\n t15 += v * b8;\n t16 += v * b9;\n t17 += v * b10;\n t18 += v * b11;\n t19 += v * b12;\n t20 += v * b13;\n t21 += v * b14;\n t22 += v * b15;\n v = a[8];\n t8 += v * b0;\n t9 += v * b1;\n t10 += v * b2;\n t11 += v * b3;\n t12 += v * b4;\n t13 += v * b5;\n t14 += v * b6;\n t15 += v * b7;\n t16 += v * b8;\n t17 += v * b9;\n t18 += v * b10;\n t19 += v * b11;\n t20 += v * b12;\n t21 += v * b13;\n t22 += v * b14;\n t23 += v * b15;\n v = a[9];\n t9 += v * b0;\n t10 += v * b1;\n t11 += v * b2;\n t12 += v * b3;\n t13 += v * b4;\n t14 += v * b5;\n t15 += v * b6;\n t16 += v * b7;\n t17 += v * b8;\n t18 += v * b9;\n t19 += v * b10;\n t20 += v * b11;\n t21 += v * b12;\n t22 += v * b13;\n t23 += v * b14;\n t24 += v * b15;\n v = a[10];\n t10 += v * b0;\n t11 += v * b1;\n t12 += v * b2;\n t13 += v * b3;\n t14 += v * b4;\n t15 += v * b5;\n t16 += v * b6;\n t17 += v * b7;\n t18 += v * b8;\n t19 += v * b9;\n t20 += v * b10;\n t21 += v * b11;\n t22 += v * b12;\n t23 += v * b13;\n t24 += v * b14;\n t25 += v * b15;\n v = a[11];\n t11 += v * b0;\n t12 += v * b1;\n t13 += v * b2;\n t14 += v * b3;\n t15 += v * b4;\n t16 += v * b5;\n t17 += v * b6;\n t18 += v * b7;\n t19 += v * b8;\n t20 += v * b9;\n t21 += v * b10;\n t22 += v * b11;\n t23 += v * b12;\n t24 += v * b13;\n t25 += v * b14;\n t26 += v * b15;\n v = a[12];\n t12 += v * b0;\n t13 += v * b1;\n t14 += v * b2;\n t15 += v * b3;\n t16 += v * b4;\n t17 += v * b5;\n t18 += v * b6;\n t19 += v * b7;\n t20 += v * b8;\n t21 += v * b9;\n t22 += v * b10;\n t23 += v * b11;\n t24 += v * b12;\n t25 += v * b13;\n t26 += v * b14;\n t27 += v * b15;\n v = a[13];\n t13 += v * b0;\n t14 += v * b1;\n t15 += v * b2;\n t16 += v * b3;\n t17 += v * b4;\n t18 += v * b5;\n t19 += v * b6;\n t20 += v * b7;\n t21 += v * b8;\n t22 += v * b9;\n t23 += v * b10;\n t24 += v * b11;\n t25 += v * b12;\n t26 += v * b13;\n t27 += v * b14;\n t28 += v * b15;\n v = a[14];\n t14 += v * b0;\n t15 += v * b1;\n t16 += v * b2;\n t17 += v * b3;\n t18 += v * b4;\n t19 += v * b5;\n t20 += v * b6;\n t21 += v * b7;\n t22 += v * b8;\n t23 += v * b9;\n t24 += v * b10;\n t25 += v * b11;\n t26 += v * b12;\n t27 += v * b13;\n t28 += v * b14;\n t29 += v * b15;\n v = a[15];\n t15 += v * b0;\n t16 += v * b1;\n t17 += v * b2;\n t18 += v * b3;\n t19 += v * b4;\n t20 += v * b5;\n t21 += v * b6;\n t22 += v * b7;\n t23 += v * b8;\n t24 += v * b9;\n t25 += v * b10;\n t26 += v * b11;\n t27 += v * b12;\n t28 += v * b13;\n t29 += v * b14;\n t30 += v * b15;\n\n t0 += 38 * t16;\n t1 += 38 * t17;\n t2 += 38 * t18;\n t3 += 38 * t19;\n t4 += 38 * t20;\n t5 += 38 * t21;\n t6 += 38 * t22;\n t7 += 38 * t23;\n t8 += 38 * t24;\n t9 += 38 * t25;\n t10 += 38 * t26;\n t11 += 38 * t27;\n t12 += 38 * t28;\n t13 += 38 * t29;\n t14 += 38 * t30;\n // t15 left as is\n\n // first car\n c = 1;\n v = t0 + c + 65535;\n c = Math.floor(v / 65536);\n t0 = v - c * 65536;\n v = t1 + c + 65535;\n c = Math.floor(v / 65536);\n t1 = v - c * 65536;\n v = t2 + c + 65535;\n c = Math.floor(v / 65536);\n t2 = v - c * 65536;\n v = t3 + c + 65535;\n c = Math.floor(v / 65536);\n t3 = v - c * 65536;\n v = t4 + c + 65535;\n c = Math.floor(v / 65536);\n t4 = v - c * 65536;\n v = t5 + c + 65535;\n c = Math.floor(v / 65536);\n t5 = v - c * 65536;\n v = t6 + c + 65535;\n c = Math.floor(v / 65536);\n t6 = v - c * 65536;\n v = t7 + c + 65535;\n c = Math.floor(v / 65536);\n t7 = v - c * 65536;\n v = t8 + c + 65535;\n c = Math.floor(v / 65536);\n t8 = v - c * 65536;\n v = t9 + c + 65535;\n c = Math.floor(v / 65536);\n t9 = v - c * 65536;\n v = t10 + c + 65535;\n c = Math.floor(v / 65536);\n t10 = v - c * 65536;\n v = t11 + c + 65535;\n c = Math.floor(v / 65536);\n t11 = v - c * 65536;\n v = t12 + c + 65535;\n c = Math.floor(v / 65536);\n t12 = v - c * 65536;\n v = t13 + c + 65535;\n c = Math.floor(v / 65536);\n t13 = v - c * 65536;\n v = t14 + c + 65535;\n c = Math.floor(v / 65536);\n t14 = v - c * 65536;\n v = t15 + c + 65535;\n c = Math.floor(v / 65536);\n t15 = v - c * 65536;\n t0 += c - 1 + 37 * (c - 1);\n\n // second car\n c = 1;\n v = t0 + c + 65535;\n c = Math.floor(v / 65536);\n t0 = v - c * 65536;\n v = t1 + c + 65535;\n c = Math.floor(v / 65536);\n t1 = v - c * 65536;\n v = t2 + c + 65535;\n c = Math.floor(v / 65536);\n t2 = v - c * 65536;\n v = t3 + c + 65535;\n c = Math.floor(v / 65536);\n t3 = v - c * 65536;\n v = t4 + c + 65535;\n c = Math.floor(v / 65536);\n t4 = v - c * 65536;\n v = t5 + c + 65535;\n c = Math.floor(v / 65536);\n t5 = v - c * 65536;\n v = t6 + c + 65535;\n c = Math.floor(v / 65536);\n t6 = v - c * 65536;\n v = t7 + c + 65535;\n c = Math.floor(v / 65536);\n t7 = v - c * 65536;\n v = t8 + c + 65535;\n c = Math.floor(v / 65536);\n t8 = v - c * 65536;\n v = t9 + c + 65535;\n c = Math.floor(v / 65536);\n t9 = v - c * 65536;\n v = t10 + c + 65535;\n c = Math.floor(v / 65536);\n t10 = v - c * 65536;\n v = t11 + c + 65535;\n c = Math.floor(v / 65536);\n t11 = v - c * 65536;\n v = t12 + c + 65535;\n c = Math.floor(v / 65536);\n t12 = v - c * 65536;\n v = t13 + c + 65535;\n c = Math.floor(v / 65536);\n t13 = v - c * 65536;\n v = t14 + c + 65535;\n c = Math.floor(v / 65536);\n t14 = v - c * 65536;\n v = t15 + c + 65535;\n c = Math.floor(v / 65536);\n t15 = v - c * 65536;\n t0 += c - 1 + 37 * (c - 1);\n\n o[0] = t0;\n o[1] = t1;\n o[2] = t2;\n o[3] = t3;\n o[4] = t4;\n o[5] = t5;\n o[6] = t6;\n o[7] = t7;\n o[8] = t8;\n o[9] = t9;\n o[10] = t10;\n o[11] = t11;\n o[12] = t12;\n o[13] = t13;\n o[14] = t14;\n o[15] = t15;\n}\n\nfunction S(o: Float64Array, a: Float64Array): void {\n M(o, a, a);\n}\n\nfunction inv25519(o: Float64Array, i: Float64Array): void {\n const c = gf();\n let a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 253; a >= 0; a--) {\n S(c, c);\n if (a !== 2 && a !== 4) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction pow2523(o: Float64Array, i: Float64Array): void {\n const c = gf();\n let a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 250; a >= 0; a--) {\n S(c, c);\n if (a !== 1) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction crypto_scalarmult(\n q: Uint8Array,\n n: Uint8Array,\n p: Uint8Array,\n): number {\n const z = new Uint8Array(32);\n const x = new Float64Array(80);\n let r;\n let i;\n const a = gf(),\n b = gf(),\n c = gf(),\n d = gf(),\n e = gf(),\n f = gf();\n for (i = 0; i < 31; i++) z[i] = n[i];\n z[31] = (n[31] & 127) | 64;\n z[0] &= 248;\n unpack25519(x, p);\n for (i = 0; i < 16; i++) {\n b[i] = x[i];\n d[i] = a[i] = c[i] = 0;\n }\n a[0] = d[0] = 1;\n for (i = 254; i >= 0; --i) {\n r = (z[i >>> 3] >>> (i & 7)) & 1;\n sel25519(a, b, r);\n sel25519(c, d, r);\n A(e, a, c);\n Z(a, a, c);\n A(c, b, d);\n Z(b, b, d);\n S(d, e);\n S(f, a);\n M(a, c, a);\n M(c, b, e);\n A(e, a, c);\n Z(a, a, c);\n S(b, a);\n Z(c, d, f);\n M(a, c, _121665);\n A(a, a, d);\n M(c, c, a);\n M(a, d, f);\n M(d, b, x);\n S(b, e);\n sel25519(a, b, r);\n sel25519(c, d, r);\n }\n for (i = 0; i < 16; i++) {\n x[i + 16] = a[i];\n x[i + 32] = c[i];\n x[i + 48] = b[i];\n x[i + 64] = d[i];\n }\n const x32 = x.subarray(32);\n const x16 = x.subarray(16);\n inv25519(x32, x32);\n M(x16, x16, x32);\n pack25519(q, x16);\n return 0;\n}\n\nfunction crypto_scalarmult_base(q: Uint8Array, n: Uint8Array): number {\n return crypto_scalarmult(q, n, _9);\n}\n\nexport function crypto_scalarmult_noclamp(\n q: Uint8Array,\n n: Uint8Array,\n p: Uint8Array,\n): number {\n const z = new Uint8Array(32);\n const x = new Float64Array(80);\n let r;\n let i;\n const a = gf(),\n b = gf(),\n c = gf(),\n d = gf(),\n e = gf(),\n f = gf();\n for (i = 0; i < 31; i++) z[i] = n[i];\n unpack25519(x, p);\n for (i = 0; i < 16; i++) {\n b[i] = x[i];\n d[i] = a[i] = c[i] = 0;\n }\n a[0] = d[0] = 1;\n for (i = 254; i >= 0; --i) {\n r = (z[i >>> 3] >>> (i & 7)) & 1;\n sel25519(a, b, r);\n sel25519(c, d, r);\n A(e, a, c);\n Z(a, a, c);\n A(c, b, d);\n Z(b, b, d);\n S(d, e);\n S(f, a);\n M(a, c, a);\n M(c, b, e);\n A(e, a, c);\n Z(a, a, c);\n S(b, a);\n Z(c, d, f);\n M(a, c, _121665);\n A(a, a, d);\n M(c, c, a);\n M(a, d, f);\n M(d, b, x);\n S(b, e);\n sel25519(a, b, r);\n sel25519(c, d, r);\n }\n for (i = 0; i < 16; i++) {\n x[i + 16] = a[i];\n x[i + 32] = c[i];\n x[i + 48] = b[i];\n x[i + 64] = d[i];\n }\n const x32 = x.subarray(32);\n const x16 = x.subarray(16);\n inv25519(x32, x32);\n M(x16, x16, x32);\n pack25519(q, x16);\n return 0;\n}\n\nexport function crypto_scalarmult_base_noclamp(\n q: Uint8Array,\n n: Uint8Array,\n): number {\n return crypto_scalarmult_noclamp(q, n, _9);\n}\n\n// prettier-ignore\nconst K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction crypto_hashblocks_hl(\n hh: Int32Array,\n hl: Int32Array,\n m: Uint8Array,\n n: number,\n): number {\n const wh = new Int32Array(16),\n wl = new Int32Array(16);\n let bh0,\n bh1,\n bh2,\n bh3,\n bh4,\n bh5,\n bh6,\n bh7,\n bl0,\n bl1,\n bl2,\n bl3,\n bl4,\n bl5,\n bl6,\n bl7,\n th,\n tl,\n i,\n j,\n h,\n l,\n a,\n b,\n c,\n d;\n\n let ah0 = hh[0],\n ah1 = hh[1],\n ah2 = hh[2],\n ah3 = hh[3],\n ah4 = hh[4],\n ah5 = hh[5],\n ah6 = hh[6],\n ah7 = hh[7],\n al0 = hl[0],\n al1 = hl[1],\n al2 = hl[2],\n al3 = hl[3],\n al4 = hl[4],\n al5 = hl[5],\n al6 = hl[6],\n al7 = hl[7];\n\n let pos = 0;\n while (n >= 128) {\n for (i = 0; i < 16; i++) {\n j = 8 * i + pos;\n wh[i] = (m[j + 0] << 24) | (m[j + 1] << 16) | (m[j + 2] << 8) | m[j + 3];\n wl[i] = (m[j + 4] << 24) | (m[j + 5] << 16) | (m[j + 6] << 8) | m[j + 7];\n }\n for (i = 0; i < 80; i++) {\n bh0 = ah0;\n bh1 = ah1;\n bh2 = ah2;\n bh3 = ah3;\n bh4 = ah4;\n bh5 = ah5;\n bh6 = ah6;\n bh7 = ah7;\n\n bl0 = al0;\n bl1 = al1;\n bl2 = al2;\n bl3 = al3;\n bl4 = al4;\n bl5 = al5;\n bl6 = al6;\n bl7 = al7;\n\n // add\n h = ah7;\n l = al7;\n\n a = l & 0xffff;\n b = l >>> 16;\n c = h & 0xffff;\n d = h >>> 16;\n\n // Sigma1\n h =\n ((ah4 >>> 14) | (al4 << (32 - 14))) ^\n ((ah4 >>> 18) | (al4 << (32 - 18))) ^\n ((al4 >>> (41 - 32)) | (ah4 << (32 - (41 - 32))));\n l =\n ((al4 >>> 14) | (ah4 << (32 - 14))) ^\n ((al4 >>> 18) | (ah4 << (32 - 18))) ^\n ((ah4 >>> (41 - 32)) | (al4 << (32 - (41 - 32))));\n\n a += l & 0xffff;\n b += l >>> 16;\n c += h & 0xffff;\n d += h >>> 16;\n\n // Ch\n h = (ah4 & ah5) ^ (~ah4 & ah6);\n l = (al4 & al5) ^ (~al4 & al6);\n\n a += l & 0xffff;\n b += l >>> 16;\n c += h & 0xffff;\n d += h >>> 16;\n\n // K\n h = K[i * 2];\n l = K[i * 2 + 1];\n\n a += l & 0xffff;\n b += l >>> 16;\n c += h & 0xffff;\n d += h >>> 16;\n\n // w\n h = wh[i % 16];\n l = wl[i % 16];\n\n a += l & 0xffff;\n b += l >>> 16;\n c += h & 0xffff;\n d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n th = (c & 0xffff) | (d << 16);\n tl = (a & 0xffff) | (b << 16);\n\n // add\n h = th;\n l = tl;\n\n a = l & 0xffff;\n b = l >>> 16;\n c = h & 0xffff;\n d = h >>> 16;\n\n // Sigma0\n h =\n ((ah0 >>> 28) | (al0 << (32 - 28))) ^\n ((al0 >>> (34 - 32)) | (ah0 << (32 - (34 - 32)))) ^\n ((al0 >>> (39 - 32)) | (ah0 << (32 - (39 - 32))));\n l =\n ((al0 >>> 28) | (ah0 << (32 - 28))) ^\n ((ah0 >>> (34 - 32)) | (al0 << (32 - (34 - 32)))) ^\n ((ah0 >>> (39 - 32)) | (al0 << (32 - (39 - 32))));\n\n a += l & 0xffff;\n b += l >>> 16;\n c += h & 0xffff;\n d += h >>> 16;\n\n // Maj\n h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);\n l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);\n\n a += l & 0xffff;\n b += l >>> 16;\n c += h & 0xffff;\n d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh7 = (c & 0xffff) | (d << 16);\n bl7 = (a & 0xffff) | (b << 16);\n\n // add\n h = bh3;\n l = bl3;\n\n a = l & 0xffff;\n b = l >>> 16;\n c = h & 0xffff;\n d = h >>> 16;\n\n h = th;\n l = tl;\n\n a += l & 0xffff;\n b += l >>> 16;\n c += h & 0xffff;\n d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh3 = (c & 0xffff) | (d << 16);\n bl3 = (a & 0xffff) | (b << 16);\n\n ah1 = bh0;\n ah2 = bh1;\n ah3 = bh2;\n ah4 = bh3;\n ah5 = bh4;\n ah6 = bh5;\n ah7 = bh6;\n ah0 = bh7;\n\n al1 = bl0;\n al2 = bl1;\n al3 = bl2;\n al4 = bl3;\n al5 = bl4;\n al6 = bl5;\n al7 = bl6;\n al0 = bl7;\n\n if (i % 16 === 15) {\n for (j = 0; j < 16; j++) {\n // add\n h = wh[j];\n l = wl[j];\n\n a = l & 0xffff;\n b = l >>> 16;\n c = h & 0xffff;\n d = h >>> 16;\n\n h = wh[(j + 9) % 16];\n l = wl[(j + 9) % 16];\n\n a += l & 0xffff;\n b += l >>> 16;\n c += h & 0xffff;\n d += h >>> 16;\n\n // sigma0\n th = wh[(j + 1) % 16];\n tl = wl[(j + 1) % 16];\n h =\n ((th >>> 1) | (tl << (32 - 1))) ^\n ((th >>> 8) | (tl << (32 - 8))) ^\n (th >>> 7);\n l =\n ((tl >>> 1) | (th << (32 - 1))) ^\n ((tl >>> 8) | (th << (32 - 8))) ^\n ((tl >>> 7) | (th << (32 - 7)));\n\n a += l & 0xffff;\n b += l >>> 16;\n c += h & 0xffff;\n d += h >>> 16;\n\n // sigma1\n th = wh[(j + 14) % 16];\n tl = wl[(j + 14) % 16];\n h =\n ((th >>> 19) | (tl << (32 - 19))) ^\n ((tl >>> (61 - 32)) | (th << (32 - (61 - 32)))) ^\n (th >>> 6);\n l =\n ((tl >>> 19) | (th << (32 - 19))) ^\n ((th >>> (61 - 32)) | (tl << (32 - (61 - 32)))) ^\n ((tl >>> 6) | (th << (32 - 6)));\n\n a += l & 0xffff;\n b += l >>> 16;\n c += h & 0xffff;\n d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n wh[j] = (c & 0xffff) | (d << 16);\n wl[j] = (a & 0xffff) | (b << 16);\n }\n }\n }\n\n // add\n h = ah0;\n l = al0;\n\n a = l & 0xffff;\n b = l >>> 16;\n c = h & 0xffff;\n d = h >>> 16;\n\n h = hh[0];\n l = hl[0];\n\n a += l & 0xffff;\n b += l >>> 16;\n c += h & 0xffff;\n d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[0] = ah0 = (c & 0xffff) | (d << 16);\n hl[0] = al0 = (a & 0xffff) | (b << 16);\n\n h = ah1;\n l = al1;\n\n a = l & 0xffff;\n b = l >>> 16;\n c = h & 0xffff;\n d = h >>> 16;\n\n h = hh[1];\n l = hl[1];\n\n a += l & 0xffff;\n b += l >>> 16;\n c += h & 0xffff;\n d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[1] = ah1 = (c & 0xffff) | (d << 16);\n hl[1] = al1 = (a & 0xffff) | (b << 16);\n\n h = ah2;\n l = al2;\n\n a = l & 0xffff;\n b = l >>> 16;\n c = h & 0xffff;\n d = h >>> 16;\n\n h = hh[2];\n l = hl[2];\n\n a += l & 0xffff;\n b += l >>> 16;\n c += h & 0xffff;\n d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[2] = ah2 = (c & 0xffff) | (d << 16);\n hl[2] = al2 = (a & 0xffff) | (b << 16);\n\n h = ah3;\n l = al3;\n\n a = l & 0xffff;\n b = l >>> 16;\n c = h & 0xffff;\n d = h >>> 16;\n\n h = hh[3];\n l = hl[3];\n\n a += l & 0xffff;\n b += l >>> 16;\n c += h & 0xffff;\n d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[3] = ah3 = (c & 0xffff) | (d << 16);\n hl[3] = al3 = (a & 0xffff) | (b << 16);\n\n h = ah4;\n l = al4;\n\n a = l & 0xffff;\n b = l >>> 16;\n c = h & 0xffff;\n d = h >>> 16;\n\n h = hh[4];\n l = hl[4];\n\n a += l & 0xffff;\n b += l >>> 16;\n c += h & 0xffff;\n d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[4] = ah4 = (c & 0xffff) | (d << 16);\n hl[4] = al4 = (a & 0xffff) | (b << 16);\n\n h = ah5;\n l = al5;\n\n a = l & 0xffff;\n b = l >>> 16;\n c = h & 0xffff;\n d = h >>> 16;\n\n h = hh[5];\n l = hl[5];\n\n a += l & 0xffff;\n b += l >>> 16;\n c += h & 0xffff;\n d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[5] = ah5 = (c & 0xffff) | (d << 16);\n hl[5] = al5 = (a & 0xffff) | (b << 16);\n\n h = ah6;\n l = al6;\n\n a = l & 0xffff;\n b = l >>> 16;\n c = h & 0xffff;\n d = h >>> 16;\n\n h = hh[6];\n l = hl[6];\n\n a += l & 0xffff;\n b += l >>> 16;\n c += h & 0xffff;\n d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[6] = ah6 = (c & 0xffff) | (d << 16);\n hl[6] = al6 = (a & 0xffff) | (b << 16);\n\n h = ah7;\n l = al7;\n\n a = l & 0xffff;\n b = l >>> 16;\n c = h & 0xffff;\n d = h >>> 16;\n\n h = hh[7];\n l = hl[7];\n\n a += l & 0xffff;\n b += l >>> 16;\n c += h & 0xffff;\n d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[7] = ah7 = (c & 0xffff) | (d << 16);\n hl[7] = al7 = (a & 0xffff) | (b << 16);\n\n pos += 128;\n n -= 128;\n }\n\n return n;\n}\n\nfunction crypto_hash(out: Uint8Array, m: Uint8Array, n: number): number {\n const hh = new Int32Array(8);\n const hl = new Int32Array(8);\n const x = new Uint8Array(256);\n const b = n;\n\n hh[0] = 0x6a09e667;\n hh[1] = 0xbb67ae85;\n hh[2] = 0x3c6ef372;\n hh[3] = 0xa54ff53a;\n hh[4] = 0x510e527f;\n hh[5] = 0x9b05688c;\n hh[6] = 0x1f83d9ab;\n hh[7] = 0x5be0cd19;\n\n hl[0] = 0xf3bcc908;\n hl[1] = 0x84caa73b;\n hl[2] = 0xfe94f82b;\n hl[3] = 0x5f1d36f1;\n hl[4] = 0xade682d1;\n hl[5] = 0x2b3e6c1f;\n hl[6] = 0xfb41bd6b;\n hl[7] = 0x137e2179;\n\n crypto_hashblocks_hl(hh, hl, m, n);\n n %= 128;\n\n for (let i = 0; i < n; i++) x[i] = m[b - n + i];\n x[n] = 128;\n\n n = 256 - 128 * (n < 112 ? 1 : 0);\n x[n - 9] = 0;\n ts64(x, n - 8, (b / 0x20000000) | 0, b << 3);\n crypto_hashblocks_hl(hh, hl, x, n);\n\n for (let i = 0; i < 8; i++) ts64(out, 8 * i, hh[i], hl[i]);\n\n return 0;\n}\n\n/**\n * Incremental version of crypto_hash.\n */\nexport class HashState {\n private hh = new Int32Array(8);\n private hl = new Int32Array(8);\n\n private next = new Uint8Array(128);\n private p = 0;\n private total = 0;\n\n constructor() {\n this.hh[0] = 0x6a09e667;\n this.hh[1] = 0xbb67ae85;\n this.hh[2] = 0x3c6ef372;\n this.hh[3] = 0xa54ff53a;\n this.hh[4] = 0x510e527f;\n this.hh[5] = 0x9b05688c;\n this.hh[6] = 0x1f83d9ab;\n this.hh[7] = 0x5be0cd19;\n\n this.hl[0] = 0xf3bcc908;\n this.hl[1] = 0x84caa73b;\n this.hl[2] = 0xfe94f82b;\n this.hl[3] = 0x5f1d36f1;\n this.hl[4] = 0xade682d1;\n this.hl[5] = 0x2b3e6c1f;\n this.hl[6] = 0xfb41bd6b;\n this.hl[7] = 0x137e2179;\n }\n\n update(data: Uint8Array): HashState {\n this.total += data.length;\n let i = 0;\n while (i < data.length) {\n const r = 128 - this.p;\n if (r > data.length - i) {\n for (let j = 0; i + j < data.length; j++) {\n this.next[this.p + j] = data[i + j];\n }\n this.p += data.length - i;\n break;\n } else {\n for (let j = 0; this.p + j < 128; j++) {\n this.next[this.p + j] = data[i + j];\n }\n crypto_hashblocks_hl(this.hh, this.hl, this.next, 128);\n i += 128 - this.p;\n this.p = 0;\n }\n }\n return this;\n }\n\n finish(): Uint8Array {\n const out = new Uint8Array(64);\n let n = this.p;\n const x = new Uint8Array(256);\n const b = this.total;\n for (let i = 0; i < n; i++) x[i] = this.next[i];\n x[n] = 128;\n\n n = 256 - 128 * (n < 112 ? 1 : 0);\n x[n - 9] = 0;\n ts64(x, n - 8, (b / 0x20000000) | 0, b << 3);\n crypto_hashblocks_hl(this.hh, this.hl, x, n);\n\n for (let i = 0; i < 8; i++) ts64(out, 8 * i, this.hh[i], this.hl[i]);\n return out;\n }\n}\n\nfunction add(p: Float64Array[], q: Float64Array[]): void {\n const a = gf(),\n b = gf(),\n c = gf(),\n d = gf(),\n e = gf(),\n f = gf(),\n g = gf(),\n h = gf(),\n t = gf();\n\n Z(a, p[1], p[0]);\n Z(t, q[1], q[0]);\n M(a, a, t);\n A(b, p[0], p[1]);\n A(t, q[0], q[1]);\n M(b, b, t);\n M(c, p[3], q[3]);\n M(c, c, D2);\n M(d, p[2], q[2]);\n A(d, d, d);\n Z(e, b, a);\n Z(f, d, c);\n A(g, d, c);\n A(h, b, a);\n\n M(p[0], e, f);\n M(p[1], h, g);\n M(p[2], g, f);\n M(p[3], e, h);\n}\n\nfunction cswap(p: Float64Array[], q: Float64Array[], b: number): void {\n let i;\n for (i = 0; i < 4; i++) {\n sel25519(p[i], q[i], b);\n }\n}\n\nfunction pack(r: Uint8Array, p: Float64Array[]): void {\n const tx = gf(),\n ty = gf(),\n zi = gf();\n inv25519(zi, p[2]);\n M(tx, p[0], zi);\n M(ty, p[1], zi);\n pack25519(r, ty);\n r[31] ^= par25519(tx) << 7;\n}\n\n/**\n * Ed25519 scalar multiplication\n */\nfunction scalarmult(p: Float64Array[], q: Float64Array[], s: Uint8Array): void {\n let b, i;\n set25519(p[0], gf0);\n set25519(p[1], gf1);\n set25519(p[2], gf1);\n set25519(p[3], gf0);\n for (i = 255; i >= 0; --i) {\n b = (s[(i / 8) | 0] >> (i & 7)) & 1;\n cswap(p, q, b);\n add(q, p);\n add(p, p);\n cswap(p, q, b);\n }\n}\n\nfunction scalarbase(p: Float64Array[], s: Uint8Array): void {\n const q = [gf(), gf(), gf(), gf()];\n set25519(q[0], X);\n set25519(q[1], Y);\n set25519(q[2], gf1);\n M(q[3], X, Y);\n scalarmult(p, q, s);\n}\n\nfunction crypto_sign_keypair(\n pk: Uint8Array,\n sk: Uint8Array,\n seeded: boolean,\n): number {\n const d = new Uint8Array(64);\n const p = [gf(), gf(), gf(), gf()];\n\n if (!seeded) randombytes(sk, 32);\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n scalarbase(p, d);\n pack(pk, p);\n\n for (let i = 0; i < 32; i++) sk[i + 32] = pk[i];\n return 0;\n}\n\nexport const L = new Float64Array([\n 0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde,\n 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10,\n]);\n\nfunction modL(r: Uint8Array, x: Float64Array): void {\n let carry, i, j, k;\n for (i = 63; i >= 32; --i) {\n carry = 0;\n for (j = i - 32, k = i - 12; j < k; ++j) {\n x[j] += carry - 16 * x[i] * L[j - (i - 32)];\n carry = Math.floor((x[j] + 128) / 256);\n x[j] -= carry * 256;\n }\n x[j] += carry;\n x[i] = 0;\n }\n carry = 0;\n for (j = 0; j < 32; j++) {\n x[j] += carry - (x[31] >> 4) * L[j];\n carry = x[j] >> 8;\n x[j] &= 255;\n }\n for (j = 0; j < 32; j++) x[j] -= carry * L[j];\n for (i = 0; i < 32; i++) {\n x[i + 1] += x[i] >> 8;\n r[i] = x[i] & 255;\n }\n}\n\nfunction reduce(r: Uint8Array): void {\n const x = new Float64Array(64);\n for (let i = 0; i < 64; i++) x[i] = r[i];\n for (let i = 0; i < 64; i++) r[i] = 0;\n modL(r, x);\n}\n\n// Note: difference from C - smlen returned, not passed as argument.\nfunction crypto_sign(\n sm: Uint8Array,\n m: Uint8Array,\n n: number,\n sk: Uint8Array,\n): number {\n const d = new Uint8Array(64),\n h = new Uint8Array(64),\n r = new Uint8Array(64);\n let i, j;\n const x = new Float64Array(64);\n const p = [gf(), gf(), gf(), gf()];\n\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n const smlen = n + 64;\n for (i = 0; i < n; i++) sm[64 + i] = m[i];\n for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];\n\n crypto_hash(r, sm.subarray(32), n + 32);\n reduce(r);\n scalarbase(p, r);\n pack(sm, p);\n\n for (i = 32; i < 64; i++) sm[i] = sk[i];\n crypto_hash(h, sm, n + 64);\n reduce(h);\n\n for (i = 0; i < 64; i++) x[i] = 0;\n for (i = 0; i < 32; i++) x[i] = r[i];\n for (i = 0; i < 32; i++) {\n for (j = 0; j < 32; j++) {\n x[i + j] += h[i] * d[j];\n }\n }\n\n modL(sm.subarray(32), x);\n return smlen;\n}\n\nfunction unpackpos(r: Float64Array[], p: Uint8Array): number {\n // FIXME: implement directly\n const q = [gf(), gf(), gf(), gf()];\n if (unpackneg(q, p)) return -1;\n const scalar0 = new Uint8Array(32);\n const scalar1 = new Uint8Array(32);\n scalar1[0] = 1;\n const scalarNeg1 = crypto_core_ed25519_scalar_sub(scalar0, scalar1);\n scalarmult(r, q, scalarNeg1);\n return 0;\n}\n\nfunction unpackneg(r: Float64Array[], p: Uint8Array): number {\n const t = gf();\n const chk = gf();\n const num = gf();\n const den = gf();\n const den2 = gf();\n const den4 = gf();\n const den6 = gf();\n\n set25519(r[2], gf1);\n unpack25519(r[1], p);\n S(num, r[1]);\n M(den, num, D);\n Z(num, num, r[2]);\n A(den, r[2], den);\n\n S(den2, den);\n S(den4, den2);\n M(den6, den4, den2);\n M(t, den6, num);\n M(t, t, den);\n\n pow2523(t, t);\n M(t, t, num);\n M(t, t, den);\n M(t, t, den);\n M(r[0], t, den);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) M(r[0], r[0], I);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) return -1;\n\n if (par25519(r[0]) === p[31] >> 7) Z(r[0], gf0, r[0]);\n\n M(r[3], r[0], r[1]);\n return 0;\n}\n\nexport function crypto_scalarmult_ed25519_base_noclamp(\n s: Uint8Array,\n): Uint8Array {\n const r = new Uint8Array(32);\n const p = [gf(), gf(), gf(), gf()];\n\n scalarbase(p, s);\n pack(r, p);\n return r;\n}\n\nexport function crypto_scalarmult_ed25519_noclamp(\n s: Uint8Array,\n q: Uint8Array,\n): Uint8Array {\n const r = new Uint8Array(32);\n const p = [gf(), gf(), gf(), gf()];\n const ql = [gf(), gf(), gf(), gf()];\n\n if (unpackpos(ql, q)) throw new Error();\n scalarmult(p, ql, s);\n pack(r, p);\n return r;\n}\n\nexport function crypto_core_ed25519_add(\n p1: Uint8Array,\n p2: Uint8Array,\n): Uint8Array {\n const q1 = [gf(), gf(), gf(), gf()];\n const q2 = [gf(), gf(), gf(), gf()];\n const res = new Uint8Array(32);\n if (unpackpos(q1, p1)) throw new Error();\n if (unpackpos(q2, p2)) throw new Error();\n add(q1, q2);\n pack(res, q1);\n return res;\n}\n\nfunction crypto_sign_open(\n m: Uint8Array,\n sm: Uint8Array,\n n: number,\n pk: Uint8Array,\n): number {\n let i, mlen;\n const t = new Uint8Array(32),\n h = new Uint8Array(64);\n const p = [gf(), gf(), gf(), gf()],\n q = [gf(), gf(), gf(), gf()];\n\n mlen = -1;\n if (n < 64) return -1;\n\n if (unpackneg(q, pk)) return -1;\n\n for (i = 0; i < n; i++) m[i] = sm[i];\n for (i = 0; i < 32; i++) m[i + 32] = pk[i];\n crypto_hash(h, m, n);\n reduce(h);\n scalarmult(p, q, h);\n\n scalarbase(q, sm.subarray(32));\n add(p, q);\n pack(t, p);\n\n n -= 64;\n if (crypto_verify_32(sm, 0, t, 0)) {\n for (i = 0; i < n; i++) m[i] = 0;\n return -1;\n }\n\n for (i = 0; i < n; i++) m[i] = sm[i + 64];\n mlen = n;\n return mlen;\n}\n\nconst crypto_secretbox_KEYBYTES = 32;\nconst crypto_secretbox_NONCEBYTES = 24;\nconst crypto_secretbox_ZEROBYTES = 32;\nconst crypto_secretbox_BOXZEROBYTES = 16;\nconst crypto_scalarmult_BYTES = 32;\nconst crypto_scalarmult_SCALARBYTES = 32;\nconst crypto_sign_BYTES = 64;\nconst crypto_sign_PUBLICKEYBYTES = 32;\nconst crypto_sign_SECRETKEYBYTES = 64;\nconst crypto_sign_SEEDBYTES = 32;\nconst crypto_hash_BYTES = 64;\n\n/* High-level API */\n\nfunction checkLengths(k: Uint8Array, n: Uint8Array) {\n if (k.length !== crypto_secretbox_KEYBYTES) throw new Error(\"bad key size\");\n if (n.length !== crypto_secretbox_NONCEBYTES)\n throw new Error(\"bad nonce size\");\n}\n\nfunction checkArrayTypes(...args: Uint8Array[]): void {\n for (let i = 0; i < args.length; i++) {\n if (!(args[i] instanceof Uint8Array))\n throw new TypeError(\"unexpected type, use Uint8Array\");\n }\n}\n\nexport function randomBytes(n: number): Uint8Array {\n const b = new Uint8Array(n);\n randombytes(b, n);\n return b;\n}\n\nexport function scalarMult(n: Uint8Array, p: Uint8Array): Uint8Array {\n checkArrayTypes(n, p);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error(\"bad n size\");\n if (p.length !== crypto_scalarmult_BYTES) throw new Error(\"bad p size\");\n const q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult(q, n, p);\n return q;\n}\n\nexport function scalarMult_base(n: Uint8Array): Uint8Array {\n checkArrayTypes(n);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error(\"bad n size\");\n const q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult_base(q, n);\n return q;\n}\n\nexport const scalarMult_scalarLength = crypto_scalarmult_SCALARBYTES;\nexport const scalarMult_groupElementLength = crypto_scalarmult_BYTES;\n\nexport function sign(msg: Uint8Array, secretKey: Uint8Array): Uint8Array {\n checkArrayTypes(msg, secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error(\"bad secret key size\");\n const signedMsg = new Uint8Array(crypto_sign_BYTES + msg.length);\n crypto_sign(signedMsg, msg, msg.length, secretKey);\n return signedMsg;\n}\n\nexport function sign_open(\n signedMsg: Uint8Array,\n publicKey: Uint8Array,\n): Uint8Array | null {\n checkArrayTypes(signedMsg, publicKey);\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error(\"bad public key size\");\n const tmp = new Uint8Array(signedMsg.length);\n const mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);\n if (mlen < 0) return null;\n const m = new Uint8Array(mlen);\n for (let i = 0; i < m.length; i++) m[i] = tmp[i];\n return m;\n}\n\nexport function sign_detached(\n msg: Uint8Array,\n secretKey: Uint8Array,\n): Uint8Array {\n const signedMsg = sign(msg, secretKey);\n const sig = new Uint8Array(crypto_sign_BYTES);\n for (let i = 0; i < sig.length; i++) sig[i] = signedMsg[i];\n return sig;\n}\n\nexport function sign_detached_verify(\n msg: Uint8Array,\n sig: Uint8Array,\n publicKey: Uint8Array,\n): boolean {\n checkArrayTypes(msg, sig, publicKey);\n if (sig.length !== crypto_sign_BYTES) throw new Error(\"bad signature size\");\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error(\"bad public key size\");\n const sm = new Uint8Array(crypto_sign_BYTES + msg.length);\n const m = new Uint8Array(crypto_sign_BYTES + msg.length);\n let i;\n for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];\n for (i = 0; i < msg.length; i++) sm[i + crypto_sign_BYTES] = msg[i];\n return crypto_sign_open(m, sm, sm.length, publicKey) >= 0;\n}\n\nexport function sign_keyPair(): {\n publicKey: Uint8Array;\n secretKey: Uint8Array;\n} {\n const pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n const sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n crypto_sign_keypair(pk, sk, false);\n return { publicKey: pk, secretKey: sk };\n}\n\nexport function x25519_edwards_keyPair_fromSecretKey(\n secretKey: Uint8Array,\n): Uint8Array {\n const p = [gf(), gf(), gf(), gf()];\n const pk = new Uint8Array(32);\n\n const d = new Uint8Array(64);\n if (secretKey.length != 32) {\n throw new Error(\"bad secret key size\");\n }\n d.set(secretKey, 0);\n\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n scalarbase(p, d);\n pack(pk, p);\n\n return pk;\n}\n\nexport function crypto_sign_keyPair_fromSecretKey(secretKey: Uint8Array): {\n publicKey: Uint8Array;\n secretKey: Uint8Array;\n} {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error(\"bad secret key size\");\n const pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n for (let i = 0; i < pk.length; i++) pk[i] = secretKey[32 + i];\n return { publicKey: pk, secretKey: new Uint8Array(secretKey) };\n}\n\nexport function crypto_sign_keyPair_fromSeed(seed: Uint8Array): {\n publicKey: Uint8Array;\n secretKey: Uint8Array;\n} {\n checkArrayTypes(seed);\n if (seed.length !== crypto_sign_SEEDBYTES)\n throw new Error(`bad seed size: ${seed.length}`);\n const pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n const sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n for (let i = 0; i < 32; i++) sk[i] = seed[i];\n crypto_sign_keypair(pk, sk, true);\n return { publicKey: pk, secretKey: sk };\n}\n\nexport const sign_publicKeyLength = crypto_sign_PUBLICKEYBYTES;\nexport const sign_secretKeyLength = crypto_sign_SECRETKEYBYTES;\nexport const sign_seedLength = crypto_sign_SEEDBYTES;\nexport const sign_signatureLength = crypto_sign_BYTES;\n\nexport function hash(msg: Uint8Array): Uint8Array {\n checkArrayTypes(msg);\n const h = new Uint8Array(crypto_hash_BYTES);\n crypto_hash(h, msg, msg.length);\n return h;\n}\n\nexport const hash_hashLength = crypto_hash_BYTES;\n\nexport function verify(x: Uint8Array, y: Uint8Array): boolean {\n checkArrayTypes(x, y);\n // Zero length arguments are considered not equal.\n if (x.length === 0 || y.length === 0) return false;\n if (x.length !== y.length) return false;\n return vn(x, 0, y, 0, x.length) === 0 ? true : false;\n}\n\nexport function setPRNG(fn: (x: Uint8Array, n: number) => void): void {\n randombytes = fn;\n}\n\nexport function sign_ed25519_pk_to_curve25519(\n ed25519_pk: Uint8Array,\n): Uint8Array {\n const ge_a = [gf(), gf(), gf(), gf()];\n const x = gf();\n const one_minus_y = gf();\n const x25519_pk = new Uint8Array(32);\n\n if (unpackneg(ge_a, ed25519_pk)) {\n throw Error(\"invalid public key\");\n }\n\n set25519(one_minus_y, gf1);\n Z(one_minus_y, one_minus_y, ge_a[1]);\n\n set25519(x, gf1);\n A(x, x, ge_a[1]);\n\n inv25519(one_minus_y, one_minus_y);\n M(x, x, one_minus_y);\n pack25519(x25519_pk, x);\n\n return x25519_pk;\n}\n\nexport function secretbox(\n msg: Uint8Array,\n nonce: Uint8Array,\n key: Uint8Array,\n): Uint8Array {\n checkArrayTypes(msg, nonce, key);\n checkLengths(key, nonce);\n var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);\n var c = new Uint8Array(m.length);\n for (var i = 0; i < msg.length; i++)\n m[i + crypto_secretbox_ZEROBYTES] = msg[i];\n crypto_secretbox(c, m, m.length, nonce, key);\n return c.subarray(crypto_secretbox_BOXZEROBYTES);\n}\n\nexport function secretbox_open(\n box: Uint8Array,\n nonce: Uint8Array,\n key: Uint8Array,\n): Uint8Array | undefined {\n checkArrayTypes(box, nonce, key);\n checkLengths(key, nonce);\n var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);\n var m = new Uint8Array(c.length);\n for (var i = 0; i < box.length; i++)\n c[i + crypto_secretbox_BOXZEROBYTES] = box[i];\n if (c.length < 32) return undefined;\n if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return undefined;\n return m.subarray(crypto_secretbox_ZEROBYTES);\n}\n\nexport function crypto_core_ed25519_scalar_add(\n x: Uint8Array,\n y: Uint8Array,\n): Uint8Array {\n const z = new Float64Array(64);\n for (let i = 0; i < 32; i++) {\n z[i] = x[i] + y[i];\n }\n const o = new Uint8Array(32);\n modL(o, z);\n return o;\n}\n\n/**\n * Reduce a scalar \"s\" to \"s mod L\". The input can be up to 64 bytes long.\n */\nexport function crypto_core_ed25519_scalar_reduce(x: Uint8Array): Uint8Array {\n const len = x.length;\n const z = new Float64Array(64);\n for (let i = 0; i < len; i++) z[i] = x[i];\n const o = new Uint8Array(32);\n modL(o, z);\n return o;\n}\n\nexport function crypto_core_ed25519_scalar_sub(\n x: Uint8Array,\n y: Uint8Array,\n): Uint8Array {\n const z = new Float64Array(64);\n for (let i = 0; i < 32; i++) {\n z[i] = x[i] - y[i];\n }\n const o = new Uint8Array(32);\n modL(o, z);\n return o;\n}\n\nexport function crypto_edx25519_private_key_create(): Uint8Array {\n const seed = new Uint8Array(32);\n randombytes(seed, 32);\n return crypto_edx25519_private_key_create_from_seed(seed);\n}\n\nexport function crypto_edx25519_private_key_create_from_seed(\n seed: Uint8Array,\n): Uint8Array {\n const pk = hash(seed);\n pk[0] &= 248;\n pk[31] &= 127;\n pk[31] |= 64;\n return pk;\n}\n\nexport function crypto_edx25519_get_public(priv: Uint8Array): Uint8Array {\n return crypto_scalarmult_ed25519_base_noclamp(priv.subarray(0, 32));\n}\n\nexport function crypto_edx25519_sign_detached(\n m: Uint8Array,\n skx: Uint8Array,\n pkx: Uint8Array,\n): Uint8Array {\n const n: number = m.length;\n const h = new Uint8Array(64);\n const r = new Uint8Array(64);\n let i, j;\n const x = new Float64Array(64);\n const p = [gf(), gf(), gf(), gf()];\n\n const sm = new Uint8Array(n + 64);\n\n for (i = 0; i < n; i++) sm[64 + i] = m[i];\n for (i = 0; i < 32; i++) sm[32 + i] = skx[32 + i];\n\n crypto_hash(r, sm.subarray(32), n + 32);\n reduce(r);\n scalarbase(p, r);\n pack(sm, p);\n\n for (i = 32; i < 64; i++) sm[i] = pkx[i - 32];\n crypto_hash(h, sm, n + 64);\n reduce(h);\n\n for (i = 0; i < 64; i++) x[i] = 0;\n for (i = 0; i < 32; i++) x[i] = r[i];\n for (i = 0; i < 32; i++) {\n for (j = 0; j < 32; j++) {\n x[i + j] += h[i] * skx[j];\n }\n }\n\n modL(sm.subarray(32), x);\n return sm.subarray(0, 64);\n}\n\nexport function crypto_edx25519_sign_detached_verify(\n msg: Uint8Array,\n sig: Uint8Array,\n publicKey: Uint8Array,\n): boolean {\n checkArrayTypes(msg, sig, publicKey);\n if (sig.length !== crypto_sign_BYTES) throw new Error(\"bad signature size\");\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error(\"bad public key size\");\n const sm = new Uint8Array(crypto_sign_BYTES + msg.length);\n const m = new Uint8Array(crypto_sign_BYTES + msg.length);\n let i;\n for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];\n for (i = 0; i < msg.length; i++) sm[i + crypto_sign_BYTES] = msg[i];\n return crypto_sign_open(m, sm, sm.length, publicKey) >= 0;\n}\n", "import { setPRNG } from \"./nacl-fast.js\";\n\nexport function loadBrowserPrng() {\n // Initialize PRNG if environment provides CSPRNG.\n // If not, methods calling randombytes will throw.\n // @ts-ignore-error\n const cr = typeof self !== \"undefined\" ? self.crypto || self.msCrypto : null;\n\n const QUOTA = 65536;\n setPRNG(function (x: Uint8Array, n: number) {\n let i;\n const v = new Uint8Array(n);\n for (i = 0; i < n; i += QUOTA) {\n cr.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));\n }\n for (i = 0; i < n; i++) x[i] = v[i];\n for (i = 0; i < v.length; i++) v[i] = 0;\n });\n}\n", "/*\n This file is part of GNU Taler\n Copyright (C) 2012-2020 Taler Systems SA\n\n GNU Taler is free software: you can redistribute it and/or modify it\n under the terms of the GNU Lesser General Public License as published\n by the Free Software Foundation, either version 3 of the License,\n or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but\n WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with this program. If not, see <http://www.gnu.org/licenses/>.\n\n SPDX-License-Identifier: LGPL3.0-or-later\n\n Note: the LGPL does not apply to all components of GNU Taler,\n but it does apply to this file.\n */\n\nexport enum TalerErrorCode {\n\n\n /**\n * Special code to indicate success (no error).\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n NONE = 0,\n\n\n /**\n * A non-integer error code was returned in the JSON response.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n INVALID = 1,\n\n\n /**\n * An internal failure happened on the client side.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_CLIENT_INTERNAL_ERROR = 2,\n\n\n /**\n * The response we got from the server was not even in JSON format.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_INVALID_RESPONSE = 10,\n\n\n /**\n * An operation timed out.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_TIMEOUT = 11,\n\n\n /**\n * The version string given does not follow the expected CURRENT:REVISION:AGE Format.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_VERSION_MALFORMED = 12,\n\n\n /**\n * The service responded with a reply that was in JSON but did not satsify the protocol. Note that invalid cryptographic signatures should have signature-specific error codes.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_REPLY_MALFORMED = 13,\n\n\n /**\n * There is an error in the client-side configuration, for example the base URL specified is malformed.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_CONFIGURATION_INVALID = 14,\n\n\n /**\n * The client made a request to a service, but received an error response it does not know how to handle.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_UNEXPECTED_REQUEST_ERROR = 15,\n\n\n /**\n * The HTTP method used is invalid for this endpoint.\n * Returned with an HTTP status code of #MHD_HTTP_METHOD_NOT_ALLOWED (405).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_METHOD_INVALID = 20,\n\n\n /**\n * There is no endpoint defined for the URL provided by the client.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_ENDPOINT_UNKNOWN = 21,\n\n\n /**\n * The JSON in the client's request was malformed (generic parse error).\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_JSON_INVALID = 22,\n\n\n /**\n * Some of the HTTP headers provided by the client caused the server to not be able to handle the request.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_HTTP_HEADERS_MALFORMED = 23,\n\n\n /**\n * The payto:// URI provided by the client is malformed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_PAYTO_URI_MALFORMED = 24,\n\n\n /**\n * A required parameter in the request was missing.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_PARAMETER_MISSING = 25,\n\n\n /**\n * A parameter in the request was malformed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_PARAMETER_MALFORMED = 26,\n\n\n /**\n * The reserve public key given as part of a /reserves/ endpoint was malformed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_RESERVE_PUB_MALFORMED = 27,\n\n\n /**\n * The currencies involved in the operation do not match.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_CURRENCY_MISMATCH = 30,\n\n\n /**\n * The URI is longer than the longest URI the HTTP server is willing to parse.\n * Returned with an HTTP status code of #MHD_HTTP_URI_TOO_LONG (414).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_URI_TOO_LONG = 31,\n\n\n /**\n * The body is too large to be permissible for the endpoint.\n * Returned with an HTTP status code of #MHD_HTTP_PAYLOAD_TOO_LARGE (413).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_UPLOAD_EXCEEDS_LIMIT = 32,\n\n\n /**\n * The service failed initialize its connection to the database.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_DB_SETUP_FAILED = 50,\n\n\n /**\n * The service encountered an error event to just start the database transaction.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_DB_START_FAILED = 51,\n\n\n /**\n * The service failed to store information in its database.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_DB_STORE_FAILED = 52,\n\n\n /**\n * The service failed to fetch information from its database.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_DB_FETCH_FAILED = 53,\n\n\n /**\n * The service encountered an error event to commit the database transaction (hard, unrecoverable error).\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_DB_COMMIT_FAILED = 54,\n\n\n /**\n * The service encountered an error event to commit the database transaction, even after repeatedly retrying it there was always a conflicting transaction. (This indicates a repeated serialization error; should only happen if some client maliciously tries to create conflicting concurrent transactions.)\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_DB_SOFT_FAILURE = 55,\n\n\n /**\n * The service's database is inconsistent and violates service-internal invariants.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_DB_INVARIANT_FAILURE = 56,\n\n\n /**\n * The HTTP server experienced an internal invariant failure (bug).\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_INTERNAL_INVARIANT_FAILURE = 60,\n\n\n /**\n * The service could not compute a cryptographic hash over some JSON value.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_FAILED_COMPUTE_JSON_HASH = 61,\n\n\n /**\n * The service could not compute an amount.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_FAILED_COMPUTE_AMOUNT = 62,\n\n\n /**\n * The HTTP server had insufficient memory to parse the request.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_PARSER_OUT_OF_MEMORY = 70,\n\n\n /**\n * The HTTP server failed to allocate memory.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_ALLOCATION_FAILURE = 71,\n\n\n /**\n * The HTTP server failed to allocate memory for building JSON reply.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_JSON_ALLOCATION_FAILURE = 72,\n\n\n /**\n * The HTTP server failed to allocate memory for making a CURL request.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_CURL_ALLOCATION_FAILURE = 73,\n\n\n /**\n * The backend could not locate a required template to generate an HTML reply.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_FAILED_TO_LOAD_TEMPLATE = 74,\n\n\n /**\n * The backend could not expand the template to generate an HTML reply.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n GENERIC_FAILED_TO_EXPAND_TEMPLATE = 75,\n\n\n /**\n * Exchange is badly configured and thus cannot operate.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_BAD_CONFIGURATION = 1000,\n\n\n /**\n * Operation specified unknown for this endpoint.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_OPERATION_UNKNOWN = 1001,\n\n\n /**\n * The number of segments included in the URI does not match the number of segments expected by the endpoint.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_WRONG_NUMBER_OF_SEGMENTS = 1002,\n\n\n /**\n * The same coin was already used with a different denomination previously.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_COIN_CONFLICTING_DENOMINATION_KEY = 1003,\n\n\n /**\n * The public key of given to a \"/coins/\" endpoint of the exchange was malformed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_COINS_INVALID_COIN_PUB = 1004,\n\n\n /**\n * The exchange is not aware of the denomination key the wallet requested for the operation.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_DENOMINATION_KEY_UNKNOWN = 1005,\n\n\n /**\n * The signature of the denomination key over the coin is not valid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DENOMINATION_SIGNATURE_INVALID = 1006,\n\n\n /**\n * The exchange failed to perform the operation as it could not find the private keys. This is a problem with the exchange setup, not with the client's request.\n * Returned with an HTTP status code of #MHD_HTTP_SERVICE_UNAVAILABLE (503).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_KEYS_MISSING = 1007,\n\n\n /**\n * Validity period of the denomination lies in the future.\n * Returned with an HTTP status code of #MHD_HTTP_PRECONDITION_FAILED (412).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_DENOMINATION_VALIDITY_IN_FUTURE = 1008,\n\n\n /**\n * Denomination key of the coin is past its expiration time for the requested operation.\n * Returned with an HTTP status code of #MHD_HTTP_GONE (410).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_DENOMINATION_EXPIRED = 1009,\n\n\n /**\n * Denomination key of the coin has been revoked.\n * Returned with an HTTP status code of #MHD_HTTP_GONE (410).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_DENOMINATION_REVOKED = 1010,\n\n\n /**\n * An operation where the exchange interacted with a security module timed out.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_SECMOD_TIMEOUT = 1011,\n\n\n /**\n * The respective coin did not have sufficient residual value for the operation. The \"history\" in this response provides the \"residual_value\" of the coin, which may be less than its \"original_value\".\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_INSUFFICIENT_FUNDS = 1012,\n\n\n /**\n * The exchange had an internal error reconstructing the transaction history of the coin that was being processed.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_COIN_HISTORY_COMPUTATION_FAILED = 1013,\n\n\n /**\n * The exchange failed to obtain the transaction history of the given coin from the database while generating an insufficient funds errors.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_HISTORY_DB_ERROR_INSUFFICIENT_FUNDS = 1014,\n\n\n /**\n * The same coin was already used with a different age hash previously.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_COIN_CONFLICTING_AGE_HASH = 1015,\n\n\n /**\n * The requested operation is not valid for the cipher used by the selected denomination.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_INVALID_DENOMINATION_CIPHER_FOR_OPERATION = 1016,\n\n\n /**\n * The provided arguments for the operation use inconsistent ciphers.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_CIPHER_MISMATCH = 1017,\n\n\n /**\n * The number of denominations specified in the request exceeds the limit of the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_NEW_DENOMS_ARRAY_SIZE_EXCESSIVE = 1018,\n\n\n /**\n * The time at the server is too far off from the time specified in the request. Most likely the client system time is wrong.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_CLOCK_SKEW = 1020,\n\n\n /**\n * The specified amount for the coin is higher than the value of the denomination of the coin.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_AMOUNT_EXCEEDS_DENOMINATION_VALUE = 1021,\n\n\n /**\n * The exchange was not properly configured with global fees.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_GLOBAL_FEES_MISSING = 1022,\n\n\n /**\n * The exchange was not properly configured with wire fees.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_WIRE_FEES_MISSING = 1023,\n\n\n /**\n * The purse public key was malformed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_PURSE_PUB_MALFORMED = 1024,\n\n\n /**\n * The purse is unknown.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_PURSE_UNKNOWN = 1025,\n\n\n /**\n * The purse has expired.\n * Returned with an HTTP status code of #MHD_HTTP_GONE (410).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_PURSE_EXPIRED = 1026,\n\n\n /**\n * The exchange has no information about the \"reserve_pub\" that was given.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_RESERVE_UNKNOWN = 1027,\n\n\n /**\n * The exchange is not allowed to proceed with the operation until the client has satisfied a KYC check.\n * Returned with an HTTP status code of #MHD_HTTP_UNAVAILABLE_FOR_LEGAL_REASONS (451).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_KYC_REQUIRED = 1028,\n\n\n /**\n * Inconsistency between provided age commitment and attest: either none or both must be provided\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_DEPOSIT_COIN_CONFLICTING_ATTEST_VS_AGE_COMMITMENT = 1029,\n\n\n /**\n * The provided attestation for the minimum age couldn't be verified by the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_DEPOSIT_COIN_AGE_ATTESTATION_FAILURE = 1030,\n\n\n /**\n * The purse was deleted.\n * Returned with an HTTP status code of #MHD_HTTP_GONE (410).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_PURSE_DELETED = 1031,\n\n\n /**\n * The public key of the AML officer in the URL was malformed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_AML_OFFICER_PUB_MALFORMED = 1032,\n\n\n /**\n * The signature affirming the GET request of the AML officer is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_AML_OFFICER_GET_SIGNATURE_INVALID = 1033,\n\n\n /**\n * The specified AML officer does not have access at this time.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_AML_OFFICER_ACCESS_DENIED = 1034,\n\n\n /**\n * The requested operation is denied pending the resolution of an anti-money laundering investigation by the exchange operator. This is a manual process, please wait and retry later.\n * Returned with an HTTP status code of #MHD_HTTP_UNAVAILABLE_FOR_LEGAL_REASONS (451).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_AML_PENDING = 1035,\n\n\n /**\n * The requested operation is denied as the account was frozen on suspicion of money laundering. Please contact the exchange operator.\n * Returned with an HTTP status code of #MHD_HTTP_UNAVAILABLE_FOR_LEGAL_REASONS (451).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GENERIC_AML_FROZEN = 1036,\n\n\n /**\n * The exchange did not find information about the specified transaction in the database.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DEPOSITS_GET_NOT_FOUND = 1100,\n\n\n /**\n * The wire hash of given to a \"/deposits/\" handler was malformed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DEPOSITS_GET_INVALID_H_WIRE = 1101,\n\n\n /**\n * The merchant key of given to a \"/deposits/\" handler was malformed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DEPOSITS_GET_INVALID_MERCHANT_PUB = 1102,\n\n\n /**\n * The hash of the contract terms given to a \"/deposits/\" handler was malformed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DEPOSITS_GET_INVALID_H_CONTRACT_TERMS = 1103,\n\n\n /**\n * The coin public key of given to a \"/deposits/\" handler was malformed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DEPOSITS_GET_INVALID_COIN_PUB = 1104,\n\n\n /**\n * The signature returned by the exchange in a /deposits/ request was malformed.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DEPOSITS_GET_INVALID_SIGNATURE_BY_EXCHANGE = 1105,\n\n\n /**\n * The signature of the merchant is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DEPOSITS_GET_MERCHANT_SIGNATURE_INVALID = 1106,\n\n\n /**\n * The provided policy data was not accepted\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DEPOSITS_POLICY_NOT_ACCEPTED = 1107,\n\n\n /**\n * The given reserve does not have sufficient funds to admit the requested withdraw operation at this time. The response includes the current \"balance\" of the reserve as well as the transaction \"history\" that lead to this balance.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_WITHDRAW_INSUFFICIENT_FUNDS = 1150,\n\n\n /**\n * The given reserve does not have sufficient funds to admit the requested age-withdraw operation at this time. The response includes the current \"balance\" of the reserve as well as the transaction \"history\" that lead to this balance.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_AGE_WITHDRAW_INSUFFICIENT_FUNDS = 1151,\n\n\n /**\n * The amount to withdraw together with the fee exceeds the numeric range for Taler amounts. This is not a client failure, as the coin value and fees come from the exchange's configuration.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_WITHDRAW_AMOUNT_FEE_OVERFLOW = 1152,\n\n\n /**\n * The exchange failed to create the signature using the denomination key.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_WITHDRAW_SIGNATURE_FAILED = 1153,\n\n\n /**\n * The signature of the reserve is not valid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_WITHDRAW_RESERVE_SIGNATURE_INVALID = 1154,\n\n\n /**\n * When computing the reserve history, we ended up with a negative overall balance, which should be impossible.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RESERVE_HISTORY_ERROR_INSUFFICIENT_FUNDS = 1155,\n\n\n /**\n * The reserve did not have sufficient funds in it to pay for a full reserve history statement.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_GET_RESERVE_HISTORY_ERROR_INSUFFICIENT_BALANCE = 1156,\n\n\n /**\n * Withdraw period of the coin to be withdrawn is in the past.\n * Returned with an HTTP status code of #MHD_HTTP_GONE (410).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_WITHDRAW_DENOMINATION_KEY_LOST = 1158,\n\n\n /**\n * The client failed to unblind the blind signature.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_WITHDRAW_UNBLIND_FAILURE = 1159,\n\n\n /**\n * The client re-used a withdraw nonce, which is not allowed.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_WITHDRAW_NONCE_REUSE = 1160,\n\n\n /**\n * The batch withdraw included a planchet that was already withdrawn. This is not allowed.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_WITHDRAW_BATCH_IDEMPOTENT_PLANCHET = 1175,\n\n\n /**\n * The signature made by the coin over the deposit permission is not valid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DEPOSIT_COIN_SIGNATURE_INVALID = 1205,\n\n\n /**\n * The same coin was already deposited for the same merchant and contract with other details.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DEPOSIT_CONFLICTING_CONTRACT = 1206,\n\n\n /**\n * The stated value of the coin after the deposit fee is subtracted would be negative.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DEPOSIT_NEGATIVE_VALUE_AFTER_FEE = 1207,\n\n\n /**\n * The stated refund deadline is after the wire deadline.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DEPOSIT_REFUND_DEADLINE_AFTER_WIRE_DEADLINE = 1208,\n\n\n /**\n * The stated wire deadline is \"never\", which makes no sense.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DEPOSIT_WIRE_DEADLINE_IS_NEVER = 1209,\n\n\n /**\n * The exchange failed to canonicalize and hash the given wire format. For example, the merchant failed to provide the \"salt\" or a valid payto:// URI in the wire details. Note that while the exchange will do some basic sanity checking on the wire details, it cannot warrant that the banking system will ultimately be able to route to the specified address, even if this check passed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DEPOSIT_INVALID_WIRE_FORMAT_JSON = 1210,\n\n\n /**\n * The hash of the given wire address does not match the wire hash specified in the proposal data.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DEPOSIT_INVALID_WIRE_FORMAT_CONTRACT_HASH_CONFLICT = 1211,\n\n\n /**\n * The signature provided by the exchange is not valid.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DEPOSIT_INVALID_SIGNATURE_BY_EXCHANGE = 1221,\n\n\n /**\n * The deposited amount is smaller than the deposit fee, which would result in a negative contribution.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DEPOSIT_FEE_ABOVE_AMOUNT = 1222,\n\n\n /**\n * The proof of policy fulfillment was invalid.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_EXTENSIONS_INVALID_FULFILLMENT = 1240,\n\n\n /**\n * The reserve balance, status or history was requested for a reserve which is not known to the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RESERVES_STATUS_UNKNOWN = 1250,\n\n\n /**\n * The reserve status was requested with a bad signature.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RESERVES_STATUS_BAD_SIGNATURE = 1251,\n\n\n /**\n * The reserve history was requested with a bad signature.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RESERVES_HISTORY_BAD_SIGNATURE = 1252,\n\n\n /**\n * The exchange encountered melt fees exceeding the melted coin's contribution.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MELT_FEES_EXCEED_CONTRIBUTION = 1302,\n\n\n /**\n * The signature made with the coin to be melted is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MELT_COIN_SIGNATURE_INVALID = 1303,\n\n\n /**\n * The denomination of the given coin has past its expiration date and it is also not a valid zombie (that is, was not refreshed with the fresh coin being subjected to recoup).\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MELT_COIN_EXPIRED_NO_ZOMBIE = 1305,\n\n\n /**\n * The signature returned by the exchange in a melt request was malformed.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MELT_INVALID_SIGNATURE_BY_EXCHANGE = 1306,\n\n\n /**\n * The provided transfer keys do not match up with the original commitment. Information about the original commitment is included in the response.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFRESHES_REVEAL_COMMITMENT_VIOLATION = 1353,\n\n\n /**\n * Failed to produce the blinded signatures over the coins to be returned.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFRESHES_REVEAL_SIGNING_ERROR = 1354,\n\n\n /**\n * The exchange is unaware of the refresh session specified in the request.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFRESHES_REVEAL_SESSION_UNKNOWN = 1355,\n\n\n /**\n * The size of the cut-and-choose dimension of the private transfer keys request does not match #TALER_CNC_KAPPA - 1.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFRESHES_REVEAL_CNC_TRANSFER_ARRAY_SIZE_INVALID = 1356,\n\n\n /**\n * The number of envelopes given does not match the number of denomination keys given.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFRESHES_REVEAL_NEW_DENOMS_ARRAY_SIZE_MISMATCH = 1358,\n\n\n /**\n * The exchange encountered a numeric overflow totaling up the cost for the refresh operation.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFRESHES_REVEAL_COST_CALCULATION_OVERFLOW = 1359,\n\n\n /**\n * The exchange's cost calculation shows that the melt amount is below the costs of the transaction.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFRESHES_REVEAL_AMOUNT_INSUFFICIENT = 1360,\n\n\n /**\n * The signature made with the coin over the link data is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFRESHES_REVEAL_LINK_SIGNATURE_INVALID = 1361,\n\n\n /**\n * The refresh session hash given to a /refreshes/ handler was malformed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFRESHES_REVEAL_INVALID_RCH = 1362,\n\n\n /**\n * Operation specified invalid for this endpoint.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFRESHES_REVEAL_OPERATION_INVALID = 1363,\n\n\n /**\n * The client provided age commitment data, but age restriction is not supported on this server.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFRESHES_REVEAL_AGE_RESTRICTION_NOT_SUPPORTED = 1364,\n\n\n /**\n * The client provided invalid age commitment data: missing, not an array, or array of invalid size.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFRESHES_REVEAL_AGE_RESTRICTION_COMMITMENT_INVALID = 1365,\n\n\n /**\n * The coin specified in the link request is unknown to the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_LINK_COIN_UNKNOWN = 1400,\n\n\n /**\n * The public key of given to a /transfers/ handler was malformed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_TRANSFERS_GET_WTID_MALFORMED = 1450,\n\n\n /**\n * The exchange did not find information about the specified wire transfer identifier in the database.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_TRANSFERS_GET_WTID_NOT_FOUND = 1451,\n\n\n /**\n * The exchange did not find information about the wire transfer fees it charged.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_TRANSFERS_GET_WIRE_FEE_NOT_FOUND = 1452,\n\n\n /**\n * The exchange found a wire fee that was above the total transfer value (and thus could not have been charged).\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_TRANSFERS_GET_WIRE_FEE_INCONSISTENT = 1453,\n\n\n /**\n * The wait target of the URL was not in the set of expected values.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSES_INVALID_WAIT_TARGET = 1475,\n\n\n /**\n * The signature on the purse status returned by the exchange was invalid.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSES_GET_INVALID_SIGNATURE_BY_EXCHANGE = 1476,\n\n\n /**\n * The exchange knows literally nothing about the coin we were asked to refund. But without a transaction history, we cannot issue a refund. This is kind-of OK, the owner should just refresh it directly without executing the refund.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFUND_COIN_NOT_FOUND = 1500,\n\n\n /**\n * We could not process the refund request as the coin's transaction history does not permit the requested refund because then refunds would exceed the deposit amount. The \"history\" in the response proves this.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFUND_CONFLICT_DEPOSIT_INSUFFICIENT = 1501,\n\n\n /**\n * The exchange knows about the coin we were asked to refund, but not about the specific /deposit operation. Hence, we cannot issue a refund (as we do not know if this merchant public key is authorized to do a refund).\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFUND_DEPOSIT_NOT_FOUND = 1502,\n\n\n /**\n * The exchange can no longer refund the customer/coin as the money was already transferred (paid out) to the merchant. (It should be past the refund deadline.)\n * Returned with an HTTP status code of #MHD_HTTP_GONE (410).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFUND_MERCHANT_ALREADY_PAID = 1503,\n\n\n /**\n * The refund fee specified for the request is lower than the refund fee charged by the exchange for the given denomination key of the refunded coin.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFUND_FEE_TOO_LOW = 1504,\n\n\n /**\n * The refunded amount is smaller than the refund fee, which would result in a negative refund.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFUND_FEE_ABOVE_AMOUNT = 1505,\n\n\n /**\n * The signature of the merchant is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFUND_MERCHANT_SIGNATURE_INVALID = 1506,\n\n\n /**\n * Merchant backend failed to create the refund confirmation signature.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFUND_MERCHANT_SIGNING_FAILED = 1507,\n\n\n /**\n * The signature returned by the exchange in a refund request was malformed.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFUND_INVALID_SIGNATURE_BY_EXCHANGE = 1508,\n\n\n /**\n * The failure proof returned by the exchange is incorrect.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFUND_INVALID_FAILURE_PROOF_BY_EXCHANGE = 1509,\n\n\n /**\n * Conflicting refund granted before with different amount but same refund transaction ID.\n * Returned with an HTTP status code of #MHD_HTTP_FAILED_DEPENDENCY (424).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_REFUND_INCONSISTENT_AMOUNT = 1510,\n\n\n /**\n * The given coin signature is invalid for the request.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RECOUP_SIGNATURE_INVALID = 1550,\n\n\n /**\n * The exchange could not find the corresponding withdraw operation. The request is denied.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RECOUP_WITHDRAW_NOT_FOUND = 1551,\n\n\n /**\n * The coin's remaining balance is zero. The request is denied.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RECOUP_COIN_BALANCE_ZERO = 1552,\n\n\n /**\n * The exchange failed to reproduce the coin's blinding.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RECOUP_BLINDING_FAILED = 1553,\n\n\n /**\n * The coin's remaining balance is zero. The request is denied.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RECOUP_COIN_BALANCE_NEGATIVE = 1554,\n\n\n /**\n * The coin's denomination has not been revoked yet.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RECOUP_NOT_ELIGIBLE = 1555,\n\n\n /**\n * The given coin signature is invalid for the request.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RECOUP_REFRESH_SIGNATURE_INVALID = 1575,\n\n\n /**\n * The exchange could not find the corresponding melt operation. The request is denied.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RECOUP_REFRESH_MELT_NOT_FOUND = 1576,\n\n\n /**\n * The exchange failed to reproduce the coin's blinding.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RECOUP_REFRESH_BLINDING_FAILED = 1578,\n\n\n /**\n * The coin's denomination has not been revoked yet.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RECOUP_REFRESH_NOT_ELIGIBLE = 1580,\n\n\n /**\n * This exchange does not allow clients to request /keys for times other than the current (exchange) time.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_KEYS_TIMETRAVEL_FORBIDDEN = 1600,\n\n\n /**\n * A signature in the server's response was malformed.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_WIRE_SIGNATURE_INVALID = 1650,\n\n\n /**\n * No bank accounts are enabled for the exchange. The administrator should enable-account using the taler-exchange-offline tool.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_WIRE_NO_ACCOUNTS_CONFIGURED = 1651,\n\n\n /**\n * The payto:// URI stored in the exchange database for its bank account is malformed.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_WIRE_INVALID_PAYTO_CONFIGURED = 1652,\n\n\n /**\n * No wire fees are configured for an enabled wire method of the exchange. The administrator must set the wire-fee using the taler-exchange-offline tool.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_WIRE_FEES_NOT_CONFIGURED = 1653,\n\n\n /**\n * This purse was previously created with different meta data.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RESERVES_PURSE_CREATE_CONFLICTING_META_DATA = 1675,\n\n\n /**\n * This purse was previously merged with different meta data.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RESERVES_PURSE_MERGE_CONFLICTING_META_DATA = 1676,\n\n\n /**\n * The reserve has insufficient funds to create another purse.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RESERVES_PURSE_CREATE_INSUFFICIENT_FUNDS = 1677,\n\n\n /**\n * The purse fee specified for the request is lower than the purse fee charged by the exchange at this time.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RESERVES_PURSE_FEE_TOO_LOW = 1678,\n\n\n /**\n * The payment request cannot be deleted anymore, as it either already completed or timed out.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_DELETE_ALREADY_DECIDED = 1679,\n\n\n /**\n * The signature affirming the purse deletion is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_DELETE_SIGNATURE_INVALID = 1680,\n\n\n /**\n * The exchange failed to talk to the process responsible for its private denomination keys.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DENOMINATION_HELPER_UNAVAILABLE = 1700,\n\n\n /**\n * The response from the denomination key helper process was malformed.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DENOMINATION_HELPER_BUG = 1701,\n\n\n /**\n * The helper refuses to sign with the key, because it is too early: the validity period has not yet started.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_DENOMINATION_HELPER_TOO_EARLY = 1702,\n\n\n /**\n * The signature of the exchange on the reply was invalid.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_DEPOSIT_EXCHANGE_SIGNATURE_INVALID = 1725,\n\n\n /**\n * The exchange failed to talk to the process responsible for its private signing keys.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_SIGNKEY_HELPER_UNAVAILABLE = 1750,\n\n\n /**\n * The response from the online signing key helper process was malformed.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_SIGNKEY_HELPER_BUG = 1751,\n\n\n /**\n * The helper refuses to sign with the key, because it is too early: the validity period has not yet started.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_SIGNKEY_HELPER_TOO_EARLY = 1752,\n\n\n /**\n * The purse expiration time is in the past at the time of its creation.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RESERVES_PURSE_EXPIRATION_BEFORE_NOW = 1775,\n\n\n /**\n * The purse expiration time is set to never, which is not allowed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RESERVES_PURSE_EXPIRATION_IS_NEVER = 1776,\n\n\n /**\n * The signature affirming the merge of the purse is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RESERVES_PURSE_MERGE_SIGNATURE_INVALID = 1777,\n\n\n /**\n * The signature by the reserve affirming the merge is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RESERVES_RESERVE_MERGE_SIGNATURE_INVALID = 1778,\n\n\n /**\n * The signature by the reserve affirming the open operation is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RESERVES_OPEN_BAD_SIGNATURE = 1785,\n\n\n /**\n * The signature by the reserve affirming the close operation is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RESERVES_CLOSE_BAD_SIGNATURE = 1786,\n\n\n /**\n * The signature by the reserve affirming the attestion request is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RESERVES_ATTEST_BAD_SIGNATURE = 1787,\n\n\n /**\n * The exchange does not know an origin account to which the remaining reserve balance could be wired to, and the wallet failed to provide one.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RESERVES_CLOSE_NO_TARGET_ACCOUNT = 1788,\n\n\n /**\n * The reserve balance is insufficient to pay for the open operation.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_RESERVES_OPEN_INSUFFICIENT_FUNDS = 1789,\n\n\n /**\n * The auditor that was supposed to be disabled is unknown to this exchange.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_AUDITOR_NOT_FOUND = 1800,\n\n\n /**\n * The exchange has a more recently signed conflicting instruction and is thus refusing the current change (replay detected).\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_AUDITOR_MORE_RECENT_PRESENT = 1801,\n\n\n /**\n * The signature to add or enable the auditor does not validate.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_AUDITOR_ADD_SIGNATURE_INVALID = 1802,\n\n\n /**\n * The signature to disable the auditor does not validate.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_AUDITOR_DEL_SIGNATURE_INVALID = 1803,\n\n\n /**\n * The signature to revoke the denomination does not validate.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_DENOMINATION_REVOKE_SIGNATURE_INVALID = 1804,\n\n\n /**\n * The signature to revoke the online signing key does not validate.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_SIGNKEY_REVOKE_SIGNATURE_INVALID = 1805,\n\n\n /**\n * The exchange has a more recently signed conflicting instruction and is thus refusing the current change (replay detected).\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_WIRE_MORE_RECENT_PRESENT = 1806,\n\n\n /**\n * The signingkey specified is unknown to the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_KEYS_SIGNKEY_UNKNOWN = 1807,\n\n\n /**\n * The signature to publish wire account does not validate.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_WIRE_DETAILS_SIGNATURE_INVALID = 1808,\n\n\n /**\n * The signature to add the wire account does not validate.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_WIRE_ADD_SIGNATURE_INVALID = 1809,\n\n\n /**\n * The signature to disable the wire account does not validate.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_WIRE_DEL_SIGNATURE_INVALID = 1810,\n\n\n /**\n * The wire account to be disabled is unknown to the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_WIRE_NOT_FOUND = 1811,\n\n\n /**\n * The signature to affirm wire fees does not validate.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_WIRE_FEE_SIGNATURE_INVALID = 1812,\n\n\n /**\n * The signature conflicts with a previous signature affirming different fees.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_WIRE_FEE_MISMATCH = 1813,\n\n\n /**\n * The signature affirming the denomination key is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_KEYS_DENOMKEY_ADD_SIGNATURE_INVALID = 1814,\n\n\n /**\n * The signature affirming the signing key is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_KEYS_SIGNKEY_ADD_SIGNATURE_INVALID = 1815,\n\n\n /**\n * The signature conflicts with a previous signature affirming different fees.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_GLOBAL_FEE_MISMATCH = 1816,\n\n\n /**\n * The signature affirming the fee structure is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_GLOBAL_FEE_SIGNATURE_INVALID = 1817,\n\n\n /**\n * The signature affirming the profit drain is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_DRAIN_PROFITS_SIGNATURE_INVALID = 1818,\n\n\n /**\n * The signature affirming the AML decision is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_AML_DECISION_ADD_SIGNATURE_INVALID = 1825,\n\n\n /**\n * The AML officer specified is not allowed to make AML decisions right now.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_AML_DECISION_INVALID_OFFICER = 1826,\n\n\n /**\n * There is a more recent AML decision on file. The decision was rejected as timestamps of AML decisions must be monotonically increasing.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_AML_DECISION_MORE_RECENT_PRESENT = 1827,\n\n\n /**\n * There AML decision would impose an AML check of a type that is not provided by any KYC provider known to the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_AML_DECISION_UNKNOWN_CHECK = 1828,\n\n\n /**\n * The signature affirming the change in the AML officer status is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_UPDATE_AML_OFFICER_SIGNATURE_INVALID = 1830,\n\n\n /**\n * A more recent decision about the AML officer status is known to the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_AML_OFFICERS_MORE_RECENT_PRESENT = 1831,\n\n\n /**\n * The purse was previously created with different meta data.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_CREATE_CONFLICTING_META_DATA = 1850,\n\n\n /**\n * The purse was previously created with a different contract.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_CREATE_CONFLICTING_CONTRACT_STORED = 1851,\n\n\n /**\n * A coin signature for a deposit into the purse is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_CREATE_COIN_SIGNATURE_INVALID = 1852,\n\n\n /**\n * The purse expiration time is in the past.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_CREATE_EXPIRATION_BEFORE_NOW = 1853,\n\n\n /**\n * The purse expiration time is \"never\".\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_CREATE_EXPIRATION_IS_NEVER = 1854,\n\n\n /**\n * The purse signature over the purse meta data is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_CREATE_SIGNATURE_INVALID = 1855,\n\n\n /**\n * The signature over the encrypted contract is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_ECONTRACT_SIGNATURE_INVALID = 1856,\n\n\n /**\n * The signature from the exchange over the confirmation is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_CREATE_EXCHANGE_SIGNATURE_INVALID = 1857,\n\n\n /**\n * The coin was previously deposited with different meta data.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_DEPOSIT_CONFLICTING_META_DATA = 1858,\n\n\n /**\n * The encrypted contract was previously uploaded with different meta data.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_ECONTRACT_CONFLICTING_META_DATA = 1859,\n\n\n /**\n * The deposited amount is less than the purse fee.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_CREATE_PURSE_NEGATIVE_VALUE_AFTER_FEE = 1860,\n\n\n /**\n * The signature using the merge key is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_MERGE_INVALID_MERGE_SIGNATURE = 1876,\n\n\n /**\n * The signature using the reserve key is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_MERGE_INVALID_RESERVE_SIGNATURE = 1877,\n\n\n /**\n * The targeted purse is not yet full and thus cannot be merged. Retrying the request later may succeed.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_NOT_FULL = 1878,\n\n\n /**\n * The signature from the exchange over the confirmation is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_MERGE_EXCHANGE_SIGNATURE_INVALID = 1879,\n\n\n /**\n * The exchange of the target account is not a partner of this exchange.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MERGE_PURSE_PARTNER_UNKNOWN = 1880,\n\n\n /**\n * The signature affirming the new partner is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_ADD_PARTNER_SIGNATURE_INVALID = 1890,\n\n\n /**\n * Conflicting data for the partner already exists with the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_MANAGEMENT_ADD_PARTNER_DATA_CONFLICT = 1891,\n\n\n /**\n * The auditor signature over the denomination meta data is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_AUDITORS_AUDITOR_SIGNATURE_INVALID = 1900,\n\n\n /**\n * The auditor that was specified is unknown to this exchange.\n * Returned with an HTTP status code of #MHD_HTTP_PRECONDITION_FAILED (412).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_AUDITORS_AUDITOR_UNKNOWN = 1901,\n\n\n /**\n * The auditor that was specified is no longer used by this exchange.\n * Returned with an HTTP status code of #MHD_HTTP_GONE (410).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_AUDITORS_AUDITOR_INACTIVE = 1902,\n\n\n /**\n * The signature affirming the wallet's KYC request was invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_KYC_WALLET_SIGNATURE_INVALID = 1925,\n\n\n /**\n * The exchange received an unexpected malformed response from its KYC backend.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_GATEWAY (502).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_KYC_PROOF_BACKEND_INVALID_RESPONSE = 1926,\n\n\n /**\n * The backend signaled an unexpected failure.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_GATEWAY (502).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_KYC_PROOF_BACKEND_ERROR = 1927,\n\n\n /**\n * The backend signaled an authorization failure.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_KYC_PROOF_BACKEND_AUTHORIZATION_FAILED = 1928,\n\n\n /**\n * The exchange is unaware of having made an the authorization request.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_KYC_PROOF_REQUEST_UNKNOWN = 1929,\n\n\n /**\n * The payto-URI hash did not match. Hence the request was denied.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_KYC_CHECK_AUTHORIZATION_FAILED = 1930,\n\n\n /**\n * The request used a logic specifier that is not known to the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_KYC_GENERIC_LOGIC_UNKNOWN = 1931,\n\n\n /**\n * The request requires a logic which is no longer configured at the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_KYC_GENERIC_LOGIC_GONE = 1932,\n\n\n /**\n * The logic plugin had a bug in its interaction with the KYC provider.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_KYC_GENERIC_LOGIC_BUG = 1933,\n\n\n /**\n * The exchange could not process the request with its KYC provider because the provider refused access to the service. This indicates some configuration issue at the Taler exchange operator.\n * Returned with an HTTP status code of #MHD_HTTP_NETWORK_AUTHENTICATION_REQUIRED (511).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_KYC_GENERIC_PROVIDER_ACCESS_REFUSED = 1934,\n\n\n /**\n * There was a timeout in the interaction between the exchange and the KYC provider. The most likely cause is some networking problem. Trying again later might succeed.\n * Returned with an HTTP status code of #MHD_HTTP_GATEWAY_TIMEOUT (504).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_KYC_GENERIC_PROVIDER_TIMEOUT = 1935,\n\n\n /**\n * The KYC provider responded with a status that was completely unexpected by the KYC logic of the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_GATEWAY (502).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_KYC_GENERIC_PROVIDER_UNEXPECTED_REPLY = 1936,\n\n\n /**\n * The rate limit of the exchange at the KYC provider has been exceeded. Trying much later might work.\n * Returned with an HTTP status code of #MHD_HTTP_SERVICE_UNAVAILABLE (503).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_KYC_GENERIC_PROVIDER_RATE_LIMIT_EXCEEDED = 1937,\n\n\n /**\n * The request to the webhook lacked proper authorization or authentication data.\n * Returned with an HTTP status code of #MHD_HTTP_UNAUTHORIZED (401).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_KYC_WEBHOOK_UNAUTHORIZED = 1938,\n\n\n /**\n * The exchange does not know a contract under the given contract public key.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_CONTRACTS_UNKNOWN = 1950,\n\n\n /**\n * The URL does not encode a valid exchange public key in its path.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_CONTRACTS_INVALID_CONTRACT_PUB = 1951,\n\n\n /**\n * The returned encrypted contract did not decrypt.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_CONTRACTS_DECRYPTION_FAILED = 1952,\n\n\n /**\n * The signature on the encrypted contract did not validate.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_CONTRACTS_SIGNATURE_INVALID = 1953,\n\n\n /**\n * The decrypted contract was malformed.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_CONTRACTS_DECODING_FAILED = 1954,\n\n\n /**\n * A coin signature for a deposit into the purse is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_DEPOSIT_COIN_SIGNATURE_INVALID = 1975,\n\n\n /**\n * It is too late to deposit coins into the purse.\n * Returned with an HTTP status code of #MHD_HTTP_GONE (410).\n * (A value of 0 indicates that the error is generated client-side).\n */\n EXCHANGE_PURSE_DEPOSIT_DECIDED_ALREADY = 1976,\n\n\n /**\n * The backend could not find the merchant instance specified in the request.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GENERIC_INSTANCE_UNKNOWN = 2000,\n\n\n /**\n * The start and end-times in the wire fee structure leave a hole. This is not allowed.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GENERIC_HOLE_IN_WIRE_FEE_STRUCTURE = 2001,\n\n\n /**\n * The merchant was unable to obtain a valid answer to /wire from the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_GATEWAY (502).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GENERIC_EXCHANGE_WIRE_REQUEST_FAILED = 2002,\n\n\n /**\n * The proposal is not known to the backend.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GENERIC_ORDER_UNKNOWN = 2005,\n\n\n /**\n * The order provided to the backend could not be completed, because a product to be completed via inventory data is not actually in our inventory.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GENERIC_PRODUCT_UNKNOWN = 2006,\n\n\n /**\n * The tip ID is unknown. This could happen if the tip has expired.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GENERIC_TIP_ID_UNKNOWN = 2007,\n\n\n /**\n * The contract obtained from the merchant backend was malformed.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GENERIC_DB_CONTRACT_CONTENT_INVALID = 2008,\n\n\n /**\n * The order we found does not match the provided contract hash.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GENERIC_CONTRACT_HASH_DOES_NOT_MATCH_ORDER = 2009,\n\n\n /**\n * The exchange failed to provide a valid response to the merchant's /keys request.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_GATEWAY (502).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GENERIC_EXCHANGE_KEYS_FAILURE = 2010,\n\n\n /**\n * The exchange failed to respond to the merchant on time.\n * Returned with an HTTP status code of #MHD_HTTP_GATEWAY_TIMEOUT (504).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GENERIC_EXCHANGE_TIMEOUT = 2011,\n\n\n /**\n * The merchant failed to talk to the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GENERIC_EXCHANGE_CONNECT_FAILURE = 2012,\n\n\n /**\n * The exchange returned a maformed response.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_GATEWAY (502).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GENERIC_EXCHANGE_REPLY_MALFORMED = 2013,\n\n\n /**\n * The exchange returned an unexpected response status.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_GATEWAY (502).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GENERIC_EXCHANGE_UNEXPECTED_STATUS = 2014,\n\n\n /**\n * The merchant refused the request due to lack of authorization.\n * Returned with an HTTP status code of #MHD_HTTP_UNAUTHORIZED (401).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GENERIC_UNAUTHORIZED = 2015,\n\n\n /**\n * The merchant instance specified in the request was deleted.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GENERIC_INSTANCE_DELETED = 2016,\n\n\n /**\n * The backend could not find the inbound wire transfer specified in the request.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GENERIC_TRANSFER_UNKNOWN = 2017,\n\n\n /**\n * The backend could not find the template(id) because it is not exist.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GENERIC_TEMPLATE_UNKNOWN = 2018,\n\n\n /**\n * The backend could not find the webhook(id) because it is not exist.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GENERIC_WEBHOOK_UNKNOWN = 2019,\n\n\n /**\n * The backend could not find the webhook(serial) because it is not exist.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GENERIC_PENDING_WEBHOOK_UNKNOWN = 2020,\n\n\n /**\n * The exchange failed to provide a valid answer to the tracking request, thus those details are not in the response.\n * Returned with an HTTP status code of #MHD_HTTP_OK (200).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GET_ORDERS_EXCHANGE_TRACKING_FAILURE = 2100,\n\n\n /**\n * The merchant backend failed to construct the request for tracking to the exchange, thus tracking details are not in the response.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GET_ORDERS_ID_EXCHANGE_REQUEST_FAILURE = 2103,\n\n\n /**\n * The merchant backend failed trying to contact the exchange for tracking details, thus those details are not in the response.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GET_ORDERS_ID_EXCHANGE_LOOKUP_START_FAILURE = 2104,\n\n\n /**\n * The claim token used to authenticate the client is invalid for this order.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GET_ORDERS_ID_INVALID_TOKEN = 2105,\n\n\n /**\n * The contract terms hash used to authenticate the client is invalid for this order.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_GET_ORDERS_ID_INVALID_CONTRACT_HASH = 2106,\n\n\n /**\n * The exchange responded saying that funds were insufficient (for example, due to double-spending).\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_INSUFFICIENT_FUNDS = 2150,\n\n\n /**\n * The denomination key used for payment is not listed among the denomination keys of the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_DENOMINATION_KEY_NOT_FOUND = 2151,\n\n\n /**\n * The denomination key used for payment is not audited by an auditor approved by the merchant.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_DENOMINATION_KEY_AUDITOR_FAILURE = 2152,\n\n\n /**\n * There was an integer overflow totaling up the amounts or deposit fees in the payment.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_AMOUNT_OVERFLOW = 2153,\n\n\n /**\n * The deposit fees exceed the total value of the payment.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_FEES_EXCEED_PAYMENT = 2154,\n\n\n /**\n * After considering deposit and wire fees, the payment is insufficient to satisfy the required amount for the contract. The client should revisit the logic used to calculate fees it must cover.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_ACCEPTABLE (406).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_INSUFFICIENT_DUE_TO_FEES = 2155,\n\n\n /**\n * Even if we do not consider deposit and wire fees, the payment is insufficient to satisfy the required amount for the contract.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_ACCEPTABLE (406).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_PAYMENT_INSUFFICIENT = 2156,\n\n\n /**\n * The signature over the contract of one of the coins was invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_COIN_SIGNATURE_INVALID = 2157,\n\n\n /**\n * When we tried to find information about the exchange to issue the deposit, we failed. This usually only happens if the merchant backend is somehow unable to get its own HTTP client logic to work.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_EXCHANGE_LOOKUP_FAILED = 2158,\n\n\n /**\n * The refund deadline in the contract is after the transfer deadline.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_REFUND_DEADLINE_PAST_WIRE_TRANSFER_DEADLINE = 2159,\n\n\n /**\n * The order was already paid (maybe by another wallet).\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_ALREADY_PAID = 2160,\n\n\n /**\n * The payment is too late, the offer has expired.\n * Returned with an HTTP status code of #MHD_HTTP_GONE (410).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_OFFER_EXPIRED = 2161,\n\n\n /**\n * The \"merchant\" field is missing in the proposal data. This is an internal error as the proposal is from the merchant's own database at this point.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_MERCHANT_FIELD_MISSING = 2162,\n\n\n /**\n * Failed to locate merchant's account information matching the wire hash given in the proposal.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_WIRE_HASH_UNKNOWN = 2163,\n\n\n /**\n * The deposit time for the denomination has expired.\n * Returned with an HTTP status code of #MHD_HTTP_GONE (410).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_DENOMINATION_DEPOSIT_EXPIRED = 2165,\n\n\n /**\n * The exchange of the deposited coin charges a wire fee that could not be added to the total (total amount too high).\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_EXCHANGE_WIRE_FEE_ADDITION_FAILED = 2166,\n\n\n /**\n * The contract was not fully paid because of refunds. Note that clients MAY treat this as paid if, for example, contracts must be executed despite of refunds.\n * Returned with an HTTP status code of #MHD_HTTP_PAYMENT_REQUIRED (402).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_REFUNDED = 2167,\n\n\n /**\n * According to our database, we have refunded more than we were paid (which should not be possible).\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_REFUNDS_EXCEED_PAYMENTS = 2168,\n\n\n /**\n * Legacy stuff. Remove me with protocol v1.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n DEAD_QQQ_PAY_MERCHANT_POST_ORDERS_ID_ABORT_REFUND_REFUSED_PAYMENT_COMPLETE = 2169,\n\n\n /**\n * The payment failed at the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_GATEWAY (502).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_EXCHANGE_FAILED = 2170,\n\n\n /**\n * The payment required a minimum age but one of the coins (of a denomination with support for age restriction) did not provide any age_commitment.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_AGE_COMMITMENT_MISSING = 2171,\n\n\n /**\n * The payment required a minimum age but one of the coins provided an age_commitment that contained a wrong number of public keys compared to the number of age groups defined in the denomination of the coin.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_AGE_COMMITMENT_SIZE_MISMATCH = 2172,\n\n\n /**\n * The payment required a minimum age but one of the coins provided a minimum_age_sig that couldn't be verified with the given age_commitment for that particular minimum age.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_AGE_VERIFICATION_FAILED = 2173,\n\n\n /**\n * The payment required no minimum age but one of the coins (of a denomination with support for age restriction) did not provide the required h_age_commitment.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAY_AGE_COMMITMENT_HASH_MISSING = 2174,\n\n\n /**\n * The contract hash does not match the given order ID.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAID_CONTRACT_HASH_MISMATCH = 2200,\n\n\n /**\n * The signature of the merchant is not valid for the given contract hash.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_PAID_COIN_SIGNATURE_INVALID = 2201,\n\n\n /**\n * The merchant failed to send the exchange the refund request.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_ABORT_EXCHANGE_REFUND_FAILED = 2251,\n\n\n /**\n * The merchant failed to find the exchange to process the lookup.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_ABORT_EXCHANGE_LOOKUP_FAILED = 2252,\n\n\n /**\n * The merchant could not find the contract.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_ABORT_CONTRACT_NOT_FOUND = 2253,\n\n\n /**\n * The payment was already completed and thus cannot be aborted anymore.\n * Returned with an HTTP status code of #MHD_HTTP_PRECONDITION_FAILED (412).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_ABORT_REFUND_REFUSED_PAYMENT_COMPLETE = 2254,\n\n\n /**\n * The hash provided by the wallet does not match the order.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_ABORT_CONTRACT_HASH_MISSMATCH = 2255,\n\n\n /**\n * The array of coins cannot be empty.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_ABORT_COINS_ARRAY_EMPTY = 2256,\n\n\n /**\n * We could not claim the order because the backend is unaware of it.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_CLAIM_NOT_FOUND = 2300,\n\n\n /**\n * We could not claim the order because someone else claimed it first.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_CLAIM_ALREADY_CLAIMED = 2301,\n\n\n /**\n * The client-side experienced an internal failure.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_CLAIM_CLIENT_INTERNAL_FAILURE = 2302,\n\n\n /**\n * The backend failed to sign the refund request.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_ORDERS_ID_REFUND_SIGNATURE_FAILED = 2350,\n\n\n /**\n * The client failed to unblind the signature returned by the merchant.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_TIP_PICKUP_UNBLIND_FAILURE = 2400,\n\n\n /**\n * The exchange returned a failure code for the withdraw operation.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_GATEWAY (502).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_TIP_PICKUP_EXCHANGE_ERROR = 2403,\n\n\n /**\n * The merchant failed to add up the amounts to compute the pick up value.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_TIP_PICKUP_SUMMATION_FAILED = 2404,\n\n\n /**\n * The tip expired.\n * Returned with an HTTP status code of #MHD_HTTP_GONE (410).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_TIP_PICKUP_HAS_EXPIRED = 2405,\n\n\n /**\n * The requested withdraw amount exceeds the amount remaining to be picked up.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_TIP_PICKUP_AMOUNT_EXCEEDS_TIP_REMAINING = 2406,\n\n\n /**\n * The merchant did not find the specified denomination key in the exchange's key set.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_TIP_PICKUP_DENOMINATION_UNKNOWN = 2407,\n\n\n /**\n * The backend lacks a wire transfer method configuration option for the given instance. Thus, this instance is unavailable (not findable for creating new orders).\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_ORDERS_INSTANCE_CONFIGURATION_LACKS_WIRE = 2500,\n\n\n /**\n * The proposal had no timestamp and the backend failed to obtain the local time. Likely to be an internal error.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_ORDERS_NO_LOCALTIME = 2501,\n\n\n /**\n * The order provided to the backend could not be parsed, some required fields were missing or ill-formed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_ORDERS_PROPOSAL_PARSE_ERROR = 2502,\n\n\n /**\n * The backend encountered an error: the proposal already exists.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_ORDERS_ALREADY_EXISTS = 2503,\n\n\n /**\n * The request is invalid: the wire deadline is before the refund deadline.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_ORDERS_REFUND_AFTER_WIRE_DEADLINE = 2504,\n\n\n /**\n * The request is invalid: a delivery date was given, but it is in the past.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_ORDERS_DELIVERY_DATE_IN_PAST = 2505,\n\n\n /**\n * The request is invalid: the wire deadline for the order would be \"never\".\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_ORDERS_WIRE_DEADLINE_IS_NEVER = 2506,\n\n\n /**\n * The request is invalid: a payment deadline was given, but it is in the past.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_ORDERS_PAY_DEADLINE_IN_PAST = 2507,\n\n\n /**\n * The request is invalid: a refund deadline was given, but it is in the past.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_ORDERS_REFUND_DEADLINE_IN_PAST = 2508,\n\n\n /**\n * One of the paths to forget is malformed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_PATCH_ORDERS_ID_FORGET_PATH_SYNTAX_INCORRECT = 2510,\n\n\n /**\n * One of the paths to forget was not marked as forgettable.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_PATCH_ORDERS_ID_FORGET_PATH_NOT_FORGETTABLE = 2511,\n\n\n /**\n * The order provided to the backend could not be deleted, our offer is still valid and awaiting payment.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_DELETE_ORDERS_AWAITING_PAYMENT = 2520,\n\n\n /**\n * The order provided to the backend could not be deleted as the order was already paid.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_DELETE_ORDERS_ALREADY_PAID = 2521,\n\n\n /**\n * The amount to be refunded is inconsistent: either is lower than the previous amount being awarded, or it is too big to be paid back. In this second case, the fault stays on the business dept. side.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_ORDERS_ID_REFUND_INCONSISTENT_AMOUNT = 2530,\n\n\n /**\n * The frontend gave an unpaid order id to issue the refund to.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_ORDERS_ID_REFUND_ORDER_UNPAID = 2531,\n\n\n /**\n * The refund delay was set to 0 and thus no refunds are allowed for this order.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_ORDERS_ID_REFUND_NOT_ALLOWED_BY_CONTRACT = 2532,\n\n\n /**\n * The exchange says it does not know this transfer.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_GATEWAY (502).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_TRANSFERS_EXCHANGE_UNKNOWN = 2550,\n\n\n /**\n * We internally failed to execute the /track/transfer request.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_GATEWAY (502).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_TRANSFERS_REQUEST_ERROR = 2551,\n\n\n /**\n * The amount transferred differs between what was submitted and what the exchange claimed.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_TRANSFERS_CONFLICTING_TRANSFERS = 2552,\n\n\n /**\n * The exchange gave conflicting information about a coin which has been wire transferred.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_TRANSFERS_CONFLICTING_REPORTS = 2553,\n\n\n /**\n * The exchange charged a different wire fee than what it originally advertised, and it is higher.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_GATEWAY (502).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_TRANSFERS_BAD_WIRE_FEE = 2554,\n\n\n /**\n * We did not find the account that the transfer was made to.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_TRANSFERS_ACCOUNT_NOT_FOUND = 2555,\n\n\n /**\n * The backend could not delete the transfer as the echange already replied to our inquiry about it and we have integrated the result.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_DELETE_TRANSFERS_ALREADY_CONFIRMED = 2556,\n\n\n /**\n * The backend was previously informed about a wire transfer with the same ID but a different amount. Multiple wire transfers with the same ID are not allowed. If the new amount is correct, the old transfer should first be deleted.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_TRANSFERS_CONFLICTING_SUBMISSION = 2557,\n\n\n /**\n * The merchant backend cannot create an instance under the given identifier as one already exists. Use PATCH to modify the existing entry.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_INSTANCES_ALREADY_EXISTS = 2600,\n\n\n /**\n * The merchant backend cannot create an instance because the authentication configuration field is malformed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_INSTANCES_BAD_AUTH = 2601,\n\n\n /**\n * The merchant backend cannot update an instance's authentication settings because the provided authentication settings are malformed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_INSTANCE_AUTH_BAD_AUTH = 2602,\n\n\n /**\n * The merchant backend cannot create an instance under the given identifier, the previous one was deleted but must be purged first.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_INSTANCES_PURGE_REQUIRED = 2603,\n\n\n /**\n * The merchant backend cannot update an instance under the given identifier, the previous one was deleted but must be purged first.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_PATCH_INSTANCES_PURGE_REQUIRED = 2625,\n\n\n /**\n * The product ID exists.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_PRODUCTS_CONFLICT_PRODUCT_EXISTS = 2650,\n\n\n /**\n * The update would have reduced the total amount of product lost, which is not allowed.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_PATCH_PRODUCTS_TOTAL_LOST_REDUCED = 2660,\n\n\n /**\n * The update would have mean that more stocks were lost than what remains from total inventory after sales, which is not allowed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_PATCH_PRODUCTS_TOTAL_LOST_EXCEEDS_STOCKS = 2661,\n\n\n /**\n * The update would have reduced the total amount of product in stock, which is not allowed.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_PATCH_PRODUCTS_TOTAL_STOCKED_REDUCED = 2662,\n\n\n /**\n * The update would have reduced the total amount of product sold, which is not allowed.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_PATCH_PRODUCTS_TOTAL_SOLD_REDUCED = 2663,\n\n\n /**\n * The lock request is for more products than we have left (unlocked) in stock.\n * Returned with an HTTP status code of #MHD_HTTP_GONE (410).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_PRODUCTS_LOCK_INSUFFICIENT_STOCKS = 2670,\n\n\n /**\n * The deletion request is for a product that is locked.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_DELETE_PRODUCTS_CONFLICTING_LOCK = 2680,\n\n\n /**\n * The requested wire method is not supported by the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_RESERVES_UNSUPPORTED_WIRE_METHOD = 2700,\n\n\n /**\n * The reserve could not be deleted because it is unknown.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_DELETE_RESERVES_NO_SUCH_RESERVE = 2710,\n\n\n /**\n * The reserve that was used to fund the tips has expired.\n * Returned with an HTTP status code of #MHD_HTTP_GONE (410).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_TIP_AUTHORIZE_RESERVE_EXPIRED = 2750,\n\n\n /**\n * The reserve that was used to fund the tips was not found in the DB.\n * Returned with an HTTP status code of #MHD_HTTP_SERVICE_UNAVAILABLE (503).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_TIP_AUTHORIZE_RESERVE_UNKNOWN = 2751,\n\n\n /**\n * The backend knows the instance that was supposed to support the tip, and it was configured for tipping. However, the funds remaining are insufficient to cover the tip, and the merchant should top up the reserve.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_TIP_AUTHORIZE_INSUFFICIENT_FUNDS = 2752,\n\n\n /**\n * The backend failed to find a reserve needed to authorize the tip.\n * Returned with an HTTP status code of #MHD_HTTP_SERVICE_UNAVAILABLE (503).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_TIP_AUTHORIZE_RESERVE_NOT_FOUND = 2753,\n\n\n /**\n * The merchant backend encountered a failure in computing the deposit total.\n * Returned with an HTTP status code of #MHD_HTTP_OK (200).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_GET_ORDERS_ID_AMOUNT_ARITHMETIC_FAILURE = 2800,\n\n\n /**\n * The template ID already exists.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_TEMPLATES_CONFLICT_TEMPLATE_EXISTS = 2850,\n\n\n /**\n * Amount given in the using template and in the template contract. There is a conflict.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_USING_TEMPLATES_AMOUNT_CONFLICT_TEMPLATES_CONTRACT_AMOUNT = 2860,\n\n\n /**\n * Subject given in the using template and in the template contract. There is a conflict.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_USING_TEMPLATES_SUMMARY_CONFLICT_TEMPLATES_CONTRACT_SUBJECT = 2861,\n\n\n /**\n * Amount not given in the using template and in the template contract. There is a conflict.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_USING_TEMPLATES_NO_AMOUNT = 2862,\n\n\n /**\n * Subject not given in the using template and in the template contract. There is a conflict.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_POST_USING_TEMPLATES_NO_SUMMARY = 2863,\n\n\n /**\n * The webhook ID elready exists.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_WEBHOOKS_CONFLICT_WEBHOOK_EXISTS = 2900,\n\n\n /**\n * The webhook serial elready exists.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n MERCHANT_PRIVATE_POST_PENDING_WEBHOOKS_CONFLICT_PENDING_WEBHOOK_EXISTS = 2910,\n\n\n /**\n * The signature from the exchange on the deposit confirmation is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n AUDITOR_DEPOSIT_CONFIRMATION_SIGNATURE_INVALID = 3100,\n\n\n /**\n * The exchange key used for the signature on the deposit confirmation was revoked.\n * Returned with an HTTP status code of #MHD_HTTP_GONE (410).\n * (A value of 0 indicates that the error is generated client-side).\n */\n AUDITOR_EXCHANGE_SIGNING_KEY_REVOKED = 3101,\n\n\n /**\n * Wire transfer attempted with credit and debit party being the same bank account.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n BANK_SAME_ACCOUNT = 5101,\n\n\n /**\n * Wire transfer impossible, due to financial limitation of the party that attempted the payment.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n BANK_UNALLOWED_DEBIT = 5102,\n\n\n /**\n * Negative numbers are not allowed (as value and/or fraction) to instantiate an amount object.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n BANK_NEGATIVE_NUMBER_AMOUNT = 5103,\n\n\n /**\n * A too big number was used (as value and/or fraction) to instantiate an amount object.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n BANK_NUMBER_TOO_BIG = 5104,\n\n\n /**\n * Could not login for the requested operation.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n BANK_LOGIN_FAILED = 5105,\n\n\n /**\n * The bank account referenced in the requested operation was not found.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n BANK_UNKNOWN_ACCOUNT = 5106,\n\n\n /**\n * The transaction referenced in the requested operation (typically a reject operation), was not found.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n BANK_TRANSACTION_NOT_FOUND = 5107,\n\n\n /**\n * Bank received a malformed amount string.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n BANK_BAD_FORMAT_AMOUNT = 5108,\n\n\n /**\n * The client does not own the account credited by the transaction which is to be rejected, so it has no rights do reject it.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n BANK_REJECT_NO_RIGHTS = 5109,\n\n\n /**\n * This error code is returned when no known exception types captured the exception.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n BANK_UNMANAGED_EXCEPTION = 5110,\n\n\n /**\n * This error code is used for all those exceptions that do not really need a specific error code to return to the client. Used for example when a client is trying to register with a unavailable username.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n BANK_SOFT_EXCEPTION = 5111,\n\n\n /**\n * The request UID for a request to transfer funds has already been used, but with different details for the transfer.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n BANK_TRANSFER_REQUEST_UID_REUSED = 5112,\n\n\n /**\n * The withdrawal operation already has a reserve selected. The current request conflicts with the existing selection.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n BANK_WITHDRAWAL_OPERATION_RESERVE_SELECTION_CONFLICT = 5113,\n\n\n /**\n * The wire transfer subject duplicates an existing reserve public key. But wire transfer subjects must be unique.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n BANK_DUPLICATE_RESERVE_PUB_SUBJECT = 5114,\n\n\n /**\n * The client requested a transaction that is so far in the past, that it has been forgotten by the bank.\n * Returned with an HTTP status code of #MHD_HTTP_GONE (410).\n * (A value of 0 indicates that the error is generated client-side).\n */\n BANK_ANCIENT_TRANSACTION_GONE = 5115,\n\n\n /**\n * The client attempted to abort a transaction that was already confirmed.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n BANK_ABORT_CONFIRM_CONFLICT = 5116,\n\n\n /**\n * The client attempted to confirm a transaction that was already aborted.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n BANK_CONFIRM_ABORT_CONFLICT = 5117,\n\n\n /**\n * The client attempted to register an account with the same name.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n BANK_REGISTER_CONFLICT = 5118,\n\n\n /**\n * The client attempted to confirm a withdrawal operation before the wallet posted the required details.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n BANK_POST_WITHDRAWAL_OPERATION_REQUIRED = 5119,\n\n\n /**\n * The sync service failed find the account in its database.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n SYNC_ACCOUNT_UNKNOWN = 6100,\n\n\n /**\n * The SHA-512 hash provided in the If-None-Match header is malformed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n SYNC_BAD_IF_NONE_MATCH = 6101,\n\n\n /**\n * The SHA-512 hash provided in the If-Match header is malformed or missing.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n SYNC_BAD_IF_MATCH = 6102,\n\n\n /**\n * The signature provided in the \"Sync-Signature\" header is malformed or missing.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n SYNC_BAD_SYNC_SIGNATURE = 6103,\n\n\n /**\n * The signature provided in the \"Sync-Signature\" header does not match the account, old or new Etags.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n SYNC_INVALID_SIGNATURE = 6104,\n\n\n /**\n * The \"Content-length\" field for the upload is not a number.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n SYNC_MALFORMED_CONTENT_LENGTH = 6105,\n\n\n /**\n * The \"Content-length\" field for the upload is too big based on the server's terms of service.\n * Returned with an HTTP status code of #MHD_HTTP_PAYLOAD_TOO_LARGE (413).\n * (A value of 0 indicates that the error is generated client-side).\n */\n SYNC_EXCESSIVE_CONTENT_LENGTH = 6106,\n\n\n /**\n * The server is out of memory to handle the upload. Trying again later may succeed.\n * Returned with an HTTP status code of #MHD_HTTP_PAYLOAD_TOO_LARGE (413).\n * (A value of 0 indicates that the error is generated client-side).\n */\n SYNC_OUT_OF_MEMORY_ON_CONTENT_LENGTH = 6107,\n\n\n /**\n * The uploaded data does not match the Etag.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n SYNC_INVALID_UPLOAD = 6108,\n\n\n /**\n * HTTP server experienced a timeout while awaiting promised payment.\n * Returned with an HTTP status code of #MHD_HTTP_REQUEST_TIMEOUT (408).\n * (A value of 0 indicates that the error is generated client-side).\n */\n SYNC_PAYMENT_GENERIC_TIMEOUT = 6109,\n\n\n /**\n * Sync could not setup the payment request with its own backend.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n SYNC_PAYMENT_CREATE_BACKEND_ERROR = 6110,\n\n\n /**\n * The sync service failed find the backup to be updated in its database.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n SYNC_PREVIOUS_BACKUP_UNKNOWN = 6111,\n\n\n /**\n * The \"Content-length\" field for the upload is missing.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n SYNC_MISSING_CONTENT_LENGTH = 6112,\n\n\n /**\n * Sync had problems communicating with its payment backend.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_GATEWAY (502).\n * (A value of 0 indicates that the error is generated client-side).\n */\n SYNC_GENERIC_BACKEND_ERROR = 6113,\n\n\n /**\n * Sync experienced a timeout communicating with its payment backend.\n * Returned with an HTTP status code of #MHD_HTTP_GATEWAY_TIMEOUT (504).\n * (A value of 0 indicates that the error is generated client-side).\n */\n SYNC_GENERIC_BACKEND_TIMEOUT = 6114,\n\n\n /**\n * The wallet does not implement a version of the exchange protocol that is compatible with the protocol version of the exchange.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_IMPLEMENTED (501).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_EXCHANGE_PROTOCOL_VERSION_INCOMPATIBLE = 7000,\n\n\n /**\n * The wallet encountered an unexpected exception. This is likely a bug in the wallet implementation.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_UNEXPECTED_EXCEPTION = 7001,\n\n\n /**\n * The wallet received a response from a server, but the response can't be parsed.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_RECEIVED_MALFORMED_RESPONSE = 7002,\n\n\n /**\n * The wallet tried to make a network request, but it received no response.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_NETWORK_ERROR = 7003,\n\n\n /**\n * The wallet tried to make a network request, but it was throttled.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_HTTP_REQUEST_THROTTLED = 7004,\n\n\n /**\n * The wallet made a request to a service, but received an error response it does not know how to handle.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_UNEXPECTED_REQUEST_ERROR = 7005,\n\n\n /**\n * The denominations offered by the exchange are insufficient. Likely the exchange is badly configured or not maintained.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_EXCHANGE_DENOMINATIONS_INSUFFICIENT = 7006,\n\n\n /**\n * The wallet does not support the operation requested by a client.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_CORE_API_OPERATION_UNKNOWN = 7007,\n\n\n /**\n * The given taler://pay URI is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_INVALID_TALER_PAY_URI = 7008,\n\n\n /**\n * The signature on a coin by the exchange's denomination key is invalid after unblinding it.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_EXCHANGE_COIN_SIGNATURE_INVALID = 7009,\n\n\n /**\n * The exchange does not know about the reserve (yet), and thus withdrawal can't progress.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_EXCHANGE_WITHDRAW_RESERVE_UNKNOWN_AT_EXCHANGE = 7010,\n\n\n /**\n * The wallet core service is not available.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_CORE_NOT_AVAILABLE = 7011,\n\n\n /**\n * The bank has aborted a withdrawal operation, and thus a withdrawal can't complete.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_WITHDRAWAL_OPERATION_ABORTED_BY_BANK = 7012,\n\n\n /**\n * An HTTP request made by the wallet timed out.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_HTTP_REQUEST_GENERIC_TIMEOUT = 7013,\n\n\n /**\n * The order has already been claimed by another wallet.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_ORDER_ALREADY_CLAIMED = 7014,\n\n\n /**\n * A group of withdrawal operations (typically for the same reserve at the same exchange) has errors and will be tried again later.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_WITHDRAWAL_GROUP_INCOMPLETE = 7015,\n\n\n /**\n * The signature on a coin by the exchange's denomination key (obtained through the merchant via tipping) is invalid after unblinding it.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_TIPPING_COIN_SIGNATURE_INVALID = 7016,\n\n\n /**\n * The wallet does not implement a version of the bank integration API that is compatible with the version offered by the bank.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_BANK_INTEGRATION_PROTOCOL_VERSION_INCOMPATIBLE = 7017,\n\n\n /**\n * The wallet processed a taler://pay URI, but the merchant base URL in the downloaded contract terms does not match the merchant base URL derived from the URI.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_CONTRACT_TERMS_BASE_URL_MISMATCH = 7018,\n\n\n /**\n * The merchant's signature on the contract terms is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_CONTRACT_TERMS_SIGNATURE_INVALID = 7019,\n\n\n /**\n * The contract terms given by the merchant are malformed.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_CONTRACT_TERMS_MALFORMED = 7020,\n\n\n /**\n * A pending operation failed, and thus the request can't be completed.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_PENDING_OPERATION_FAILED = 7021,\n\n\n /**\n * A payment was attempted, but the merchant had an internal server error (5xx).\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_PAY_MERCHANT_SERVER_ERROR = 7022,\n\n\n /**\n * The crypto worker failed.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_CRYPTO_WORKER_ERROR = 7023,\n\n\n /**\n * The crypto worker received a bad request.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_CRYPTO_WORKER_BAD_REQUEST = 7024,\n\n\n /**\n * A KYC step is required before withdrawal can proceed.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_WITHDRAWAL_KYC_REQUIRED = 7025,\n\n\n /**\n * The wallet does not have sufficient balance to create a deposit group.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_DEPOSIT_GROUP_INSUFFICIENT_BALANCE = 7026,\n\n\n /**\n * The wallet does not have sufficient balance to create a peer push payment.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_PEER_PUSH_PAYMENT_INSUFFICIENT_BALANCE = 7027,\n\n\n /**\n * The wallet does not have sufficient balance to pay for an invoice.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_PEER_PULL_PAYMENT_INSUFFICIENT_BALANCE = 7028,\n\n\n /**\n * A group of refresh operations has errors and will be tried again later.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n WALLET_REFRESH_GROUP_INCOMPLETE = 7029,\n\n\n /**\n * We encountered a timeout with our payment backend.\n * Returned with an HTTP status code of #MHD_HTTP_GATEWAY_TIMEOUT (504).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_GENERIC_BACKEND_TIMEOUT = 8000,\n\n\n /**\n * The backend requested payment, but the request is malformed.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_GENERIC_INVALID_PAYMENT_REQUEST = 8001,\n\n\n /**\n * The backend got an unexpected reply from the payment processor.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_GATEWAY (502).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_GENERIC_BACKEND_ERROR = 8002,\n\n\n /**\n * The \"Content-length\" field for the upload is missing.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_GENERIC_MISSING_CONTENT_LENGTH = 8003,\n\n\n /**\n * The \"Content-length\" field for the upload is malformed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_GENERIC_MALFORMED_CONTENT_LENGTH = 8004,\n\n\n /**\n * The backend failed to setup an order with the payment processor.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_GATEWAY (502).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_GENERIC_ORDER_CREATE_BACKEND_ERROR = 8005,\n\n\n /**\n * The backend was not authorized to check for payment with the payment processor.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_GENERIC_PAYMENT_CHECK_UNAUTHORIZED = 8006,\n\n\n /**\n * The backend could not check payment status with the payment processor.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_GENERIC_PAYMENT_CHECK_START_FAILED = 8007,\n\n\n /**\n * The Anastasis provider could not be reached.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_GENERIC_PROVIDER_UNREACHABLE = 8008,\n\n\n /**\n * HTTP server experienced a timeout while awaiting promised payment.\n * Returned with an HTTP status code of #MHD_HTTP_REQUEST_TIMEOUT (408).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_PAYMENT_GENERIC_TIMEOUT = 8009,\n\n\n /**\n * The key share is unknown to the provider.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_TRUTH_UNKNOWN = 8108,\n\n\n /**\n * The authorization method used for the key share is no longer supported by the provider.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_TRUTH_AUTHORIZATION_METHOD_NO_LONGER_SUPPORTED = 8109,\n\n\n /**\n * The client needs to respond to the challenge.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_TRUTH_CHALLENGE_RESPONSE_REQUIRED = 8110,\n\n\n /**\n * The client's response to the challenge was invalid.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_TRUTH_CHALLENGE_FAILED = 8111,\n\n\n /**\n * The backend is not aware of having issued the provided challenge code. Either this is the wrong code, or it has expired.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_TRUTH_CHALLENGE_UNKNOWN = 8112,\n\n\n /**\n * The backend failed to initiate the authorization process.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_TRUTH_AUTHORIZATION_START_FAILED = 8114,\n\n\n /**\n * The authorization succeeded, but the key share is no longer available.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_TRUTH_KEY_SHARE_GONE = 8115,\n\n\n /**\n * The backend forgot the order we asked the client to pay for\n * Returned with an HTTP status code of #MHD_HTTP_BAD_GATEWAY (502).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_TRUTH_ORDER_DISAPPEARED = 8116,\n\n\n /**\n * The backend itself reported a bad exchange interaction.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_GATEWAY (502).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_TRUTH_BACKEND_EXCHANGE_BAD = 8117,\n\n\n /**\n * The backend reported a payment status we did not expect.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_TRUTH_UNEXPECTED_PAYMENT_STATUS = 8118,\n\n\n /**\n * The backend failed to setup the order for payment.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_GATEWAY (502).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_TRUTH_PAYMENT_CREATE_BACKEND_ERROR = 8119,\n\n\n /**\n * The decryption of the key share failed with the provided key.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_TRUTH_DECRYPTION_FAILED = 8120,\n\n\n /**\n * The request rate is too high. The server is refusing requests to guard against brute-force attacks.\n * Returned with an HTTP status code of #MHD_HTTP_TOO_MANY_REQUESTS (429).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_TRUTH_RATE_LIMITED = 8121,\n\n\n /**\n * A request to issue a challenge is not valid for this authentication method.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_TRUTH_CHALLENGE_WRONG_METHOD = 8123,\n\n\n /**\n * The backend failed to store the key share because the UUID is already in use.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_TRUTH_UPLOAD_UUID_EXISTS = 8150,\n\n\n /**\n * The backend failed to store the key share because the authorization method is not supported.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_TRUTH_UPLOAD_METHOD_NOT_SUPPORTED = 8151,\n\n\n /**\n * The provided phone number is not an acceptable number.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_SMS_PHONE_INVALID = 8200,\n\n\n /**\n * Failed to run the SMS transmission helper process.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_SMS_HELPER_EXEC_FAILED = 8201,\n\n\n /**\n * Provider failed to send SMS. Helper terminated with a non-successful result.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_SMS_HELPER_COMMAND_FAILED = 8202,\n\n\n /**\n * The provided email address is not an acceptable address.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_EMAIL_INVALID = 8210,\n\n\n /**\n * Failed to run the E-mail transmission helper process.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_EMAIL_HELPER_EXEC_FAILED = 8211,\n\n\n /**\n * Provider failed to send E-mail. Helper terminated with a non-successful result.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_EMAIL_HELPER_COMMAND_FAILED = 8212,\n\n\n /**\n * The provided postal address is not an acceptable address.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_POST_INVALID = 8220,\n\n\n /**\n * Failed to run the mail transmission helper process.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_POST_HELPER_EXEC_FAILED = 8221,\n\n\n /**\n * Provider failed to send mail. Helper terminated with a non-successful result.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_POST_HELPER_COMMAND_FAILED = 8222,\n\n\n /**\n * The provided IBAN address is not an acceptable IBAN.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_IBAN_INVALID = 8230,\n\n\n /**\n * The provider has not yet received the IBAN wire transfer authorizing the disclosure of the key share.\n * Returned with an HTTP status code of #MHD_HTTP_FORBIDDEN (403).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_IBAN_MISSING_TRANSFER = 8231,\n\n\n /**\n * The backend did not find a TOTP key in the data provided.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_TOTP_KEY_MISSING = 8240,\n\n\n /**\n * The key provided does not satisfy the format restrictions for an Anastasis TOTP key.\n * Returned with an HTTP status code of #MHD_HTTP_CONFLICT (409).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_TOTP_KEY_INVALID = 8241,\n\n\n /**\n * The given if-none-match header is malformed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_POLICY_BAD_IF_NONE_MATCH = 8301,\n\n\n /**\n * The server is out of memory to handle the upload. Trying again later may succeed.\n * Returned with an HTTP status code of #MHD_HTTP_PAYLOAD_TOO_LARGE (413).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_POLICY_OUT_OF_MEMORY_ON_CONTENT_LENGTH = 8304,\n\n\n /**\n * The signature provided in the \"Anastasis-Policy-Signature\" header is malformed or missing.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_POLICY_BAD_SIGNATURE = 8305,\n\n\n /**\n * The given if-match header is malformed.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_POLICY_BAD_IF_MATCH = 8306,\n\n\n /**\n * The uploaded data does not match the Etag.\n * Returned with an HTTP status code of #MHD_HTTP_BAD_REQUEST (400).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_POLICY_INVALID_UPLOAD = 8307,\n\n\n /**\n * The provider is unaware of the requested policy.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_POLICY_NOT_FOUND = 8350,\n\n\n /**\n * The given action is invalid for the current state of the reducer.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_ACTION_INVALID = 8400,\n\n\n /**\n * The given state of the reducer is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_STATE_INVALID = 8401,\n\n\n /**\n * The given input to the reducer is invalid.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_INPUT_INVALID = 8402,\n\n\n /**\n * The selected authentication method does not work for the Anastasis provider.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_AUTHENTICATION_METHOD_NOT_SUPPORTED = 8403,\n\n\n /**\n * The given input and action do not work for the current state.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_INPUT_INVALID_FOR_STATE = 8404,\n\n\n /**\n * We experienced an unexpected failure interacting with the backend.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_BACKEND_FAILURE = 8405,\n\n\n /**\n * The contents of a resource file did not match our expectations.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_RESOURCE_MALFORMED = 8406,\n\n\n /**\n * A required resource file is missing.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_RESOURCE_MISSING = 8407,\n\n\n /**\n * An input did not match the regular expression.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_INPUT_REGEX_FAILED = 8408,\n\n\n /**\n * An input did not match the custom validation logic.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_INPUT_VALIDATION_FAILED = 8409,\n\n\n /**\n * Our attempts to download the recovery document failed with all providers. Most likely the personal information you entered differs from the information you provided during the backup process and you should go back to the previous step. Alternatively, if you used a backup provider that is unknown to this application, you should add that provider manually.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_POLICY_LOOKUP_FAILED = 8410,\n\n\n /**\n * Anastasis provider reported a fatal failure.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_BACKUP_PROVIDER_FAILED = 8411,\n\n\n /**\n * Anastasis provider failed to respond to the configuration request.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_PROVIDER_CONFIG_FAILED = 8412,\n\n\n /**\n * The policy we downloaded is malformed. Must have been a client error while creating the backup.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_POLICY_MALFORMED = 8413,\n\n\n /**\n * We failed to obtain the policy, likely due to a network issue.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_NETWORK_FAILED = 8414,\n\n\n /**\n * The recovered secret did not match the required syntax.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_SECRET_MALFORMED = 8415,\n\n\n /**\n * The challenge data provided is too large for the available providers.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_CHALLENGE_DATA_TOO_BIG = 8416,\n\n\n /**\n * The provided core secret is too large for some of the providers.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_SECRET_TOO_BIG = 8417,\n\n\n /**\n * The provider returned in invalid configuration.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_PROVIDER_INVALID_CONFIG = 8418,\n\n\n /**\n * The reducer encountered an internal error, likely a bug that needs to be reported.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_INTERNAL_ERROR = 8419,\n\n\n /**\n * The reducer already synchronized with all providers.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n ANASTASIS_REDUCER_PROVIDERS_ALREADY_SYNCED = 8420,\n\n\n /**\n * A generic error happened in the LibEuFin nexus. See the enclose details JSON for more information.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n LIBEUFIN_NEXUS_GENERIC_ERROR = 9000,\n\n\n /**\n * An uncaught exception happened in the LibEuFin nexus service.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n LIBEUFIN_NEXUS_UNCAUGHT_EXCEPTION = 9001,\n\n\n /**\n * A generic error happened in the LibEuFin sandbox. See the enclose details JSON for more information.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n LIBEUFIN_SANDBOX_GENERIC_ERROR = 9500,\n\n\n /**\n * An uncaught exception happened in the LibEuFin sandbox service.\n * Returned with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR (500).\n * (A value of 0 indicates that the error is generated client-side).\n */\n LIBEUFIN_SANDBOX_UNCAUGHT_EXCEPTION = 9501,\n\n\n /**\n * This validation method is not supported by the service.\n * Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND (404).\n * (A value of 0 indicates that the error is generated client-side).\n */\n TALDIR_METHOD_NOT_SUPPORTED = 9600,\n\n\n /**\n * Number of allowed attempts for initiating a challenge exceeded.\n * Returned with an HTTP status code of #MHD_HTTP_TOO_MANY_REQUESTS (429).\n * (A value of 0 indicates that the error is generated client-side).\n */\n TALDIR_REGISTER_RATE_LIMITED = 9601,\n\n\n /**\n * End of error code range.\n * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0).\n * (A value of 0 indicates that the error is generated client-side).\n */\n END = 9999,\n\n\n}\n", "/*\n This file is part of GNU Taler\n (C) 2018-2019 GNUnet e.V.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n * Type-safe codecs for converting from/to JSON.\n */\n\n/* eslint-disable @typescript-eslint/ban-types */\n\n/**\n * Error thrown when decoding fails.\n */\nexport class DecodingError extends Error {\n constructor(message: string) {\n super(message);\n Object.setPrototypeOf(this, DecodingError.prototype);\n this.name = \"DecodingError\";\n }\n}\n\n/**\n * Context information to show nicer error messages when decoding fails.\n */\nexport interface Context {\n readonly path?: string[];\n}\n\nexport function renderContext(c?: Context): string {\n const p = c?.path;\n if (p) {\n return p.join(\".\");\n } else {\n return \"(unknown)\";\n }\n}\n\nfunction joinContext(c: Context | undefined, part: string): Context {\n const path = c?.path ?? [];\n return {\n path: path.concat([part]),\n };\n}\n\n/**\n * A codec converts untyped JSON to a typed object.\n */\nexport interface Codec<V> {\n /**\n * Decode untyped JSON to an object of type [[V]].\n */\n readonly decode: (x: any, c?: Context) => V;\n}\n\ntype SingletonRecord<K extends keyof any, V> = { [Y in K]: V };\n\ninterface Prop {\n name: string;\n codec: Codec<any>;\n}\n\ninterface Alternative {\n tagValue: any;\n codec: Codec<any>;\n}\n\nclass ObjectCodecBuilder<OutputType, PartialOutputType> {\n private propList: Prop[] = [];\n\n /**\n * Define a property for the object.\n */\n property<K extends keyof OutputType & string, V extends OutputType[K]>(\n x: K,\n codec: Codec<V>,\n ): ObjectCodecBuilder<OutputType, PartialOutputType & SingletonRecord<K, V>> {\n if (!codec) {\n throw Error(\"inner codec must be defined\");\n }\n this.propList.push({ name: x, codec: codec });\n return this as any;\n }\n\n /**\n * Return the built codec.\n *\n * @param objectDisplayName name of the object that this codec operates on,\n * used in error messages.\n */\n build(objectDisplayName: string): Codec<PartialOutputType> {\n const propList = this.propList;\n return {\n decode(x: any, c?: Context): PartialOutputType {\n if (!c) {\n c = {\n path: [`(${objectDisplayName})`],\n };\n }\n if (typeof x !== \"object\") {\n throw new DecodingError(\n `expected object for ${objectDisplayName} at ${renderContext(\n c,\n )} but got ${typeof x}`,\n );\n }\n const obj: any = {};\n for (const prop of propList) {\n const propRawVal = x[prop.name];\n const propVal = prop.codec.decode(\n propRawVal,\n joinContext(c, prop.name),\n );\n obj[prop.name] = propVal;\n }\n return obj as PartialOutputType;\n },\n };\n }\n}\n\nclass UnionCodecBuilder<\n TargetType,\n TagPropertyLabel extends keyof TargetType,\n CommonBaseType,\n PartialTargetType,\n> {\n private alternatives = new Map<any, Alternative>();\n\n constructor(\n private discriminator: TagPropertyLabel,\n private baseCodec?: Codec<CommonBaseType>,\n ) {}\n\n /**\n * Define a property for the object.\n */\n alternative<V>(\n tagValue: TargetType[TagPropertyLabel],\n codec: Codec<V>,\n ): UnionCodecBuilder<\n TargetType,\n TagPropertyLabel,\n CommonBaseType,\n PartialTargetType | V\n > {\n if (!codec) {\n throw Error(\"inner codec must be defined\");\n }\n this.alternatives.set(tagValue, { codec, tagValue });\n return this as any;\n }\n\n /**\n * Return the built codec.\n *\n * @param objectDisplayName name of the object that this codec operates on,\n * used in error messages.\n */\n build<R extends PartialTargetType & CommonBaseType = never>(\n objectDisplayName: string,\n ): Codec<R> {\n const alternatives = this.alternatives;\n const discriminator = this.discriminator;\n const baseCodec = this.baseCodec;\n return {\n decode(x: any, c?: Context): R {\n if (!c) {\n c = {\n path: [`(${objectDisplayName})`],\n };\n }\n const d = x[discriminator];\n if (d === undefined) {\n throw new DecodingError(\n `expected tag for ${objectDisplayName} at ${renderContext(\n c,\n )}.${String(discriminator)}`,\n );\n }\n const alt = alternatives.get(d);\n if (!alt) {\n throw new DecodingError(\n `unknown tag for ${objectDisplayName} ${d} at ${renderContext(\n c,\n )}.${String(discriminator)}`,\n );\n }\n const altDecoded = alt.codec.decode(x);\n if (baseCodec) {\n const baseDecoded = baseCodec.decode(x, c);\n return { ...baseDecoded, ...altDecoded };\n } else {\n return altDecoded;\n }\n },\n };\n }\n}\n\nexport class UnionCodecPreBuilder<T> {\n discriminateOn<D extends keyof T, B = {}>(\n discriminator: D,\n baseCodec?: Codec<B>,\n ): UnionCodecBuilder<T, D, B, never> {\n return new UnionCodecBuilder<T, D, B, never>(discriminator, baseCodec);\n }\n}\n\n/**\n * Return a builder for a codec that decodes an object with properties.\n */\nexport function buildCodecForObject<T>(): ObjectCodecBuilder<T, {}> {\n return new ObjectCodecBuilder<T, {}>();\n}\n\nexport function buildCodecForUnion<T>(): UnionCodecPreBuilder<T> {\n return new UnionCodecPreBuilder<T>();\n}\n\n/**\n * Return a codec for a mapping from a string to values described by the inner codec.\n */\nexport function codecForMap<T>(\n innerCodec: Codec<T>,\n): Codec<{ [x: string]: T }> {\n if (!innerCodec) {\n throw Error(\"inner codec must be defined\");\n }\n return {\n decode(x: any, c?: Context): { [x: string]: T } {\n const map: { [x: string]: T } = {};\n if (typeof x !== \"object\") {\n throw new DecodingError(`expected object at ${renderContext(c)}`);\n }\n for (const i in x) {\n map[i] = innerCodec.decode(x[i], joinContext(c, `[${i}]`));\n }\n return map;\n },\n };\n}\n\n/**\n * Return a codec for a list, containing values described by the inner codec.\n */\nexport function codecForList<T>(innerCodec: Codec<T>): Codec<T[]> {\n if (!innerCodec) {\n throw Error(\"inner codec must be defined\");\n }\n return {\n decode(x: any, c?: Context): T[] {\n const arr: T[] = [];\n if (!Array.isArray(x)) {\n throw new DecodingError(`expected array at ${renderContext(c)}`);\n }\n for (const i in x) {\n arr.push(innerCodec.decode(x[i], joinContext(c, `[${i}]`)));\n }\n return arr;\n },\n };\n}\n\n/**\n * Return a codec for a value that must be a number.\n */\nexport function codecForNumber(): Codec<number> {\n return {\n decode(x: any, c?: Context): number {\n if (typeof x === \"number\") {\n return x;\n }\n throw new DecodingError(\n `expected number at ${renderContext(c)} but got ${typeof x}`,\n );\n },\n };\n}\n\n/**\n * Return a codec for a value that must be a number.\n */\nexport function codecForBoolean(): Codec<boolean> {\n return {\n decode(x: any, c?: Context): boolean {\n if (typeof x === \"boolean\") {\n return x;\n }\n throw new DecodingError(\n `expected boolean at ${renderContext(c)} but got ${typeof x}`,\n );\n },\n };\n}\n\n/**\n * Return a codec for a value that must be a string.\n */\nexport function codecForString(): Codec<string> {\n return {\n decode(x: any, c?: Context): string {\n if (typeof x === \"string\") {\n return x;\n }\n throw new DecodingError(\n `expected string at ${renderContext(c)} but got ${typeof x}`,\n );\n },\n };\n}\n\n/**\n * Codec that allows any value.\n */\nexport function codecForAny(): Codec<any> {\n return {\n decode(x: any, c?: Context): any {\n return x;\n },\n };\n}\n\n/**\n * Return a codec for a value that must be a string.\n */\nexport function codecForConstString<V extends string>(s: V): Codec<V> {\n return {\n decode(x: any, c?: Context): V {\n if (x === s) {\n return x;\n }\n if (typeof x !== \"string\") {\n throw new DecodingError(\n `expected string constant \"${s}\" at ${renderContext(\n c,\n )} but got ${typeof x}`,\n );\n }\n throw new DecodingError(\n `expected string constant \"${s}\" at ${renderContext(\n c,\n )} but got string value \"${x}\"`,\n );\n },\n };\n}\n\n/**\n * Return a codec for a boolean true constant.\n */\nexport function codecForConstTrue(): Codec<true> {\n return {\n decode(x: any, c?: Context): true {\n if (x === true) {\n return x;\n }\n throw new DecodingError(\n `expected boolean true at ${renderContext(c)} but got ${typeof x}`,\n );\n },\n };\n}\n\n/**\n * Return a codec for a boolean true constant.\n */\nexport function codecForConstFalse(): Codec<false> {\n return {\n decode(x: any, c?: Context): false {\n if (x === false) {\n return x;\n }\n throw new DecodingError(\n `expected boolean false at ${renderContext(c)} but got ${typeof x}`,\n );\n },\n };\n}\n\n/**\n * Return a codec for a value that must be a constant number.\n */\nexport function codecForConstNumber<V extends number>(n: V): Codec<V> {\n return {\n decode(x: any, c?: Context): V {\n if (x === n) {\n return x;\n }\n throw new DecodingError(\n `expected number constant \"${n}\" at ${renderContext(\n c,\n )} but got ${typeof x}`,\n );\n },\n };\n}\n\nexport function codecOptional<V>(innerCodec: Codec<V>): Codec<V | undefined> {\n return {\n decode(x: any, c?: Context): V | undefined {\n if (x === undefined || x === null) {\n return undefined;\n }\n return innerCodec.decode(x, c);\n },\n };\n}\n\nexport type CodecType<T> = T extends Codec<infer X> ? X : any;\n\nexport function codecForEither<T extends Array<Codec<unknown>>>(\n ...alts: [...T]\n): Codec<CodecType<T[number]>> {\n return {\n decode(x: any, c?: Context): any {\n for (const alt of alts) {\n try {\n return alt.decode(x, c);\n } catch (e) {\n continue;\n }\n }\n throw new DecodingError(\n `No alternative matched at at ${renderContext(c)}`,\n );\n },\n };\n}\n\nconst x = codecForEither(codecForString(), codecForNumber());\n", "/*\n This file is part of GNU Taler\n (C) 2019 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n * Types and helper functions for dealing with Taler amounts.\n */\n\n/**\n * Imports.\n */\nimport {\n buildCodecForObject,\n codecForString,\n codecForNumber,\n Codec,\n} from \"./codec.js\";\nimport { AmountString } from \"./taler-types.js\";\n\n/**\n * Number of fractional units that one value unit represents.\n */\nexport const amountFractionalBase = 1e8;\n\n/**\n * How many digits behind the comma are required to represent the\n * fractional value in human readable decimal format? Must match\n * lg(fractionalBase)\n */\nexport const amountFractionalLength = 8;\n\n/**\n * Maximum allowed value field of an amount.\n */\nexport const amountMaxValue = 2 ** 52;\n\n/**\n * Non-negative financial amount. Fractional values are expressed as multiples\n * of 1e-8.\n */\nexport interface AmountJson {\n /**\n * Value, must be an integer.\n */\n readonly value: number;\n\n /**\n * Fraction, must be an integer. Represent 1/1e8 of a unit.\n */\n readonly fraction: number;\n\n /**\n * Currency of the amount.\n */\n readonly currency: string;\n}\n\nexport const codecForAmountJson = (): Codec<AmountJson> =>\n buildCodecForObject<AmountJson>()\n .property(\"currency\", codecForString())\n .property(\"value\", codecForNumber())\n .property(\"fraction\", codecForNumber())\n .build(\"AmountJson\");\n\nexport const codecForAmountString = (): Codec<AmountString> => codecForString();\n\n/**\n * Result of a possibly overflowing operation.\n */\nexport interface Result {\n /**\n * Resulting, possibly saturated amount.\n */\n amount: AmountJson;\n /**\n * Was there an over-/underflow?\n */\n saturated: boolean;\n}\n\n/**\n * Type for things that are treated like amounts.\n */\nexport type AmountLike = AmountString | AmountJson;\n\n/**\n * Helper class for dealing with amounts.\n */\nexport class Amounts {\n private constructor() {\n throw Error(\"not instantiable\");\n }\n\n static currencyOf(amount: AmountLike) {\n const amt = Amounts.parseOrThrow(amount);\n return amt.currency;\n }\n\n static zeroOfAmount(amount: AmountLike): AmountJson {\n const amt = Amounts.parseOrThrow(amount);\n return {\n currency: amt.currency,\n fraction: 0,\n value: 0,\n };\n }\n\n /**\n * Get an amount that represents zero units of a currency.\n */\n static zeroOfCurrency(currency: string): AmountJson {\n return {\n currency,\n fraction: 0,\n value: 0,\n };\n }\n\n static jsonifyAmount(amt: AmountLike): AmountJson {\n if (typeof amt === \"string\") {\n return Amounts.parseOrThrow(amt);\n }\n return amt;\n }\n\n static sum(amounts: AmountLike[]): Result {\n if (amounts.length <= 0) {\n throw Error(\"can't sum zero amounts\");\n }\n const jsonAmounts = amounts.map((x) => Amounts.jsonifyAmount(x));\n return Amounts.add(jsonAmounts[0], ...jsonAmounts.slice(1));\n }\n\n static sumOrZero(currency: string, amounts: AmountLike[]): Result {\n if (amounts.length <= 0) {\n return {\n amount: Amounts.zeroOfCurrency(currency),\n saturated: false,\n };\n }\n const jsonAmounts = amounts.map((x) => Amounts.jsonifyAmount(x));\n return Amounts.add(jsonAmounts[0], ...jsonAmounts.slice(1));\n }\n\n /**\n * Add two amounts. Return the result and whether\n * the addition overflowed. The overflow is always handled\n * by saturating and never by wrapping.\n *\n * Throws when currencies don't match.\n */\n static add(first: AmountLike, ...rest: AmountLike[]): Result {\n const firstJ = Amounts.jsonifyAmount(first);\n const currency = firstJ.currency;\n let value =\n firstJ.value + Math.floor(firstJ.fraction / amountFractionalBase);\n if (value > amountMaxValue) {\n return {\n amount: {\n currency,\n value: amountMaxValue,\n fraction: amountFractionalBase - 1,\n },\n saturated: true,\n };\n }\n let fraction = firstJ.fraction % amountFractionalBase;\n for (const x of rest) {\n const xJ = Amounts.jsonifyAmount(x);\n if (xJ.currency.toUpperCase() !== currency.toUpperCase()) {\n throw Error(`Mismatched currency: ${xJ.currency} and ${currency}`);\n }\n\n value =\n value +\n xJ.value +\n Math.floor((fraction + xJ.fraction) / amountFractionalBase);\n fraction = Math.floor((fraction + xJ.fraction) % amountFractionalBase);\n if (value > amountMaxValue) {\n return {\n amount: {\n currency,\n value: amountMaxValue,\n fraction: amountFractionalBase - 1,\n },\n saturated: true,\n };\n }\n }\n return { amount: { currency, value, fraction }, saturated: false };\n }\n\n /**\n * Subtract two amounts. Return the result and whether\n * the subtraction overflowed. The overflow is always handled\n * by saturating and never by wrapping.\n *\n * Throws when currencies don't match.\n */\n static sub(a: AmountLike, ...rest: AmountLike[]): Result {\n const aJ = Amounts.jsonifyAmount(a);\n const currency = aJ.currency;\n let value = aJ.value;\n let fraction = aJ.fraction;\n\n for (const b of rest) {\n const bJ = Amounts.jsonifyAmount(b);\n if (bJ.currency.toUpperCase() !== aJ.currency.toUpperCase()) {\n throw Error(`Mismatched currency: ${bJ.currency} and ${currency}`);\n }\n if (fraction < bJ.fraction) {\n if (value < 1) {\n return {\n amount: { currency, value: 0, fraction: 0 },\n saturated: true,\n };\n }\n value--;\n fraction += amountFractionalBase;\n }\n console.assert(fraction >= bJ.fraction);\n fraction -= bJ.fraction;\n if (value < bJ.value) {\n return { amount: { currency, value: 0, fraction: 0 }, saturated: true };\n }\n value -= bJ.value;\n }\n\n return { amount: { currency, value, fraction }, saturated: false };\n }\n\n /**\n * Compare two amounts. Returns 0 when equal, -1 when a < b\n * and +1 when a > b. Throws when currencies don't match.\n */\n static cmp(a: AmountLike, b: AmountLike): -1 | 0 | 1 {\n a = Amounts.jsonifyAmount(a);\n b = Amounts.jsonifyAmount(b);\n if (a.currency !== b.currency) {\n throw Error(`Mismatched currency: ${a.currency} and ${b.currency}`);\n }\n const av = a.value + Math.floor(a.fraction / amountFractionalBase);\n const af = a.fraction % amountFractionalBase;\n const bv = b.value + Math.floor(b.fraction / amountFractionalBase);\n const bf = b.fraction % amountFractionalBase;\n switch (true) {\n case av < bv:\n return -1;\n case av > bv:\n return 1;\n case af < bf:\n return -1;\n case af > bf:\n return 1;\n case af === bf:\n return 0;\n default:\n throw Error(\"assertion failed\");\n }\n }\n\n /**\n * Create a copy of an amount.\n */\n static copy(a: AmountJson): AmountJson {\n return {\n currency: a.currency,\n fraction: a.fraction,\n value: a.value,\n };\n }\n\n /**\n * Divide an amount. Throws on division by zero.\n */\n static divide(a: AmountJson, n: number): AmountJson {\n if (n === 0) {\n throw Error(`Division by 0`);\n }\n if (n === 1) {\n return { value: a.value, fraction: a.fraction, currency: a.currency };\n }\n const r = a.value % n;\n return {\n currency: a.currency,\n fraction: Math.floor((r * amountFractionalBase + a.fraction) / n),\n value: Math.floor(a.value / n),\n };\n }\n\n /**\n * Check if an amount is non-zero.\n */\n static isNonZero(a: AmountLike): boolean {\n a = Amounts.jsonifyAmount(a);\n return a.value > 0 || a.fraction > 0;\n }\n\n static isZero(a: AmountLike): boolean {\n a = Amounts.jsonifyAmount(a);\n return a.value === 0 && a.fraction === 0;\n }\n\n /**\n * Parse an amount like 'EUR:20.5' for 20 Euros and 50 ct.\n */\n static parse(s: string): AmountJson | undefined {\n const res = s.match(/^([a-zA-Z0-9_*-]+):([0-9]+)([.][0-9]+)?$/);\n if (!res) {\n return undefined;\n }\n const tail = res[3] || \".0\";\n if (tail.length > amountFractionalLength + 1) {\n return undefined;\n }\n const value = Number.parseInt(res[2]);\n if (value > amountMaxValue) {\n return undefined;\n }\n return {\n currency: res[1].toUpperCase(),\n fraction: Math.round(amountFractionalBase * Number.parseFloat(tail)),\n value,\n };\n }\n\n /**\n * Parse amount in standard string form (like 'EUR:20.5'),\n * throw if the input is not a valid amount.\n */\n static parseOrThrow(s: AmountLike): AmountJson {\n if (typeof s === \"object\") {\n if (typeof s.currency !== \"string\") {\n throw Error(\"invalid amount object\");\n }\n if (typeof s.value !== \"number\") {\n throw Error(\"invalid amount object\");\n }\n if (typeof s.fraction !== \"number\") {\n throw Error(\"invalid amount object\");\n }\n return { currency: s.currency, value: s.value, fraction: s.fraction };\n } else if (typeof s === \"string\") {\n const res = Amounts.parse(s);\n if (!res) {\n throw Error(`Can't parse amount: \"${s}\"`);\n }\n return res;\n } else {\n throw Error(\"invalid amount (illegal type)\");\n }\n }\n\n /**\n * Convert a float to a Taler amount.\n * Loss of precision possible.\n */\n static fromFloat(floatVal: number, currency: string): AmountJson {\n return {\n currency,\n fraction: Math.floor(\n (floatVal - Math.floor(floatVal)) * amountFractionalBase,\n ),\n value: Math.floor(floatVal),\n };\n }\n\n static min(a: AmountLike, b: AmountLike): AmountJson {\n const cr = Amounts.cmp(a, b);\n if (cr >= 0) {\n return Amounts.jsonifyAmount(b);\n } else {\n return Amounts.jsonifyAmount(a);\n }\n }\n\n static max(a: AmountLike, b: AmountLike): AmountJson {\n const cr = Amounts.cmp(a, b);\n if (cr >= 0) {\n return Amounts.jsonifyAmount(a);\n } else {\n return Amounts.jsonifyAmount(b);\n }\n }\n\n static mult(a: AmountLike, n: number): Result {\n a = this.jsonifyAmount(a);\n if (!Number.isInteger(n)) {\n throw Error(\"amount can only be multipied by an integer\");\n }\n if (n < 0) {\n throw Error(\"amount can only be multiplied by a positive integer\");\n }\n if (n == 0) {\n return {\n amount: Amounts.zeroOfCurrency(a.currency),\n saturated: false,\n };\n }\n let x = a;\n let acc = Amounts.zeroOfCurrency(a.currency);\n while (n > 1) {\n if (n % 2 == 0) {\n n = n / 2;\n } else {\n n = (n - 1) / 2;\n const r2 = Amounts.add(acc, x);\n if (r2.saturated) {\n return r2;\n }\n acc = r2.amount;\n }\n const r2 = Amounts.add(x, x);\n if (r2.saturated) {\n return r2;\n }\n x = r2.amount;\n }\n return Amounts.add(acc, x);\n }\n\n /**\n * Check if the argument is a valid amount in string form.\n */\n static check(a: any): boolean {\n if (typeof a !== \"string\") {\n return false;\n }\n try {\n const parsedAmount = Amounts.parse(a);\n return !!parsedAmount;\n } catch {\n return false;\n }\n }\n\n /**\n * Convert to standard human-readable string representation that's\n * also used in JSON formats.\n */\n static stringify(a: AmountLike): string {\n a = Amounts.jsonifyAmount(a);\n const s = this.stringifyValue(a);\n\n return `${a.currency}:${s}`;\n }\n\n static isSameCurrency(a1: AmountLike, a2: AmountLike): boolean {\n const x1 = this.jsonifyAmount(a1);\n const x2 = this.jsonifyAmount(a2);\n return x1.currency.toUpperCase() === x2.currency.toUpperCase();\n }\n\n static stringifyValue(a: AmountLike, minFractional = 0): string {\n const aJ = Amounts.jsonifyAmount(a);\n const av = aJ.value + Math.floor(aJ.fraction / amountFractionalBase);\n const af = aJ.fraction % amountFractionalBase;\n let s = av.toString();\n\n if (af || minFractional) {\n s = s + \".\";\n let n = af;\n for (let i = 0; i < amountFractionalLength; i++) {\n if (!n && i >= minFractional) {\n break;\n }\n s = s + Math.floor((n / amountFractionalBase) * 10).toString();\n n = (n * 10) % amountFractionalBase;\n }\n }\n\n return s;\n }\n\n /**\n * Number of fractional digits needed to fully represent the amount\n * @param a amount\n * @returns\n */\n static maxFractionalDigits(a: AmountJson): number {\n if (a.fraction === 0) return 0;\n if (a.fraction < 0) {\n console.error(\"amount fraction can not be negative\", a);\n return 0;\n }\n let i = 0;\n let check = true;\n let rest = a.fraction;\n while (rest > 0 && check) {\n check = rest % 10 === 0;\n rest = rest / 10;\n i++;\n }\n return amountFractionalLength - i + 1;\n }\n}\n", "/*\n This file is part of GNU Taler\n (C) 2020 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n * Type declarations for the backup content format.\n *\n * Contains some redundancy with the other type declarations,\n * as the backup schema must remain very stable and should be self-contained.\n *\n * Future:\n * 1. Ghost spends (coin unexpectedly spent by a wallet with shared data)\n * 2. Ghost withdrawals (reserve unexpectedly emptied by another wallet with shared data)\n * 3. Track losses through re-denomination of payments/refreshes\n * 4. (Feature:) Payments to own bank account and P2P-payments need to be backed up\n * 5. Track last/next update time, so on restore we need to do less work\n * 6. Currency render preferences?\n *\n * Questions:\n * 1. What happens when two backups are merged that have\n * the same coin in different refresh groups?\n * => Both are added, one will eventually fail\n * 2. Should we make more information forgettable? I.e. is\n * the coin selection still relevant for a purchase after the coins\n * are legally expired?\n * => Yes, still needs to be implemented\n * 3. What about re-denominations / re-selection of payment coins?\n * Is it enough to store a clock value for the selection?\n * => Coin derivation should also consider denom pub hash\n *\n * General considerations / decisions:\n * 1. Information about previously occurring errors and\n * retries is never backed up.\n * 2. The ToS text of an exchange is never backed up.\n * 3. Derived information is never backed up (hashed values, public keys\n * when we know the private key).\n *\n * Problems:\n *\n * Withdrawal group fork/merging loses money:\n * - Before the withdrawal happens, wallet forks into two backups.\n * - Both wallets need to re-denominate the withdrawal (unlikely but possible).\n * - Because the backup doesn't store planchets where a withdrawal was attempted,\n * after merging some money will be list.\n * - Fix: backup withdrawal objects also store planchets where withdrawal has been attempted\n *\n * @author Florian Dold <dold@taler.net>\n */\n\n/**\n * Imports.\n */\nimport { DenominationPubKey, UnblindedSignature } from \"./taler-types.js\";\nimport { TalerProtocolDuration, TalerProtocolTimestamp } from \"./time.js\";\n\nexport const BACKUP_TAG = \"gnu-taler-wallet-backup-content\" as const;\n/**\n * Major version. Each increment means a backwards-incompatible change.\n * Typically this means that a custom converter needs to be written.\n */\nexport const BACKUP_VERSION_MAJOR = 1 as const;\n\n/**\n * Minor version. Each increment means that information is added to the backup\n * in a backwards-compatible way.\n *\n * Wallets can always import a smaller minor version than their own backup code version.\n * When importing a bigger version, data loss is possible and the user should be urged to\n * upgrade their wallet first.\n */\nexport const BACKUP_VERSION_MINOR = 1 as const;\n\n/**\n * Type alias for strings that are to be treated like amounts.\n */\ntype BackupAmountString = string;\n\n/**\n * A human-recognizable identifier here that is\n * reasonable unique and assigned the first time the wallet is\n * started/installed, such as:\n *\n * `${wallet-implementation} ${os} ${hostname} (${short-uid})`\n * => e.g. \"GNU Taler Android iceking ABC123\"\n */\ntype DeviceIdString = string;\n\n/**\n * Contract terms JSON.\n */\ntype RawContractTerms = any;\n\n/**\n * Unique identifier for an operation, used to either (a) reference\n * the operation in a tombstone (b) disambiguate conflicting writes.\n */\ntype OperationUid = string;\n\n/**\n * Content of the backup.\n *\n * The contents of the wallet must be serialized in a deterministic\n * way across implementations, so that the normalized backup content\n * JSON is identical when the wallet's content is identical.\n */\nexport interface WalletBackupContentV1 {\n /**\n * Magic constant to identify that this is a backup content JSON.\n */\n schema_id: typeof BACKUP_TAG;\n\n /**\n * Version of the schema.\n */\n schema_version: typeof BACKUP_VERSION_MAJOR;\n\n minor_version: number;\n\n /**\n * Root public key of the wallet. This field is present as\n * a sanity check if the backup content JSON is loaded from file.\n */\n wallet_root_pub: string;\n\n /**\n * Current device identifier that \"owns\" the backup.\n *\n * This identifier allows one wallet to notice when another\n * wallet is \"alive\" and connected to the same sync provider.\n */\n current_device_id: DeviceIdString;\n\n /**\n * Timestamp of the backup.\n *\n * This timestamp should only be advanced if the content\n * of the backup changes.\n */\n timestamp: TalerProtocolTimestamp;\n\n /**\n * Per-exchange data sorted by exchange master public key.\n *\n * Sorted by the exchange public key.\n */\n exchanges: BackupExchange[];\n\n exchange_details: BackupExchangeDetails[];\n\n /**\n * Withdrawal groups.\n *\n * Sorted by the withdrawal group ID.\n */\n withdrawal_groups: BackupWithdrawalGroup[];\n\n /**\n * Grouped refresh sessions.\n *\n * Sorted by the refresh group ID.\n */\n refresh_groups: BackupRefreshGroup[];\n\n /**\n * Tips.\n *\n * Sorted by the wallet tip ID.\n */\n tips: BackupTip[];\n\n /**\n * Accepted purchases.\n *\n * Sorted by the proposal ID.\n */\n purchases: BackupPurchase[];\n\n /**\n * All backup providers. Backup providers\n * in this list should be considered \"active\".\n *\n * Sorted by the provider base URL.\n */\n backup_providers: BackupBackupProvider[];\n\n /**\n * Recoup groups.\n */\n recoup_groups: BackupRecoupGroup[];\n\n /**\n * Trusted auditors, either for official (3 letter) or local (4-12 letter)\n * currencies.\n *\n * Auditors are sorted by their canonicalized base URL.\n */\n trusted_auditors: { [currency: string]: BackupTrustAuditor[] };\n\n /**\n * Trusted exchange. Only applicable for local currencies (4-12 letter currency code).\n *\n * Exchanges are sorted by their canonicalized base URL.\n */\n trusted_exchanges: { [currency: string]: BackupTrustExchange[] };\n\n /**\n * Interning table for forgettable values of contract terms.\n *\n * Used to reduce storage space, as many forgettable items (product image,\n * addresses, etc.) might be shared among many contract terms.\n */\n intern_table: { [hash: string]: any };\n\n /**\n * Permanent error reports.\n */\n error_reports: BackupErrorReport[];\n\n /**\n * Deletion tombstones. Lexically sorted.\n */\n tombstones: Tombstone[];\n}\n\nexport enum BackupOperationStatus {\n Cancelled = \"cancelled\",\n Finished = \"finished\",\n Pending = \"pending\",\n}\n\nexport enum BackupWgType {\n BankManual = \"bank-manual\",\n BankIntegrated = \"bank-integrated\",\n PeerPullCredit = \"peer-pull-credit\",\n PeerPushCredit = \"peer-push-credit\",\n Recoup = \"recoup\",\n}\n\nexport type BackupWgInfo =\n | {\n type: BackupWgType.BankManual;\n }\n | {\n type: BackupWgType.BankIntegrated;\n taler_withdraw_uri: string;\n\n /**\n * URL that the user can be redirected to, and allows\n * them to confirm (or abort) the bank-integrated withdrawal.\n */\n confirm_url?: string;\n\n /**\n * Exchange payto URI that the bank will use to fund the reserve.\n */\n exchange_payto_uri: string;\n\n /**\n * Time when the information about this reserve was posted to the bank.\n *\n * Only applies if bankWithdrawStatusUrl is defined.\n *\n * Set to undefined if that hasn't happened yet.\n */\n timestamp_reserve_info_posted?: TalerProtocolTimestamp;\n\n /**\n * Time when the reserve was confirmed by the bank.\n *\n * Set to undefined if not confirmed yet.\n */\n timestamp_bank_confirmed?: TalerProtocolTimestamp;\n }\n | {\n type: BackupWgType.PeerPullCredit;\n contract_terms: any;\n contract_priv: string;\n }\n | {\n type: BackupWgType.PeerPushCredit;\n contract_terms: any;\n }\n | {\n type: BackupWgType.Recoup;\n };\n\n/**\n * FIXME: Open questions:\n * - Do we have to store the denomination selection? Why?\n * (If deterministic, amount shouldn't change. Not storing it is simpler.)\n */\nexport interface BackupWithdrawalGroup {\n withdrawal_group_id: string;\n\n /**\n * Detailed info based on the type of withdrawal group.\n */\n info: BackupWgInfo;\n\n secret_seed: string;\n\n reserve_priv: string;\n\n exchange_base_url: string;\n\n timestamp_created: TalerProtocolTimestamp;\n\n timestamp_finish?: TalerProtocolTimestamp;\n\n operation_status: BackupOperationStatus;\n\n instructed_amount: BackupAmountString;\n\n /**\n * Amount including fees (i.e. the amount subtracted from the\n * reserve to withdraw all coins in this withdrawal session).\n *\n * Note that this *includes* the amount remaining in the reserve\n * that is too small to be withdrawn, and thus can't be derived\n * from selectedDenoms.\n */\n raw_withdrawal_amount: BackupAmountString;\n\n effective_withdrawal_amount: BackupAmountString;\n\n /**\n * Restrict withdrawals from this reserve to this age.\n */\n restrict_age?: number;\n\n /**\n * Multiset of denominations selected for withdrawal.\n */\n selected_denoms: BackupDenomSel;\n\n selected_denoms_uid: OperationUid;\n}\n\n/**\n * Tombstone in the format \"<type>:<key>\"\n */\nexport type Tombstone = string;\n\n/**\n * Detailed error report.\n *\n * For auditor-relevant reports with attached cryptographic proof,\n * the error report also should contain the submission status to\n * the auditor(s).\n */\ninterface BackupErrorReport {\n // FIXME: specify!\n}\n\n/**\n * Trust declaration for an auditor.\n *\n * The trust applies based on the public key of\n * the auditor, irrespective of what base URL the exchange\n * is referencing.\n */\nexport interface BackupTrustAuditor {\n /**\n * Base URL of the auditor.\n */\n auditor_base_url: string;\n\n /**\n * Public key of the auditor.\n */\n auditor_pub: string;\n\n /**\n * UIDs for the operation of adding this auditor\n * as a trusted auditor.\n */\n uids: OperationUid;\n}\n\n/**\n * Trust declaration for an exchange.\n *\n * The trust only applies for the combination of base URL\n * and public key. If the master public key changes while the base\n * URL stays the same, the exchange has to be re-added by a wallet update\n * or by the user.\n */\nexport interface BackupTrustExchange {\n /**\n * Canonicalized exchange base URL.\n */\n exchange_base_url: string;\n\n /**\n * Master public key of the exchange.\n */\n exchange_master_pub: string;\n\n /**\n * UIDs for the operation of adding this exchange\n * as trusted.\n */\n uids: OperationUid;\n}\n\nexport class BackupBackupProviderTerms {\n /**\n * Last known supported protocol version.\n */\n supported_protocol_version: string;\n\n /**\n * Last known annual fee.\n */\n annual_fee: BackupAmountString;\n\n /**\n * Last known storage limit.\n */\n storage_limit_in_megabytes: number;\n}\n\n/**\n * Backup information about one backup storage provider.\n */\nexport class BackupBackupProvider {\n /**\n * Canonicalized base URL of the provider.\n */\n base_url: string;\n\n /**\n * Last known terms. Might be unavailable in some situations, such\n * as directly after restoring form a backup recovery document.\n */\n terms?: BackupBackupProviderTerms;\n\n /**\n * Proposal IDs for payments to this provider.\n */\n pay_proposal_ids: string[];\n\n /**\n * UIDs for adding this backup provider.\n */\n uids: OperationUid[];\n}\n\n/**\n * Status of recoup operations that were grouped together.\n *\n * The remaining amount of the corresponding coins must be set to\n * zero when the recoup group is created/imported.\n */\nexport interface BackupRecoupGroup {\n /**\n * Unique identifier for the recoup group record.\n */\n recoup_group_id: string;\n\n /**\n * Timestamp when the recoup was started.\n */\n timestamp_created: TalerProtocolTimestamp;\n\n timestamp_finish?: TalerProtocolTimestamp;\n finish_clock?: TalerProtocolTimestamp;\n // FIXME: Use some enum here!\n finish_is_failure?: boolean;\n\n /**\n * Information about each coin being recouped.\n */\n coins: {\n coin_pub: string;\n recoup_finished: boolean;\n }[];\n}\n\n/**\n * Types of coin sources.\n */\nexport enum BackupCoinSourceType {\n Withdraw = \"withdraw\",\n Refresh = \"refresh\",\n Tip = \"tip\",\n}\n\n/**\n * Metadata about a coin obtained via withdrawing.\n */\nexport interface BackupWithdrawCoinSource {\n type: BackupCoinSourceType.Withdraw;\n\n /**\n * Can be the empty string for orphaned coins.\n */\n withdrawal_group_id: string;\n\n /**\n * Index of the coin in the withdrawal session.\n */\n coin_index: number;\n\n /**\n * Reserve public key for the reserve we got this coin from.\n */\n reserve_pub: string;\n}\n\n/**\n * Metadata about a coin obtained from refreshing.\n *\n * FIXME: Currently does not link to the refreshGroupId because\n * the wallet DB doesn't do this. Not really necessary,\n * but would be more consistent.\n */\nexport interface BackupRefreshCoinSource {\n type: BackupCoinSourceType.Refresh;\n\n /**\n * Public key of the coin that was refreshed into this coin.\n */\n old_coin_pub: string;\n\n refresh_group_id: string;\n}\n\n/**\n * Metadata about a coin obtained from a tip.\n */\nexport interface BackupTipCoinSource {\n type: BackupCoinSourceType.Tip;\n\n /**\n * Wallet's identifier for the tip that this coin\n * originates from.\n */\n wallet_tip_id: string;\n\n /**\n * Index in the tip planchets of the tip.\n */\n coin_index: number;\n}\n\n/**\n * Metadata about a coin depending on the origin.\n */\nexport type BackupCoinSource =\n | BackupWithdrawCoinSource\n | BackupRefreshCoinSource\n | BackupTipCoinSource;\n\n/**\n * Backup information about a coin.\n *\n * (Always part of a BackupExchange/BackupDenom)\n */\nexport interface BackupCoin {\n /**\n * Where did the coin come from? Used for recouping coins.\n */\n coin_source: BackupCoinSource;\n\n /**\n * Private key to authorize operations on the coin.\n */\n coin_priv: string;\n\n /**\n * Unblinded signature by the exchange.\n */\n denom_sig: UnblindedSignature;\n\n /**\n * Information about where and how the coin was spent.\n */\n spend_allocation:\n | {\n id: string;\n amount: BackupAmountString;\n }\n | undefined;\n\n /**\n * Blinding key used when withdrawing the coin.\n * Potentionally used again during payback.\n */\n blinding_key: string;\n\n /**\n * Does the wallet think that the coin is still fresh?\n *\n * Note that even if a fresh coin is imported, it should still\n * be refreshed in most situations.\n */\n fresh: boolean;\n}\n\n/**\n * Status of a tip we got from a merchant.\n */\nexport interface BackupTip {\n /**\n * Tip ID chosen by the wallet.\n */\n wallet_tip_id: string;\n\n /**\n * The merchant's identifier for this tip.\n */\n merchant_tip_id: string;\n\n /**\n * Secret seed used for the tipping planchets.\n */\n secret_seed: string;\n\n /**\n * Has the user accepted the tip? Only after the tip has been accepted coins\n * withdrawn from the tip may be used.\n */\n timestamp_accepted: TalerProtocolTimestamp | undefined;\n\n /**\n * When was the tip first scanned by the wallet?\n */\n timestamp_created: TalerProtocolTimestamp;\n\n timestamp_finished?: TalerProtocolTimestamp;\n finish_is_failure?: boolean;\n\n /**\n * The tipped amount.\n */\n tip_amount_raw: BackupAmountString;\n\n /**\n * Timestamp, the tip can't be picked up anymore after this deadline.\n */\n timestamp_expiration: TalerProtocolTimestamp;\n\n /**\n * The exchange that will sign our coins, chosen by the merchant.\n */\n exchange_base_url: string;\n\n /**\n * Base URL of the merchant that is giving us the tip.\n */\n merchant_base_url: string;\n\n /**\n * Selected denominations. Determines the effective tip amount.\n */\n selected_denoms: BackupDenomSel;\n\n /**\n * The url to be redirected after the tip is accepted.\n */\n next_url: string | undefined;\n\n /**\n * UID for the denomination selection.\n * Used to disambiguate when merging.\n */\n selected_denoms_uid: OperationUid;\n}\n\n/**\n * Reasons for why a coin is being refreshed.\n */\nexport enum BackupRefreshReason {\n Manual = \"manual\",\n Pay = \"pay\",\n Refund = \"refund\",\n AbortPay = \"abort-pay\",\n Recoup = \"recoup\",\n BackupRestored = \"backup-restored\",\n Scheduled = \"scheduled\",\n}\n\n/**\n * Information about one refresh session, always part\n * of a refresh group.\n *\n * (Public key of the old coin is stored in the refresh group.)\n */\nexport interface BackupRefreshSession {\n /**\n * Hashed denominations of the newly requested coins.\n */\n new_denoms: BackupDenomSel;\n\n /**\n * Seed used to derive the planchets and\n * transfer private keys for this refresh session.\n */\n session_secret_seed: string;\n\n /**\n * The no-reveal-index after we've done the melting.\n */\n noreveal_index?: number;\n}\n\n/**\n * Refresh session for one coin inside a refresh group.\n */\nexport interface BackupRefreshOldCoin {\n /**\n * Public key of the old coin,\n */\n coin_pub: string;\n\n /**\n * Requested amount to refresh. Must be subtracted from the coin's remaining\n * amount as soon as the coin is added to the refresh group.\n */\n input_amount: BackupAmountString;\n\n /**\n * Estimated output (may change if it takes a long time to create the\n * actual session).\n */\n estimated_output_amount: BackupAmountString;\n\n /**\n * Did the refresh session finish (or was it unnecessary/impossible to create\n * one)\n */\n finished: boolean;\n\n /**\n * Refresh session (if created) or undefined it not created yet.\n */\n refresh_session: BackupRefreshSession | undefined;\n}\n\n/**\n * Information about one refresh group.\n *\n * May span more than one exchange, but typically doesn't\n */\nexport interface BackupRefreshGroup {\n refresh_group_id: string;\n\n reason: BackupRefreshReason;\n\n /**\n * Details per old coin.\n */\n old_coins: BackupRefreshOldCoin[];\n\n timestamp_created: TalerProtocolTimestamp;\n\n timestamp_finish?: TalerProtocolTimestamp;\n finish_is_failure?: boolean;\n}\n\nexport enum BackupRefundState {\n Failed = \"failed\",\n Applied = \"applied\",\n Pending = \"pending\",\n}\n\n/**\n * Common information about a refund.\n */\nexport interface BackupRefundItemCommon {\n /**\n * Execution time as claimed by the merchant\n */\n execution_time: TalerProtocolTimestamp;\n\n /**\n * Time when the wallet became aware of the refund.\n */\n obtained_time: TalerProtocolTimestamp;\n\n /**\n * Amount refunded for the coin.\n */\n refund_amount: BackupAmountString;\n\n /**\n * Coin being refunded.\n */\n coin_pub: string;\n\n /**\n * The refund transaction ID for the refund.\n */\n rtransaction_id: number;\n\n /**\n * Upper bound on the refresh cost incurred by\n * applying this refund.\n *\n * Might be lower in practice when two refunds on the same\n * coin are refreshed in the same refresh operation.\n *\n * Used to display fees, and stored since it's expensive to recompute\n * accurately.\n */\n total_refresh_cost_bound: BackupAmountString;\n}\n\n/**\n * Failed refund, either because the merchant did\n * something wrong or it expired.\n */\nexport interface BackupRefundFailedItem extends BackupRefundItemCommon {\n type: BackupRefundState.Failed;\n}\n\nexport interface BackupRefundPendingItem extends BackupRefundItemCommon {\n type: BackupRefundState.Pending;\n}\n\nexport interface BackupRefundAppliedItem extends BackupRefundItemCommon {\n type: BackupRefundState.Applied;\n}\n\n/**\n * State of one refund from the merchant, maintained by the wallet.\n */\nexport type BackupRefundItem =\n | BackupRefundFailedItem\n | BackupRefundPendingItem\n | BackupRefundAppliedItem;\n\n/**\n * Data we store when the payment was accepted.\n */\nexport interface BackupPayInfo {\n pay_coins: {\n /**\n * Public keys of the coins that were selected.\n */\n coin_pub: string;\n\n /**\n * Amount that each coin contributes.\n */\n contribution: BackupAmountString;\n }[];\n\n /**\n * Unique ID to disambiguate pay coin selection on merge.\n */\n pay_coins_uid: OperationUid;\n\n /**\n * Total cost initially shown to the user.\n *\n * This includes the amount taken by the merchant, fees (wire/deposit) contributed\n * by the customer, refreshing fees, fees for withdraw-after-refresh and \"trimmings\"\n * of coins that are too small to spend.\n *\n * Note that in rare situations, this cost might not be accurate (e.g.\n * when the payment or refresh gets re-denominated).\n * We might show adjustments to this later, but currently we don't do so.\n */\n total_pay_cost: BackupAmountString;\n}\n\nexport interface BackupPurchase {\n /**\n * Proposal ID for this purchase. Uniquely identifies the\n * purchase and the proposal.\n */\n proposal_id: string;\n\n /**\n * Status of the proposal.\n */\n proposal_status: BackupProposalStatus;\n\n /**\n * Proposal that this one got \"redirected\" to as part of\n * the repurchase detection.\n */\n repurchase_proposal_id: string | undefined;\n\n /**\n * Session ID we got when downloading the contract.\n */\n download_session_id?: string;\n\n /**\n * Merchant-assigned order ID of the proposal.\n */\n order_id: string;\n\n /**\n * Base URL of the merchant that proposed the purchase.\n */\n merchant_base_url: string;\n\n /**\n * Claim token initially given by the merchant.\n */\n claim_token: string | undefined;\n\n /**\n * Contract terms we got from the merchant.\n */\n contract_terms_raw?: RawContractTerms;\n\n /**\n * Signature on the contract terms.\n *\n * FIXME: Better name needed.\n */\n merchant_sig?: string;\n\n /**\n * Private key for the nonce. Might eventually be used\n * to prove ownership of the contract.\n */\n nonce_priv: string;\n\n pay_info: BackupPayInfo | undefined;\n\n /**\n * Timestamp of the first time that sending a payment to the merchant\n * for this purchase was successful.\n */\n timestamp_first_successful_pay: TalerProtocolTimestamp | undefined;\n\n /**\n * Signature by the merchant confirming the payment.\n */\n merchant_pay_sig: string | undefined;\n\n timestamp_proposed: TalerProtocolTimestamp;\n\n /**\n * When was the purchase made?\n * Refers to the time that the user accepted.\n */\n timestamp_accepted: TalerProtocolTimestamp | undefined;\n\n /**\n * Pending refunds for the purchase. A refund is pending\n * when the merchant reports a transient error from the exchange.\n */\n refunds: BackupRefundItem[];\n\n /**\n * Continue querying the refund status until this deadline has expired.\n */\n auto_refund_deadline: TalerProtocolTimestamp | undefined;\n}\n\n/**\n * Info about one denomination in the backup.\n *\n * Note that the wallet only backs up validated denominations.\n */\nexport interface BackupDenomination {\n /**\n * Value of one coin of the denomination.\n */\n value: BackupAmountString;\n\n /**\n * The denomination public key.\n */\n denom_pub: DenominationPubKey;\n\n /**\n * Fee for withdrawing.\n */\n fee_withdraw: BackupAmountString;\n\n /**\n * Fee for depositing.\n */\n fee_deposit: BackupAmountString;\n\n /**\n * Fee for refreshing.\n */\n fee_refresh: BackupAmountString;\n\n /**\n * Fee for refunding.\n */\n fee_refund: BackupAmountString;\n\n /**\n * Validity start date of the denomination.\n */\n stamp_start: TalerProtocolTimestamp;\n\n /**\n * Date after which the currency can't be withdrawn anymore.\n */\n stamp_expire_withdraw: TalerProtocolTimestamp;\n\n /**\n * Date after the denomination officially doesn't exist anymore.\n */\n stamp_expire_legal: TalerProtocolTimestamp;\n\n /**\n * Data after which coins of this denomination can't be deposited anymore.\n */\n stamp_expire_deposit: TalerProtocolTimestamp;\n\n /**\n * Signature by the exchange's master key over the denomination\n * information.\n */\n master_sig: string;\n\n /**\n * Was this denomination still offered by the exchange the last time\n * we checked?\n * Only false when the exchange redacts a previously published denomination.\n */\n is_offered: boolean;\n\n /**\n * Did the exchange revoke the denomination?\n * When this field is set to true in the database, the same transaction\n * should also mark all affected coins as revoked.\n */\n is_revoked: boolean;\n\n /**\n * Coins of this denomination.\n */\n coins: BackupCoin[];\n\n /**\n * The list issue date of the exchange \"/keys\" response\n * that this denomination was last seen in.\n */\n list_issue_date: TalerProtocolTimestamp;\n}\n\n/**\n * Denomination selection.\n */\nexport type BackupDenomSel = {\n denom_pub_hash: string;\n count: number;\n}[];\n\n/**\n * Wire fee for one wire payment target type as stored in the\n * wallet's database.\n *\n * (Flattened to a list to make the declaration simpler).\n */\nexport interface BackupExchangeWireFee {\n wire_type: string;\n\n /**\n * Fee for wire transfers.\n */\n wire_fee: string;\n\n /**\n * Fees to close and refund a reserve.\n */\n closing_fee: string;\n\n /**\n * Start date of the fee.\n */\n start_stamp: TalerProtocolTimestamp;\n\n /**\n * End date of the fee.\n */\n end_stamp: TalerProtocolTimestamp;\n\n /**\n * Signature made by the exchange master key.\n */\n sig: string;\n}\n\n/**\n * Global fee as stored in the wallet's database.\n *\n */\nexport interface BackupExchangeGlobalFees {\n startDate: TalerProtocolTimestamp;\n endDate: TalerProtocolTimestamp;\n\n historyFee: BackupAmountString;\n accountFee: BackupAmountString;\n purseFee: BackupAmountString;\n\n historyTimeout: TalerProtocolDuration;\n purseTimeout: TalerProtocolDuration;\n\n purseLimit: number;\n\n signature: string;\n}\n/**\n * Structure of one exchange signing key in the /keys response.\n */\nexport class BackupExchangeSignKey {\n stamp_start: TalerProtocolTimestamp;\n stamp_expire: TalerProtocolTimestamp;\n stamp_end: TalerProtocolTimestamp;\n key: string;\n master_sig: string;\n}\n\n/**\n * Signature by the auditor that a particular denomination key is audited.\n */\nexport class BackupAuditorDenomSig {\n /**\n * Denomination public key's hash.\n */\n denom_pub_h: string;\n\n /**\n * The signature.\n */\n auditor_sig: string;\n}\n\n/**\n * Auditor information as given by the exchange in /keys.\n */\nexport class BackupExchangeAuditor {\n /**\n * Auditor's public key.\n */\n auditor_pub: string;\n\n /**\n * Base URL of the auditor.\n */\n auditor_url: string;\n\n /**\n * List of signatures for denominations by the auditor.\n */\n denomination_keys: BackupAuditorDenomSig[];\n}\n\n/**\n * Backup information for an exchange. Serves effectively\n * as a pointer to the exchange details identified by\n * the base URL, master public key and currency.\n */\nexport interface BackupExchange {\n base_url: string;\n\n master_public_key: string;\n\n currency: string;\n\n /**\n * Time when the pointer to the exchange details\n * was last updated.\n *\n * Used to facilitate automatic merging.\n */\n update_clock: TalerProtocolTimestamp;\n}\n\n/**\n * Backup information about an exchange's details.\n *\n * Note that one base URL can have multiple exchange\n * details. The BackupExchange stores a pointer\n * to the current exchange details.\n */\nexport interface BackupExchangeDetails {\n /**\n * Canonicalized base url of the exchange.\n */\n base_url: string;\n\n /**\n * Master public key of the exchange.\n */\n master_public_key: string;\n\n /**\n * Auditors (partially) auditing the exchange.\n */\n auditors: BackupExchangeAuditor[];\n\n /**\n * Currency that the exchange offers.\n */\n currency: string;\n\n /**\n * Denominations offered by the exchange.\n */\n denominations: BackupDenomination[];\n\n /**\n * Last observed protocol version.\n */\n protocol_version: string;\n\n /**\n * Closing delay of reserves.\n */\n reserve_closing_delay: TalerProtocolDuration;\n\n /**\n * Signing keys we got from the exchange, can also contain\n * older signing keys that are not returned by /keys anymore.\n */\n signing_keys: BackupExchangeSignKey[];\n\n wire_fees: BackupExchangeWireFee[];\n\n global_fees: BackupExchangeGlobalFees[];\n\n /**\n * Bank accounts offered by the exchange;\n */\n accounts: {\n payto_uri: string;\n master_sig: string;\n }[];\n\n /**\n * ETag for last terms of service download.\n */\n tos_accepted_etag: string | undefined;\n\n /**\n * Timestamp when the ToS has been accepted.\n */\n tos_accepted_timestamp: TalerProtocolTimestamp | undefined;\n}\n\nexport enum BackupProposalStatus {\n /**\n * Proposed (and either downloaded or not,\n * depending on whether contract terms are present),\n * but the user needs to accept/reject it.\n */\n Proposed = \"proposed\",\n /**\n * The user has rejected the proposal.\n */\n Refused = \"refused\",\n /**\n * Downloading or processing the proposal has failed permanently.\n *\n * FIXME: Should this be modeled as a \"misbehavior report\" instead?\n */\n PermanentlyFailed = \"permanently-failed\",\n /**\n * Downloaded proposal was detected as a re-purchase.\n */\n Repurchase = \"repurchase\",\n\n Paid = \"paid\",\n}\n\nexport interface BackupRecovery {\n walletRootPriv: string;\n providers: {\n name: string;\n url: string;\n }[];\n}\n", "/*\nCopyright Mathias Bynens <https://mathiasbynens.be/>\nCopyright (c) 2022 Taler Systems S.A.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = \"-\"; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7E]/; // non-ASCII chars\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n overflow: \"Overflow: input needs wider integers to process\",\n \"not-basic\": \"Illegal input >= 0x80 (not a basic code point)\",\n \"invalid-input\": \"Invalid input\",\n} as { [x: string]: string };\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type: string) {\n throw new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array: any[], fn: (arg0: any) => any) {\n const result = [];\n let length = array.length;\n while (length--) {\n result[length] = fn(array[length]);\n }\n return result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {Array} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(\n string: string,\n fn: { (string: any): any; (string: any): any; (arg0: any): any },\n) {\n const parts = string.split(\"@\");\n let result = \"\";\n if (parts.length > 1) {\n // In email addresses, only the domain name should be punycoded. Leave\n // the local part (i.e. everything up to `@`) intact.\n result = parts[0] + \"@\";\n string = parts[1];\n }\n // Avoid `split(regex)` for IE8 compatibility. See #17.\n string = string.replace(regexSeparators, \"\\x2E\");\n const labels = string.split(\".\");\n const encoded = map(labels, fn).join(\".\");\n return result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string: string) {\n const output = [];\n let counter = 0;\n const length = string.length;\n while (counter < length) {\n const value = string.charCodeAt(counter++);\n if (value >= 0xd800 && value <= 0xdbff && counter < length) {\n // It's a high surrogate, and there is a next character.\n const extra = string.charCodeAt(counter++);\n if ((extra & 0xfc00) == 0xdc00) {\n // Low surrogate.\n output.push(((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000);\n } else {\n // It's an unmatched surrogate; only append this code unit, in case the\n // next code unit is the high surrogate of a surrogate pair.\n output.push(value);\n counter--;\n }\n } else {\n output.push(value);\n }\n }\n return output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = (array: any): string => String.fromCodePoint(...array);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function (codePoint: number) {\n if (codePoint - 0x30 < 0x0a) {\n return codePoint - 0x16;\n }\n if (codePoint - 0x41 < 0x1a) {\n return codePoint - 0x41;\n }\n if (codePoint - 0x61 < 0x1a) {\n return codePoint - 0x61;\n }\n return base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function (digit: number, flag: number) {\n // 0..25 map to ASCII a..z or A..Z\n // 26..35 map to ASCII 0..9\n return digit + 22 + 75 * Number(digit < 26) - (Number(flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function (delta: number, numPoints: number, firstTime: boolean) {\n let k = 0;\n delta = firstTime ? floor(delta / damp) : delta >> 1;\n delta += floor(delta / numPoints);\n for (\n ;\n /* no initialization */ delta > (baseMinusTMin * tMax) >> 1;\n k += base\n ) {\n delta = floor(delta / baseMinusTMin);\n }\n return floor(k + ((baseMinusTMin + 1) * delta) / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function (input: string) {\n // Don't use UCS-2.\n const output = [];\n const inputLength = input.length;\n let i = 0;\n let n = initialN;\n let bias = initialBias;\n\n // Handle the basic code points: let `basic` be the number of input code\n // points before the last delimiter, or `0` if there is none, then copy\n // the first basic code points to the output.\n\n let basic = input.lastIndexOf(delimiter);\n if (basic < 0) {\n basic = 0;\n }\n\n for (let j = 0; j < basic; ++j) {\n // if it's not a basic code point\n if (input.charCodeAt(j) >= 0x80) {\n error(\"not-basic\");\n }\n output.push(input.charCodeAt(j));\n }\n\n // Main decoding loop: start just after the last delimiter if any basic code\n // points were copied; start at the beginning otherwise.\n\n for (\n let index = basic > 0 ? basic + 1 : 0;\n index < inputLength /* no final expression */;\n\n ) {\n // `index` is the index of the next character to be consumed.\n // Decode a generalized variable-length integer into `delta`,\n // which gets added to `i`. The overflow checking is easier\n // if we increase `i` as we go, then subtract off its starting\n // value at the end to obtain `delta`.\n let oldi = i;\n for (let w = 1, k = base /* no condition */; ; k += base) {\n if (index >= inputLength) {\n error(\"invalid-input\");\n }\n\n const digit = basicToDigit(input.charCodeAt(index++));\n\n if (digit >= base || digit > floor((maxInt - i) / w)) {\n error(\"overflow\");\n }\n\n i += digit * w;\n const t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;\n\n if (digit < t) {\n break;\n }\n\n const baseMinusT = base - t;\n if (w > floor(maxInt / baseMinusT)) {\n error(\"overflow\");\n }\n\n w *= baseMinusT;\n }\n\n const out = output.length + 1;\n bias = adapt(i - oldi, out, oldi == 0);\n\n // `i` was supposed to wrap around from `out` to `0`,\n // incrementing `n` each time, so we'll fix that now:\n if (floor(i / out) > maxInt - n) {\n error(\"overflow\");\n }\n\n n += floor(i / out);\n i %= out;\n\n // Insert `n` at position `i` of the output.\n output.splice(i++, 0, n);\n }\n\n return String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function (inputArg: string) {\n const output = [];\n\n // Convert the input in UCS-2 to an array of Unicode code points.\n let input = ucs2decode(inputArg);\n\n // Cache the length.\n let inputLength = input.length;\n\n // Initialize the state.\n let n = initialN;\n let delta = 0;\n let bias = initialBias;\n\n // Handle the basic code points.\n for (const currentValue of input) {\n if (currentValue < 0x80) {\n output.push(stringFromCharCode(currentValue));\n }\n }\n\n let basicLength = output.length;\n let handledCPCount = basicLength;\n\n // `handledCPCount` is the number of code points that have been handled;\n // `basicLength` is the number of basic code points.\n\n // Finish the basic string with a delimiter unless it's empty.\n if (basicLength) {\n output.push(delimiter);\n }\n\n // Main encoding loop:\n while (handledCPCount < inputLength) {\n // All non-basic code points < n have been handled already. Find the next\n // larger one:\n let m = maxInt;\n for (const currentValue of input) {\n if (currentValue >= n && currentValue < m) {\n m = currentValue;\n }\n }\n\n // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n // but guard against overflow.\n const handledCPCountPlusOne = handledCPCount + 1;\n if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n error(\"overflow\");\n }\n\n delta += (m - n) * handledCPCountPlusOne;\n n = m;\n\n for (const currentValue of input) {\n if (currentValue < n && ++delta > maxInt) {\n error(\"overflow\");\n }\n if (currentValue == n) {\n // Represent delta as a generalized variable-length integer.\n let q = delta;\n for (let k = base /* no condition */; ; k += base) {\n const t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;\n if (q < t) {\n break;\n }\n const qMinusT = q - t;\n const baseMinusT = base - t;\n output.push(\n stringFromCharCode(digitToBasic(t + (qMinusT % baseMinusT), 0)),\n );\n q = floor(qMinusT / baseMinusT);\n }\n\n output.push(stringFromCharCode(digitToBasic(q, 0)));\n bias = adapt(\n delta,\n handledCPCountPlusOne,\n handledCPCount == basicLength,\n );\n delta = 0;\n ++handledCPCount;\n }\n }\n\n ++delta;\n ++n;\n }\n return output.join(\"\");\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function (input: string) {\n return mapDomain(input, function (string) {\n return regexPunycode.test(string)\n ? decode(string.slice(4).toLowerCase())\n : string;\n });\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function (input: string) {\n return mapDomain(input, function (string) {\n return regexNonASCII.test(string) ? \"xn--\" + encode(string) : string;\n });\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nexport const punycode = {\n /**\n * A string representing the current Punycode.js version number.\n * @memberOf punycode\n * @type String\n */\n version: \"2.1.0\",\n /**\n * An object of methods to convert from JavaScript's internal character\n * representation (UCS-2) to Unicode code points, and back.\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode\n * @type Object\n */\n ucs2: {\n decode: ucs2decode,\n encode: ucs2encode,\n },\n decode: decode,\n encode: encode,\n toASCII: toASCII,\n toUnicode: toUnicode,\n};\n", "/*\nThe MIT License (MIT)\n\nCopyright (c) Sebastian Mayr\nCopyright (c) 2022 Taler Systems S.A.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n*/\n\n// Vendored with modifications (TypeScript etc.) from https://github.com/jsdom/whatwg-url\n\nconst utf8Encoder = new TextEncoder();\nconst utf8Decoder = new TextDecoder(\"utf-8\", { ignoreBOM: true });\n\nfunction utf8Encode(string: string | undefined) {\n return utf8Encoder.encode(string);\n}\n\nfunction utf8DecodeWithoutBOM(\n bytes: DataView | ArrayBuffer | null | undefined,\n) {\n return utf8Decoder.decode(bytes);\n}\n\n// https://url.spec.whatwg.org/#concept-urlencoded-parser\nfunction parseUrlencoded(input: Uint8Array) {\n const sequences = strictlySplitByteSequence(input, p(\"&\"));\n const output = [];\n for (const bytes of sequences) {\n if (bytes.length === 0) {\n continue;\n }\n\n let name, value;\n const indexOfEqual = bytes.indexOf(p(\"=\")!);\n\n if (indexOfEqual >= 0) {\n name = bytes.slice(0, indexOfEqual);\n value = bytes.slice(indexOfEqual + 1);\n } else {\n name = bytes;\n value = new Uint8Array(0);\n }\n\n name = replaceByteInByteSequence(name, 0x2b, 0x20);\n value = replaceByteInByteSequence(value, 0x2b, 0x20);\n\n const nameString = utf8DecodeWithoutBOM(percentDecodeBytes(name));\n const valueString = utf8DecodeWithoutBOM(percentDecodeBytes(value));\n\n output.push([nameString, valueString]);\n }\n return output;\n}\n\n// https://url.spec.whatwg.org/#concept-urlencoded-string-parser\nfunction parseUrlencodedString(input: string | undefined) {\n return parseUrlencoded(utf8Encode(input));\n}\n\n// https://url.spec.whatwg.org/#concept-urlencoded-serializer\nfunction serializeUrlencoded(tuples: any[], encodingOverride = undefined) {\n let encoding = \"utf-8\";\n if (encodingOverride !== undefined) {\n // TODO \"get the output encoding\", i.e. handle encoding labels vs. names.\n encoding = encodingOverride;\n }\n\n let output = \"\";\n for (const [i, tuple] of tuples.entries()) {\n // TODO: handle encoding override\n\n const name = utf8PercentEncodeString(\n tuple[0],\n isURLEncodedPercentEncode,\n true,\n );\n\n let value = tuple[1];\n if (tuple.length > 2 && tuple[2] !== undefined) {\n if (tuple[2] === \"hidden\" && name === \"_charset_\") {\n value = encoding;\n } else if (tuple[2] === \"file\") {\n // value is a File object\n value = value.name;\n }\n }\n\n value = utf8PercentEncodeString(value, isURLEncodedPercentEncode, true);\n\n if (i !== 0) {\n output += \"&\";\n }\n output += `${name}=${value}`;\n }\n return output;\n}\n\nfunction strictlySplitByteSequence(buf: Uint8Array, cp: any) {\n const list = [];\n let last = 0;\n let i = buf.indexOf(cp);\n while (i >= 0) {\n list.push(buf.slice(last, i));\n last = i + 1;\n i = buf.indexOf(cp, last);\n }\n if (last !== buf.length) {\n list.push(buf.slice(last));\n }\n return list;\n}\n\nfunction replaceByteInByteSequence(buf: Uint8Array, from: number, to: number) {\n let i = buf.indexOf(from);\n while (i >= 0) {\n buf[i] = to;\n i = buf.indexOf(from, i + 1);\n }\n return buf;\n}\n\nfunction p(char: string) {\n return char.codePointAt(0);\n}\n\n// https://url.spec.whatwg.org/#percent-encode\nfunction percentEncode(c: number) {\n let hex = c.toString(16).toUpperCase();\n if (hex.length === 1) {\n hex = `0${hex}`;\n }\n\n return `%${hex}`;\n}\n\n// https://url.spec.whatwg.org/#percent-decode\nfunction percentDecodeBytes(input: Uint8Array) {\n const output = new Uint8Array(input.byteLength);\n let outputIndex = 0;\n for (let i = 0; i < input.byteLength; ++i) {\n const byte = input[i];\n if (byte !== 0x25) {\n output[outputIndex++] = byte;\n } else if (\n byte === 0x25 &&\n (!isASCIIHex(input[i + 1]) || !isASCIIHex(input[i + 2]))\n ) {\n output[outputIndex++] = byte;\n } else {\n const bytePoint = parseInt(\n String.fromCodePoint(input[i + 1], input[i + 2]),\n 16,\n );\n output[outputIndex++] = bytePoint;\n i += 2;\n }\n }\n\n return output.slice(0, outputIndex);\n}\n\n// https://url.spec.whatwg.org/#string-percent-decode\nfunction percentDecodeString(input: string) {\n const bytes = utf8Encode(input);\n return percentDecodeBytes(bytes);\n}\n\n// https://url.spec.whatwg.org/#c0-control-percent-encode-set\nfunction isC0ControlPercentEncode(c: number) {\n return c <= 0x1f || c > 0x7e;\n}\n\n// https://url.spec.whatwg.org/#fragment-percent-encode-set\nconst extraFragmentPercentEncodeSet = new Set([\n p(\" \"),\n p('\"'),\n p(\"<\"),\n p(\">\"),\n p(\"`\"),\n]);\n\nfunction isFragmentPercentEncode(c: number) {\n return isC0ControlPercentEncode(c) || extraFragmentPercentEncodeSet.has(c);\n}\n\n// https://url.spec.whatwg.org/#query-percent-encode-set\nconst extraQueryPercentEncodeSet = new Set([\n p(\" \"),\n p('\"'),\n p(\"#\"),\n p(\"<\"),\n p(\">\"),\n]);\n\nfunction isQueryPercentEncode(c: number) {\n return isC0ControlPercentEncode(c) || extraQueryPercentEncodeSet.has(c);\n}\n\n// https://url.spec.whatwg.org/#special-query-percent-encode-set\nfunction isSpecialQueryPercentEncode(c: number) {\n return isQueryPercentEncode(c) || c === p(\"'\");\n}\n\n// https://url.spec.whatwg.org/#path-percent-encode-set\nconst extraPathPercentEncodeSet = new Set([p(\"?\"), p(\"`\"), p(\"{\"), p(\"}\")]);\nfunction isPathPercentEncode(c: number) {\n return isQueryPercentEncode(c) || extraPathPercentEncodeSet.has(c);\n}\n\n// https://url.spec.whatwg.org/#userinfo-percent-encode-set\nconst extraUserinfoPercentEncodeSet = new Set([\n p(\"/\"),\n p(\":\"),\n p(\";\"),\n p(\"=\"),\n p(\"@\"),\n p(\"[\"),\n p(\"\\\\\"),\n p(\"]\"),\n p(\"^\"),\n p(\"|\"),\n]);\nfunction isUserinfoPercentEncode(c: number) {\n return isPathPercentEncode(c) || extraUserinfoPercentEncodeSet.has(c);\n}\n\n// https://url.spec.whatwg.org/#component-percent-encode-set\nconst extraComponentPercentEncodeSet = new Set([\n p(\"$\"),\n p(\"%\"),\n p(\"&\"),\n p(\"+\"),\n p(\",\"),\n]);\nfunction isComponentPercentEncode(c: number) {\n return isUserinfoPercentEncode(c) || extraComponentPercentEncodeSet.has(c);\n}\n\n// https://url.spec.whatwg.org/#application-x-www-form-urlencoded-percent-encode-set\nconst extraURLEncodedPercentEncodeSet = new Set([\n p(\"!\"),\n p(\"'\"),\n p(\"(\"),\n p(\")\"),\n p(\"~\"),\n]);\n\nfunction isURLEncodedPercentEncode(c: number) {\n return isComponentPercentEncode(c) || extraURLEncodedPercentEncodeSet.has(c);\n}\n\n// https://url.spec.whatwg.org/#code-point-percent-encode-after-encoding\n// https://url.spec.whatwg.org/#utf-8-percent-encode\n// Assuming encoding is always utf-8 allows us to trim one of the logic branches. TODO: support encoding.\n// The \"-Internal\" variant here has code points as JS strings. The external version used by other files has code points\n// as JS numbers, like the rest of the codebase.\nfunction utf8PercentEncodeCodePointInternal(\n codePoint: string,\n percentEncodePredicate: (arg0: number) => any,\n) {\n const bytes = utf8Encode(codePoint);\n let output = \"\";\n for (const byte of bytes) {\n // Our percentEncodePredicate operates on bytes, not code points, so this is slightly different from the spec.\n if (!percentEncodePredicate(byte)) {\n output += String.fromCharCode(byte);\n } else {\n output += percentEncode(byte);\n }\n }\n\n return output;\n}\n\nfunction utf8PercentEncodeCodePoint(\n codePoint: number,\n percentEncodePredicate: (arg0: number) => any,\n) {\n return utf8PercentEncodeCodePointInternal(\n String.fromCodePoint(codePoint),\n percentEncodePredicate,\n );\n}\n\n// https://url.spec.whatwg.org/#string-percent-encode-after-encoding\n// https://url.spec.whatwg.org/#string-utf-8-percent-encode\nfunction utf8PercentEncodeString(\n input: string,\n percentEncodePredicate: {\n (c: number): boolean;\n (c: number): boolean;\n (arg0: number): any;\n },\n spaceAsPlus = false,\n) {\n let output = \"\";\n for (const codePoint of input) {\n if (spaceAsPlus && codePoint === \" \") {\n output += \"+\";\n } else {\n output += utf8PercentEncodeCodePointInternal(\n codePoint,\n percentEncodePredicate,\n );\n }\n }\n return output;\n}\n\n// Note that we take code points as JS numbers, not JS strings.\n\nfunction isASCIIDigit(c: number) {\n return c >= 0x30 && c <= 0x39;\n}\n\nfunction isASCIIAlpha(c: number) {\n return (c >= 0x41 && c <= 0x5a) || (c >= 0x61 && c <= 0x7a);\n}\n\nfunction isASCIIAlphanumeric(c: number) {\n return isASCIIAlpha(c) || isASCIIDigit(c);\n}\n\nfunction isASCIIHex(c: number) {\n return (\n isASCIIDigit(c) || (c >= 0x41 && c <= 0x46) || (c >= 0x61 && c <= 0x66)\n );\n}\n\nexport class URLSearchParamsImpl {\n _list: any[];\n _url: any;\n constructor(init: any, { doNotStripQMark = false }: any = {}) {\n this._list = [];\n this._url = null;\n\n if (!doNotStripQMark && typeof init === \"string\" && init[0] === \"?\") {\n init = init.slice(1);\n }\n\n if (Array.isArray(init)) {\n for (const pair of init) {\n if (pair.length !== 2) {\n throw new TypeError(\n \"Failed to construct 'URLSearchParams': parameter 1 sequence's element does not \" +\n \"contain exactly two elements.\",\n );\n }\n this._list.push([pair[0], pair[1]]);\n }\n } else if (\n typeof init === \"object\" &&\n Object.getPrototypeOf(init) === null\n ) {\n for (const name of Object.keys(init)) {\n const value = init[name];\n this._list.push([name, value]);\n }\n } else {\n this._list = parseUrlencodedString(init);\n }\n }\n\n _updateSteps() {\n if (this._url !== null) {\n let query: string | null = serializeUrlencoded(this._list);\n if (query === \"\") {\n query = null;\n }\n this._url._url.query = query;\n }\n }\n\n append(name: string, value: string) {\n this._list.push([name, value]);\n this._updateSteps();\n }\n\n delete(name: string) {\n let i = 0;\n while (i < this._list.length) {\n if (this._list[i][0] === name) {\n this._list.splice(i, 1);\n } else {\n i++;\n }\n }\n this._updateSteps();\n }\n\n get(name: string) {\n for (const tuple of this._list) {\n if (tuple[0] === name) {\n return tuple[1];\n }\n }\n return null;\n }\n\n getAll(name: string) {\n const output = [];\n for (const tuple of this._list) {\n if (tuple[0] === name) {\n output.push(tuple[1]);\n }\n }\n return output;\n }\n\n forEach(\n callbackfn: (\n value: string,\n key: string,\n parent: URLSearchParamsImpl,\n ) => void,\n thisArg?: any,\n ): void {\n for (const tuple of this._list) {\n callbackfn.call(thisArg, tuple[1], tuple[0], this);\n }\n }\n\n has(name: string) {\n for (const tuple of this._list) {\n if (tuple[0] === name) {\n return true;\n }\n }\n return false;\n }\n\n set(name: string, value: string) {\n let found = false;\n let i = 0;\n while (i < this._list.length) {\n if (this._list[i][0] === name) {\n if (found) {\n this._list.splice(i, 1);\n } else {\n found = true;\n this._list[i][1] = value;\n i++;\n }\n } else {\n i++;\n }\n }\n if (!found) {\n this._list.push([name, value]);\n }\n this._updateSteps();\n }\n\n sort() {\n this._list.sort((a, b) => {\n if (a[0] < b[0]) {\n return -1;\n }\n if (a[0] > b[0]) {\n return 1;\n }\n return 0;\n });\n\n this._updateSteps();\n }\n\n [Symbol.iterator]() {\n return this._list[Symbol.iterator]();\n }\n\n toString() {\n return serializeUrlencoded(this._list);\n }\n}\n\nconst specialSchemes = {\n ftp: 21,\n file: null,\n http: 80,\n https: 443,\n ws: 80,\n wss: 443,\n} as { [x: string]: number | null };\n\nconst failure = Symbol(\"failure\");\n\nfunction countSymbols(str: any) {\n return [...str].length;\n}\n\nfunction at(input: any, idx: any) {\n const c = input[idx];\n return isNaN(c) ? undefined : String.fromCodePoint(c);\n}\n\nfunction isSingleDot(buffer: string) {\n return buffer === \".\" || buffer.toLowerCase() === \"%2e\";\n}\n\nfunction isDoubleDot(buffer: string) {\n buffer = buffer.toLowerCase();\n return (\n buffer === \"..\" ||\n buffer === \"%2e.\" ||\n buffer === \".%2e\" ||\n buffer === \"%2e%2e\"\n );\n}\n\nfunction isWindowsDriveLetterCodePoints(cp1: number, cp2: number) {\n return isASCIIAlpha(cp1) && (cp2 === p(\":\") || cp2 === p(\"|\"));\n}\n\nfunction isWindowsDriveLetterString(string: string) {\n return (\n string.length === 2 &&\n isASCIIAlpha(string.codePointAt(0)!) &&\n (string[1] === \":\" || string[1] === \"|\")\n );\n}\n\nfunction isNormalizedWindowsDriveLetterString(string: string) {\n return (\n string.length === 2 &&\n isASCIIAlpha(string.codePointAt(0)!) &&\n string[1] === \":\"\n );\n}\n\nfunction containsForbiddenHostCodePoint(string: string) {\n return (\n string.search(\n /\\u0000|\\u0009|\\u000A|\\u000D|\\u0020|#|\\/|:|<|>|\\?|@|\\[|\\\\|\\]|\\^|\\|/u,\n ) !== -1\n );\n}\n\nfunction containsForbiddenDomainCodePoint(string: string) {\n return (\n containsForbiddenHostCodePoint(string) ||\n string.search(/[\\u0000-\\u001F]|%|\\u007F/u) !== -1\n );\n}\n\nfunction isSpecialScheme(scheme: string) {\n return specialSchemes[scheme] !== undefined;\n}\n\nfunction isSpecial(url: any) {\n return isSpecialScheme(url.scheme);\n}\n\nfunction isNotSpecial(url: UrlObj) {\n return !isSpecialScheme(url.scheme);\n}\n\nfunction defaultPort(scheme: string) {\n return specialSchemes[scheme];\n}\n\nfunction parseIPv4Number(input: string) {\n if (input === \"\") {\n return failure;\n }\n\n let R = 10;\n\n if (\n input.length >= 2 &&\n input.charAt(0) === \"0\" &&\n input.charAt(1).toLowerCase() === \"x\"\n ) {\n input = input.substring(2);\n R = 16;\n } else if (input.length >= 2 && input.charAt(0) === \"0\") {\n input = input.substring(1);\n R = 8;\n }\n\n if (input === \"\") {\n return 0;\n }\n\n let regex = /[^0-7]/u;\n if (R === 10) {\n regex = /[^0-9]/u;\n }\n if (R === 16) {\n regex = /[^0-9A-Fa-f]/u;\n }\n\n if (regex.test(input)) {\n return failure;\n }\n\n return parseInt(input, R);\n}\n\nfunction parseIPv4(input: string) {\n const parts = input.split(\".\");\n if (parts[parts.length - 1] === \"\") {\n if (parts.length > 1) {\n parts.pop();\n }\n }\n\n if (parts.length > 4) {\n return failure;\n }\n\n const numbers = [];\n for (const part of parts) {\n const n = parseIPv4Number(part);\n if (n === failure) {\n return failure;\n }\n\n numbers.push(n);\n }\n\n for (let i = 0; i < numbers.length - 1; ++i) {\n if (numbers[i] > 255) {\n return failure;\n }\n }\n if (numbers[numbers.length - 1] >= 256 ** (5 - numbers.length)) {\n return failure;\n }\n\n let ipv4 = numbers.pop();\n let counter = 0;\n\n for (const n of numbers) {\n ipv4! += n * 256 ** (3 - counter);\n ++counter;\n }\n\n return ipv4;\n}\n\nfunction serializeIPv4(address: number) {\n let output = \"\";\n let n = address;\n\n for (let i = 1; i <= 4; ++i) {\n output = String(n % 256) + output;\n if (i !== 4) {\n output = `.${output}`;\n }\n n = Math.floor(n / 256);\n }\n\n return output;\n}\n\nfunction parseIPv6(inputArg: string) {\n const address = [0, 0, 0, 0, 0, 0, 0, 0];\n let pieceIndex = 0;\n let compress = null;\n let pointer = 0;\n\n const input = Array.from(inputArg, (c) => c.codePointAt(0));\n\n if (input[pointer] === p(\":\")) {\n if (input[pointer + 1] !== p(\":\")) {\n return failure;\n }\n\n pointer += 2;\n ++pieceIndex;\n compress = pieceIndex;\n }\n\n while (pointer < input.length) {\n if (pieceIndex === 8) {\n return failure;\n }\n\n if (input[pointer] === p(\":\")) {\n if (compress !== null) {\n return failure;\n }\n ++pointer;\n ++pieceIndex;\n compress = pieceIndex;\n continue;\n }\n\n let value = 0;\n let length = 0;\n\n while (length < 4 && isASCIIHex(input[pointer]!)) {\n value = value * 0x10 + parseInt(at(input, pointer)!, 16);\n ++pointer;\n ++length;\n }\n\n if (input[pointer] === p(\".\")) {\n if (length === 0) {\n return failure;\n }\n\n pointer -= length;\n\n if (pieceIndex > 6) {\n return failure;\n }\n\n let numbersSeen = 0;\n\n while (input[pointer] !== undefined) {\n let ipv4Piece = null;\n\n if (numbersSeen > 0) {\n if (input[pointer] === p(\".\") && numbersSeen < 4) {\n ++pointer;\n } else {\n return failure;\n }\n }\n\n if (!isASCIIDigit(input[pointer]!)) {\n return failure;\n }\n\n while (isASCIIDigit(input[pointer]!)) {\n const number = parseInt(at(input, pointer)!);\n if (ipv4Piece === null) {\n ipv4Piece = number;\n } else if (ipv4Piece === 0) {\n return failure;\n } else {\n ipv4Piece = ipv4Piece * 10 + number;\n }\n if (ipv4Piece > 255) {\n return failure;\n }\n ++pointer;\n }\n\n address[pieceIndex] = address[pieceIndex] * 0x100 + ipv4Piece!;\n\n ++numbersSeen;\n\n if (numbersSeen === 2 || numbersSeen === 4) {\n ++pieceIndex;\n }\n }\n\n if (numbersSeen !== 4) {\n return failure;\n }\n\n break;\n } else if (input[pointer] === p(\":\")) {\n ++pointer;\n if (input[pointer] === undefined) {\n return failure;\n }\n } else if (input[pointer] !== undefined) {\n return failure;\n }\n\n address[pieceIndex] = value;\n ++pieceIndex;\n }\n\n if (compress !== null) {\n let swaps = pieceIndex - compress;\n pieceIndex = 7;\n while (pieceIndex !== 0 && swaps > 0) {\n const temp = address[compress + swaps - 1];\n address[compress + swaps - 1] = address[pieceIndex];\n address[pieceIndex] = temp;\n --pieceIndex;\n --swaps;\n }\n } else if (compress === null && pieceIndex !== 8) {\n return failure;\n }\n\n return address;\n}\n\nfunction serializeIPv6(address: any[]) {\n let output = \"\";\n const compress = findLongestZeroSequence(address);\n let ignore0 = false;\n\n for (let pieceIndex = 0; pieceIndex <= 7; ++pieceIndex) {\n if (ignore0 && address[pieceIndex] === 0) {\n continue;\n } else if (ignore0) {\n ignore0 = false;\n }\n\n if (compress === pieceIndex) {\n const separator = pieceIndex === 0 ? \"::\" : \":\";\n output += separator;\n ignore0 = true;\n continue;\n }\n\n output += address[pieceIndex].toString(16);\n\n if (pieceIndex !== 7) {\n output += \":\";\n }\n }\n\n return output;\n}\n\nfunction parseHost(input: string, isNotSpecialArg = false) {\n if (input[0] === \"[\") {\n if (input[input.length - 1] !== \"]\") {\n return failure;\n }\n\n return parseIPv6(input.substring(1, input.length - 1));\n }\n\n if (isNotSpecialArg) {\n return parseOpaqueHost(input);\n }\n\n const domain = utf8DecodeWithoutBOM(percentDecodeString(input));\n const asciiDomain = domainToASCII(domain);\n if (asciiDomain === failure) {\n return failure;\n }\n\n if (containsForbiddenDomainCodePoint(asciiDomain)) {\n return failure;\n }\n\n if (endsInANumber(asciiDomain)) {\n return parseIPv4(asciiDomain);\n }\n\n return asciiDomain;\n}\n\nfunction endsInANumber(input: string) {\n const parts = input.split(\".\");\n if (parts[parts.length - 1] === \"\") {\n if (parts.length === 1) {\n return false;\n }\n parts.pop();\n }\n\n const last = parts[parts.length - 1];\n if (parseIPv4Number(last) !== failure) {\n return true;\n }\n\n if (/^[0-9]+$/u.test(last)) {\n return true;\n }\n\n return false;\n}\n\nfunction parseOpaqueHost(input: string) {\n if (containsForbiddenHostCodePoint(input)) {\n return failure;\n }\n\n return utf8PercentEncodeString(input, isC0ControlPercentEncode);\n}\n\nfunction findLongestZeroSequence(arr: number[]) {\n let maxIdx = null;\n let maxLen = 1; // only find elements > 1\n let currStart = null;\n let currLen = 0;\n\n for (let i = 0; i < arr.length; ++i) {\n if (arr[i] !== 0) {\n if (currLen > maxLen) {\n maxIdx = currStart;\n maxLen = currLen;\n }\n\n currStart = null;\n currLen = 0;\n } else {\n if (currStart === null) {\n currStart = i;\n }\n ++currLen;\n }\n }\n\n // if trailing zeros\n if (currLen > maxLen) {\n return currStart;\n }\n\n return maxIdx;\n}\n\nfunction serializeHost(host: number | number[] | string) {\n if (typeof host === \"number\") {\n return serializeIPv4(host);\n }\n\n // IPv6 serializer\n if (host instanceof Array) {\n return `[${serializeIPv6(host)}]`;\n }\n\n return host;\n}\n\nimport { punycode } from \"./punycode.js\";\n\nfunction domainToASCII(domain: string, beStrict = false) {\n // const result = tr46.toASCII(domain, {\n // checkBidi: true,\n // checkHyphens: false,\n // checkJoiners: true,\n // useSTD3ASCIIRules: beStrict,\n // verifyDNSLength: beStrict,\n // });\n let result;\n try {\n result = punycode.toASCII(domain);\n } catch (e) {\n return failure;\n }\n if (result === null || result === \"\") {\n return failure;\n }\n return result;\n}\n\nfunction trimControlChars(url: string) {\n return url.replace(/^[\\u0000-\\u001F\\u0020]+|[\\u0000-\\u001F\\u0020]+$/gu, \"\");\n}\n\nfunction trimTabAndNewline(url: string) {\n return url.replace(/\\u0009|\\u000A|\\u000D/gu, \"\");\n}\n\nfunction shortenPath(url: UrlObj) {\n const { path } = url;\n if (path.length === 0) {\n return;\n }\n if (\n url.scheme === \"file\" &&\n path.length === 1 &&\n isNormalizedWindowsDriveLetter(path[0])\n ) {\n return;\n }\n\n path.pop();\n}\n\nfunction includesCredentials(url: UrlObj) {\n return url.username !== \"\" || url.password !== \"\";\n}\n\nfunction cannotHaveAUsernamePasswordPort(url: UrlObj) {\n return url.host === null || url.host === \"\" || url.scheme === \"file\";\n}\n\nfunction hasAnOpaquePath(url: UrlObj) {\n return typeof url.path === \"string\";\n}\n\nfunction isNormalizedWindowsDriveLetter(string: string) {\n return /^[A-Za-z]:$/u.test(string);\n}\n\nexport interface UrlObj {\n scheme: string;\n username: string;\n password: string;\n host: string | number[] | number | null | undefined;\n port: number | null;\n path: string[];\n query: any;\n fragment: any;\n}\n\nclass URLStateMachine {\n pointer: number;\n input: number[];\n base: any;\n encodingOverride: string;\n url: UrlObj;\n state: string;\n stateOverride: string;\n failure: boolean;\n parseError: boolean;\n buffer: string;\n atFlag: boolean;\n arrFlag: boolean;\n passwordTokenSeenFlag: boolean;\n\n constructor(\n input: string,\n base: any,\n encodingOverride: string,\n url: UrlObj,\n stateOverride: string,\n ) {\n this.pointer = 0;\n this.base = base || null;\n this.encodingOverride = encodingOverride || \"utf-8\";\n this.url = url;\n this.failure = false;\n this.parseError = false;\n\n if (!this.url) {\n this.url = {\n scheme: \"\",\n username: \"\",\n password: \"\",\n host: null,\n port: null,\n path: [],\n query: null,\n fragment: null,\n };\n\n const res = trimControlChars(input);\n if (res !== input) {\n this.parseError = true;\n }\n input = res;\n }\n\n const res = trimTabAndNewline(input);\n if (res !== input) {\n this.parseError = true;\n }\n input = res;\n\n this.state = stateOverride || \"scheme start\";\n\n this.buffer = \"\";\n this.atFlag = false;\n this.arrFlag = false;\n this.passwordTokenSeenFlag = false;\n\n this.input = Array.from(input, (c) => c.codePointAt(0)!);\n\n for (; this.pointer <= this.input.length; ++this.pointer) {\n const c = this.input[this.pointer];\n const cStr = isNaN(c) ? undefined : String.fromCodePoint(c);\n\n // exec state machine\n const ret = this.table[`parse ${this.state}`].call(this, c, cStr!);\n if (!ret) {\n break; // terminate algorithm\n } else if (ret === failure) {\n this.failure = true;\n break;\n }\n }\n }\n\n table = {\n \"parse scheme start\": this.parseSchemeStart,\n \"parse scheme\": this.parseScheme,\n \"parse no scheme\": this.parseNoScheme,\n \"parse special relative or authority\": this.parseSpecialRelativeOrAuthority,\n \"parse path or authority\": this.parsePathOrAuthority,\n \"parse relative\": this.parseRelative,\n \"parse relative slash\": this.parseRelativeSlash,\n \"parse special authority slashes\": this.parseSpecialAuthoritySlashes,\n \"parse special authority ignore slashes\":\n this.parseSpecialAuthorityIgnoreSlashes,\n \"parse authority\": this.parseAuthority,\n \"parse host\": this.parseHostName,\n \"parse hostname\": this.parseHostName /* intentional duplication */,\n \"parse port\": this.parsePort,\n \"parse file\": this.parseFile,\n \"parse file slash\": this.parseFileSlash,\n \"parse file host\": this.parseFileHost,\n \"parse path start\": this.parsePathStart,\n \"parse path\": this.parsePath,\n \"parse opaque path\": this.parseOpaquePath,\n \"parse query\": this.parseQuery,\n \"parse fragment\": this.parseFragment,\n } as { [x: string]: (c: number, cStr: string) => any };\n\n parseSchemeStart(c: number, cStr: string) {\n if (isASCIIAlpha(c)) {\n this.buffer += cStr.toLowerCase();\n this.state = \"scheme\";\n } else if (!this.stateOverride) {\n this.state = \"no scheme\";\n --this.pointer;\n } else {\n this.parseError = true;\n return failure;\n }\n\n return true;\n }\n\n parseScheme(c: number, cStr: string) {\n if (\n isASCIIAlphanumeric(c) ||\n c === p(\"+\") ||\n c === p(\"-\") ||\n c === p(\".\")\n ) {\n this.buffer += cStr.toLowerCase();\n } else if (c === p(\":\")) {\n if (this.stateOverride) {\n if (isSpecial(this.url) && !isSpecialScheme(this.buffer)) {\n return false;\n }\n\n if (!isSpecial(this.url) && isSpecialScheme(this.buffer)) {\n return false;\n }\n\n if (\n (includesCredentials(this.url) || this.url.port !== null) &&\n this.buffer === \"file\"\n ) {\n return false;\n }\n\n if (this.url.scheme === \"file\" && this.url.host === \"\") {\n return false;\n }\n }\n this.url.scheme = this.buffer;\n if (this.stateOverride) {\n if (this.url.port === defaultPort(this.url.scheme)) {\n this.url.port = null;\n }\n return false;\n }\n this.buffer = \"\";\n if (this.url.scheme === \"file\") {\n if (\n this.input[this.pointer + 1] !== p(\"/\") ||\n this.input[this.pointer + 2] !== p(\"/\")\n ) {\n this.parseError = true;\n }\n this.state = \"file\";\n } else if (\n isSpecial(this.url) &&\n this.base !== null &&\n this.base.scheme === this.url.scheme\n ) {\n this.state = \"special relative or authority\";\n } else if (isSpecial(this.url)) {\n this.state = \"special authority slashes\";\n } else if (this.input[this.pointer + 1] === p(\"/\")) {\n this.state = \"path or authority\";\n ++this.pointer;\n } else {\n this.url.path = [\"\"];\n this.state = \"opaque path\";\n }\n } else if (!this.stateOverride) {\n this.buffer = \"\";\n this.state = \"no scheme\";\n this.pointer = -1;\n } else {\n this.parseError = true;\n return failure;\n }\n\n return true;\n }\n\n parseNoScheme(c: number) {\n if (this.base === null || (hasAnOpaquePath(this.base) && c !== p(\"#\"))) {\n return failure;\n } else if (hasAnOpaquePath(this.base) && c === p(\"#\")) {\n this.url.scheme = this.base.scheme;\n this.url.path = this.base.path;\n this.url.query = this.base.query;\n this.url.fragment = \"\";\n this.state = \"fragment\";\n } else if (this.base.scheme === \"file\") {\n this.state = \"file\";\n --this.pointer;\n } else {\n this.state = \"relative\";\n --this.pointer;\n }\n\n return true;\n }\n\n parseSpecialRelativeOrAuthority(c: number) {\n if (c === p(\"/\") && this.input[this.pointer + 1] === p(\"/\")) {\n this.state = \"special authority ignore slashes\";\n ++this.pointer;\n } else {\n this.parseError = true;\n this.state = \"relative\";\n --this.pointer;\n }\n\n return true;\n }\n\n parsePathOrAuthority(c: number) {\n if (c === p(\"/\")) {\n this.state = \"authority\";\n } else {\n this.state = \"path\";\n --this.pointer;\n }\n\n return true;\n }\n\n parseRelative(c: number) {\n this.url.scheme = this.base.scheme;\n if (c === p(\"/\")) {\n this.state = \"relative slash\";\n } else if (isSpecial(this.url) && c === p(\"\\\\\")) {\n this.parseError = true;\n this.state = \"relative slash\";\n } else {\n this.url.username = this.base.username;\n this.url.password = this.base.password;\n this.url.host = this.base.host;\n this.url.port = this.base.port;\n this.url.path = this.base.path.slice();\n this.url.query = this.base.query;\n if (c === p(\"?\")) {\n this.url.query = \"\";\n this.state = \"query\";\n } else if (c === p(\"#\")) {\n this.url.fragment = \"\";\n this.state = \"fragment\";\n } else if (!isNaN(c)) {\n this.url.query = null;\n this.url.path.pop();\n this.state = \"path\";\n --this.pointer;\n }\n }\n\n return true;\n }\n\n parseRelativeSlash(c: number) {\n if (isSpecial(this.url) && (c === p(\"/\") || c === p(\"\\\\\"))) {\n if (c === p(\"\\\\\")) {\n this.parseError = true;\n }\n this.state = \"special authority ignore slashes\";\n } else if (c === p(\"/\")) {\n this.state = \"authority\";\n } else {\n this.url.username = this.base.username;\n this.url.password = this.base.password;\n this.url.host = this.base.host;\n this.url.port = this.base.port;\n this.state = \"path\";\n --this.pointer;\n }\n\n return true;\n }\n\n parseSpecialAuthoritySlashes(c: number) {\n if (c === p(\"/\") && this.input[this.pointer + 1] === p(\"/\")) {\n this.state = \"special authority ignore slashes\";\n ++this.pointer;\n } else {\n this.parseError = true;\n this.state = \"special authority ignore slashes\";\n --this.pointer;\n }\n\n return true;\n }\n\n parseSpecialAuthorityIgnoreSlashes(c: number) {\n if (c !== p(\"/\") && c !== p(\"\\\\\")) {\n this.state = \"authority\";\n --this.pointer;\n } else {\n this.parseError = true;\n }\n\n return true;\n }\n\n parseAuthority(c: number, cStr: string) {\n if (c === p(\"@\")) {\n this.parseError = true;\n if (this.atFlag) {\n this.buffer = `%40${this.buffer}`;\n }\n this.atFlag = true;\n\n // careful, this is based on buffer and has its own pointer (this.pointer != pointer) and inner chars\n const len = countSymbols(this.buffer);\n for (let pointer = 0; pointer < len; ++pointer) {\n const codePoint = this.buffer.codePointAt(pointer);\n\n if (codePoint === p(\":\") && !this.passwordTokenSeenFlag) {\n this.passwordTokenSeenFlag = true;\n continue;\n }\n const encodedCodePoints = utf8PercentEncodeCodePoint(\n codePoint!,\n isUserinfoPercentEncode,\n );\n if (this.passwordTokenSeenFlag) {\n this.url.password += encodedCodePoints;\n } else {\n this.url.username += encodedCodePoints;\n }\n }\n this.buffer = \"\";\n } else if (\n isNaN(c) ||\n c === p(\"/\") ||\n c === p(\"?\") ||\n c === p(\"#\") ||\n (isSpecial(this.url) && c === p(\"\\\\\"))\n ) {\n if (this.atFlag && this.buffer === \"\") {\n this.parseError = true;\n return failure;\n }\n this.pointer -= countSymbols(this.buffer) + 1;\n this.buffer = \"\";\n this.state = \"host\";\n } else {\n this.buffer += cStr;\n }\n\n return true;\n }\n\n parseHostName(c: number, cStr: string) {\n if (this.stateOverride && this.url.scheme === \"file\") {\n --this.pointer;\n this.state = \"file host\";\n } else if (c === p(\":\") && !this.arrFlag) {\n if (this.buffer === \"\") {\n this.parseError = true;\n return failure;\n }\n\n if (this.stateOverride === \"hostname\") {\n return false;\n }\n\n const host = parseHost(this.buffer, isNotSpecial(this.url));\n if (host === failure) {\n return failure;\n }\n\n this.url.host = host;\n this.buffer = \"\";\n this.state = \"port\";\n } else if (\n isNaN(c) ||\n c === p(\"/\") ||\n c === p(\"?\") ||\n c === p(\"#\") ||\n (isSpecial(this.url) && c === p(\"\\\\\"))\n ) {\n --this.pointer;\n if (isSpecial(this.url) && this.buffer === \"\") {\n this.parseError = true;\n return failure;\n } else if (\n this.stateOverride &&\n this.buffer === \"\" &&\n (includesCredentials(this.url) || this.url.port !== null)\n ) {\n this.parseError = true;\n return false;\n }\n\n const host = parseHost(this.buffer, isNotSpecial(this.url));\n if (host === failure) {\n return failure;\n }\n\n this.url.host = host;\n this.buffer = \"\";\n this.state = \"path start\";\n if (this.stateOverride) {\n return false;\n }\n } else {\n if (c === p(\"[\")) {\n this.arrFlag = true;\n } else if (c === p(\"]\")) {\n this.arrFlag = false;\n }\n this.buffer += cStr;\n }\n\n return true;\n }\n\n parsePort(c: number, cStr: any) {\n if (isASCIIDigit(c)) {\n this.buffer += cStr;\n } else if (\n isNaN(c) ||\n c === p(\"/\") ||\n c === p(\"?\") ||\n c === p(\"#\") ||\n (isSpecial(this.url) && c === p(\"\\\\\")) ||\n this.stateOverride\n ) {\n if (this.buffer !== \"\") {\n const port = parseInt(this.buffer);\n if (port > 2 ** 16 - 1) {\n this.parseError = true;\n return failure;\n }\n this.url.port = port === defaultPort(this.url.scheme) ? null : port;\n this.buffer = \"\";\n }\n if (this.stateOverride) {\n return false;\n }\n this.state = \"path start\";\n --this.pointer;\n } else {\n this.parseError = true;\n return failure;\n }\n\n return true;\n }\n\n parseFile(c: number) {\n this.url.scheme = \"file\";\n this.url.host = \"\";\n\n if (c === p(\"/\") || c === p(\"\\\\\")) {\n if (c === p(\"\\\\\")) {\n this.parseError = true;\n }\n this.state = \"file slash\";\n } else if (this.base !== null && this.base.scheme === \"file\") {\n this.url.host = this.base.host;\n this.url.path = this.base.path.slice();\n this.url.query = this.base.query;\n if (c === p(\"?\")) {\n this.url.query = \"\";\n this.state = \"query\";\n } else if (c === p(\"#\")) {\n this.url.fragment = \"\";\n this.state = \"fragment\";\n } else if (!isNaN(c)) {\n this.url.query = null;\n if (!startsWithWindowsDriveLetter(this.input, this.pointer)) {\n shortenPath(this.url);\n } else {\n this.parseError = true;\n this.url.path = [];\n }\n\n this.state = \"path\";\n --this.pointer;\n }\n } else {\n this.state = \"path\";\n --this.pointer;\n }\n\n return true;\n }\n\n parseFileSlash(c: number) {\n if (c === p(\"/\") || c === p(\"\\\\\")) {\n if (c === p(\"\\\\\")) {\n this.parseError = true;\n }\n this.state = \"file host\";\n } else {\n if (this.base !== null && this.base.scheme === \"file\") {\n if (\n !startsWithWindowsDriveLetter(this.input, this.pointer) &&\n isNormalizedWindowsDriveLetterString(this.base.path[0])\n ) {\n this.url.path.push(this.base.path[0]);\n }\n this.url.host = this.base.host;\n }\n this.state = \"path\";\n --this.pointer;\n }\n\n return true;\n }\n\n parseFileHost(c: number, cStr: string) {\n if (\n isNaN(c) ||\n c === p(\"/\") ||\n c === p(\"\\\\\") ||\n c === p(\"?\") ||\n c === p(\"#\")\n ) {\n --this.pointer;\n if (!this.stateOverride && isWindowsDriveLetterString(this.buffer)) {\n this.parseError = true;\n this.state = \"path\";\n } else if (this.buffer === \"\") {\n this.url.host = \"\";\n if (this.stateOverride) {\n return false;\n }\n this.state = \"path start\";\n } else {\n let host = parseHost(this.buffer, isNotSpecial(this.url));\n if (host === failure) {\n return failure;\n }\n if (host === \"localhost\") {\n host = \"\";\n }\n this.url.host = host as any;\n\n if (this.stateOverride) {\n return false;\n }\n\n this.buffer = \"\";\n this.state = \"path start\";\n }\n } else {\n this.buffer += cStr;\n }\n\n return true;\n }\n\n parsePathStart(c: number) {\n if (isSpecial(this.url)) {\n if (c === p(\"\\\\\")) {\n this.parseError = true;\n }\n this.state = \"path\";\n\n if (c !== p(\"/\") && c !== p(\"\\\\\")) {\n --this.pointer;\n }\n } else if (!this.stateOverride && c === p(\"?\")) {\n this.url.query = \"\";\n this.state = \"query\";\n } else if (!this.stateOverride && c === p(\"#\")) {\n this.url.fragment = \"\";\n this.state = \"fragment\";\n } else if (c !== undefined) {\n this.state = \"path\";\n if (c !== p(\"/\")) {\n --this.pointer;\n }\n } else if (this.stateOverride && this.url.host === null) {\n this.url.path.push(\"\");\n }\n\n return true;\n }\n\n parsePath(c: number) {\n if (\n isNaN(c) ||\n c === p(\"/\") ||\n (isSpecial(this.url) && c === p(\"\\\\\")) ||\n (!this.stateOverride && (c === p(\"?\") || c === p(\"#\")))\n ) {\n if (isSpecial(this.url) && c === p(\"\\\\\")) {\n this.parseError = true;\n }\n\n if (isDoubleDot(this.buffer)) {\n shortenPath(this.url);\n if (c !== p(\"/\") && !(isSpecial(this.url) && c === p(\"\\\\\"))) {\n this.url.path.push(\"\");\n }\n } else if (\n isSingleDot(this.buffer) &&\n c !== p(\"/\") &&\n !(isSpecial(this.url) && c === p(\"\\\\\"))\n ) {\n this.url.path.push(\"\");\n } else if (!isSingleDot(this.buffer)) {\n if (\n this.url.scheme === \"file\" &&\n this.url.path.length === 0 &&\n isWindowsDriveLetterString(this.buffer)\n ) {\n this.buffer = `${this.buffer[0]}:`;\n }\n this.url.path.push(this.buffer);\n }\n this.buffer = \"\";\n if (c === p(\"?\")) {\n this.url.query = \"\";\n this.state = \"query\";\n }\n if (c === p(\"#\")) {\n this.url.fragment = \"\";\n this.state = \"fragment\";\n }\n } else {\n // TODO: If c is not a URL code point and not \"%\", parse error.\n\n if (\n c === p(\"%\") &&\n (!isASCIIHex(this.input[this.pointer + 1]) ||\n !isASCIIHex(this.input[this.pointer + 2]))\n ) {\n this.parseError = true;\n }\n\n this.buffer += utf8PercentEncodeCodePoint(c, isPathPercentEncode);\n }\n\n return true;\n }\n\n parseOpaquePath(c: number) {\n if (c === p(\"?\")) {\n this.url.query = \"\";\n this.state = \"query\";\n } else if (c === p(\"#\")) {\n this.url.fragment = \"\";\n this.state = \"fragment\";\n } else {\n // TODO: Add: not a URL code point\n if (!isNaN(c) && c !== p(\"%\")) {\n this.parseError = true;\n }\n\n if (\n c === p(\"%\") &&\n (!isASCIIHex(this.input[this.pointer + 1]) ||\n !isASCIIHex(this.input[this.pointer + 2]))\n ) {\n this.parseError = true;\n }\n\n if (!isNaN(c)) {\n // @ts-ignore\n this.url.path += utf8PercentEncodeCodePoint(\n c,\n isC0ControlPercentEncode,\n );\n }\n }\n\n return true;\n }\n\n parseQuery(c: number, cStr: string) {\n if (\n !isSpecial(this.url) ||\n this.url.scheme === \"ws\" ||\n this.url.scheme === \"wss\"\n ) {\n this.encodingOverride = \"utf-8\";\n }\n\n if ((!this.stateOverride && c === p(\"#\")) || isNaN(c)) {\n const queryPercentEncodePredicate = isSpecial(this.url)\n ? isSpecialQueryPercentEncode\n : isQueryPercentEncode;\n this.url.query += utf8PercentEncodeString(\n this.buffer,\n queryPercentEncodePredicate,\n );\n\n this.buffer = \"\";\n\n if (c === p(\"#\")) {\n this.url.fragment = \"\";\n this.state = \"fragment\";\n }\n } else if (!isNaN(c)) {\n // TODO: If c is not a URL code point and not \"%\", parse error.\n\n if (\n c === p(\"%\") &&\n (!isASCIIHex(this.input[this.pointer + 1]) ||\n !isASCIIHex(this.input[this.pointer + 2]))\n ) {\n this.parseError = true;\n }\n\n this.buffer += cStr;\n }\n\n return true;\n }\n\n parseFragment(c: number) {\n if (!isNaN(c)) {\n // TODO: If c is not a URL code point and not \"%\", parse error.\n if (\n c === p(\"%\") &&\n (!isASCIIHex(this.input[this.pointer + 1]) ||\n !isASCIIHex(this.input[this.pointer + 2]))\n ) {\n this.parseError = true;\n }\n\n this.url.fragment += utf8PercentEncodeCodePoint(\n c,\n isFragmentPercentEncode,\n );\n }\n\n return true;\n }\n}\n\nconst fileOtherwiseCodePoints = new Set([p(\"/\"), p(\"\\\\\"), p(\"?\"), p(\"#\")]);\n\nfunction startsWithWindowsDriveLetter(input: number[], pointer: number) {\n const length = input.length - pointer;\n return (\n length >= 2 &&\n isWindowsDriveLetterCodePoints(input[pointer], input[pointer + 1]) &&\n (length === 2 || fileOtherwiseCodePoints.has(input[pointer + 2]))\n );\n}\n\nfunction serializeURL(url: any, excludeFragment?: boolean) {\n let output = `${url.scheme}:`;\n if (url.host !== null) {\n output += \"//\";\n\n if (url.username !== \"\" || url.password !== \"\") {\n output += url.username;\n if (url.password !== \"\") {\n output += `:${url.password}`;\n }\n output += \"@\";\n }\n\n output += serializeHost(url.host);\n\n if (url.port !== null) {\n output += `:${url.port}`;\n }\n }\n\n if (\n url.host === null &&\n !hasAnOpaquePath(url) &&\n url.path.length > 1 &&\n url.path[0] === \"\"\n ) {\n output += \"/.\";\n }\n output += serializePath(url);\n\n if (url.query !== null) {\n output += `?${url.query}`;\n }\n\n if (!excludeFragment && url.fragment !== null) {\n output += `#${url.fragment}`;\n }\n\n return output;\n}\n\nfunction serializeOrigin(tuple: {\n scheme: string;\n port: number;\n host: number | number[] | string;\n}) {\n let result = `${tuple.scheme}://`;\n result += serializeHost(tuple.host);\n\n if (tuple.port !== null) {\n result += `:${tuple.port}`;\n }\n\n return result;\n}\n\nfunction serializePath(url: UrlObj): string {\n if (typeof url.path === \"string\") {\n return url.path;\n }\n\n let output = \"\";\n for (const segment of url.path) {\n output += `/${segment}`;\n }\n return output;\n}\n\nfunction serializeURLOrigin(url: any): any {\n // https://url.spec.whatwg.org/#concept-url-origin\n switch (url.scheme) {\n case \"blob\":\n try {\n return serializeURLOrigin(parseURL(serializePath(url)));\n } catch (e) {\n // serializing an opaque origin returns \"null\"\n return \"null\";\n }\n case \"ftp\":\n case \"http\":\n case \"https\":\n case \"ws\":\n case \"wss\":\n return serializeOrigin({\n scheme: url.scheme,\n host: url.host,\n port: url.port,\n });\n case \"file\":\n // The spec says:\n // > Unfortunate as it is, this is left as an exercise to the reader. When in doubt, return a new opaque origin.\n // Browsers tested so far:\n // - Chrome says \"file://\", but treats file: URLs as cross-origin for most (all?) purposes; see e.g.\n // https://bugs.chromium.org/p/chromium/issues/detail?id=37586\n // - Firefox says \"null\", but treats file: URLs as same-origin sometimes based on directory stuff; see\n // https://developer.mozilla.org/en-US/docs/Archive/Misc_top_level/Same-origin_policy_for_file:_URIs\n return \"null\";\n default:\n // serializing an opaque origin returns \"null\"\n return \"null\";\n }\n}\n\nexport function basicURLParse(input: string, options?: any) {\n if (options === undefined) {\n options = {};\n }\n\n const usm = new URLStateMachine(\n input,\n options.baseURL,\n options.encodingOverride,\n options.url,\n options.stateOverride,\n );\n\n if (usm.failure) {\n return null;\n }\n\n return usm.url;\n}\n\nfunction setTheUsername(url: UrlObj, username: string) {\n url.username = utf8PercentEncodeString(username, isUserinfoPercentEncode);\n}\n\nfunction setThePassword(url: UrlObj, password: string) {\n url.password = utf8PercentEncodeString(password, isUserinfoPercentEncode);\n}\n\nfunction serializeInteger(integer: number) {\n return String(integer);\n}\n\nfunction parseURL(\n input: any,\n options?: { baseURL?: any; encodingOverride?: any },\n) {\n if (options === undefined) {\n options = {};\n }\n\n // We don't handle blobs, so this just delegates:\n return basicURLParse(input, {\n baseURL: options.baseURL,\n encodingOverride: options.encodingOverride,\n });\n}\n\nexport class URLImpl {\n constructor(url: string, base?: string) {\n let parsedBase = null;\n if (base !== undefined) {\n parsedBase = basicURLParse(base);\n if (parsedBase === null) {\n throw new TypeError(`Invalid base URL: ${base}`);\n }\n }\n\n const parsedURL = basicURLParse(url, { baseURL: parsedBase });\n if (parsedURL === null) {\n throw new TypeError(`Invalid URL: ${url}`);\n }\n\n const query = parsedURL.query !== null ? parsedURL.query : \"\";\n\n this._url = parsedURL;\n\n // We cannot invoke the \"new URLSearchParams object\" algorithm without going through the constructor, which strips\n // question mark by default. Therefore the doNotStripQMark hack is used.\n this._query = new URLSearchParamsImpl(query, {\n doNotStripQMark: true,\n });\n this._query._url = this;\n }\n\n get href() {\n return serializeURL(this._url);\n }\n\n set href(v) {\n const parsedURL = basicURLParse(v);\n if (parsedURL === null) {\n throw new TypeError(`Invalid URL: ${v}`);\n }\n\n this._url = parsedURL;\n\n this._query._list.splice(0);\n const { query } = parsedURL;\n if (query !== null) {\n this._query._list = parseUrlencodedString(query);\n }\n }\n\n get origin() {\n return serializeURLOrigin(this._url);\n }\n\n get protocol() {\n return `${this._url.scheme}:`;\n }\n\n set protocol(v) {\n basicURLParse(`${v}:`, {\n url: this._url,\n stateOverride: \"scheme start\",\n });\n }\n\n get username() {\n return this._url.username;\n }\n\n set username(v) {\n if (cannotHaveAUsernamePasswordPort(this._url)) {\n return;\n }\n\n setTheUsername(this._url, v);\n }\n\n get password() {\n return this._url.password;\n }\n\n set password(v) {\n if (cannotHaveAUsernamePasswordPort(this._url)) {\n return;\n }\n\n setThePassword(this._url, v);\n }\n\n get host() {\n const url = this._url;\n\n if (url.host === null) {\n return \"\";\n }\n\n if (url.port === null) {\n return serializeHost(url.host);\n }\n\n return `${serializeHost(url.host)}:${serializeInteger(url.port)}`;\n }\n\n set host(v) {\n if (hasAnOpaquePath(this._url)) {\n return;\n }\n\n basicURLParse(v, { url: this._url, stateOverride: \"host\" });\n }\n\n get hostname() {\n if (this._url.host === null) {\n return \"\";\n }\n\n return serializeHost(this._url.host);\n }\n\n set hostname(v) {\n if (hasAnOpaquePath(this._url)) {\n return;\n }\n\n basicURLParse(v, { url: this._url, stateOverride: \"hostname\" });\n }\n\n get port() {\n if (this._url.port === null) {\n return \"\";\n }\n\n return serializeInteger(this._url.port);\n }\n\n set port(v) {\n if (cannotHaveAUsernamePasswordPort(this._url)) {\n return;\n }\n\n if (v === \"\") {\n this._url.port = null;\n } else {\n basicURLParse(v, { url: this._url, stateOverride: \"port\" });\n }\n }\n\n get pathname() {\n return serializePath(this._url);\n }\n\n set pathname(v: string) {\n if (hasAnOpaquePath(this._url)) {\n return;\n }\n\n this._url.path = [];\n basicURLParse(v, { url: this._url, stateOverride: \"path start\" });\n }\n\n get search() {\n if (this._url.query === null || this._url.query === \"\") {\n return \"\";\n }\n\n return `?${this._url.query}`;\n }\n\n set search(v) {\n const url = this._url;\n\n if (v === \"\") {\n url.query = null;\n this._query._list = [];\n return;\n }\n\n const input = v[0] === \"?\" ? v.substring(1) : v;\n url.query = \"\";\n basicURLParse(input, { url, stateOverride: \"query\" });\n this._query._list = parseUrlencodedString(input);\n }\n\n get searchParams() {\n return this._query;\n }\n\n get hash() {\n if (this._url.fragment === null || this._url.fragment === \"\") {\n return \"\";\n }\n\n return `#${this._url.fragment}`;\n }\n\n set hash(v) {\n if (v === \"\") {\n this._url.fragment = null;\n return;\n }\n\n const input = v[0] === \"#\" ? v.substring(1) : v;\n this._url.fragment = \"\";\n basicURLParse(input, { url: this._url, stateOverride: \"fragment\" });\n }\n\n toJSON() {\n return this.href;\n }\n\n // FIXME: type!\n _url: any;\n _query: any;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2020 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\nimport { URLImpl, URLSearchParamsImpl } from \"./whatwg-url.js\";\n\ninterface URL {\n hash: string;\n host: string;\n hostname: string;\n href: string;\n toString(): string;\n readonly origin: string;\n password: string;\n pathname: string;\n port: string;\n protocol: string;\n search: string;\n readonly searchParams: URLSearchParams;\n username: string;\n toJSON(): string;\n}\n\ninterface URLSearchParams {\n append(name: string, value: string): void;\n delete(name: string): void;\n get(name: string): string | null;\n getAll(name: string): string[];\n has(name: string): boolean;\n set(name: string, value: string): void;\n sort(): void;\n toString(): string;\n forEach(\n callbackfn: (value: string, key: string, parent: URLSearchParams) => void,\n thisArg?: any,\n ): void;\n entries(): IterableIterator<[string, string]>;\n keys(): IterableIterator<string>;\n values(): IterableIterator<string>;\n [Symbol.iterator](): IterableIterator<[string, string]>;\n}\n\nexport interface URLSearchParamsCtor {\n new (\n init?:\n | URLSearchParams\n | string\n | Record<string, string | ReadonlyArray<string>>\n | Iterable<[string, string]>\n | ReadonlyArray<[string, string]>,\n ): URLSearchParams;\n}\n\nexport interface URLCtor {\n new (url: string, base?: string | URL): URL;\n}\n\n// globalThis polyfill, see https://mathiasbynens.be/notes/globalthis\n(function () {\n if (typeof globalThis === \"object\") return;\n Object.defineProperty(Object.prototype, \"__magic__\", {\n get: function () {\n return this;\n },\n configurable: true, // This makes it possible to `delete` the getter later.\n });\n // @ts-ignore: polyfill magic\n __magic__.globalThis = __magic__; // lolwat\n // @ts-ignore: polyfill magic\n delete Object.prototype.__magic__;\n})();\n\n// Use native or pure JS URL implementation?\nconst useOwnUrlImp = true;\n\n// @ts-ignore\nlet _URL = globalThis.URL;\nif (useOwnUrlImp || !_URL) {\n // @ts-ignore\n globalThis.URL = _URL = URLImpl;\n // @ts-ignore\n _URL = URLImpl;\n}\n\nexport const URL: URLCtor = _URL;\n\n// @ts-ignore\nlet _URLSearchParams = globalThis.URLSearchParams;\n\nif (useOwnUrlImp || !_URLSearchParams) {\n // @ts-ignore\n globalThis.URLSearchParams = URLSearchParamsImpl;\n // @ts-ignore\n _URLSearchParams = URLSearchParamsImpl;\n}\n\nexport const URLSearchParams: URLSearchParamsCtor = _URLSearchParams;\n", "/*\n This file is part of TALER\n (C) 2016 GNUnet e.V.\n\n TALER is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n TALER is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n * Small helper functions that don't fit anywhere else.\n */\n\n/**\n * Imports.\n */\nimport { AmountJson } from \"./amounts.js\";\nimport * as Amounts from \"./amounts.js\";\nimport { URL } from \"./url.js\";\n\n/**\n * Show an amount in a form suitable for the user.\n * FIXME: In the future, this should consider currency-specific\n * settings such as significant digits or currency symbols.\n */\nexport function amountToPretty(amount: AmountJson): string {\n const x = amount.value + amount.fraction / Amounts.amountFractionalBase;\n return `${x} ${amount.currency}`;\n}\n\n/**\n * Canonicalize a base url, typically for the exchange.\n *\n * See http://api.taler.net/wallet.html#general\n */\nexport function canonicalizeBaseUrl(url: string): string {\n if (!url.startsWith(\"http\") && !url.startsWith(\"https\")) {\n url = \"https://\" + url;\n }\n const x = new URL(url);\n if (!x.pathname.endsWith(\"/\")) {\n x.pathname = x.pathname + \"/\";\n }\n x.search = \"\";\n x.hash = \"\";\n return x.href;\n}\n\n/**\n * Convert object to JSON with canonical ordering of keys\n * and whitespace omitted.\n *\n * See RFC 4885 (https://tools.ietf.org/html/rfc8785).\n */\nexport function canonicalJson(obj: any): string {\n // Check for cycles, etc.\n obj = JSON.parse(JSON.stringify(obj));\n if (typeof obj === \"string\") {\n return JSON.stringify(obj);\n }\n if (typeof obj === \"number\" || typeof obj === \"boolean\" || obj === null) {\n return JSON.stringify(obj);\n }\n if (Array.isArray(obj)) {\n const objs: string[] = obj.map((e) => canonicalJson(e));\n return `[${objs.join(\",\")}]`;\n }\n const keys: string[] = [];\n for (const key in obj) {\n keys.push(key);\n }\n keys.sort();\n let s = \"{\";\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n s += JSON.stringify(key) + \":\" + canonicalJson(obj[key]);\n if (i !== keys.length - 1) {\n s += \",\";\n }\n }\n return s + \"}\";\n}\n\n/**\n * Lexically compare two strings.\n */\nexport function strcmp(s1: string, s2: string): -1 | 0 | 1 {\n if (s1 < s2) {\n return -1;\n }\n if (s1 > s2) {\n return 1;\n }\n return 0;\n}\n\n/**\n * Shorthand function for formatted JSON stringification.\n */\nexport function j2s(x: any): string {\n return JSON.stringify(x, undefined, 2);\n}\n\n/**\n * Use this to filter null or undefined from an array in a type-safe fashion\n *\n * example:\n * const array: Array<T | undefined> = [undefined, null]\n * const filtered: Array<T> = array.filter(notEmpty)\n *\n * @param value\n * @returns\n */\nexport function notEmpty<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined;\n}\n\n/**\n * Safe function to stringify errors.\n */\nexport function stringifyError(x: any): string {\n if (typeof x === \"undefined\") {\n return \"<thrown undefined>\";\n }\n if (x === null) {\n return `<thrown null>`;\n }\n if (typeof x === \"object\") {\n return x.toString();\n }\n return `<thrown ${typeof x}>`;\n}\n", "/*\n This file is part of TALER\n (C) 2017 GNUnet e.V.\n\n TALER is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n TALER is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n * Semantic versioning, but libtool-style.\n * See https://www.gnu.org/software/libtool/manual/html_node/Libtool-versioning.html\n */\n\n/**\n * Result of comparing two libtool versions.\n */\nexport interface VersionMatchResult {\n /**\n * Is the first version compatible with the second?\n */\n compatible: boolean;\n\n /**\n * Is the first version older (-1), newer (+1) or\n * identical (0)?\n */\n currentCmp: number;\n}\n\nexport interface Version {\n current: number;\n revision: number;\n age: number;\n}\n\nexport namespace LibtoolVersion {\n /**\n * Compare two libtool-style version strings.\n */\n export function compare(\n me: string,\n other: string,\n ): VersionMatchResult | undefined {\n const meVer = parseVersion(me);\n const otherVer = parseVersion(other);\n\n if (!(meVer && otherVer)) {\n return undefined;\n }\n\n const compatible =\n meVer.current - meVer.age <= otherVer.current &&\n meVer.current >= otherVer.current - otherVer.age;\n\n const currentCmp = Math.sign(meVer.current - otherVer.current);\n\n return { compatible, currentCmp };\n }\n\n export function parseVersion(v: string): Version | undefined {\n const [currentStr, revisionStr, ageStr, ...rest] = v.split(\":\");\n if (rest.length !== 0) {\n return undefined;\n }\n const current = Number.parseInt(currentStr);\n const revision = Number.parseInt(revisionStr);\n const age = Number.parseInt(ageStr);\n\n if (Number.isNaN(current)) {\n return undefined;\n }\n\n if (Number.isNaN(revision)) {\n return undefined;\n }\n\n if (Number.isNaN(age)) {\n return undefined;\n }\n\n return { current, revision, age };\n }\n}\n", "/*\n This file is part of GNU Taler\n (C) 2019 GNUnet e.V.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n * Type and schema definitions for notifications from the wallet to clients\n * of the wallet.\n */\n\n/**\n * Imports.\n */\nimport { TalerErrorDetail } from \"./wallet-types.js\";\n\nexport enum NotificationType {\n CoinWithdrawn = \"coin-withdrawn\",\n ProposalAccepted = \"proposal-accepted\",\n ProposalDownloaded = \"proposal-downloaded\",\n RefundsSubmitted = \"refunds-submitted\",\n RecoupStarted = \"recoup-started\",\n RecoupFinished = \"recoup-finished\",\n RefreshRevealed = \"refresh-revealed\",\n RefreshMelted = \"refresh-melted\",\n RefreshStarted = \"refresh-started\",\n RefreshUnwarranted = \"refresh-unwarranted\",\n ReserveUpdated = \"reserve-updated\",\n ReserveConfirmed = \"reserve-confirmed\",\n ReserveCreated = \"reserve-created\",\n WithdrawGroupCreated = \"withdraw-group-created\",\n WithdrawGroupFinished = \"withdraw-group-finished\",\n WaitingForRetry = \"waiting-for-retry\",\n RefundStarted = \"refund-started\",\n RefundQueried = \"refund-queried\",\n RefundFinished = \"refund-finished\",\n ExchangeOperationError = \"exchange-operation-error\",\n ExchangeAdded = \"exchange-added\",\n RefreshOperationError = \"refresh-operation-error\",\n RecoupOperationError = \"recoup-operation-error\",\n RefundApplyOperationError = \"refund-apply-error\",\n RefundStatusOperationError = \"refund-status-error\",\n ProposalOperationError = \"proposal-error\",\n BackupOperationError = \"backup-error\",\n TipOperationError = \"tip-error\",\n PayOperationError = \"pay-error\",\n PayOperationSuccess = \"pay-operation-success\",\n WithdrawOperationError = \"withdraw-error\",\n ReserveNotYetFound = \"reserve-not-yet-found\",\n ReserveOperationError = \"reserve-error\",\n InternalError = \"internal-error\",\n PendingOperationProcessed = \"pending-operation-processed\",\n ProposalRefused = \"proposal-refused\",\n ReserveRegisteredWithBank = \"reserve-registered-with-bank\",\n WithdrawalGroupKycRequested = \"withdrawal-group-kyc-requested\",\n WithdrawalGroupBankConfirmed = \"withdrawal-group-bank-confirmed\",\n WithdrawalGroupReserveReady = \"withdrawal-group-reserve-ready\",\n PeerPullCreditReady = \"peer-pull-credit-ready\",\n DepositOperationError = \"deposit-operation-error\",\n}\n\nexport interface ProposalAcceptedNotification {\n type: NotificationType.ProposalAccepted;\n proposalId: string;\n}\n\nexport interface InternalErrorNotification {\n type: NotificationType.InternalError;\n message: string;\n exception: any;\n}\n\nexport interface ReserveNotYetFoundNotification {\n type: NotificationType.ReserveNotYetFound;\n reservePub: string;\n}\n\nexport interface CoinWithdrawnNotification {\n type: NotificationType.CoinWithdrawn;\n numWithdrawn: number;\n numTotal: number;\n}\n\nexport interface RefundStartedNotification {\n type: NotificationType.RefundStarted;\n}\n\nexport interface RefundQueriedNotification {\n type: NotificationType.RefundQueried;\n /**\n * Transaction ID of the purchase (NOT the refund transaction).\n */\n transactionId: string;\n}\n\nexport interface ProposalDownloadedNotification {\n type: NotificationType.ProposalDownloaded;\n proposalId: string;\n}\n\nexport interface RefundsSubmittedNotification {\n type: NotificationType.RefundsSubmitted;\n proposalId: string;\n}\n\nexport interface RecoupStartedNotification {\n type: NotificationType.RecoupStarted;\n}\n\nexport interface RecoupFinishedNotification {\n type: NotificationType.RecoupFinished;\n}\n\nexport interface RefreshMeltedNotification {\n type: NotificationType.RefreshMelted;\n}\n\nexport interface WithdrawalGroupKycRequested {\n type: NotificationType.WithdrawalGroupKycRequested;\n transactionId: string;\n kycUrl: string;\n}\n\nexport interface WithdrawalGroupBankConfirmed {\n type: NotificationType.WithdrawalGroupBankConfirmed;\n transactionId: string;\n}\n\nexport interface WithdrawalGroupReserveReadyNotification {\n type: NotificationType.WithdrawalGroupReserveReady;\n transactionId: string;\n}\n\n/**\n * The purse creation of a peer-pull-credit transaction\n * is done, and the other party can now pay.\n */\nexport interface PeerPullCreditReadyNotification {\n type: NotificationType.PeerPullCreditReady;\n transactionId: string;\n}\n\nexport interface RefreshRevealedNotification {\n type: NotificationType.RefreshRevealed;\n}\n\nexport interface RefreshStartedNotification {\n type: NotificationType.RefreshStarted;\n}\n\nexport interface RefreshRefusedNotification {\n type: NotificationType.RefreshUnwarranted;\n}\n\nexport interface ReserveConfirmedNotification {\n type: NotificationType.ReserveConfirmed;\n}\n\nexport interface WithdrawalGroupCreatedNotification {\n type: NotificationType.WithdrawGroupCreated;\n withdrawalGroupId: string;\n}\n\nexport interface WithdrawalGroupFinishedNotification {\n type: NotificationType.WithdrawGroupFinished;\n reservePub: string;\n}\n\nexport interface WaitingForRetryNotification {\n type: NotificationType.WaitingForRetry;\n numPending: number;\n numGivingLiveness: number;\n numDue: number;\n}\n\nexport interface RefundFinishedNotification {\n type: NotificationType.RefundFinished;\n\n /**\n * Transaction ID of the purchase (NOT the refund transaction).\n */\n transactionId: string;\n}\n\nexport interface ExchangeAddedNotification {\n type: NotificationType.ExchangeAdded;\n}\n\nexport interface ExchangeOperationErrorNotification {\n type: NotificationType.ExchangeOperationError;\n error: TalerErrorDetail;\n}\n\nexport interface RefreshOperationErrorNotification {\n type: NotificationType.RefreshOperationError;\n error: TalerErrorDetail;\n}\n\nexport interface BackupOperationErrorNotification {\n type: NotificationType.BackupOperationError;\n error: TalerErrorDetail;\n}\n\nexport interface RefundStatusOperationErrorNotification {\n type: NotificationType.RefundStatusOperationError;\n error: TalerErrorDetail;\n}\n\nexport interface RefundApplyOperationErrorNotification {\n type: NotificationType.RefundApplyOperationError;\n error: TalerErrorDetail;\n}\n\nexport interface PayOperationErrorNotification {\n type: NotificationType.PayOperationError;\n error: TalerErrorDetail;\n}\n\nexport interface ProposalOperationErrorNotification {\n type: NotificationType.ProposalOperationError;\n error: TalerErrorDetail;\n}\n\nexport interface TipOperationErrorNotification {\n type: NotificationType.TipOperationError;\n error: TalerErrorDetail;\n}\n\nexport interface WithdrawOperationErrorNotification {\n type: NotificationType.WithdrawOperationError;\n error: TalerErrorDetail;\n}\n\nexport interface RecoupOperationErrorNotification {\n type: NotificationType.RecoupOperationError;\n error: TalerErrorDetail;\n}\n\nexport interface DepositOperationErrorNotification {\n type: NotificationType.DepositOperationError;\n error: TalerErrorDetail;\n}\n\nexport interface ReserveOperationErrorNotification {\n type: NotificationType.ReserveOperationError;\n error: TalerErrorDetail;\n}\n\nexport interface ReserveCreatedNotification {\n type: NotificationType.ReserveCreated;\n reservePub: string;\n}\n\nexport interface PendingOperationProcessedNotification {\n type: NotificationType.PendingOperationProcessed;\n id: string;\n}\n\nexport interface ProposalRefusedNotification {\n type: NotificationType.ProposalRefused;\n}\n\nexport interface ReserveRegisteredWithBankNotification {\n type: NotificationType.ReserveRegisteredWithBank;\n}\n\n/**\n * Notification sent when a pay (or pay replay) operation succeeded.\n *\n * We send this notification because the confirmPay request can return\n * a \"confirmed\" response that indicates that the payment has been confirmed\n * by the user, but we're still waiting for the payment to succeed or fail.\n */\nexport interface PayOperationSuccessNotification {\n type: NotificationType.PayOperationSuccess;\n proposalId: string;\n}\n\nexport type WalletNotification =\n | BackupOperationErrorNotification\n | WithdrawOperationErrorNotification\n | ReserveOperationErrorNotification\n | ExchangeAddedNotification\n | ExchangeOperationErrorNotification\n | RefreshOperationErrorNotification\n | RefundStatusOperationErrorNotification\n | RefundApplyOperationErrorNotification\n | ProposalOperationErrorNotification\n | PayOperationErrorNotification\n | TipOperationErrorNotification\n | ProposalAcceptedNotification\n | ProposalDownloadedNotification\n | RefundsSubmittedNotification\n | RecoupStartedNotification\n | RecoupFinishedNotification\n | RefreshMeltedNotification\n | RefreshRevealedNotification\n | RefreshStartedNotification\n | RefreshRefusedNotification\n | ReserveCreatedNotification\n | ReserveConfirmedNotification\n | WithdrawalGroupFinishedNotification\n | WaitingForRetryNotification\n | RefundStartedNotification\n | RefundFinishedNotification\n | RefundQueriedNotification\n | WithdrawalGroupCreatedNotification\n | CoinWithdrawnNotification\n | RecoupOperationErrorNotification\n | DepositOperationErrorNotification\n | InternalErrorNotification\n | PendingOperationProcessedNotification\n | ProposalRefusedNotification\n | ReserveRegisteredWithBankNotification\n | ReserveNotYetFoundNotification\n | PayOperationSuccessNotification\n | WithdrawalGroupKycRequested\n | WithdrawalGroupBankConfirmed\n | WithdrawalGroupReserveReadyNotification\n | PeerPullCreditReadyNotification;\n", "// SHA-256 for JavaScript.\n//\n// Written in 2014-2016 by Dmitry Chestnykh.\n// Public domain, no warranty.\n//\n// Functions (accept and return Uint8Arrays):\n//\n// sha256(message) -> hash\n// sha256.hmac(key, message) -> mac\n//\n// Classes:\n//\n// new sha256.Hash()\nexport const digestLength = 32;\nexport const blockSize = 64;\n\n// SHA-256 constants\nconst K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1,\n 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786,\n 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b,\n 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a,\n 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n]);\n\nfunction hashBlocks(\n w: Int32Array,\n v: Int32Array,\n p: Uint8Array,\n pos: number,\n len: number,\n): number {\n let a: number,\n b: number,\n c: number,\n d: number,\n e: number,\n f: number,\n g: number,\n h: number,\n u: number,\n i: number,\n j: number,\n t1: number,\n t2: number;\n while (len >= 64) {\n a = v[0];\n b = v[1];\n c = v[2];\n d = v[3];\n e = v[4];\n f = v[5];\n g = v[6];\n h = v[7];\n\n for (i = 0; i < 16; i++) {\n j = pos + i * 4;\n w[i] =\n ((p[j] & 0xff) << 24) |\n ((p[j + 1] & 0xff) << 16) |\n ((p[j + 2] & 0xff) << 8) |\n (p[j + 3] & 0xff);\n }\n\n for (i = 16; i < 64; i++) {\n u = w[i - 2];\n t1 =\n ((u >>> 17) | (u << (32 - 17))) ^\n ((u >>> 19) | (u << (32 - 19))) ^\n (u >>> 10);\n\n u = w[i - 15];\n t2 =\n ((u >>> 7) | (u << (32 - 7))) ^\n ((u >>> 18) | (u << (32 - 18))) ^\n (u >>> 3);\n\n w[i] = ((t1 + w[i - 7]) | 0) + ((t2 + w[i - 16]) | 0);\n }\n\n for (i = 0; i < 64; i++) {\n t1 =\n ((((((e >>> 6) | (e << (32 - 6))) ^\n ((e >>> 11) | (e << (32 - 11))) ^\n ((e >>> 25) | (e << (32 - 25)))) +\n ((e & f) ^ (~e & g))) |\n 0) +\n ((h + ((K[i] + w[i]) | 0)) | 0)) |\n 0;\n\n t2 =\n ((((a >>> 2) | (a << (32 - 2))) ^\n ((a >>> 13) | (a << (32 - 13))) ^\n ((a >>> 22) | (a << (32 - 22)))) +\n ((a & b) ^ (a & c) ^ (b & c))) |\n 0;\n\n h = g;\n g = f;\n f = e;\n e = (d + t1) | 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) | 0;\n }\n\n v[0] += a;\n v[1] += b;\n v[2] += c;\n v[3] += d;\n v[4] += e;\n v[5] += f;\n v[6] += g;\n v[7] += h;\n\n pos += 64;\n len -= 64;\n }\n return pos;\n}\n\n// Hash implements SHA256 hash algorithm.\nexport class HashSha256 {\n digestLength: number = digestLength;\n blockSize: number = blockSize;\n\n // Note: Int32Array is used instead of Uint32Array for performance reasons.\n private state: Int32Array = new Int32Array(8); // hash state\n private temp: Int32Array = new Int32Array(64); // temporary state\n private buffer: Uint8Array = new Uint8Array(128); // buffer for data to hash\n private bufferLength = 0; // number of bytes in buffer\n private bytesHashed = 0; // number of total bytes hashed\n\n finished = false; // indicates whether the hash was finalized\n\n constructor() {\n this.reset();\n }\n\n // Resets hash state making it possible\n // to re-use this instance to hash other data.\n reset(): this {\n this.state[0] = 0x6a09e667;\n this.state[1] = 0xbb67ae85;\n this.state[2] = 0x3c6ef372;\n this.state[3] = 0xa54ff53a;\n this.state[4] = 0x510e527f;\n this.state[5] = 0x9b05688c;\n this.state[6] = 0x1f83d9ab;\n this.state[7] = 0x5be0cd19;\n this.bufferLength = 0;\n this.bytesHashed = 0;\n this.finished = false;\n return this;\n }\n\n // Cleans internal buffers and re-initializes hash state.\n clean(): void {\n for (let i = 0; i < this.buffer.length; i++) {\n this.buffer[i] = 0;\n }\n for (let i = 0; i < this.temp.length; i++) {\n this.temp[i] = 0;\n }\n this.reset();\n }\n\n // Updates hash state with the given data.\n //\n // Optionally, length of the data can be specified to hash\n // fewer bytes than data.length.\n //\n // Throws error when trying to update already finalized hash:\n // instance must be reset to use it again.\n update(data: Uint8Array, dataLength: number = data.length): this {\n if (this.finished) {\n throw new Error(\"SHA256: can't update because hash was finished.\");\n }\n let dataPos = 0;\n this.bytesHashed += dataLength;\n if (this.bufferLength > 0) {\n while (this.bufferLength < 64 && dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n if (this.bufferLength === 64) {\n hashBlocks(this.temp, this.state, this.buffer, 0, 64);\n this.bufferLength = 0;\n }\n }\n if (dataLength >= 64) {\n dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength);\n dataLength %= 64;\n }\n while (dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n return this;\n }\n\n // Finalizes hash state and puts hash into out.\n //\n // If hash was already finalized, puts the same value.\n finish(out: Uint8Array): this {\n if (!this.finished) {\n const bytesHashed = this.bytesHashed;\n const left = this.bufferLength;\n const bitLenHi = (bytesHashed / 0x20000000) | 0;\n const bitLenLo = bytesHashed << 3;\n const padLength = bytesHashed % 64 < 56 ? 64 : 128;\n\n this.buffer[left] = 0x80;\n for (let i = left + 1; i < padLength - 8; i++) {\n this.buffer[i] = 0;\n }\n this.buffer[padLength - 8] = (bitLenHi >>> 24) & 0xff;\n this.buffer[padLength - 7] = (bitLenHi >>> 16) & 0xff;\n this.buffer[padLength - 6] = (bitLenHi >>> 8) & 0xff;\n this.buffer[padLength - 5] = (bitLenHi >>> 0) & 0xff;\n this.buffer[padLength - 4] = (bitLenLo >>> 24) & 0xff;\n this.buffer[padLength - 3] = (bitLenLo >>> 16) & 0xff;\n this.buffer[padLength - 2] = (bitLenLo >>> 8) & 0xff;\n this.buffer[padLength - 1] = (bitLenLo >>> 0) & 0xff;\n\n hashBlocks(this.temp, this.state, this.buffer, 0, padLength);\n\n this.finished = true;\n }\n\n for (let i = 0; i < 8; i++) {\n out[i * 4 + 0] = (this.state[i] >>> 24) & 0xff;\n out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n }\n\n return this;\n }\n\n // Returns the final hash digest.\n digest(): Uint8Array {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n }\n\n // Internal function for use in HMAC for optimization.\n _saveState(out: Uint32Array): void {\n for (let i = 0; i < this.state.length; i++) {\n out[i] = this.state[i];\n }\n }\n\n // Internal function for use in HMAC for optimization.\n _restoreState(from: Uint32Array, bytesHashed: number): void {\n for (let i = 0; i < this.state.length; i++) {\n this.state[i] = from[i];\n }\n this.bytesHashed = bytesHashed;\n this.finished = false;\n this.bufferLength = 0;\n }\n}\n\n// HMAC implements HMAC-SHA256 message authentication algorithm.\nexport class HMAC {\n private inner: HashSha256 = new HashSha256();\n private outer: HashSha256 = new HashSha256();\n\n blockSize: number = this.inner.blockSize;\n digestLength: number = this.inner.digestLength;\n\n // Copies of hash states after keying.\n // Need for quick reset without hashing they key again.\n private istate: Uint32Array;\n private ostate: Uint32Array;\n\n constructor(key: Uint8Array) {\n const pad = new Uint8Array(this.blockSize);\n if (key.length > this.blockSize) {\n new HashSha256().update(key).finish(pad).clean();\n } else {\n for (let i = 0; i < key.length; i++) {\n pad[i] = key[i];\n }\n }\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36;\n }\n this.inner.update(pad);\n\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36 ^ 0x5c;\n }\n this.outer.update(pad);\n\n this.istate = new Uint32Array(8);\n this.ostate = new Uint32Array(8);\n\n this.inner._saveState(this.istate);\n this.outer._saveState(this.ostate);\n\n for (let i = 0; i < pad.length; i++) {\n pad[i] = 0;\n }\n }\n\n // Returns HMAC state to the state initialized with key\n // to make it possible to run HMAC over the other data with the same\n // key without creating a new instance.\n reset(): this {\n this.inner._restoreState(this.istate, this.inner.blockSize);\n this.outer._restoreState(this.ostate, this.outer.blockSize);\n return this;\n }\n\n // Cleans HMAC state.\n clean(): void {\n for (let i = 0; i < this.istate.length; i++) {\n this.ostate[i] = this.istate[i] = 0;\n }\n this.inner.clean();\n this.outer.clean();\n }\n\n // Updates state with provided data.\n update(data: Uint8Array): this {\n this.inner.update(data);\n return this;\n }\n\n // Finalizes HMAC and puts the result in out.\n finish(out: Uint8Array): this {\n if (this.outer.finished) {\n this.outer.finish(out);\n } else {\n this.inner.finish(out);\n this.outer.update(out, this.digestLength).finish(out);\n }\n return this;\n }\n\n // Returns message authentication code.\n digest(): Uint8Array {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n }\n}\n\n// Returns SHA256 hash of data.\nexport function sha256(data: Uint8Array): Uint8Array {\n const h = new HashSha256().update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\n\n// Returns HMAC-SHA256 of data under the key.\nexport function hmacSha256(key: Uint8Array, data: Uint8Array): Uint8Array {\n const h = new HMAC(key).update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2019 GNUnet e.V.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\nimport * as nacl from \"./nacl-fast.js\";\nimport { sha256 } from \"./sha256.js\";\n\nexport function sha512(data: Uint8Array): Uint8Array {\n return nacl.hash(data);\n}\n\nexport function hmac(\n digest: (d: Uint8Array) => Uint8Array,\n blockSize: number,\n key: Uint8Array,\n message: Uint8Array,\n): Uint8Array {\n if (key.byteLength > blockSize) {\n key = digest(key);\n }\n if (key.byteLength < blockSize) {\n const k = key;\n key = new Uint8Array(blockSize);\n key.set(k, 0);\n }\n const okp = new Uint8Array(blockSize);\n const ikp = new Uint8Array(blockSize);\n for (let i = 0; i < blockSize; i++) {\n ikp[i] = key[i] ^ 0x36;\n okp[i] = key[i] ^ 0x5c;\n }\n const b1 = new Uint8Array(blockSize + message.byteLength);\n b1.set(ikp, 0);\n b1.set(message, blockSize);\n const h0 = digest(b1);\n const b2 = new Uint8Array(blockSize + h0.length);\n b2.set(okp, 0);\n b2.set(h0, blockSize);\n return digest(b2);\n}\n\nexport function hmacSha512(key: Uint8Array, message: Uint8Array): Uint8Array {\n return hmac(sha512, 128, key, message);\n}\n\nexport function hmacSha256(key: Uint8Array, message: Uint8Array): Uint8Array {\n return hmac(sha256, 64, key, message);\n}\n", "/*\n This file is part of GNU Taler\n (C) 2019 GNUnet e.V.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n * Native implementation of GNU Taler crypto primitives.\n */\n\n/**\n * Imports.\n */\nimport * as nacl from \"./nacl-fast.js\";\nimport { hmacSha256, hmacSha512 } from \"./kdf.js\";\nimport bigint from \"big-integer\";\nimport {\n CoinEnvelope,\n CoinPublicKeyString,\n DenominationPubKey,\n DenomKeyType,\n HashCodeString,\n} from \"./taler-types.js\";\nimport { Logger } from \"./logging.js\";\nimport { secretbox } from \"./nacl-fast.js\";\nimport * as fflate from \"fflate\";\nimport { canonicalJson } from \"./helpers.js\";\n\nexport type Flavor<T, FlavorT extends string> = T & {\n _flavor?: `taler.${FlavorT}`;\n};\n\nexport type FlavorP<T, FlavorT extends string, S extends number> = T & {\n _flavor?: `taler.${FlavorT}`;\n _size?: S;\n};\n\nexport function getRandomBytes(n: number): Uint8Array {\n return nacl.randomBytes(n);\n}\n\nexport function getRandomBytesF<T extends number, N extends string>(\n n: T,\n): FlavorP<Uint8Array, N, T> {\n return nacl.randomBytes(n);\n}\n\nexport const useNative = true;\n\n/**\n * Interface of the native Taler runtime library.\n */\ninterface NativeTartLib {\n decodeUtf8(buf: Uint8Array): string;\n decodeUtf8(str: string): Uint8Array;\n randomBytes(n: number): Uint8Array;\n encodeCrock(buf: Uint8Array | ArrayBuffer): string;\n decodeCrock(str: string): Uint8Array;\n hash(buf: Uint8Array): Uint8Array;\n eddsaGetPublic(buf: Uint8Array): Uint8Array;\n ecdheGetPublic(buf: Uint8Array): Uint8Array;\n eddsaSign(msg: Uint8Array, priv: Uint8Array): Uint8Array;\n eddsaVerify(msg: Uint8Array, sig: Uint8Array, pub: Uint8Array): boolean;\n kdf(\n outLen: number,\n ikm: Uint8Array,\n salt?: Uint8Array,\n info?: Uint8Array,\n ): Uint8Array;\n keyExchangeEcdhEddsa(ecdhPriv: Uint8Array, eddsaPub: Uint8Array): Uint8Array;\n keyExchangeEddsaEcdh(eddsaPriv: Uint8Array, ecdhPub: Uint8Array): Uint8Array;\n rsaBlind(hmsg: Uint8Array, bks: Uint8Array, rsaPub: Uint8Array): Uint8Array;\n rsaUnblind(\n blindSig: Uint8Array,\n rsaPub: Uint8Array,\n bks: Uint8Array,\n ): Uint8Array;\n rsaVerify(hmsg: Uint8Array, rsaSig: Uint8Array, rsaPub: Uint8Array): boolean;\n hashStateInit(): any;\n hashStateUpdate(st: any, data: Uint8Array): any;\n hashStateFinish(st: any): Uint8Array;\n}\n\n// @ts-ignore\nlet tart: NativeTartLib | undefined;\n\nif (useNative) {\n // @ts-ignore\n tart = globalThis._tart;\n}\n\nconst encTable = \"0123456789ABCDEFGHJKMNPQRSTVWXYZ\";\n\nclass EncodingError extends Error {\n constructor() {\n super(\"Encoding error\");\n Object.setPrototypeOf(this, EncodingError.prototype);\n }\n}\n\nfunction getValue(chr: string): number {\n let a = chr;\n switch (chr) {\n case \"O\":\n case \"o\":\n a = \"0;\";\n break;\n case \"i\":\n case \"I\":\n case \"l\":\n case \"L\":\n a = \"1\";\n break;\n case \"u\":\n case \"U\":\n a = \"V\";\n }\n\n if (a >= \"0\" && a <= \"9\") {\n return a.charCodeAt(0) - \"0\".charCodeAt(0);\n }\n\n if (a >= \"a\" && a <= \"z\") a = a.toUpperCase();\n let dec = 0;\n if (a >= \"A\" && a <= \"Z\") {\n if (\"I\" < a) dec++;\n if (\"L\" < a) dec++;\n if (\"O\" < a) dec++;\n if (\"U\" < a) dec++;\n return a.charCodeAt(0) - \"A\".charCodeAt(0) + 10 - dec;\n }\n throw new EncodingError();\n}\n\nexport function encodeCrock(data: ArrayBuffer): string {\n if (tart) {\n return tart.encodeCrock(data);\n }\n const dataBytes = new Uint8Array(data);\n let sb = \"\";\n const size = data.byteLength;\n let bitBuf = 0;\n let numBits = 0;\n let pos = 0;\n while (pos < size || numBits > 0) {\n if (pos < size && numBits < 5) {\n const d = dataBytes[pos++];\n bitBuf = (bitBuf << 8) | d;\n numBits += 8;\n }\n if (numBits < 5) {\n // zero-padding\n bitBuf = bitBuf << (5 - numBits);\n numBits = 5;\n }\n const v = (bitBuf >>> (numBits - 5)) & 31;\n sb += encTable[v];\n numBits -= 5;\n }\n return sb;\n}\n\nexport function kdf(\n outputLength: number,\n ikm: Uint8Array,\n salt?: Uint8Array,\n info?: Uint8Array,\n): Uint8Array {\n if (tart) {\n return tart.kdf(outputLength, ikm, salt, info);\n }\n salt = salt ?? new Uint8Array(64);\n // extract\n const prk = hmacSha512(salt, ikm);\n\n info = info ?? new Uint8Array(0);\n\n // expand\n const N = Math.ceil(outputLength / 32);\n const output = new Uint8Array(N * 32);\n for (let i = 0; i < N; i++) {\n let buf;\n if (i == 0) {\n buf = new Uint8Array(info.byteLength + 1);\n buf.set(info, 0);\n } else {\n buf = new Uint8Array(info.byteLength + 1 + 32);\n for (let j = 0; j < 32; j++) {\n buf[j] = output[(i - 1) * 32 + j];\n }\n buf.set(info, 32);\n }\n buf[buf.length - 1] = i + 1;\n const chunk = hmacSha256(prk, buf);\n output.set(chunk, i * 32);\n }\n\n return output.slice(0, outputLength);\n}\n\n/**\n * HMAC-SHA512-SHA256 (see RFC 5869).\n */\nexport function kdfKw(args: {\n outputLength: number;\n ikm: Uint8Array;\n salt?: Uint8Array;\n info?: Uint8Array;\n}) {\n return kdf(args.outputLength, args.ikm, args.salt, args.info);\n}\n\nexport function decodeCrock(encoded: string): Uint8Array {\n if (tart) {\n return tart.decodeCrock(encoded);\n }\n const size = encoded.length;\n let bitpos = 0;\n let bitbuf = 0;\n let readPosition = 0;\n const outLen = Math.floor((size * 5) / 8);\n const out = new Uint8Array(outLen);\n let outPos = 0;\n\n while (readPosition < size || bitpos > 0) {\n if (readPosition < size) {\n const v = getValue(encoded[readPosition++]);\n bitbuf = (bitbuf << 5) | v;\n bitpos += 5;\n }\n while (bitpos >= 8) {\n const d = (bitbuf >>> (bitpos - 8)) & 0xff;\n out[outPos++] = d;\n bitpos -= 8;\n }\n if (readPosition == size && bitpos > 0) {\n bitbuf = (bitbuf << (8 - bitpos)) & 0xff;\n bitpos = bitbuf == 0 ? 0 : 8;\n }\n }\n return out;\n}\n\nexport function eddsaGetPublic(eddsaPriv: Uint8Array): Uint8Array {\n if (tart) {\n return tart.eddsaGetPublic(eddsaPriv);\n }\n const pair = nacl.crypto_sign_keyPair_fromSeed(eddsaPriv);\n return pair.publicKey;\n}\n\nexport function ecdhGetPublic(ecdhePriv: Uint8Array): Uint8Array {\n if (tart) {\n return tart.ecdheGetPublic(ecdhePriv);\n }\n return nacl.scalarMult_base(ecdhePriv);\n}\n\nexport function keyExchangeEddsaEcdh(\n eddsaPriv: Uint8Array,\n ecdhPub: Uint8Array,\n): Uint8Array {\n if (tart) {\n return tart.keyExchangeEddsaEcdh(eddsaPriv, ecdhPub);\n }\n const ph = hash(eddsaPriv);\n const a = new Uint8Array(32);\n for (let i = 0; i < 32; i++) {\n a[i] = ph[i];\n }\n const x = nacl.scalarMult(a, ecdhPub);\n return hash(x);\n}\n\nexport function keyExchangeEcdhEddsa(\n ecdhPriv: Uint8Array & MaterialEcdhePriv,\n eddsaPub: Uint8Array & MaterialEddsaPub,\n): Uint8Array {\n if (tart) {\n return tart.keyExchangeEcdhEddsa(ecdhPriv, eddsaPub);\n }\n const curve25519Pub = nacl.sign_ed25519_pk_to_curve25519(eddsaPub);\n const x = nacl.scalarMult(ecdhPriv, curve25519Pub);\n return hash(x);\n}\n\ninterface RsaPub {\n N: bigint.BigInteger;\n e: bigint.BigInteger;\n}\n\n/**\n * KDF modulo a big integer.\n */\nfunction kdfMod(\n n: bigint.BigInteger,\n ikm: Uint8Array,\n salt: Uint8Array,\n info: Uint8Array,\n): bigint.BigInteger {\n const nbits = n.bitLength().toJSNumber();\n const buflen = Math.floor((nbits - 1) / 8 + 1);\n const mask = (1 << (8 - (buflen * 8 - nbits))) - 1;\n let counter = 0;\n while (true) {\n const ctx = new Uint8Array(info.byteLength + 2);\n ctx.set(info, 0);\n ctx[ctx.length - 2] = (counter >>> 8) & 0xff;\n ctx[ctx.length - 1] = counter & 0xff;\n const buf = kdf(buflen, ikm, salt, ctx);\n const arr = Array.from(buf);\n arr[0] = arr[0] & mask;\n const r = bigint.fromArray(arr, 256, false);\n if (r.lt(n)) {\n return r;\n }\n counter++;\n }\n}\n\nfunction csKdfMod(\n n: bigint.BigInteger,\n ikm: Uint8Array,\n salt: Uint8Array,\n info: Uint8Array,\n): Uint8Array {\n const nbits = n.bitLength().toJSNumber();\n const buflen = Math.floor((nbits - 1) / 8 + 1);\n const mask = (1 << (8 - (buflen * 8 - nbits))) - 1;\n let counter = 0;\n while (true) {\n const ctx = new Uint8Array(info.byteLength + 2);\n ctx.set(info, 0);\n ctx[ctx.length - 2] = (counter >>> 8) & 0xff;\n ctx[ctx.length - 1] = counter & 0xff;\n const buf = kdf(buflen, ikm, salt, ctx);\n const arr = Array.from(buf);\n arr[0] = arr[0] & mask;\n const r = bigint.fromArray(arr, 256, false);\n if (r.lt(n)) {\n return new Uint8Array(arr);\n }\n counter++;\n }\n}\n\n// Newer versions of node have TextEncoder and TextDecoder as a global,\n// just like modern browsers.\n// In older versions of node or environments that do not have these\n// globals, they must be polyfilled (by adding them to globa/globalThis)\n// before stringToBytes or bytesToString is called the first time.\n\nlet encoder: any;\nlet decoder: any;\n\nexport function stringToBytes(s: string): Uint8Array {\n if (!encoder) {\n encoder = new TextEncoder();\n }\n return encoder.encode(s);\n}\n\nexport function bytesToString(b: Uint8Array): string {\n if (!decoder) {\n decoder = new TextDecoder();\n }\n return decoder.decode(b);\n}\n\nfunction loadBigInt(arr: Uint8Array): bigint.BigInteger {\n return bigint.fromArray(Array.from(arr), 256, false);\n}\n\nfunction rsaBlindingKeyDerive(\n rsaPub: RsaPub,\n bks: Uint8Array,\n): bigint.BigInteger {\n const salt = stringToBytes(\"Blinding KDF extractor HMAC key\");\n const info = stringToBytes(\"Blinding KDF\");\n return kdfMod(rsaPub.N, bks, salt, info);\n}\n\n/*\n * Test for malicious RSA key.\n *\n * Assuming n is an RSA modulous and r is generated using a call to\n * GNUNET_CRYPTO_kdf_mod_mpi, if gcd(r,n) != 1 then n must be a\n * malicious RSA key designed to deanomize the user.\n *\n * @param r KDF result\n * @param n RSA modulus of the public key\n */\nfunction rsaGcdValidate(r: bigint.BigInteger, n: bigint.BigInteger): void {\n const t = bigint.gcd(r, n);\n if (!t.equals(bigint.one)) {\n throw Error(\"malicious RSA public key\");\n }\n}\n\nfunction rsaFullDomainHash(hm: Uint8Array, rsaPub: RsaPub): bigint.BigInteger {\n const info = stringToBytes(\"RSA-FDA FTpsW!\");\n const salt = rsaPubEncode(rsaPub);\n const r = kdfMod(rsaPub.N, hm, salt, info);\n rsaGcdValidate(r, rsaPub.N);\n return r;\n}\n\nfunction rsaPubDecode(rsaPub: Uint8Array): RsaPub {\n const modulusLength = (rsaPub[0] << 8) | rsaPub[1];\n const exponentLength = (rsaPub[2] << 8) | rsaPub[3];\n if (4 + exponentLength + modulusLength != rsaPub.length) {\n throw Error(\"invalid RSA public key (format wrong)\");\n }\n const modulus = rsaPub.slice(4, 4 + modulusLength);\n const exponent = rsaPub.slice(\n 4 + modulusLength,\n 4 + modulusLength + exponentLength,\n );\n const res = {\n N: loadBigInt(modulus),\n e: loadBigInt(exponent),\n };\n return res;\n}\n\nfunction rsaPubEncode(rsaPub: RsaPub): Uint8Array {\n const mb = rsaPub.N.toArray(256).value;\n const eb = rsaPub.e.toArray(256).value;\n const out = new Uint8Array(4 + mb.length + eb.length);\n out[0] = (mb.length >>> 8) & 0xff;\n out[1] = mb.length & 0xff;\n out[2] = (eb.length >>> 8) & 0xff;\n out[3] = eb.length & 0xff;\n out.set(mb, 4);\n out.set(eb, 4 + mb.length);\n return out;\n}\n\nexport function rsaBlind(\n hm: Uint8Array,\n bks: Uint8Array,\n rsaPubEnc: Uint8Array,\n): Uint8Array {\n if (tart) {\n return tart.rsaBlind(hm, bks, rsaPubEnc);\n }\n const rsaPub = rsaPubDecode(rsaPubEnc);\n const data = rsaFullDomainHash(hm, rsaPub);\n const r = rsaBlindingKeyDerive(rsaPub, bks);\n const r_e = r.modPow(rsaPub.e, rsaPub.N);\n const bm = r_e.multiply(data).mod(rsaPub.N);\n return new Uint8Array(bm.toArray(256).value);\n}\n\nexport function rsaUnblind(\n sig: Uint8Array,\n rsaPubEnc: Uint8Array,\n bks: Uint8Array,\n): Uint8Array {\n if (tart) {\n return tart.rsaUnblind(sig, rsaPubEnc, bks);\n }\n const rsaPub = rsaPubDecode(rsaPubEnc);\n const blinded_s = loadBigInt(sig);\n const r = rsaBlindingKeyDerive(rsaPub, bks);\n const r_inv = r.modInv(rsaPub.N);\n const s = blinded_s.multiply(r_inv).mod(rsaPub.N);\n return new Uint8Array(s.toArray(256).value);\n}\n\nexport function rsaVerify(\n hm: Uint8Array,\n rsaSig: Uint8Array,\n rsaPubEnc: Uint8Array,\n): boolean {\n if (tart) {\n return tart.rsaVerify(hm, rsaSig, rsaPubEnc);\n }\n const rsaPub = rsaPubDecode(rsaPubEnc);\n const d = rsaFullDomainHash(hm, rsaPub);\n const sig = loadBigInt(rsaSig);\n const sig_e = sig.modPow(rsaPub.e, rsaPub.N);\n return sig_e.equals(d);\n}\n\nexport type CsSignature = {\n s: Uint8Array;\n rPub: Uint8Array;\n};\n\nexport type CsBlindSignature = {\n sBlind: Uint8Array;\n rPubBlind: Uint8Array;\n};\n\nexport type CsBlindingSecrets = {\n alpha: [Uint8Array, Uint8Array];\n beta: [Uint8Array, Uint8Array];\n};\n\nexport function typedArrayConcat(chunks: Uint8Array[]): Uint8Array {\n let payloadLen = 0;\n for (const c of chunks) {\n payloadLen += c.byteLength;\n }\n const buf = new ArrayBuffer(payloadLen);\n const u8buf = new Uint8Array(buf);\n let p = 0;\n for (const c of chunks) {\n u8buf.set(c, p);\n p += c.byteLength;\n }\n return u8buf;\n}\n\n/**\n * Map to scalar subgroup function\n * perform clamping as described in RFC7748\n * @param scalar\n */\nfunction mtoSS(scalar: Uint8Array): Uint8Array {\n scalar[0] &= 248;\n scalar[31] &= 127;\n scalar[31] |= 64;\n return scalar;\n}\n\n/**\n * The function returns the CS blinding secrets from a seed\n * @param bseed seed to derive blinding secrets\n * @returns blinding secrets\n */\nexport function deriveSecrets(bseed: Uint8Array): CsBlindingSecrets {\n const outLen = 130;\n const salt = stringToBytes(\"alphabeta\");\n const rndout = kdf(outLen, bseed, salt);\n const secrets: CsBlindingSecrets = {\n alpha: [mtoSS(rndout.slice(0, 32)), mtoSS(rndout.slice(64, 96))],\n beta: [mtoSS(rndout.slice(32, 64)), mtoSS(rndout.slice(96, 128))],\n };\n return secrets;\n}\n\n/**\n * calculation of the blinded public point R in CS\n * @param csPub denomination publik key\n * @param secrets client blinding secrets\n * @param rPub public R received from /csr API\n */\nexport async function calcRBlind(\n csPub: Uint8Array,\n secrets: CsBlindingSecrets,\n rPub: [Uint8Array, Uint8Array],\n): Promise<[Uint8Array, Uint8Array]> {\n const aG0 = nacl.crypto_scalarmult_ed25519_base_noclamp(secrets.alpha[0]);\n const aG1 = nacl.crypto_scalarmult_ed25519_base_noclamp(secrets.alpha[1]);\n\n const bDp0 = nacl.crypto_scalarmult_ed25519_noclamp(secrets.beta[0], csPub);\n const bDp1 = nacl.crypto_scalarmult_ed25519_noclamp(secrets.beta[1], csPub);\n\n const res0 = nacl.crypto_core_ed25519_add(aG0, bDp0);\n const res1 = nacl.crypto_core_ed25519_add(aG1, bDp1);\n return [\n nacl.crypto_core_ed25519_add(rPub[0], res0),\n nacl.crypto_core_ed25519_add(rPub[1], res1),\n ];\n}\n\n/**\n * FDH function used in CS\n * @param hm message hash\n * @param rPub public R included in FDH\n * @param csPub denomination public key as context\n * @returns mapped Curve25519 scalar\n */\nfunction csFDH(\n hm: Uint8Array,\n rPub: Uint8Array,\n csPub: Uint8Array,\n): Uint8Array {\n const lMod = Array.from(\n new Uint8Array([\n 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x14, 0xde, 0xf9, 0xde, 0xa2, 0xf7, 0x9c, 0xd6,\n 0x58, 0x12, 0x63, 0x1a, 0x5c, 0xf5, 0xd3, 0xed,\n ]),\n );\n const L = bigint.fromArray(lMod, 256, false);\n\n const info = stringToBytes(\"Curve25519FDH\");\n const preshash = hash(typedArrayConcat([rPub, hm]));\n return csKdfMod(L, preshash, csPub, info).reverse();\n}\n\n/**\n * blinding seed derived from coin private key\n * @param coinPriv private key of the corresponding coin\n * @param rPub public R received from /csr API\n * @returns blinding seed\n */\nexport function deriveBSeed(\n coinPriv: Uint8Array,\n rPub: [Uint8Array, Uint8Array],\n): Uint8Array {\n const outLen = 32;\n const salt = stringToBytes(\"b-seed\");\n const ikm = typedArrayConcat([coinPriv, rPub[0], rPub[1]]);\n return kdf(outLen, ikm, salt);\n}\n\n/**\n * Derive withdraw nonce, used in /csr request\n * Note: In withdraw protocol, the nonce is chosen randomly\n * @param coinPriv coin private key\n * @returns nonce\n */\nexport function deriveWithdrawNonce(coinPriv: Uint8Array): Uint8Array {\n const outLen = 32;\n const salt = stringToBytes(\"n\");\n return kdf(outLen, coinPriv, salt);\n}\n\n/**\n * Blind operation for CS signatures, used after /csr call\n * @param bseed blinding seed to derive blinding secrets\n * @param rPub public R received from /csr\n * @param csPub denomination public key\n * @param hm message to blind\n * @returns two blinded c\n */\nexport async function csBlind(\n bseed: Uint8Array,\n rPub: [Uint8Array, Uint8Array],\n csPub: Uint8Array,\n hm: Uint8Array,\n): Promise<[Uint8Array, Uint8Array]> {\n const secrets = deriveSecrets(bseed);\n const rPubBlind = await calcRBlind(csPub, secrets, rPub);\n const c_0 = csFDH(hm, rPubBlind[0], csPub);\n const c_1 = csFDH(hm, rPubBlind[1], csPub);\n return [\n nacl.crypto_core_ed25519_scalar_add(c_0, secrets.beta[0]),\n nacl.crypto_core_ed25519_scalar_add(c_1, secrets.beta[1]),\n ];\n}\n\n/**\n * Unblind operation to unblind the signature\n * @param bseed seed to derive secrets\n * @param rPub public R received from /csr\n * @param csPub denomination publick key\n * @param b returned from exchange to select c\n * @param csSig blinded signature\n * @returns unblinded signature\n */\nexport async function csUnblind(\n bseed: Uint8Array,\n rPub: [Uint8Array, Uint8Array],\n csPub: Uint8Array,\n b: number,\n csSig: CsBlindSignature,\n): Promise<CsSignature> {\n if (b != 0 && b != 1) {\n throw new Error();\n }\n const secrets = deriveSecrets(bseed);\n const rPubDash = (await calcRBlind(csPub, secrets, rPub))[b];\n const sig: CsSignature = {\n s: nacl.crypto_core_ed25519_scalar_add(csSig.sBlind, secrets.alpha[b]),\n rPub: rPubDash,\n };\n return sig;\n}\n\n/**\n * Verification algorithm for CS signatures\n * @param hm message signed\n * @param csSig unblinded signature\n * @param csPub denomination publick key\n * @returns true if valid, false if invalid\n */\nexport async function csVerify(\n hm: Uint8Array,\n csSig: CsSignature,\n csPub: Uint8Array,\n): Promise<boolean> {\n const cDash = csFDH(hm, csSig.rPub, csPub);\n const sG = nacl.crypto_scalarmult_ed25519_base_noclamp(csSig.s);\n const cbDp = nacl.crypto_scalarmult_ed25519_noclamp(cDash, csPub);\n const sGeq = nacl.crypto_core_ed25519_add(csSig.rPub, cbDp);\n return nacl.verify(sG, sGeq);\n}\n\nexport interface EddsaKeyPair {\n eddsaPub: Uint8Array;\n eddsaPriv: Uint8Array;\n}\n\nexport interface EcdheKeyPair {\n ecdhePub: Uint8Array;\n ecdhePriv: Uint8Array;\n}\n\nexport interface Edx25519Keypair {\n edxPub: string;\n edxPriv: string;\n}\n\nexport function createEddsaKeyPair(): EddsaKeyPair {\n const eddsaPriv = nacl.randomBytes(32);\n const eddsaPub = eddsaGetPublic(eddsaPriv);\n return { eddsaPriv, eddsaPub };\n}\n\nexport function createEcdheKeyPair(): EcdheKeyPair {\n const ecdhePriv = nacl.randomBytes(32);\n const ecdhePub = ecdhGetPublic(ecdhePriv);\n return { ecdhePriv, ecdhePub };\n}\n\nexport function hash(d: Uint8Array): Uint8Array {\n if (tart) {\n return tart.hash(d);\n }\n return nacl.hash(d);\n}\n\n/**\n * Hash the input with SHA-512 and truncate the result\n * to 32 bytes.\n */\nexport function hashTruncate32(d: Uint8Array): Uint8Array {\n const sha512HashCode = hash(d);\n return sha512HashCode.subarray(0, 32);\n}\n\nexport function hashCoinEv(\n coinEv: CoinEnvelope,\n denomPubHash: HashCodeString,\n): Uint8Array {\n const hashContext = createHashContext();\n hashContext.update(decodeCrock(denomPubHash));\n hashCoinEvInner(coinEv, hashContext);\n return hashContext.finish();\n}\n\nconst logger = new Logger(\"talerCrypto.ts\");\n\nexport function hashCoinEvInner(\n coinEv: CoinEnvelope,\n hashState: TalerHashState,\n): void {\n const hashInputBuf = new ArrayBuffer(4);\n const uint8ArrayBuf = new Uint8Array(hashInputBuf);\n const dv = new DataView(hashInputBuf);\n dv.setUint32(0, DenomKeyType.toIntTag(coinEv.cipher));\n hashState.update(uint8ArrayBuf);\n switch (coinEv.cipher) {\n case DenomKeyType.Rsa:\n hashState.update(decodeCrock(coinEv.rsa_blinded_planchet));\n return;\n default:\n throw new Error();\n }\n}\n\nexport function hashCoinPub(\n coinPub: CoinPublicKeyString,\n ach?: HashCodeString,\n): Uint8Array {\n if (!ach) {\n return hash(decodeCrock(coinPub));\n }\n\n return hash(typedArrayConcat([decodeCrock(coinPub), decodeCrock(ach)]));\n}\n\n/**\n * Hash a denomination public key.\n */\nexport function hashDenomPub(pub: DenominationPubKey): Uint8Array {\n if (pub.cipher === DenomKeyType.Rsa) {\n const pubBuf = decodeCrock(pub.rsa_public_key);\n const hashInputBuf = new ArrayBuffer(pubBuf.length + 4 + 4);\n const uint8ArrayBuf = new Uint8Array(hashInputBuf);\n const dv = new DataView(hashInputBuf);\n dv.setUint32(0, pub.age_mask ?? 0);\n dv.setUint32(4, DenomKeyType.toIntTag(pub.cipher));\n uint8ArrayBuf.set(pubBuf, 8);\n return hash(uint8ArrayBuf);\n } else if (pub.cipher === DenomKeyType.ClauseSchnorr) {\n const pubBuf = decodeCrock(pub.cs_public_key);\n const hashInputBuf = new ArrayBuffer(pubBuf.length + 4 + 4);\n const uint8ArrayBuf = new Uint8Array(hashInputBuf);\n const dv = new DataView(hashInputBuf);\n dv.setUint32(0, pub.age_mask ?? 0);\n dv.setUint32(4, DenomKeyType.toIntTag(pub.cipher));\n uint8ArrayBuf.set(pubBuf, 8);\n return hash(uint8ArrayBuf);\n } else {\n throw Error(\n `unsupported cipher (${\n (pub as DenominationPubKey).cipher\n }), unable to hash`,\n );\n }\n}\n\nexport function eddsaSign(msg: Uint8Array, eddsaPriv: Uint8Array): Uint8Array {\n if (tart) {\n return tart.eddsaSign(msg, eddsaPriv);\n }\n const pair = nacl.crypto_sign_keyPair_fromSeed(eddsaPriv);\n return nacl.sign_detached(msg, pair.secretKey);\n}\n\nexport function eddsaVerify(\n msg: Uint8Array,\n sig: Uint8Array,\n eddsaPub: Uint8Array,\n): boolean {\n if (tart) {\n return tart.eddsaVerify(msg, sig, eddsaPub);\n }\n return nacl.sign_detached_verify(msg, sig, eddsaPub);\n}\n\nexport interface TalerHashState {\n update(data: Uint8Array): void;\n finish(): Uint8Array;\n}\n\nexport function createHashContext(): TalerHashState {\n if (tart) {\n const t = tart;\n const st = tart.hashStateInit();\n return {\n finish: () => t.hashStateFinish(st),\n update: (d) => t.hashStateUpdate(st, d),\n };\n }\n return new nacl.HashState();\n}\n\nexport interface FreshCoin {\n coinPub: Uint8Array;\n coinPriv: Uint8Array;\n bks: Uint8Array;\n maxAge: number;\n ageCommitmentProof: AgeCommitmentProof | undefined;\n}\n\nexport function bufferForUint32(n: number): Uint8Array {\n const arrBuf = new ArrayBuffer(4);\n const buf = new Uint8Array(arrBuf);\n const dv = new DataView(arrBuf);\n dv.setUint32(0, n);\n return buf;\n}\n\nexport function bufferForUint8(n: number): Uint8Array {\n const arrBuf = new ArrayBuffer(1);\n const buf = new Uint8Array(arrBuf);\n const dv = new DataView(arrBuf);\n dv.setUint8(0, n);\n return buf;\n}\n\nexport async function setupTipPlanchet(\n secretSeed: Uint8Array,\n denomPub: DenominationPubKey,\n coinNumber: number,\n): Promise<FreshCoin> {\n const info = stringToBytes(\"taler-tip-coin-derivation\");\n const saltArrBuf = new ArrayBuffer(4);\n const salt = new Uint8Array(saltArrBuf);\n const saltDataView = new DataView(saltArrBuf);\n saltDataView.setUint32(0, coinNumber);\n const out = kdf(64, secretSeed, salt, info);\n const coinPriv = out.slice(0, 32);\n const bks = out.slice(32, 64);\n let maybeAcp: AgeCommitmentProof | undefined;\n if (denomPub.age_mask != 0) {\n maybeAcp = await AgeRestriction.restrictionCommitSeeded(\n denomPub.age_mask,\n AgeRestriction.AGE_UNRESTRICTED,\n secretSeed,\n );\n }\n return {\n bks,\n coinPriv,\n coinPub: eddsaGetPublic(coinPriv),\n maxAge: AgeRestriction.AGE_UNRESTRICTED,\n ageCommitmentProof: maybeAcp,\n };\n}\n/**\n *\n * @param paytoUri\n * @param salt 16-byte salt\n * @returns\n */\nexport function hashWire(paytoUri: string, salt: string): string {\n const r = kdf(\n 64,\n stringToBytes(paytoUri + \"\\0\"),\n decodeCrock(salt),\n stringToBytes(\"merchant-wire-signature\"),\n );\n return encodeCrock(r);\n}\n\nexport enum TalerSignaturePurpose {\n MERCHANT_TRACK_TRANSACTION = 1103,\n WALLET_RESERVE_WITHDRAW = 1200,\n WALLET_COIN_DEPOSIT = 1201,\n GLOBAL_FEES = 1022,\n MASTER_DENOMINATION_KEY_VALIDITY = 1025,\n MASTER_WIRE_FEES = 1028,\n MASTER_WIRE_DETAILS = 1030,\n WALLET_COIN_MELT = 1202,\n TEST = 4242,\n MERCHANT_PAYMENT_OK = 1104,\n MERCHANT_CONTRACT = 1101,\n WALLET_COIN_RECOUP = 1203,\n WALLET_COIN_LINK = 1204,\n WALLET_COIN_RECOUP_REFRESH = 1206,\n WALLET_AGE_ATTESTATION = 1207,\n WALLET_PURSE_CREATE = 1210,\n WALLET_PURSE_DEPOSIT = 1211,\n WALLET_PURSE_MERGE = 1213,\n WALLET_ACCOUNT_MERGE = 1214,\n WALLET_PURSE_ECONTRACT = 1216,\n EXCHANGE_CONFIRM_RECOUP = 1039,\n EXCHANGE_CONFIRM_RECOUP_REFRESH = 1041,\n ANASTASIS_POLICY_UPLOAD = 1400,\n ANASTASIS_POLICY_DOWNLOAD = 1401,\n SYNC_BACKUP_UPLOAD = 1450,\n}\n\nexport const enum WalletAccountMergeFlags {\n /**\n * Not a legal mode!\n */\n None = 0,\n\n /**\n * We are merging a fully paid-up purse into a reserve.\n */\n MergeFullyPaidPurse = 1,\n\n CreateFromPurseQuota = 2,\n\n CreateWithPurseFee = 3,\n}\n\nexport class SignaturePurposeBuilder {\n private chunks: Uint8Array[] = [];\n\n constructor(private purposeNum: number) {}\n\n put(bytes: Uint8Array): SignaturePurposeBuilder {\n this.chunks.push(Uint8Array.from(bytes));\n return this;\n }\n\n build(): Uint8Array {\n let payloadLen = 0;\n for (const c of this.chunks) {\n payloadLen += c.byteLength;\n }\n const buf = new ArrayBuffer(4 + 4 + payloadLen);\n const u8buf = new Uint8Array(buf);\n let p = 8;\n for (const c of this.chunks) {\n u8buf.set(c, p);\n p += c.byteLength;\n }\n const dvbuf = new DataView(buf);\n dvbuf.setUint32(0, payloadLen + 4 + 4);\n dvbuf.setUint32(4, this.purposeNum);\n return u8buf;\n }\n}\n\nexport function buildSigPS(purposeNum: number): SignaturePurposeBuilder {\n return new SignaturePurposeBuilder(purposeNum);\n}\n\nexport type OpaqueData = Flavor<Uint8Array, any>;\nexport type Edx25519PublicKey = FlavorP<Uint8Array, \"Edx25519PublicKey\", 32>;\nexport type Edx25519PrivateKey = FlavorP<Uint8Array, \"Edx25519PrivateKey\", 64>;\nexport type Edx25519Signature = FlavorP<Uint8Array, \"Edx25519Signature\", 64>;\n\nexport type Edx25519PublicKeyEnc = FlavorP<string, \"Edx25519PublicKeyEnc\", 32>;\nexport type Edx25519PrivateKeyEnc = FlavorP<\n string,\n \"Edx25519PrivateKeyEnc\",\n 64\n>;\n\n/**\n * Convert a big integer to a fixed-size, little-endian array.\n */\nexport function bigintToNaclArr(\n x: bigint.BigInteger,\n size: number,\n): Uint8Array {\n const byteArr = new Uint8Array(size);\n const arr = x.toArray(256).value.reverse();\n byteArr.set(arr, 0);\n return byteArr;\n}\n\nexport function bigintFromNaclArr(arr: Uint8Array): bigint.BigInteger {\n let rev = new Uint8Array(arr);\n rev = rev.reverse();\n return bigint.fromArray(Array.from(rev), 256, false);\n}\n\nexport namespace Edx25519 {\n const revL = [\n 0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2,\n 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10,\n ];\n\n const L = bigint.fromArray(revL.reverse(), 256, false);\n\n export async function keyCreateFromSeed(\n seed: OpaqueData,\n ): Promise<Edx25519PrivateKey> {\n return nacl.crypto_edx25519_private_key_create_from_seed(seed);\n }\n\n export async function keyCreate(): Promise<Edx25519PrivateKey> {\n return nacl.crypto_edx25519_private_key_create();\n }\n\n export async function getPublic(\n priv: Edx25519PrivateKey,\n ): Promise<Edx25519PublicKey> {\n return nacl.crypto_edx25519_get_public(priv);\n }\n\n export function sign(\n msg: OpaqueData,\n key: Edx25519PrivateKey,\n ): Promise<Edx25519Signature> {\n throw Error(\"not implemented\");\n }\n\n async function deriveFactor(\n pub: Edx25519PublicKey,\n seed: OpaqueData,\n ): Promise<OpaqueData> {\n const res = kdfKw({\n outputLength: 64,\n salt: seed,\n ikm: pub,\n info: stringToBytes(\"edx25519-derivation\"),\n });\n\n return res;\n }\n\n export async function privateKeyDerive(\n priv: Edx25519PrivateKey,\n seed: OpaqueData,\n ): Promise<Edx25519PrivateKey> {\n const pub = await getPublic(priv);\n const privDec = priv;\n const a = bigintFromNaclArr(privDec.subarray(0, 32));\n const factorEnc = await deriveFactor(pub, seed);\n const factorModL = bigintFromNaclArr(factorEnc).mod(L);\n\n const aPrime = a.divide(8).multiply(factorModL).mod(L).multiply(8).mod(L);\n const bPrime = nacl\n .hash(typedArrayConcat([privDec.subarray(32, 64), factorEnc]))\n .subarray(0, 32);\n\n const newPriv = typedArrayConcat([bigintToNaclArr(aPrime, 32), bPrime]);\n\n return newPriv;\n }\n\n export async function publicKeyDerive(\n pub: Edx25519PublicKey,\n seed: OpaqueData,\n ): Promise<Edx25519PublicKey> {\n const factorEnc = await deriveFactor(pub, seed);\n const factorReduced = nacl.crypto_core_ed25519_scalar_reduce(factorEnc);\n const res = nacl.crypto_scalarmult_ed25519_noclamp(factorReduced, pub);\n return res;\n }\n}\n\nexport interface AgeCommitment {\n mask: number;\n\n /**\n * Public keys, one for each age group specified in the age mask.\n */\n publicKeys: Edx25519PublicKeyEnc[];\n}\n\nexport interface AgeProof {\n /**\n * Private keys. Typically smaller than the number of public keys,\n * because we drop private keys from age groups that are restricted.\n */\n privateKeys: Edx25519PrivateKeyEnc[];\n}\n\nexport interface AgeCommitmentProof {\n commitment: AgeCommitment;\n proof: AgeProof;\n}\n\nfunction invariant(cond: boolean): asserts cond {\n if (!cond) {\n throw Error(\"invariant failed\");\n }\n}\n\nexport namespace AgeRestriction {\n /**\n * Smallest age value that the protocol considers \"unrestricted\".\n */\n export const AGE_UNRESTRICTED = 32;\n\n export function hashCommitment(ac: AgeCommitment): HashCodeString {\n const hc = new nacl.HashState();\n for (const pub of ac.publicKeys) {\n hc.update(decodeCrock(pub));\n }\n return encodeCrock(hc.finish().subarray(0, 32));\n }\n\n export function countAgeGroups(mask: number): number {\n let count = 0;\n let m = mask;\n while (m > 0) {\n count += m & 1;\n m = m >> 1;\n }\n return count;\n }\n\n /**\n * Get the starting points for age groups in the mask.\n */\n export function getAgeGroupsFromMask(mask: number): number[] {\n const groups: number[] = [];\n let age = 1;\n let m = mask >> 1;\n while (m > 0) {\n if (m & 1) {\n groups.push(age);\n }\n m = m >> 1;\n age++;\n }\n return groups;\n }\n\n export function getAgeGroupIndex(mask: number, age: number): number {\n invariant((mask & 1) === 1);\n let i = 0;\n let m = mask;\n let a = age;\n while (m > 0) {\n if (a <= 0) {\n break;\n }\n m = m >> 1;\n i += m & 1;\n a--;\n }\n return i;\n }\n\n export function ageGroupSpecToMask(ageGroupSpec: string): number {\n throw Error(\"not implemented\");\n }\n\n export async function restrictionCommit(\n ageMask: number,\n age: number,\n ): Promise<AgeCommitmentProof> {\n invariant((ageMask & 1) === 1);\n const numPubs = countAgeGroups(ageMask) - 1;\n const numPrivs = getAgeGroupIndex(ageMask, age);\n\n const pubs: Edx25519PublicKey[] = [];\n const privs: Edx25519PrivateKey[] = [];\n\n for (let i = 0; i < numPubs; i++) {\n const priv = await Edx25519.keyCreate();\n const pub = await Edx25519.getPublic(priv);\n pubs.push(pub);\n if (i < numPrivs) {\n privs.push(priv);\n }\n }\n\n return {\n commitment: {\n mask: ageMask,\n publicKeys: pubs.map((x) => encodeCrock(x)),\n },\n proof: {\n privateKeys: privs.map((x) => encodeCrock(x)),\n },\n };\n }\n\n export async function restrictionCommitSeeded(\n ageMask: number,\n age: number,\n seed: Uint8Array,\n ): Promise<AgeCommitmentProof> {\n invariant((ageMask & 1) === 1);\n const numPubs = countAgeGroups(ageMask) - 1;\n const numPrivs = getAgeGroupIndex(ageMask, age);\n\n const pubs: Edx25519PublicKey[] = [];\n const privs: Edx25519PrivateKey[] = [];\n\n for (let i = 0; i < numPubs; i++) {\n const privSeed = await kdfKw({\n outputLength: 32,\n ikm: seed,\n info: stringToBytes(\"age-restriction-commit\"),\n salt: bufferForUint32(i),\n });\n const priv = await Edx25519.keyCreateFromSeed(privSeed);\n const pub = await Edx25519.getPublic(priv);\n pubs.push(pub);\n if (i < numPrivs) {\n privs.push(priv);\n }\n }\n\n return {\n commitment: {\n mask: ageMask,\n publicKeys: pubs.map((x) => encodeCrock(x)),\n },\n proof: {\n privateKeys: privs.map((x) => encodeCrock(x)),\n },\n };\n }\n\n /**\n * Check that c1 = c2*salt\n */\n export async function commitCompare(\n c1: AgeCommitment,\n c2: AgeCommitment,\n salt: OpaqueData,\n ): Promise<boolean> {\n if (c1.publicKeys.length != c2.publicKeys.length) {\n return false;\n }\n for (let i = 0; i < c1.publicKeys.length; i++) {\n const k1 = decodeCrock(c1.publicKeys[i]);\n const k2 = await Edx25519.publicKeyDerive(\n decodeCrock(c2.publicKeys[i]),\n salt,\n );\n if (k1 != k2) {\n return false;\n }\n }\n return true;\n }\n\n export async function commitmentDerive(\n commitmentProof: AgeCommitmentProof,\n salt: OpaqueData,\n ): Promise<AgeCommitmentProof> {\n const newPrivs: Edx25519PrivateKey[] = [];\n const newPubs: Edx25519PublicKey[] = [];\n\n for (const oldPub of commitmentProof.commitment.publicKeys) {\n newPubs.push(await Edx25519.publicKeyDerive(decodeCrock(oldPub), salt));\n }\n\n for (const oldPriv of commitmentProof.proof.privateKeys) {\n newPrivs.push(\n await Edx25519.privateKeyDerive(decodeCrock(oldPriv), salt),\n );\n }\n\n return {\n commitment: {\n mask: commitmentProof.commitment.mask,\n publicKeys: newPubs.map((x) => encodeCrock(x)),\n },\n proof: {\n privateKeys: newPrivs.map((x) => encodeCrock(x)),\n },\n };\n }\n\n export function commitmentAttest(\n commitmentProof: AgeCommitmentProof,\n age: number,\n ): Edx25519Signature {\n const d = buildSigPS(TalerSignaturePurpose.WALLET_AGE_ATTESTATION)\n .put(bufferForUint32(commitmentProof.commitment.mask))\n .put(bufferForUint32(age))\n .build();\n const group = getAgeGroupIndex(commitmentProof.commitment.mask, age);\n if (group === 0) {\n // No attestation required.\n return new Uint8Array(64);\n }\n const priv = commitmentProof.proof.privateKeys[group - 1];\n const pub = commitmentProof.commitment.publicKeys[group - 1];\n const sig = nacl.crypto_edx25519_sign_detached(\n d,\n decodeCrock(priv),\n decodeCrock(pub),\n );\n return sig;\n }\n\n export function commitmentVerify(\n commitment: AgeCommitment,\n sig: string,\n age: number,\n ): boolean {\n const d = buildSigPS(TalerSignaturePurpose.WALLET_AGE_ATTESTATION)\n .put(bufferForUint32(commitment.mask))\n .put(bufferForUint32(age))\n .build();\n const group = getAgeGroupIndex(commitment.mask, age);\n if (group === 0) {\n // No attestation required.\n return true;\n }\n const pub = commitment.publicKeys[group - 1];\n return nacl.crypto_edx25519_sign_detached_verify(\n d,\n decodeCrock(sig),\n decodeCrock(pub),\n );\n }\n}\n\n// FIXME: make it a branded type!\ntype EncryptionNonce = FlavorP<Uint8Array, \"EncryptionNonce\", 24>;\n\nasync function deriveKey(\n keySeed: OpaqueData,\n nonce: EncryptionNonce,\n salt: string,\n): Promise<Uint8Array> {\n return kdfKw({\n outputLength: 32,\n salt: nonce,\n ikm: keySeed,\n info: stringToBytes(salt),\n });\n}\n\nasync function encryptWithDerivedKey(\n nonce: EncryptionNonce,\n keySeed: OpaqueData,\n plaintext: OpaqueData,\n salt: string,\n): Promise<OpaqueData> {\n const key = await deriveKey(keySeed, nonce, salt);\n const cipherText = secretbox(plaintext, nonce, key);\n return typedArrayConcat([nonce, cipherText]);\n}\n\nconst nonceSize = 24;\n\nasync function decryptWithDerivedKey(\n ciphertext: OpaqueData,\n keySeed: OpaqueData,\n salt: string,\n): Promise<OpaqueData> {\n const ctBuf = ciphertext;\n const nonceBuf = ctBuf.slice(0, nonceSize);\n const enc = ctBuf.slice(nonceSize);\n const key = await deriveKey(keySeed, nonceBuf, salt);\n const clearText = nacl.secretbox_open(enc, nonceBuf, key);\n if (!clearText) {\n throw Error(\"could not decrypt\");\n }\n return clearText;\n}\n\nenum ContractFormatTag {\n PaymentOffer = 0,\n PaymentRequest = 1,\n}\n\ntype MaterialEddsaPub = {\n _materialType?: \"eddsa-pub\";\n _size?: 32;\n};\n\ntype MaterialEddsaPriv = {\n _materialType?: \"ecdhe-priv\";\n _size?: 32;\n};\n\ntype MaterialEcdhePub = {\n _materialType?: \"ecdhe-pub\";\n _size?: 32;\n};\n\ntype MaterialEcdhePriv = {\n _materialType?: \"ecdhe-priv\";\n _size?: 32;\n};\n\ntype PursePublicKey = FlavorP<Uint8Array, \"PursePublicKey\", 32> &\n MaterialEddsaPub;\n\ntype ContractPrivateKey = FlavorP<Uint8Array, \"ContractPrivateKey\", 32> &\n MaterialEcdhePriv;\n\ntype MergePrivateKey = FlavorP<Uint8Array, \"MergePrivateKey\", 32> &\n MaterialEddsaPriv;\n\nconst mergeSalt = \"p2p-merge-contract\";\nconst depositSalt = \"p2p-deposit-contract\";\n\nexport function encryptContractForMerge(\n pursePub: PursePublicKey,\n contractPriv: ContractPrivateKey,\n mergePriv: MergePrivateKey,\n contractTerms: any,\n): Promise<OpaqueData> {\n const contractTermsCanon = canonicalJson(contractTerms) + \"\\0\";\n const contractTermsBytes = stringToBytes(contractTermsCanon);\n const contractTermsCompressed = fflate.zlibSync(contractTermsBytes);\n const data = typedArrayConcat([\n bufferForUint32(ContractFormatTag.PaymentOffer),\n bufferForUint32(contractTermsBytes.length),\n mergePriv,\n contractTermsCompressed,\n ]);\n const key = keyExchangeEcdhEddsa(contractPriv, pursePub);\n return encryptWithDerivedKey(getRandomBytesF(24), key, data, mergeSalt);\n}\n\nexport function encryptContractForDeposit(\n pursePub: PursePublicKey,\n contractPriv: ContractPrivateKey,\n contractTerms: any,\n): Promise<OpaqueData> {\n const contractTermsCanon = canonicalJson(contractTerms) + \"\\0\";\n const contractTermsBytes = stringToBytes(contractTermsCanon);\n const contractTermsCompressed = fflate.zlibSync(contractTermsBytes);\n const data = typedArrayConcat([\n bufferForUint32(ContractFormatTag.PaymentRequest),\n bufferForUint32(contractTermsBytes.length),\n contractTermsCompressed,\n ]);\n const key = keyExchangeEcdhEddsa(contractPriv, pursePub);\n return encryptWithDerivedKey(getRandomBytesF(24), key, data, depositSalt);\n}\n\nexport interface DecryptForMergeResult {\n contractTerms: any;\n mergePriv: Uint8Array;\n}\n\nexport interface DecryptForDepositResult {\n contractTerms: any;\n}\n\nexport async function decryptContractForMerge(\n enc: OpaqueData,\n pursePub: PursePublicKey,\n contractPriv: ContractPrivateKey,\n): Promise<DecryptForMergeResult> {\n const key = keyExchangeEcdhEddsa(contractPriv, pursePub);\n const dec = await decryptWithDerivedKey(enc, key, mergeSalt);\n const mergePriv = dec.slice(8, 8 + 32);\n const contractTermsCompressed = dec.slice(8 + 32);\n const contractTermsBuf = fflate.unzlibSync(contractTermsCompressed);\n // Slice of the '\\0' at the end and decode to a string\n const contractTermsString = bytesToString(\n contractTermsBuf.slice(0, contractTermsBuf.length - 1),\n );\n return {\n mergePriv: mergePriv,\n contractTerms: JSON.parse(contractTermsString),\n };\n}\n\nexport async function decryptContractForDeposit(\n enc: OpaqueData,\n pursePub: PursePublicKey,\n contractPriv: ContractPrivateKey,\n): Promise<DecryptForDepositResult> {\n const key = keyExchangeEcdhEddsa(contractPriv, pursePub);\n const dec = await decryptWithDerivedKey(enc, key, depositSalt);\n const contractTermsCompressed = dec.slice(8);\n const contractTermsBuf = fflate.unzlibSync(contractTermsCompressed);\n // Slice of the '\\0' at the end and decode to a string\n const contractTermsString = bytesToString(\n contractTermsBuf.slice(0, contractTermsBuf.length - 1),\n );\n return {\n contractTerms: JSON.parse(contractTermsString),\n };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2017-2019 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n * Helpers for relative and absolute time.\n */\n\n/**\n * Imports.\n */\nimport { Codec, renderContext, Context } from \"./codec.js\";\n\nexport interface AbsoluteTime {\n /**\n * Timestamp in milliseconds.\n */\n readonly t_ms: number | \"never\";\n}\n\nexport interface TalerProtocolTimestamp {\n readonly t_s: number | \"never\";\n}\n\nexport namespace TalerProtocolTimestamp {\n export function now(): TalerProtocolTimestamp {\n return AbsoluteTime.toTimestamp(AbsoluteTime.now());\n }\n\n export function zero(): TalerProtocolTimestamp {\n return {\n t_s: 0,\n };\n }\n\n export function never(): TalerProtocolTimestamp {\n return {\n t_s: \"never\",\n };\n }\n\n export function fromSeconds(s: number): TalerProtocolTimestamp {\n return {\n t_s: s,\n };\n }\n export function min(\n t1: TalerProtocolTimestamp,\n t2: TalerProtocolTimestamp,\n ): TalerProtocolTimestamp {\n if (t1.t_s === \"never\") {\n return { t_s: t2.t_s };\n }\n if (t2.t_s === \"never\") {\n return { t_s: t1.t_s };\n }\n return { t_s: Math.min(t1.t_s, t2.t_s) };\n }\n export function max(\n t1: TalerProtocolTimestamp,\n t2: TalerProtocolTimestamp,\n ): TalerProtocolTimestamp {\n if (t1.t_s === \"never\" || t2.t_s === \"never\") {\n return { t_s: \"never\" };\n }\n return { t_s: Math.max(t1.t_s, t2.t_s) };\n }\n}\n\nexport interface Duration {\n /**\n * Duration in milliseconds.\n */\n readonly d_ms: number | \"forever\";\n}\n\nexport interface TalerProtocolDuration {\n readonly d_us: number | \"forever\";\n}\n\nlet timeshift = 0;\n\nexport function setDangerousTimetravel(dt: number): void {\n timeshift = dt;\n}\n\nexport namespace Duration {\n export function getRemaining(\n deadline: AbsoluteTime,\n now = AbsoluteTime.now(),\n ): Duration {\n if (deadline.t_ms === \"never\") {\n return { d_ms: \"forever\" };\n }\n if (now.t_ms === \"never\") {\n throw Error(\"invalid argument for 'now'\");\n }\n if (deadline.t_ms < now.t_ms) {\n return { d_ms: 0 };\n }\n return { d_ms: deadline.t_ms - now.t_ms };\n }\n\n export function fromPrettyString(s: string): Duration {\n let dMs = 0;\n let currentNum = \"\";\n let parsingNum = true;\n for (let i = 0; i < s.length; i++) {\n const cc = s.charCodeAt(i);\n if (cc >= \"0\".charCodeAt(0) && cc <= \"9\".charCodeAt(0)) {\n if (!parsingNum) {\n throw Error(\"invalid duration, unexpected number\");\n }\n currentNum += s[i];\n continue;\n }\n if (s[i] == \" \") {\n if (currentNum != \"\") {\n parsingNum = false;\n }\n continue;\n }\n\n if (currentNum == \"\") {\n throw Error(\"invalid duration, missing number\");\n }\n\n if (s[i] === \"s\") {\n dMs += 1000 * Number.parseInt(currentNum, 10);\n } else if (s[i] === \"m\") {\n dMs += 60 * 1000 * Number.parseInt(currentNum, 10);\n } else if (s[i] === \"h\") {\n dMs += 60 * 60 * 1000 * Number.parseInt(currentNum, 10);\n } else if (s[i] === \"d\") {\n dMs += 24 * 60 * 60 * 1000 * Number.parseInt(currentNum, 10);\n } else {\n throw Error(\"invalid duration, unsupported unit\");\n }\n currentNum = \"\";\n parsingNum = true;\n }\n return {\n d_ms: dMs,\n };\n }\n\n export function max(d1: Duration, d2: Duration): Duration {\n return durationMax(d1, d2);\n }\n\n export function min(d1: Duration, d2: Duration): Duration {\n return durationMin(d1, d2);\n }\n\n export function multiply(d1: Duration, n: number): Duration {\n return durationMul(d1, n);\n }\n\n export function toIntegerYears(d: Duration): number {\n if (typeof d.d_ms !== \"number\") {\n throw Error(\"infinite duration\");\n }\n return Math.ceil(d.d_ms / 1000 / 60 / 60 / 24 / 365);\n }\n\n export const fromSpec = durationFromSpec;\n\n export function getForever(): Duration {\n return { d_ms: \"forever\" };\n }\n\n export function getZero(): Duration {\n return { d_ms: 0 };\n }\n\n export function fromTalerProtocolDuration(\n d: TalerProtocolDuration,\n ): Duration {\n if (d.d_us === \"forever\") {\n return {\n d_ms: \"forever\",\n };\n }\n return {\n d_ms: d.d_us / 1000,\n };\n }\n\n export function toTalerProtocolDuration(d: Duration): TalerProtocolDuration {\n if (d.d_ms === \"forever\") {\n return {\n d_us: \"forever\",\n };\n }\n return {\n d_us: d.d_ms * 1000,\n };\n }\n\n export function clamp(args: {\n lower: Duration;\n upper: Duration;\n value: Duration;\n }): Duration {\n return durationMax(durationMin(args.value, args.upper), args.lower);\n }\n}\n\nexport namespace AbsoluteTime {\n export function now(): AbsoluteTime {\n return {\n t_ms: new Date().getTime() + timeshift,\n };\n }\n\n export function never(): AbsoluteTime {\n return {\n t_ms: \"never\",\n };\n }\n\n export function cmp(t1: AbsoluteTime, t2: AbsoluteTime): number {\n if (t1.t_ms === \"never\") {\n if (t2.t_ms === \"never\") {\n return 0;\n }\n return 1;\n }\n if (t2.t_ms === \"never\") {\n return -1;\n }\n if (t1.t_ms == t2.t_ms) {\n return 0;\n }\n if (t1.t_ms > t2.t_ms) {\n return 1;\n }\n return -1;\n }\n\n export function min(t1: AbsoluteTime, t2: AbsoluteTime): AbsoluteTime {\n if (t1.t_ms === \"never\") {\n return { t_ms: t2.t_ms };\n }\n if (t2.t_ms === \"never\") {\n return { t_ms: t2.t_ms };\n }\n return { t_ms: Math.min(t1.t_ms, t2.t_ms) };\n }\n\n export function max(t1: AbsoluteTime, t2: AbsoluteTime): AbsoluteTime {\n if (t1.t_ms === \"never\") {\n return { t_ms: \"never\" };\n }\n if (t2.t_ms === \"never\") {\n return { t_ms: \"never\" };\n }\n return { t_ms: Math.max(t1.t_ms, t2.t_ms) };\n }\n\n export function difference(t1: AbsoluteTime, t2: AbsoluteTime): Duration {\n if (t1.t_ms === \"never\") {\n return { d_ms: \"forever\" };\n }\n if (t2.t_ms === \"never\") {\n return { d_ms: \"forever\" };\n }\n return { d_ms: Math.abs(t1.t_ms - t2.t_ms) };\n }\n\n export function isExpired(t: AbsoluteTime) {\n return cmp(t, now()) <= 0;\n }\n\n export function fromTimestamp(t: TalerProtocolTimestamp): AbsoluteTime {\n if (t.t_s === \"never\") {\n return { t_ms: \"never\" };\n }\n return {\n t_ms: t.t_s * 1000,\n };\n }\n\n export function toTimestamp(at: AbsoluteTime): TalerProtocolTimestamp {\n if (at.t_ms === \"never\") {\n return { t_s: \"never\" };\n }\n return {\n t_s: Math.floor(at.t_ms / 1000),\n };\n }\n\n export function isBetween(\n t: AbsoluteTime,\n start: AbsoluteTime,\n end: AbsoluteTime,\n ): boolean {\n if (cmp(t, start) < 0) {\n return false;\n }\n if (cmp(t, end) > 0) {\n return false;\n }\n return true;\n }\n\n export function toIsoString(t: AbsoluteTime): string {\n if (t.t_ms === \"never\") {\n return \"<never>\";\n } else {\n return new Date(t.t_ms).toISOString();\n }\n }\n\n export function addDuration(t1: AbsoluteTime, d: Duration): AbsoluteTime {\n if (t1.t_ms === \"never\" || d.d_ms === \"forever\") {\n return { t_ms: \"never\" };\n }\n return { t_ms: t1.t_ms + d.d_ms };\n }\n\n export function subtractDuraction(\n t1: AbsoluteTime,\n d: Duration,\n ): AbsoluteTime {\n if (t1.t_ms === \"never\") {\n return { t_ms: \"never\" };\n }\n if (d.d_ms === \"forever\") {\n return { t_ms: 0 };\n }\n return { t_ms: Math.max(0, t1.t_ms - d.d_ms) };\n }\n\n export function stringify(t: AbsoluteTime): string {\n if (t.t_ms === \"never\") {\n return \"never\";\n }\n return new Date(t.t_ms).toISOString();\n }\n}\n\nconst SECONDS = 1000;\nconst MINUTES = SECONDS * 60;\nconst HOURS = MINUTES * 60;\nconst DAYS = HOURS * 24;\nconst MONTHS = DAYS * 30;\nconst YEARS = DAYS * 365;\n\nexport function durationFromSpec(spec: {\n seconds?: number;\n minutes?: number;\n hours?: number;\n days?: number;\n months?: number;\n years?: number;\n}): Duration {\n let d_ms = 0;\n d_ms += (spec.seconds ?? 0) * SECONDS;\n d_ms += (spec.minutes ?? 0) * MINUTES;\n d_ms += (spec.hours ?? 0) * HOURS;\n d_ms += (spec.days ?? 0) * DAYS;\n d_ms += (spec.months ?? 0) * MONTHS;\n d_ms += (spec.years ?? 0) * YEARS;\n return { d_ms };\n}\n\nexport function durationMin(d1: Duration, d2: Duration): Duration {\n if (d1.d_ms === \"forever\") {\n return { d_ms: d2.d_ms };\n }\n if (d2.d_ms === \"forever\") {\n return { d_ms: d1.d_ms };\n }\n return { d_ms: Math.min(d1.d_ms, d2.d_ms) };\n}\n\nexport function durationMax(d1: Duration, d2: Duration): Duration {\n if (d1.d_ms === \"forever\") {\n return { d_ms: \"forever\" };\n }\n if (d2.d_ms === \"forever\") {\n return { d_ms: \"forever\" };\n }\n return { d_ms: Math.max(d1.d_ms, d2.d_ms) };\n}\n\nexport function durationMul(d: Duration, n: number): Duration {\n if (d.d_ms === \"forever\") {\n return { d_ms: \"forever\" };\n }\n return { d_ms: Math.round(d.d_ms * n) };\n}\n\nexport function durationAdd(d1: Duration, d2: Duration): Duration {\n if (d1.d_ms === \"forever\" || d2.d_ms === \"forever\") {\n return { d_ms: \"forever\" };\n }\n return { d_ms: d1.d_ms + d2.d_ms };\n}\n\nexport const codecForAbsoluteTime: Codec<AbsoluteTime> = {\n decode(x: any, c?: Context): AbsoluteTime {\n const t_ms = x.t_ms;\n if (typeof t_ms === \"string\") {\n if (t_ms === \"never\") {\n return { t_ms: \"never\" };\n }\n } else if (typeof t_ms === \"number\") {\n return { t_ms };\n }\n throw Error(`expected timestamp at ${renderContext(c)}`);\n },\n};\n\nexport const codecForTimestamp: Codec<TalerProtocolTimestamp> = {\n decode(x: any, c?: Context): TalerProtocolTimestamp {\n // Compatibility, should be removed soon.\n const t_ms = x.t_ms;\n if (typeof t_ms === \"string\") {\n if (t_ms === \"never\") {\n return { t_s: \"never\" };\n }\n } else if (typeof t_ms === \"number\") {\n return { t_s: Math.floor(t_ms / 1000) };\n }\n const t_s = x.t_s;\n if (typeof t_s === \"string\") {\n if (t_s === \"never\") {\n return { t_s: \"never\" };\n }\n throw Error(`expected timestamp at ${renderContext(c)}`);\n }\n if (typeof t_s === \"number\") {\n return { t_s };\n }\n throw Error(`expected timestamp at ${renderContext(c)}`);\n },\n};\n\nexport const codecForDuration: Codec<TalerProtocolDuration> = {\n decode(x: any, c?: Context): TalerProtocolDuration {\n const d_us = x.d_us;\n if (typeof d_us === \"string\") {\n if (d_us === \"forever\") {\n return { d_us: \"forever\" };\n }\n throw Error(`expected duration at ${renderContext(c)}`);\n }\n if (typeof d_us === \"number\") {\n return { d_us };\n }\n throw Error(`expected duration at ${renderContext(c)}`);\n },\n};\n", "/*\n This file is part of GNU Taler\n (C) 2019 GNUnet e.V.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n * Type and schema definitions and helpers for the core GNU Taler protocol.\n *\n * Even though the rest of the wallet uses camelCase for fields, use snake_case\n * here, since that's the convention for the Taler JSON+HTTP API.\n */\n\n/**\n * Imports.\n */\n\nimport { codecForAmountString } from \"./amounts.js\";\nimport {\n buildCodecForObject,\n buildCodecForUnion,\n Codec,\n codecForAny,\n codecForBoolean,\n codecForConstNumber,\n codecForConstString,\n codecForList,\n codecForMap,\n codecForNumber,\n codecForString,\n codecOptional,\n} from \"./codec.js\";\nimport { strcmp } from \"./helpers.js\";\nimport { AgeCommitmentProof, Edx25519PublicKeyEnc } from \"./taler-crypto.js\";\nimport {\n codecForAbsoluteTime,\n codecForDuration,\n codecForTimestamp,\n TalerProtocolDuration,\n TalerProtocolTimestamp,\n} from \"./time.js\";\n\n/**\n * Denomination as found in the /keys response from the exchange.\n */\nexport class ExchangeDenomination {\n /**\n * Value of one coin of the denomination.\n */\n value: string;\n\n /**\n * Public signing key of the denomination.\n */\n denom_pub: DenominationPubKey;\n\n /**\n * Fee for withdrawing.\n */\n fee_withdraw: string;\n\n /**\n * Fee for depositing.\n */\n fee_deposit: string;\n\n /**\n * Fee for refreshing.\n */\n fee_refresh: string;\n\n /**\n * Fee for refunding.\n */\n fee_refund: string;\n\n /**\n * Start date from which withdraw is allowed.\n */\n stamp_start: TalerProtocolTimestamp;\n\n /**\n * End date for withdrawing.\n */\n stamp_expire_withdraw: TalerProtocolTimestamp;\n\n /**\n * Expiration date after which the exchange can forget about\n * the currency.\n */\n stamp_expire_legal: TalerProtocolTimestamp;\n\n /**\n * Date after which the coins of this denomination can't be\n * deposited anymore.\n */\n stamp_expire_deposit: TalerProtocolTimestamp;\n\n /**\n * Signature over the denomination information by the exchange's master\n * signing key.\n */\n master_sig: string;\n}\n\n/**\n * Signature by the auditor that a particular denomination key is audited.\n */\nexport class AuditorDenomSig {\n /**\n * Denomination public key's hash.\n */\n denom_pub_h: string;\n\n /**\n * The signature.\n */\n auditor_sig: string;\n}\n\n/**\n * Auditor information as given by the exchange in /keys.\n */\nexport class ExchangeAuditor {\n /**\n * Auditor's public key.\n */\n auditor_pub: string;\n\n /**\n * Base URL of the auditor.\n */\n auditor_url: string;\n\n /**\n * List of signatures for denominations by the auditor.\n */\n denomination_keys: AuditorDenomSig[];\n}\n\nexport type ExchangeWithdrawValue =\n | ExchangeRsaWithdrawValue\n | ExchangeCsWithdrawValue;\n\nexport interface ExchangeRsaWithdrawValue {\n cipher: \"RSA\";\n}\n\nexport interface ExchangeCsWithdrawValue {\n cipher: \"CS\";\n\n /**\n * CSR R0 value\n */\n r_pub_0: string;\n\n /**\n * CSR R1 value\n */\n r_pub_1: string;\n}\n\nexport interface RecoupRequest {\n /**\n * Hashed denomination public key of the coin we want to get\n * paid back.\n */\n denom_pub_hash: string;\n\n /**\n * Signature over the coin public key by the denomination.\n *\n * The string variant is for the legacy exchange protocol.\n */\n denom_sig: UnblindedSignature;\n\n /**\n * Blinding key that was used during withdraw,\n * used to prove that we were actually withdrawing the coin.\n */\n coin_blind_key_secret: string;\n\n /**\n * Signature of TALER_RecoupRequestPS created with the coin's private key.\n */\n coin_sig: string;\n\n ewv: ExchangeWithdrawValue;\n}\n\nexport interface RecoupRefreshRequest {\n /**\n * Hashed enomination public key of the coin we want to get\n * paid back.\n */\n denom_pub_hash: string;\n\n /**\n * Signature over the coin public key by the denomination.\n *\n * The string variant is for the legacy exchange protocol.\n */\n denom_sig: UnblindedSignature;\n\n /**\n * Coin's blinding factor.\n */\n coin_blind_key_secret: string;\n\n /**\n * Signature of TALER_RecoupRefreshRequestPS created with\n * the coin's private key.\n */\n coin_sig: string;\n\n ewv: ExchangeWithdrawValue;\n}\n\n/**\n * Response that we get from the exchange for a payback request.\n */\nexport interface RecoupConfirmation {\n /**\n * Public key of the reserve that will receive the payback.\n */\n reserve_pub?: string;\n\n /**\n * Public key of the old coin that will receive the recoup,\n * provided if refreshed was true.\n */\n old_coin_pub?: string;\n}\n\nexport type UnblindedSignature = RsaUnblindedSignature;\n\nexport interface RsaUnblindedSignature {\n cipher: DenomKeyType.Rsa;\n rsa_signature: string;\n}\n\n/**\n * Deposit permission for a single coin.\n */\nexport interface CoinDepositPermission {\n /**\n * Signature by the coin.\n */\n coin_sig: string;\n\n /**\n * Public key of the coin being spend.\n */\n coin_pub: string;\n\n /**\n * Signature made by the denomination public key.\n *\n * The string variant is for legacy protocol support.\n */\n\n ub_sig: UnblindedSignature;\n\n /**\n * The denomination public key associated with this coin.\n */\n h_denom: string;\n\n /**\n * The amount that is subtracted from this coin with this payment.\n */\n contribution: string;\n\n /**\n * URL of the exchange this coin was withdrawn from.\n */\n exchange_url: string;\n\n minimum_age_sig?: EddsaSignatureString;\n\n age_commitment?: Edx25519PublicKeyEnc[];\n\n h_age_commitment?: string;\n}\n\n/**\n * Information about an exchange as stored inside a\n * merchant's contract terms.\n */\nexport interface ExchangeHandle {\n /**\n * Master public signing key of the exchange.\n */\n master_pub: string;\n\n /**\n * Base URL of the exchange.\n */\n url: string;\n}\n\nexport interface AuditorHandle {\n /**\n * Official name of the auditor.\n */\n name: string;\n\n /**\n * Master public signing key of the auditor.\n */\n auditor_pub: string;\n\n /**\n * Base URL of the auditor.\n */\n url: string;\n}\n\n// Delivery location, loosely modeled as a subset of\n// ISO20022's PostalAddress25.\nexport interface Location {\n // Nation with its own government.\n country?: string;\n\n // Identifies a subdivision of a country such as state, region, county.\n country_subdivision?: string;\n\n // Identifies a subdivision within a country sub-division.\n district?: string;\n\n // Name of a built-up area, with defined boundaries, and a local government.\n town?: string;\n\n // Specific location name within the town.\n town_location?: string;\n\n // Identifier consisting of a group of letters and/or numbers that\n // is added to a postal address to assist the sorting of mail.\n post_code?: string;\n\n // Name of a street or thoroughfare.\n street?: string;\n\n // Name of the building or house.\n building_name?: string;\n\n // Number that identifies the position of a building on a street.\n building_number?: string;\n\n // Free-form address lines, should not exceed 7 elements.\n address_lines?: string[];\n}\n\nexport interface MerchantInfo {\n name: string;\n jurisdiction?: Location;\n address?: Location;\n logo?: string;\n website?: string;\n email?: string;\n}\n\nexport interface Tax {\n // the name of the tax\n name: string;\n\n // amount paid in tax\n tax: AmountString;\n}\n\nexport interface Product {\n // merchant-internal identifier for the product.\n product_id?: string;\n\n // Human-readable product description.\n description: string;\n\n // Map from IETF BCP 47 language tags to localized descriptions\n description_i18n?: { [lang_tag: string]: string };\n\n // The number of units of the product to deliver to the customer.\n quantity?: number;\n\n // The unit in which the product is measured (liters, kilograms, packages, etc.)\n unit?: string;\n\n // The price of the product; this is the total price for quantity times unit of this product.\n price?: AmountString;\n\n // An optional base64-encoded product image\n image?: string;\n\n // a list of taxes paid by the merchant for this product. Can be empty.\n taxes?: Tax[];\n\n // time indicating when this product should be delivered\n delivery_date?: TalerProtocolTimestamp;\n}\n\nexport interface InternationalizedString {\n [lang_tag: string]: string;\n}\n\n/**\n * Contract terms from a merchant.\n * FIXME: Add type field!\n */\nexport interface MerchantContractTerms {\n /**\n * Hash of the merchant's wire details.\n */\n h_wire: string;\n\n /**\n * Hash of the merchant's wire details.\n */\n auto_refund?: TalerProtocolDuration;\n\n /**\n * Wire method the merchant wants to use.\n */\n wire_method: string;\n\n /**\n * Human-readable short summary of the contract.\n */\n summary: string;\n\n summary_i18n?: InternationalizedString;\n\n /**\n * Nonce used to ensure freshness.\n */\n nonce: string;\n\n /**\n * Total amount payable.\n */\n amount: string;\n\n /**\n * Auditors accepted by the merchant.\n */\n auditors: AuditorHandle[];\n\n /**\n * Deadline to pay for the contract.\n */\n pay_deadline: TalerProtocolTimestamp;\n\n /**\n * Maximum deposit fee covered by the merchant.\n */\n max_fee: string;\n\n /**\n * Information about the merchant.\n */\n merchant: MerchantInfo;\n\n /**\n * Public key of the merchant.\n */\n merchant_pub: string;\n\n /**\n * Time indicating when the order should be delivered.\n * May be overwritten by individual products.\n */\n delivery_date?: TalerProtocolTimestamp;\n\n /**\n * Delivery location for (all!) products.\n */\n delivery_location?: Location;\n\n /**\n * List of accepted exchanges.\n */\n exchanges: ExchangeHandle[];\n\n /**\n * Products that are sold in this contract.\n */\n products?: Product[];\n\n /**\n * Deadline for refunds.\n */\n refund_deadline: TalerProtocolTimestamp;\n\n /**\n * Deadline for the wire transfer.\n */\n wire_transfer_deadline: TalerProtocolTimestamp;\n\n /**\n * Time when the contract was generated by the merchant.\n */\n timestamp: TalerProtocolTimestamp;\n\n /**\n * Order id to uniquely identify the purchase within\n * one merchant instance.\n */\n order_id: string;\n\n /**\n * Base URL of the merchant's backend.\n */\n merchant_base_url: string;\n\n /**\n * Fulfillment URL to view the product or\n * delivery status.\n */\n fulfillment_url?: string;\n\n /**\n * URL meant to share the shopping cart.\n */\n public_reorder_url?: string;\n\n /**\n * Plain text fulfillment message in the merchant's default language.\n */\n fulfillment_message?: string;\n\n /**\n * Internationalized fulfillment messages.\n */\n fulfillment_message_i18n?: InternationalizedString;\n\n /**\n * Share of the wire fee that must be settled with one payment.\n */\n wire_fee_amortization?: number;\n\n /**\n * Maximum wire fee that the merchant agrees to pay for.\n */\n max_wire_fee?: string;\n\n minimum_age?: number;\n\n /**\n * Extra data, interpreted by the mechant only.\n */\n extra?: any;\n}\n\n/**\n * Refund permission in the format that the merchant gives it to us.\n */\nexport interface MerchantAbortPayRefundDetails {\n /**\n * Amount to be refunded.\n */\n refund_amount: string;\n\n /**\n * Fee for the refund.\n */\n refund_fee: string;\n\n /**\n * Public key of the coin being refunded.\n */\n coin_pub: string;\n\n /**\n * Refund transaction ID between merchant and exchange.\n */\n rtransaction_id: number;\n\n /**\n * Exchange's key used for the signature.\n */\n exchange_pub?: string;\n\n /**\n * Exchange's signature to confirm the refund.\n */\n exchange_sig?: string;\n\n /**\n * Error replay from the exchange (if any).\n */\n exchange_reply?: any;\n\n /**\n * Error code from the exchange (if any).\n */\n exchange_code?: number;\n\n /**\n * HTTP status code of the exchange's response\n * to the merchant's refund request.\n */\n exchange_http_status: number;\n}\n\n/**\n * Response for a refund pickup or a /pay in abort mode.\n */\nexport interface MerchantRefundResponse {\n /**\n * Public key of the merchant\n */\n merchant_pub: string;\n\n /**\n * Contract terms hash of the contract that\n * is being refunded.\n */\n h_contract_terms: string;\n\n /**\n * The signed refund permissions, to be sent to the exchange.\n */\n refunds: MerchantAbortPayRefundDetails[];\n}\n\n/**\n * Planchet detail sent to the merchant.\n */\nexport interface TipPlanchetDetail {\n /**\n * Hashed denomination public key.\n */\n denom_pub_hash: string;\n\n /**\n * Coin's blinded public key.\n */\n coin_ev: CoinEnvelope;\n}\n\n/**\n * Request sent to the merchant to pick up a tip.\n */\nexport interface TipPickupRequest {\n /**\n * Identifier of the tip.\n */\n tip_id: string;\n\n /**\n * List of planchets the wallet wants to use for the tip.\n */\n planchets: TipPlanchetDetail[];\n}\n\n/**\n * Reserve signature, defined as separate class to facilitate\n * schema validation.\n */\nexport interface MerchantBlindSigWrapperV1 {\n /**\n * Reserve signature.\n */\n blind_sig: string;\n}\n\n/**\n * Response of the merchant\n * to the TipPickupRequest.\n */\nexport interface MerchantTipResponseV1 {\n /**\n * The order of the signatures matches the planchets list.\n */\n blind_sigs: MerchantBlindSigWrapperV1[];\n}\n\nexport interface MerchantBlindSigWrapperV2 {\n blind_sig: BlindedDenominationSignature;\n}\n\n/**\n * Response of the merchant\n * to the TipPickupRequest.\n */\nexport interface MerchantTipResponseV2 {\n /**\n * The order of the signatures matches the planchets list.\n */\n blind_sigs: MerchantBlindSigWrapperV2[];\n}\n\n/**\n * Element of the payback list that the\n * exchange gives us in /keys.\n */\nexport class Recoup {\n /**\n * The hash of the denomination public key for which the payback is offered.\n */\n h_denom_pub: string;\n}\n\n/**\n * Structure of one exchange signing key in the /keys response.\n */\nexport class ExchangeSignKeyJson {\n stamp_start: TalerProtocolTimestamp;\n stamp_expire: TalerProtocolTimestamp;\n stamp_end: TalerProtocolTimestamp;\n key: EddsaPublicKeyString;\n master_sig: EddsaSignatureString;\n}\n\n/**\n * Structure that the exchange gives us in /keys.\n */\nexport class ExchangeKeysJson {\n /**\n * List of offered denominations.\n */\n denoms: ExchangeDenomination[];\n\n /**\n * The exchange's master public key.\n */\n master_public_key: string;\n\n /**\n * The list of auditors (partially) auditing the exchange.\n */\n auditors: ExchangeAuditor[];\n\n /**\n * Timestamp when this response was issued.\n */\n list_issue_date: TalerProtocolTimestamp;\n\n /**\n * List of revoked denominations.\n */\n recoup?: Recoup[];\n\n /**\n * Short-lived signing keys used to sign online\n * responses.\n */\n signkeys: ExchangeSignKeyJson[];\n\n /**\n * Protocol version.\n */\n version: string;\n\n reserve_closing_delay: TalerProtocolDuration;\n\n global_fees: GlobalFees[];\n}\n\nexport interface GlobalFees {\n // What date (inclusive) does these fees go into effect?\n start_date: TalerProtocolTimestamp;\n\n // What date (exclusive) does this fees stop going into effect?\n end_date: TalerProtocolTimestamp;\n\n // Account history fee, charged when a user wants to\n // obtain a reserve/account history.\n history_fee: AmountString;\n\n // Annual fee charged for having an open account at the\n // exchange. Charged to the account. If the account\n // balance is insufficient to cover this fee, the account\n // is automatically deleted/closed. (Note that the exchange\n // will keep the account history around for longer for\n // regulatory reasons.)\n account_fee: AmountString;\n\n // Purse fee, charged only if a purse is abandoned\n // and was not covered by the account limit.\n purse_fee: AmountString;\n\n // How long will the exchange preserve the account history?\n // After an account was deleted/closed, the exchange will\n // retain the account history for legal reasons until this time.\n history_expiration: TalerProtocolDuration;\n\n // Non-negative number of concurrent purses that any\n // account holder is allowed to create without having\n // to pay the purse_fee.\n purse_account_limit: number;\n\n // How long does an exchange keep a purse around after a purse\n // has expired (or been successfully merged)? A 'GET' request\n // for a purse will succeed until the purse expiration time\n // plus this value.\n purse_timeout: TalerProtocolDuration;\n\n // Signature of TALER_GlobalFeesPS.\n master_sig: string;\n}\n/**\n * Wire fees as announced by the exchange.\n */\nexport class WireFeesJson {\n /**\n * Cost of a wire transfer.\n */\n wire_fee: string;\n\n /**\n * Cost of clising a reserve.\n */\n closing_fee: string;\n\n /**\n * Signature made with the exchange's master key.\n */\n sig: string;\n\n /**\n * Date from which the fee applies.\n */\n start_date: TalerProtocolTimestamp;\n\n /**\n * Data after which the fee doesn't apply anymore.\n */\n end_date: TalerProtocolTimestamp;\n}\n\nexport interface AccountInfo {\n payto_uri: string;\n master_sig: string;\n}\n\nexport interface ExchangeWireJson {\n accounts: AccountInfo[];\n fees: { [methodName: string]: WireFeesJson[] };\n}\n\n/**\n * Proposal returned from the contract URL.\n */\nexport class Proposal {\n /**\n * Contract terms for the propoal.\n * Raw, un-decoded JSON object.\n */\n contract_terms: any;\n\n /**\n * Signature over contract, made by the merchant. The public key used for signing\n * must be contract_terms.merchant_pub.\n */\n sig: string;\n}\n\n/**\n * Response from the internal merchant API.\n */\nexport class CheckPaymentResponse {\n order_status: string;\n refunded: boolean | undefined;\n refunded_amount: string | undefined;\n contract_terms: any | undefined;\n taler_pay_uri: string | undefined;\n contract_url: string | undefined;\n}\n\n/**\n * Response from the bank.\n */\nexport class WithdrawOperationStatusResponse {\n selection_done: boolean;\n\n transfer_done: boolean;\n\n aborted: boolean;\n\n amount: string;\n\n sender_wire?: string;\n\n suggested_exchange?: string;\n\n confirm_transfer_url?: string;\n\n wire_types: string[];\n}\n\n/**\n * Response from the merchant.\n */\nexport class TipPickupGetResponse {\n tip_amount: string;\n\n exchange_url: string;\n\n next_url?: string;\n\n expiration: TalerProtocolTimestamp;\n}\n\nexport enum DenomKeyType {\n Rsa = \"RSA\",\n ClauseSchnorr = \"CS\",\n}\n\nexport namespace DenomKeyType {\n export function toIntTag(t: DenomKeyType): number {\n switch (t) {\n case DenomKeyType.Rsa:\n return 1;\n case DenomKeyType.ClauseSchnorr:\n return 2;\n }\n }\n}\n\nexport interface RsaBlindedDenominationSignature {\n cipher: DenomKeyType.Rsa;\n blinded_rsa_signature: string;\n}\n\nexport interface CSBlindedDenominationSignature {\n cipher: DenomKeyType.ClauseSchnorr;\n}\n\nexport type BlindedDenominationSignature =\n | RsaBlindedDenominationSignature\n | CSBlindedDenominationSignature;\n\nexport const codecForRsaBlindedDenominationSignature = () =>\n buildCodecForObject<RsaBlindedDenominationSignature>()\n .property(\"cipher\", codecForConstString(DenomKeyType.Rsa))\n .property(\"blinded_rsa_signature\", codecForString())\n .build(\"RsaBlindedDenominationSignature\");\n\nexport const codecForBlindedDenominationSignature = () =>\n buildCodecForUnion<BlindedDenominationSignature>()\n .discriminateOn(\"cipher\")\n .alternative(DenomKeyType.Rsa, codecForRsaBlindedDenominationSignature())\n .build(\"BlindedDenominationSignature\");\n\nexport class ExchangeWithdrawResponse {\n ev_sig: BlindedDenominationSignature;\n}\n\nexport class ExchangeWithdrawBatchResponse {\n ev_sigs: ExchangeWithdrawResponse[];\n}\n\nexport interface MerchantPayResponse {\n sig: string;\n}\n\nexport interface ExchangeMeltRequest {\n coin_pub: CoinPublicKeyString;\n confirm_sig: EddsaSignatureString;\n denom_pub_hash: HashCodeString;\n denom_sig: UnblindedSignature;\n rc: string;\n value_with_fee: AmountString;\n age_commitment_hash?: HashCodeString;\n}\n\nexport interface ExchangeMeltResponse {\n /**\n * Which of the kappa indices does the client not have to reveal.\n */\n noreveal_index: number;\n\n /**\n * Signature of TALER_RefreshMeltConfirmationPS whereby the exchange\n * affirms the successful melt and confirming the noreveal_index\n */\n exchange_sig: EddsaSignatureString;\n\n /*\n * public EdDSA key of the exchange that was used to generate the signature.\n * Should match one of the exchange's signing keys from /keys. Again given\n * explicitly as the client might otherwise be confused by clock skew as to\n * which signing key was used.\n */\n exchange_pub: EddsaPublicKeyString;\n\n /*\n * Base URL to use for operations on the refresh context\n * (so the reveal operation). If not given,\n * the base URL is the same as the one used for this request.\n * Can be used if the base URL for /refreshes/ differs from that\n * for /coins/, i.e. for load balancing. Clients SHOULD\n * respect the refresh_base_url if provided. Any HTTP server\n * belonging to an exchange MUST generate a 307 or 308 redirection\n * to the correct base URL should a client uses the wrong base\n * URL, or if the base URL has changed since the melt.\n *\n * When melting the same coin twice (technically allowed\n * as the response might have been lost on the network),\n * the exchange may return different values for the refresh_base_url.\n */\n refresh_base_url?: string;\n}\n\nexport interface ExchangeRevealItem {\n ev_sig: BlindedDenominationSignature;\n}\n\nexport interface ExchangeRevealResponse {\n // List of the exchange's blinded RSA signatures on the new coins.\n ev_sigs: ExchangeRevealItem[];\n}\n\ninterface MerchantOrderStatusPaid {\n // Was the payment refunded (even partially, via refund or abort)?\n refunded: boolean;\n\n // Is any amount of the refund still waiting to be picked up (even partially)?\n refund_pending: boolean;\n\n // Amount that was refunded in total.\n refund_amount: AmountString;\n\n // Amount that already taken by the wallet.\n refund_taken: AmountString;\n}\n\ninterface MerchantOrderRefundResponse {\n /**\n * Amount that was refunded in total.\n */\n refund_amount: AmountString;\n\n /**\n * Successful refunds for this payment, empty array for none.\n */\n refunds: MerchantCoinRefundStatus[];\n\n /**\n * Public key of the merchant.\n */\n merchant_pub: EddsaPublicKeyString;\n}\n\nexport type MerchantCoinRefundStatus =\n | MerchantCoinRefundSuccessStatus\n | MerchantCoinRefundFailureStatus;\n\nexport interface MerchantCoinRefundSuccessStatus {\n type: \"success\";\n\n // HTTP status of the exchange request, 200 (integer) required for refund confirmations.\n exchange_status: 200;\n\n // the EdDSA :ref:signature (binary-only) with purpose\n // TALER_SIGNATURE_EXCHANGE_CONFIRM_REFUND using a current signing key of the\n // exchange affirming the successful refund\n exchange_sig: EddsaSignatureString;\n\n // public EdDSA key of the exchange that was used to generate the signature.\n // Should match one of the exchange's signing keys from /keys. It is given\n // explicitly as the client might otherwise be confused by clock skew as to\n // which signing key was used.\n exchange_pub: EddsaPublicKeyString;\n\n // Refund transaction ID.\n rtransaction_id: number;\n\n // public key of a coin that was refunded\n coin_pub: EddsaPublicKeyString;\n\n // Amount that was refunded, including refund fee charged by the exchange\n // to the customer.\n refund_amount: AmountString;\n\n execution_time: TalerProtocolTimestamp;\n}\n\nexport interface MerchantCoinRefundFailureStatus {\n type: \"failure\";\n\n // HTTP status of the exchange request, must NOT be 200.\n exchange_status: number;\n\n // Taler error code from the exchange reply, if available.\n exchange_code?: number;\n\n // If available, HTTP reply from the exchange.\n exchange_reply?: any;\n\n // Refund transaction ID.\n rtransaction_id: number;\n\n // public key of a coin that was refunded\n coin_pub: EddsaPublicKeyString;\n\n // Amount that was refunded, including refund fee charged by the exchange\n // to the customer.\n refund_amount: AmountString;\n\n execution_time: TalerProtocolTimestamp;\n}\n\nexport interface MerchantOrderStatusUnpaid {\n /**\n * URI that the wallet must process to complete the payment.\n */\n taler_pay_uri: string;\n\n /**\n * Alternative order ID which was paid for already in the same session.\n *\n * Only given if the same product was purchased before in the same session.\n */\n already_paid_order_id?: string;\n}\n\n/**\n * Response body for the following endpoint:\n *\n * POST {talerBankIntegrationApi}/withdrawal-operation/{wopid}\n */\nexport interface BankWithdrawalOperationPostResponse {\n transfer_done: boolean;\n}\n\nexport type DenominationPubKey = RsaDenominationPubKey | CsDenominationPubKey;\n\nexport interface RsaDenominationPubKey {\n readonly cipher: DenomKeyType.Rsa;\n readonly rsa_public_key: string;\n readonly age_mask: number;\n}\n\nexport interface CsDenominationPubKey {\n readonly cipher: DenomKeyType.ClauseSchnorr;\n readonly age_mask: number;\n readonly cs_public_key: string;\n}\n\nexport namespace DenominationPubKey {\n export function cmp(\n p1: DenominationPubKey,\n p2: DenominationPubKey,\n ): -1 | 0 | 1 {\n if (p1.cipher < p2.cipher) {\n return -1;\n } else if (p1.cipher > p2.cipher) {\n return +1;\n } else if (\n p1.cipher === DenomKeyType.Rsa &&\n p2.cipher === DenomKeyType.Rsa\n ) {\n if ((p1.age_mask ?? 0) < (p2.age_mask ?? 0)) {\n return -1;\n } else if ((p1.age_mask ?? 0) > (p2.age_mask ?? 0)) {\n return 1;\n }\n return strcmp(p1.rsa_public_key, p2.rsa_public_key);\n } else if (\n p1.cipher === DenomKeyType.ClauseSchnorr &&\n p2.cipher === DenomKeyType.ClauseSchnorr\n ) {\n if ((p1.age_mask ?? 0) < (p2.age_mask ?? 0)) {\n return -1;\n } else if ((p1.age_mask ?? 0) > (p2.age_mask ?? 0)) {\n return 1;\n }\n return strcmp(p1.cs_public_key, p2.cs_public_key);\n } else {\n throw Error(\"unsupported cipher\");\n }\n }\n}\n\nexport const codecForRsaDenominationPubKey = () =>\n buildCodecForObject<RsaDenominationPubKey>()\n .property(\"cipher\", codecForConstString(DenomKeyType.Rsa))\n .property(\"rsa_public_key\", codecForString())\n .property(\"age_mask\", codecForNumber())\n .build(\"DenominationPubKey\");\n\nexport const codecForCsDenominationPubKey = () =>\n buildCodecForObject<CsDenominationPubKey>()\n .property(\"cipher\", codecForConstString(DenomKeyType.ClauseSchnorr))\n .property(\"cs_public_key\", codecForString())\n .property(\"age_mask\", codecForNumber())\n .build(\"CsDenominationPubKey\");\n\nexport const codecForDenominationPubKey = () =>\n buildCodecForUnion<DenominationPubKey>()\n .discriminateOn(\"cipher\")\n .alternative(DenomKeyType.Rsa, codecForRsaDenominationPubKey())\n .alternative(DenomKeyType.ClauseSchnorr, codecForCsDenominationPubKey())\n .build(\"DenominationPubKey\");\n\nexport const codecForBankWithdrawalOperationPostResponse =\n (): Codec<BankWithdrawalOperationPostResponse> =>\n buildCodecForObject<BankWithdrawalOperationPostResponse>()\n .property(\"transfer_done\", codecForBoolean())\n .build(\"BankWithdrawalOperationPostResponse\");\n\nexport type AmountString = string;\nexport type Base32String = string;\nexport type EddsaSignatureString = string;\nexport type EddsaPublicKeyString = string;\nexport type CoinPublicKeyString = string;\n\nexport const codecForDenomination = (): Codec<ExchangeDenomination> =>\n buildCodecForObject<ExchangeDenomination>()\n .property(\"value\", codecForString())\n .property(\"denom_pub\", codecForDenominationPubKey())\n .property(\"fee_withdraw\", codecForString())\n .property(\"fee_deposit\", codecForString())\n .property(\"fee_refresh\", codecForString())\n .property(\"fee_refund\", codecForString())\n .property(\"stamp_start\", codecForTimestamp)\n .property(\"stamp_expire_withdraw\", codecForTimestamp)\n .property(\"stamp_expire_legal\", codecForTimestamp)\n .property(\"stamp_expire_deposit\", codecForTimestamp)\n .property(\"master_sig\", codecForString())\n .build(\"Denomination\");\n\nexport const codecForAuditorDenomSig = (): Codec<AuditorDenomSig> =>\n buildCodecForObject<AuditorDenomSig>()\n .property(\"denom_pub_h\", codecForString())\n .property(\"auditor_sig\", codecForString())\n .build(\"AuditorDenomSig\");\n\nexport const codecForAuditor = (): Codec<ExchangeAuditor> =>\n buildCodecForObject<ExchangeAuditor>()\n .property(\"auditor_pub\", codecForString())\n .property(\"auditor_url\", codecForString())\n .property(\"denomination_keys\", codecForList(codecForAuditorDenomSig()))\n .build(\"Auditor\");\n\nexport const codecForExchangeHandle = (): Codec<ExchangeHandle> =>\n buildCodecForObject<ExchangeHandle>()\n .property(\"master_pub\", codecForString())\n .property(\"url\", codecForString())\n .build(\"ExchangeHandle\");\n\nexport const codecForAuditorHandle = (): Codec<AuditorHandle> =>\n buildCodecForObject<AuditorHandle>()\n .property(\"name\", codecForString())\n .property(\"auditor_pub\", codecForString())\n .property(\"url\", codecForString())\n .build(\"AuditorHandle\");\n\nexport const codecForLocation = (): Codec<Location> =>\n buildCodecForObject<Location>()\n .property(\"country\", codecOptional(codecForString()))\n .property(\"country_subdivision\", codecOptional(codecForString()))\n .property(\"building_name\", codecOptional(codecForString()))\n .property(\"building_number\", codecOptional(codecForString()))\n .property(\"district\", codecOptional(codecForString()))\n .property(\"street\", codecOptional(codecForString()))\n .property(\"post_code\", codecOptional(codecForString()))\n .property(\"town\", codecOptional(codecForString()))\n .property(\"town_location\", codecOptional(codecForString()))\n .property(\"address_lines\", codecOptional(codecForList(codecForString())))\n .build(\"Location\");\n\nexport const codecForMerchantInfo = (): Codec<MerchantInfo> =>\n buildCodecForObject<MerchantInfo>()\n .property(\"name\", codecForString())\n .property(\"address\", codecOptional(codecForLocation()))\n .property(\"jurisdiction\", codecOptional(codecForLocation()))\n .build(\"MerchantInfo\");\n\nexport const codecForTax = (): Codec<Tax> =>\n buildCodecForObject<Tax>()\n .property(\"name\", codecForString())\n .property(\"tax\", codecForString())\n .build(\"Tax\");\n\nexport const codecForInternationalizedString =\n (): Codec<InternationalizedString> => codecForMap(codecForString());\n\nexport const codecForProduct = (): Codec<Product> =>\n buildCodecForObject<Product>()\n .property(\"product_id\", codecOptional(codecForString()))\n .property(\"description\", codecForString())\n .property(\n \"description_i18n\",\n codecOptional(codecForInternationalizedString()),\n )\n .property(\"quantity\", codecOptional(codecForNumber()))\n .property(\"unit\", codecOptional(codecForString()))\n .property(\"price\", codecOptional(codecForString()))\n .build(\"Tax\");\n\nexport const codecForMerchantContractTerms = (): Codec<MerchantContractTerms> =>\n buildCodecForObject<MerchantContractTerms>()\n .property(\"order_id\", codecForString())\n .property(\"fulfillment_url\", codecOptional(codecForString()))\n .property(\"fulfillment_message\", codecOptional(codecForString()))\n .property(\n \"fulfillment_message_i18n\",\n codecOptional(codecForInternationalizedString()),\n )\n .property(\"merchant_base_url\", codecForString())\n .property(\"h_wire\", codecForString())\n .property(\"auto_refund\", codecOptional(codecForDuration))\n .property(\"wire_method\", codecForString())\n .property(\"summary\", codecForString())\n .property(\"summary_i18n\", codecOptional(codecForInternationalizedString()))\n .property(\"nonce\", codecForString())\n .property(\"amount\", codecForString())\n .property(\"auditors\", codecForList(codecForAuditorHandle()))\n .property(\"pay_deadline\", codecForTimestamp)\n .property(\"refund_deadline\", codecForTimestamp)\n .property(\"wire_transfer_deadline\", codecForTimestamp)\n .property(\"timestamp\", codecForTimestamp)\n .property(\"delivery_location\", codecOptional(codecForLocation()))\n .property(\"delivery_date\", codecOptional(codecForTimestamp))\n .property(\"max_fee\", codecForString())\n .property(\"max_wire_fee\", codecOptional(codecForString()))\n .property(\"merchant\", codecForMerchantInfo())\n .property(\"merchant_pub\", codecForString())\n .property(\"exchanges\", codecForList(codecForExchangeHandle()))\n .property(\"products\", codecOptional(codecForList(codecForProduct())))\n .property(\"extra\", codecForAny())\n .property(\"minimum_age\", codecOptional(codecForNumber()))\n .build(\"MerchantContractTerms\");\n\nexport const codecForPeerContractTerms = (): Codec<PeerContractTerms> =>\n buildCodecForObject<PeerContractTerms>()\n .property(\"summary\", codecForString())\n .property(\"amount\", codecForString())\n .property(\"purse_expiration\", codecForTimestamp)\n .build(\"PeerContractTerms\");\n\nexport const codecForMerchantRefundPermission =\n (): Codec<MerchantAbortPayRefundDetails> =>\n buildCodecForObject<MerchantAbortPayRefundDetails>()\n .property(\"refund_amount\", codecForAmountString())\n .property(\"refund_fee\", codecForAmountString())\n .property(\"coin_pub\", codecForString())\n .property(\"rtransaction_id\", codecForNumber())\n .property(\"exchange_http_status\", codecForNumber())\n .property(\"exchange_code\", codecOptional(codecForNumber()))\n .property(\"exchange_reply\", codecOptional(codecForAny()))\n .property(\"exchange_sig\", codecOptional(codecForString()))\n .property(\"exchange_pub\", codecOptional(codecForString()))\n .build(\"MerchantRefundPermission\");\n\nexport const codecForMerchantRefundResponse =\n (): Codec<MerchantRefundResponse> =>\n buildCodecForObject<MerchantRefundResponse>()\n .property(\"merchant_pub\", codecForString())\n .property(\"h_contract_terms\", codecForString())\n .property(\"refunds\", codecForList(codecForMerchantRefundPermission()))\n .build(\"MerchantRefundResponse\");\n\nexport const codecForBlindSigWrapperV2 = (): Codec<MerchantBlindSigWrapperV2> =>\n buildCodecForObject<MerchantBlindSigWrapperV2>()\n .property(\"blind_sig\", codecForBlindedDenominationSignature())\n .build(\"MerchantBlindSigWrapperV2\");\n\nexport const codecForMerchantTipResponseV2 = (): Codec<MerchantTipResponseV2> =>\n buildCodecForObject<MerchantTipResponseV2>()\n .property(\"blind_sigs\", codecForList(codecForBlindSigWrapperV2()))\n .build(\"MerchantTipResponseV2\");\n\nexport const codecForRecoup = (): Codec<Recoup> =>\n buildCodecForObject<Recoup>()\n .property(\"h_denom_pub\", codecForString())\n .build(\"Recoup\");\n\nexport const codecForExchangeSigningKey = (): Codec<ExchangeSignKeyJson> =>\n buildCodecForObject<ExchangeSignKeyJson>()\n .property(\"key\", codecForString())\n .property(\"master_sig\", codecForString())\n .property(\"stamp_end\", codecForTimestamp)\n .property(\"stamp_start\", codecForTimestamp)\n .property(\"stamp_expire\", codecForTimestamp)\n .build(\"ExchangeSignKeyJson\");\n\nexport const codecForGlobalFees = (): Codec<GlobalFees> =>\n buildCodecForObject<GlobalFees>()\n .property(\"start_date\", codecForTimestamp)\n .property(\"end_date\", codecForTimestamp)\n .property(\"history_fee\", codecForAmountString())\n .property(\"account_fee\", codecForAmountString())\n .property(\"purse_fee\", codecForAmountString())\n .property(\"history_expiration\", codecForDuration)\n .property(\"purse_account_limit\", codecForNumber())\n .property(\"purse_timeout\", codecForDuration)\n .property(\"master_sig\", codecForString())\n .build(\"GlobalFees\");\n\nexport const codecForExchangeKeysJson = (): Codec<ExchangeKeysJson> =>\n buildCodecForObject<ExchangeKeysJson>()\n .property(\"denoms\", codecForList(codecForDenomination()))\n .property(\"master_public_key\", codecForString())\n .property(\"auditors\", codecForList(codecForAuditor()))\n .property(\"list_issue_date\", codecForTimestamp)\n .property(\"recoup\", codecOptional(codecForList(codecForRecoup())))\n .property(\"signkeys\", codecForList(codecForExchangeSigningKey()))\n .property(\"version\", codecForString())\n .property(\"reserve_closing_delay\", codecForDuration)\n .property(\"global_fees\", codecForList(codecForGlobalFees()))\n .build(\"ExchangeKeysJson\");\n\nexport const codecForWireFeesJson = (): Codec<WireFeesJson> =>\n buildCodecForObject<WireFeesJson>()\n .property(\"wire_fee\", codecForString())\n .property(\"closing_fee\", codecForString())\n .property(\"sig\", codecForString())\n .property(\"start_date\", codecForTimestamp)\n .property(\"end_date\", codecForTimestamp)\n .build(\"WireFeesJson\");\n\nexport const codecForAccountInfo = (): Codec<AccountInfo> =>\n buildCodecForObject<AccountInfo>()\n .property(\"payto_uri\", codecForString())\n .property(\"master_sig\", codecForString())\n .build(\"AccountInfo\");\n\nexport const codecForExchangeWireJson = (): Codec<ExchangeWireJson> =>\n buildCodecForObject<ExchangeWireJson>()\n .property(\"accounts\", codecForList(codecForAccountInfo()))\n .property(\"fees\", codecForMap(codecForList(codecForWireFeesJson())))\n .build(\"ExchangeWireJson\");\n\nexport const codecForProposal = (): Codec<Proposal> =>\n buildCodecForObject<Proposal>()\n .property(\"contract_terms\", codecForAny())\n .property(\"sig\", codecForString())\n .build(\"Proposal\");\n\nexport const codecForCheckPaymentResponse = (): Codec<CheckPaymentResponse> =>\n buildCodecForObject<CheckPaymentResponse>()\n .property(\"order_status\", codecForString())\n .property(\"refunded\", codecOptional(codecForBoolean()))\n .property(\"refunded_amount\", codecOptional(codecForString()))\n .property(\"contract_terms\", codecOptional(codecForAny()))\n .property(\"taler_pay_uri\", codecOptional(codecForString()))\n .property(\"contract_url\", codecOptional(codecForString()))\n .build(\"CheckPaymentResponse\");\n\nexport const codecForWithdrawOperationStatusResponse =\n (): Codec<WithdrawOperationStatusResponse> =>\n buildCodecForObject<WithdrawOperationStatusResponse>()\n .property(\"selection_done\", codecForBoolean())\n .property(\"transfer_done\", codecForBoolean())\n .property(\"aborted\", codecForBoolean())\n .property(\"amount\", codecForString())\n .property(\"sender_wire\", codecOptional(codecForString()))\n .property(\"suggested_exchange\", codecOptional(codecForString()))\n .property(\"confirm_transfer_url\", codecOptional(codecForString()))\n .property(\"wire_types\", codecForList(codecForString()))\n .build(\"WithdrawOperationStatusResponse\");\n\nexport const codecForTipPickupGetResponse = (): Codec<TipPickupGetResponse> =>\n buildCodecForObject<TipPickupGetResponse>()\n .property(\"tip_amount\", codecForString())\n .property(\"exchange_url\", codecForString())\n .property(\"next_url\", codecOptional(codecForString()))\n .property(\"expiration\", codecForTimestamp)\n .build(\"TipPickupGetResponse\");\n\nexport const codecForRecoupConfirmation = (): Codec<RecoupConfirmation> =>\n buildCodecForObject<RecoupConfirmation>()\n .property(\"reserve_pub\", codecOptional(codecForString()))\n .property(\"old_coin_pub\", codecOptional(codecForString()))\n .build(\"RecoupConfirmation\");\n\nexport const codecForWithdrawResponse = (): Codec<ExchangeWithdrawResponse> =>\n buildCodecForObject<ExchangeWithdrawResponse>()\n .property(\"ev_sig\", codecForBlindedDenominationSignature())\n .build(\"WithdrawResponse\");\n\nexport const codecForWithdrawBatchResponse =\n (): Codec<ExchangeWithdrawBatchResponse> =>\n buildCodecForObject<ExchangeWithdrawBatchResponse>()\n .property(\"ev_sigs\", codecForList(codecForWithdrawResponse()))\n .build(\"WithdrawBatchResponse\");\n\nexport const codecForMerchantPayResponse = (): Codec<MerchantPayResponse> =>\n buildCodecForObject<MerchantPayResponse>()\n .property(\"sig\", codecForString())\n .build(\"MerchantPayResponse\");\n\nexport const codecForExchangeMeltResponse = (): Codec<ExchangeMeltResponse> =>\n buildCodecForObject<ExchangeMeltResponse>()\n .property(\"exchange_pub\", codecForString())\n .property(\"exchange_sig\", codecForString())\n .property(\"noreveal_index\", codecForNumber())\n .property(\"refresh_base_url\", codecOptional(codecForString()))\n .build(\"ExchangeMeltResponse\");\n\nexport const codecForExchangeRevealItem = (): Codec<ExchangeRevealItem> =>\n buildCodecForObject<ExchangeRevealItem>()\n .property(\"ev_sig\", codecForBlindedDenominationSignature())\n .build(\"ExchangeRevealItem\");\n\nexport const codecForExchangeRevealResponse =\n (): Codec<ExchangeRevealResponse> =>\n buildCodecForObject<ExchangeRevealResponse>()\n .property(\"ev_sigs\", codecForList(codecForExchangeRevealItem()))\n .build(\"ExchangeRevealResponse\");\n\nexport const codecForMerchantCoinRefundSuccessStatus =\n (): Codec<MerchantCoinRefundSuccessStatus> =>\n buildCodecForObject<MerchantCoinRefundSuccessStatus>()\n .property(\"type\", codecForConstString(\"success\"))\n .property(\"coin_pub\", codecForString())\n .property(\"exchange_status\", codecForConstNumber(200))\n .property(\"exchange_sig\", codecForString())\n .property(\"rtransaction_id\", codecForNumber())\n .property(\"refund_amount\", codecForString())\n .property(\"exchange_pub\", codecForString())\n .property(\"execution_time\", codecForTimestamp)\n .build(\"MerchantCoinRefundSuccessStatus\");\n\nexport const codecForMerchantCoinRefundFailureStatus =\n (): Codec<MerchantCoinRefundFailureStatus> =>\n buildCodecForObject<MerchantCoinRefundFailureStatus>()\n .property(\"type\", codecForConstString(\"failure\"))\n .property(\"coin_pub\", codecForString())\n .property(\"exchange_status\", codecForNumber())\n .property(\"rtransaction_id\", codecForNumber())\n .property(\"refund_amount\", codecForString())\n .property(\"exchange_code\", codecOptional(codecForNumber()))\n .property(\"exchange_reply\", codecOptional(codecForAny()))\n .property(\"execution_time\", codecForTimestamp)\n .build(\"MerchantCoinRefundFailureStatus\");\n\nexport const codecForMerchantCoinRefundStatus =\n (): Codec<MerchantCoinRefundStatus> =>\n buildCodecForUnion<MerchantCoinRefundStatus>()\n .discriminateOn(\"type\")\n .alternative(\"success\", codecForMerchantCoinRefundSuccessStatus())\n .alternative(\"failure\", codecForMerchantCoinRefundFailureStatus())\n .build(\"MerchantCoinRefundStatus\");\n\nexport const codecForMerchantOrderStatusPaid =\n (): Codec<MerchantOrderStatusPaid> =>\n buildCodecForObject<MerchantOrderStatusPaid>()\n .property(\"refund_amount\", codecForString())\n .property(\"refund_taken\", codecForString())\n .property(\"refund_pending\", codecForBoolean())\n .property(\"refunded\", codecForBoolean())\n .build(\"MerchantOrderStatusPaid\");\n\nexport const codecForMerchantOrderRefundPickupResponse =\n (): Codec<MerchantOrderRefundResponse> =>\n buildCodecForObject<MerchantOrderRefundResponse>()\n .property(\"merchant_pub\", codecForString())\n .property(\"refund_amount\", codecForString())\n .property(\"refunds\", codecForList(codecForMerchantCoinRefundStatus()))\n .build(\"MerchantOrderRefundPickupResponse\");\n\nexport const codecForMerchantOrderStatusUnpaid =\n (): Codec<MerchantOrderStatusUnpaid> =>\n buildCodecForObject<MerchantOrderStatusUnpaid>()\n .property(\"taler_pay_uri\", codecForString())\n .property(\"already_paid_order_id\", codecOptional(codecForString()))\n .build(\"MerchantOrderStatusUnpaid\");\n\nexport interface AbortRequest {\n // hash of the order's contract terms (this is used to authenticate the\n // wallet/customer in case $ORDER_ID is guessable).\n h_contract: string;\n\n // List of coins the wallet would like to see refunds for.\n // (Should be limited to the coins for which the original\n // payment succeeded, as far as the wallet knows.)\n coins: AbortingCoin[];\n}\n\nexport interface AbortingCoin {\n // Public key of a coin for which the wallet is requesting an abort-related refund.\n coin_pub: EddsaPublicKeyString;\n\n // The amount to be refunded (matches the original contribution)\n contribution: AmountString;\n\n // URL of the exchange this coin was withdrawn from.\n exchange_url: string;\n}\n\nexport interface AbortResponse {\n // List of refund responses about the coins that the wallet\n // requested an abort for. In the same order as the 'coins'\n // from the original request.\n // The rtransaction_id is implied to be 0.\n refunds: MerchantAbortPayRefundStatus[];\n}\n\nexport const codecForMerchantAbortPayRefundSuccessStatus =\n (): Codec<MerchantAbortPayRefundSuccessStatus> =>\n buildCodecForObject<MerchantAbortPayRefundSuccessStatus>()\n .property(\"exchange_pub\", codecForString())\n .property(\"exchange_sig\", codecForString())\n .property(\"exchange_status\", codecForConstNumber(200))\n .property(\"type\", codecForConstString(\"success\"))\n .build(\"MerchantAbortPayRefundSuccessStatus\");\n\nexport const codecForMerchantAbortPayRefundFailureStatus =\n (): Codec<MerchantAbortPayRefundFailureStatus> =>\n buildCodecForObject<MerchantAbortPayRefundFailureStatus>()\n .property(\"exchange_code\", codecForNumber())\n .property(\"exchange_reply\", codecForAny())\n .property(\"exchange_status\", codecForNumber())\n .property(\"type\", codecForConstString(\"failure\"))\n .build(\"MerchantAbortPayRefundFailureStatus\");\n\nexport const codecForMerchantAbortPayRefundStatus =\n (): Codec<MerchantAbortPayRefundStatus> =>\n buildCodecForUnion<MerchantAbortPayRefundStatus>()\n .discriminateOn(\"type\")\n .alternative(\"success\", codecForMerchantAbortPayRefundSuccessStatus())\n .alternative(\"failure\", codecForMerchantAbortPayRefundFailureStatus())\n .build(\"MerchantAbortPayRefundStatus\");\n\nexport const codecForAbortResponse = (): Codec<AbortResponse> =>\n buildCodecForObject<AbortResponse>()\n .property(\"refunds\", codecForList(codecForMerchantAbortPayRefundStatus()))\n .build(\"AbortResponse\");\n\nexport type MerchantAbortPayRefundStatus =\n | MerchantAbortPayRefundSuccessStatus\n | MerchantAbortPayRefundFailureStatus;\n\n// Details about why a refund failed.\nexport interface MerchantAbortPayRefundFailureStatus {\n // Used as tag for the sum type RefundStatus sum type.\n type: \"failure\";\n\n // HTTP status of the exchange request, must NOT be 200.\n exchange_status: number;\n\n // Taler error code from the exchange reply, if available.\n exchange_code?: number;\n\n // If available, HTTP reply from the exchange.\n exchange_reply?: unknown;\n}\n\n// Additional details needed to verify the refund confirmation signature\n// (h_contract_terms and merchant_pub) are already known\n// to the wallet and thus not included.\nexport interface MerchantAbortPayRefundSuccessStatus {\n // Used as tag for the sum type MerchantCoinRefundStatus sum type.\n type: \"success\";\n\n // HTTP status of the exchange request, 200 (integer) required for refund confirmations.\n exchange_status: 200;\n\n // the EdDSA :ref:signature (binary-only) with purpose\n // TALER_SIGNATURE_EXCHANGE_CONFIRM_REFUND using a current signing key of the\n // exchange affirming the successful refund\n exchange_sig: string;\n\n // public EdDSA key of the exchange that was used to generate the signature.\n // Should match one of the exchange's signing keys from /keys. It is given\n // explicitly as the client might otherwise be confused by clock skew as to\n // which signing key was used.\n exchange_pub: string;\n}\n\nexport interface TalerConfigResponse {\n name: string;\n version: string;\n currency?: string;\n}\n\nexport const codecForTalerConfigResponse = (): Codec<TalerConfigResponse> =>\n buildCodecForObject<TalerConfigResponse>()\n .property(\"name\", codecForString())\n .property(\"version\", codecForString())\n .property(\"currency\", codecOptional(codecForString()))\n .build(\"TalerConfigResponse\");\n\nexport interface FutureKeysResponse {\n future_denoms: any[];\n\n future_signkeys: any[];\n\n master_pub: string;\n\n denom_secmod_public_key: string;\n\n // Public key of the signkey security module.\n signkey_secmod_public_key: string;\n}\n\nexport const codecForKeysManagementResponse = (): Codec<FutureKeysResponse> =>\n buildCodecForObject<FutureKeysResponse>()\n .property(\"master_pub\", codecForString())\n .property(\"future_signkeys\", codecForList(codecForAny()))\n .property(\"future_denoms\", codecForList(codecForAny()))\n .property(\"denom_secmod_public_key\", codecForAny())\n .property(\"signkey_secmod_public_key\", codecForAny())\n .build(\"FutureKeysResponse\");\n\nexport interface MerchantConfigResponse {\n currency: string;\n name: string;\n version: string;\n}\n\nexport const codecForMerchantConfigResponse =\n (): Codec<MerchantConfigResponse> =>\n buildCodecForObject<MerchantConfigResponse>()\n .property(\"currency\", codecForString())\n .property(\"name\", codecForString())\n .property(\"version\", codecForString())\n .build(\"MerchantConfigResponse\");\n\nexport enum ExchangeProtocolVersion {\n /**\n * Current version supported by the wallet.\n */\n V12 = 12,\n}\n\nexport enum MerchantProtocolVersion {\n /**\n * Current version supported by the wallet.\n */\n V3 = 3,\n}\n\nexport type CoinEnvelope = CoinEnvelopeRsa | CoinEnvelopeCs;\n\nexport interface CoinEnvelopeRsa {\n cipher: DenomKeyType.Rsa;\n rsa_blinded_planchet: string;\n}\n\nexport interface CoinEnvelopeCs {\n cipher: DenomKeyType.ClauseSchnorr;\n // FIXME: add remaining fields\n}\n\nexport type HashCodeString = string;\n\nexport interface ExchangeWithdrawRequest {\n denom_pub_hash: HashCodeString;\n reserve_sig: EddsaSignatureString;\n coin_ev: CoinEnvelope;\n}\n\nexport interface ExchangeBatchWithdrawRequest {\n planchets: ExchangeWithdrawRequest[];\n}\n\nexport interface ExchangeRefreshRevealRequest {\n new_denoms_h: HashCodeString[];\n coin_evs: CoinEnvelope[];\n /**\n * kappa - 1 transfer private keys (ephemeral ECDHE keys).\n */\n transfer_privs: string[];\n\n transfer_pub: EddsaPublicKeyString;\n\n link_sigs: EddsaSignatureString[];\n\n /**\n * Iff the corresponding denomination has support for age restriction,\n * the client MUST provide the original age commitment, i.e. the vector\n * of public keys.\n */\n old_age_commitment?: Edx25519PublicKeyEnc[];\n}\n\nexport interface DepositSuccess {\n // Optional base URL of the exchange for looking up wire transfers\n // associated with this transaction. If not given,\n // the base URL is the same as the one used for this request.\n // Can be used if the base URL for /transactions/ differs from that\n // for /coins/, i.e. for load balancing. Clients SHOULD\n // respect the transaction_base_url if provided. Any HTTP server\n // belonging to an exchange MUST generate a 307 or 308 redirection\n // to the correct base URL should a client uses the wrong base\n // URL, or if the base URL has changed since the deposit.\n transaction_base_url?: string;\n\n // timestamp when the deposit was received by the exchange.\n exchange_timestamp: TalerProtocolTimestamp;\n\n // the EdDSA signature of TALER_DepositConfirmationPS using a current\n // signing key of the exchange affirming the successful\n // deposit and that the exchange will transfer the funds after the refund\n // deadline, or as soon as possible if the refund deadline is zero.\n exchange_sig: string;\n\n // public EdDSA key of the exchange that was used to\n // generate the signature.\n // Should match one of the exchange's signing keys from /keys. It is given\n // explicitly as the client might otherwise be confused by clock skew as to\n // which signing key was used.\n exchange_pub: string;\n}\n\nexport const codecForDepositSuccess = (): Codec<DepositSuccess> =>\n buildCodecForObject<DepositSuccess>()\n .property(\"exchange_pub\", codecForString())\n .property(\"exchange_sig\", codecForString())\n .property(\"exchange_timestamp\", codecForTimestamp)\n .property(\"transaction_base_url\", codecOptional(codecForString()))\n .build(\"DepositSuccess\");\n\nexport interface TrackTransactionWired {\n // Raw wire transfer identifier of the deposit.\n wtid: Base32String;\n\n // When was the wire transfer given to the bank.\n execution_time: TalerProtocolTimestamp;\n\n // The contribution of this coin to the total (without fees)\n coin_contribution: AmountString;\n\n // Binary-only Signature_ with purpose TALER_SIGNATURE_EXCHANGE_CONFIRM_WIRE\n // over a TALER_ConfirmWirePS\n // whereby the exchange affirms the successful wire transfer.\n exchange_sig: EddsaSignatureString;\n\n // Public EdDSA key of the exchange that was used to generate the signature.\n // Should match one of the exchange's signing keys from /keys. Again given\n // explicitly as the client might otherwise be confused by clock skew as to\n // which signing key was used.\n exchange_pub: EddsaPublicKeyString;\n}\n\nexport const codecForTackTransactionWired = (): Codec<TrackTransactionWired> =>\n buildCodecForObject<TrackTransactionWired>()\n .property(\"wtid\", codecForString())\n .property(\"execution_time\", codecForTimestamp)\n .property(\"coin_contribution\", codecForAmountString())\n .property(\"exchange_sig\", codecForString())\n .property(\"exchange_pub\", codecForString())\n .build(\"TackTransactionWired\");\n\ninterface TrackTransactionAccepted {\n // Legitimization target that the merchant should\n // use to check for its KYC status using\n // the /kyc-check/$REQUIREMENT_ROW/... endpoint.\n // Optional, not present if the deposit has not\n // yet been aggregated to the point that a KYC\n // need has been evaluated.\n requirement_row?: number;\n\n // True if the KYC check for the merchant has been\n // satisfied. False does not mean that KYC\n // is strictly needed, unless also a\n // legitimization_uuid is provided.\n kyc_ok: boolean;\n\n // Time by which the exchange currently thinks the deposit will be executed.\n // Actual execution may be later if the KYC check is not satisfied by then.\n execution_time: TalerProtocolTimestamp;\n}\n\nexport const codecForTackTransactionAccepted =\n (): Codec<TrackTransactionAccepted> =>\n buildCodecForObject<TrackTransactionAccepted>()\n .property(\"requirement_row\", codecOptional(codecForNumber()))\n .property(\"kyc_ok\", codecForBoolean())\n .property(\"execution_time\", codecForTimestamp)\n .build(\"TackTransactionAccepted\");\n\nexport type TrackTransaction =\n | ({ type: \"accepted\" } & TrackTransactionAccepted)\n | ({ type: \"wired\" } & TrackTransactionWired);\n\nexport interface PurseDeposit {\n /**\n * Amount to be deposited, can be a fraction of the\n * coin's total value.\n */\n amount: AmountString;\n\n /**\n * Hash of denomination RSA key with which the coin is signed.\n */\n denom_pub_hash: HashCodeString;\n\n /**\n * Exchange's unblinded RSA signature of the coin.\n */\n ub_sig: UnblindedSignature;\n\n /**\n * Age commitment for the coin, if the denomination is age-restricted.\n */\n age_commitment?: string[];\n\n /**\n * Attestation for the minimum age, if the denomination is age-restricted.\n */\n attest?: string;\n\n /**\n * Signature over TALER_PurseDepositSignaturePS\n * of purpose TALER_SIGNATURE_WALLET_PURSE_DEPOSIT\n * made by the customer with the\n * coin's private key.\n */\n coin_sig: EddsaSignatureString;\n\n /**\n * Public key of the coin being deposited into the purse.\n */\n coin_pub: EddsaPublicKeyString;\n}\n\nexport interface ExchangePurseMergeRequest {\n // payto://-URI of the account the purse is to be merged into.\n // Must be of the form: 'payto://taler/$EXCHANGE_URL/$RESERVE_PUB'.\n payto_uri: string;\n\n // EdDSA signature of the account/reserve affirming the merge\n // over a TALER_AccountMergeSignaturePS.\n // Must be of purpose TALER_SIGNATURE_ACCOUNT_MERGE\n reserve_sig: EddsaSignatureString;\n\n // EdDSA signature of the purse private key affirming the merge\n // over a TALER_PurseMergeSignaturePS.\n // Must be of purpose TALER_SIGNATURE_PURSE_MERGE.\n merge_sig: EddsaSignatureString;\n\n // Client-side timestamp of when the merge request was made.\n merge_timestamp: TalerProtocolTimestamp;\n}\n\nexport interface ExchangeGetContractResponse {\n purse_pub: string;\n econtract_sig: string;\n econtract: string;\n}\n\nexport const codecForExchangeGetContractResponse =\n (): Codec<ExchangeGetContractResponse> =>\n buildCodecForObject<ExchangeGetContractResponse>()\n .property(\"purse_pub\", codecForString())\n .property(\"econtract_sig\", codecForString())\n .property(\"econtract\", codecForString())\n .build(\"ExchangeGetContractResponse\");\n\n/**\n * Contract terms between two wallets (as opposed to a merchant and wallet).\n */\nexport interface PeerContractTerms {\n amount: AmountString;\n summary: string;\n purse_expiration: TalerProtocolTimestamp;\n}\n\nexport interface EncryptedContract {\n // Encrypted contract.\n econtract: string;\n\n // Signature over the (encrypted) contract.\n econtract_sig: string;\n\n // Ephemeral public key for the DH operation to decrypt the encrypted contract.\n contract_pub: string;\n}\n\n/**\n * Payload for /reserves/{reserve_pub}/purse\n * endpoint of the exchange.\n */\nexport interface ExchangeReservePurseRequest {\n /**\n * Minimum amount that must be credited to the reserve, that is\n * the total value of the purse minus the deposit fees.\n * If the deposit fees are lower, the contribution to the\n * reserve can be higher!\n */\n purse_value: AmountString;\n\n // Minimum age required for all coins deposited into the purse.\n min_age: number;\n\n // Purse fee the reserve owner is willing to pay\n // for the purse creation. Optional, if not present\n // the purse is to be created from the purse quota\n // of the reserve.\n purse_fee: AmountString;\n\n // Optional encrypted contract, in case the buyer is\n // proposing the contract and thus establishing the\n // purse with the payment.\n econtract?: EncryptedContract;\n\n // EdDSA public key used to approve merges of this purse.\n merge_pub: EddsaPublicKeyString;\n\n // EdDSA signature of the purse private key affirming the merge\n // over a TALER_PurseMergeSignaturePS.\n // Must be of purpose TALER_SIGNATURE_PURSE_MERGE.\n merge_sig: EddsaSignatureString;\n\n // EdDSA signature of the account/reserve affirming the merge.\n // Must be of purpose TALER_SIGNATURE_WALLET_ACCOUNT_MERGE\n reserve_sig: EddsaSignatureString;\n\n // Purse public key.\n purse_pub: EddsaPublicKeyString;\n\n // EdDSA signature of the purse over\n // TALER_PurseRequestSignaturePS of\n // purpose TALER_SIGNATURE_PURSE_REQUEST\n // confirming that the\n // above details hold for this purse.\n purse_sig: EddsaSignatureString;\n\n // SHA-512 hash of the contact of the purse.\n h_contract_terms: HashCodeString;\n\n // Client-side timestamp of when the merge request was made.\n merge_timestamp: TalerProtocolTimestamp;\n\n // Indicative time by which the purse should expire\n // if it has not been paid.\n purse_expiration: TalerProtocolTimestamp;\n}\n\nexport interface ExchangePurseDeposits {\n // Array of coins to deposit into the purse.\n deposits: PurseDeposit[];\n}\n\nexport interface ExchangeDepositRequest {\n // Amount to be deposited, can be a fraction of the\n // coin's total value.\n contribution: AmountString;\n\n // The merchant's account details.\n // In case of an auction policy, it refers to the seller.\n merchant_payto_uri: string;\n\n // The salt is used to hide the payto_uri from customers\n // when computing the h_wire of the merchant.\n wire_salt: string;\n\n // SHA-512 hash of the contract of the merchant with the customer. Further\n // details are never disclosed to the exchange.\n h_contract_terms: HashCodeString;\n\n // Hash of denomination RSA key with which the coin is signed.\n denom_pub_hash: HashCodeString;\n\n // Exchange's unblinded RSA signature of the coin.\n ub_sig: UnblindedSignature;\n\n // Timestamp when the contract was finalized.\n timestamp: TalerProtocolTimestamp;\n\n // Indicative time by which the exchange undertakes to transfer the funds to\n // the merchant, in case of successful payment. A wire transfer deadline of 'never'\n // is not allowed.\n wire_transfer_deadline: TalerProtocolTimestamp;\n\n // EdDSA public key of the merchant, so that the client can identify the\n // merchant for refund requests.\n //\n // THIS FIELD WILL BE DEPRECATED, once the refund mechanism becomes a\n // policy via extension.\n merchant_pub: EddsaPublicKeyString;\n\n // Date until which the merchant can issue a refund to the customer via the\n // exchange, to be omitted if refunds are not allowed.\n //\n // THIS FIELD WILL BE DEPRECATED, once the refund mechanism becomes a\n // policy via extension.\n refund_deadline?: TalerProtocolTimestamp;\n\n // CAVEAT: THIS IS WORK IN PROGRESS\n // (Optional) policy for the deposit.\n // This might be a refund, auction or escrow policy.\n //\n // Note that support for policies is an optional feature of the exchange.\n // Optional features are so called \"extensions\" in Taler. The exchange\n // provides the list of supported extensions, including policies, in the\n // ExtensionsManifestsResponse response to the /keys endpoint.\n policy?: any;\n\n // Signature over TALER_DepositRequestPS, made by the customer with the\n // coin's private key.\n coin_sig: EddsaSignatureString;\n\n h_age_commitment?: string;\n}\n\nexport interface WalletKycUuid {\n // UUID that the wallet should use when initiating\n // the KYC check.\n requirement_row: number;\n\n // Hash of the payto:// account URI for the wallet.\n h_payto: string;\n}\n\nexport const codecForWalletKycUuid = (): Codec<WalletKycUuid> =>\n buildCodecForObject<WalletKycUuid>()\n .property(\"requirement_row\", codecForNumber())\n .property(\"h_payto\", codecForString())\n .build(\"WalletKycUuid\");\n\nexport interface MerchantUsingTemplateDetails {\n summary?: string;\n amount?: AmountString;\n}\n", "/*\n This file is part of TALER\n (C) 2019 GNUnet e.V.\n\n TALER is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n TALER is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n * Check if we are running under nodejs.\n */\n\nconst isNode =\n typeof process !== \"undefined\" &&\n typeof process.release !== \"undefined\" &&\n process.release.name === \"node\";\n\nexport enum LogLevel {\n Trace = \"trace\",\n Message = \"message\",\n Info = \"info\",\n Warn = \"warn\",\n Error = \"error\",\n None = \"none\",\n}\n\nexport let globalLogLevel = LogLevel.Info;\n\nexport function setGlobalLogLevelFromString(logLevelStr: string): void {\n globalLogLevel = getLevelForString(logLevelStr);\n}\n\nexport const byTagLogLevel: Record<string, LogLevel> = {};\nexport function setLogLevelFromString(tag: string, logLevelStr: string): void {\n byTagLogLevel[tag] = getLevelForString(logLevelStr);\n}\n\nfunction getLevelForString(logLevelStr: string): LogLevel {\n switch (logLevelStr.toLowerCase()) {\n case \"trace\":\n return LogLevel.Trace;\n case \"info\":\n return LogLevel.Info;\n case \"warn\":\n case \"warning\":\n return LogLevel.Warn;\n case \"error\":\n return LogLevel.Error;\n case \"none\":\n return LogLevel.None;\n default:\n if (isNode) {\n process.stderr.write(`Invalid log level, defaulting to WARNING\\n`);\n } else {\n console.warn(`Invalid log level, defaulting to WARNING`);\n }\n return LogLevel.Warn;\n }\n}\n\nfunction writeNodeLog(\n message: any,\n tag: string,\n level: string,\n args: any[],\n): void {\n try {\n let msg = `${new Date().toISOString()} ${tag} ${level} ${message}`;\n if (args.length != 0) {\n msg += ` ${JSON.stringify(args, undefined, 2)}\\n`;\n } else {\n msg += `\\n`;\n }\n process.stderr.write(msg);\n } catch (e) {\n // This can happen when we're trying to log something that doesn't want to be\n // converted to a string.\n let msg = `${new Date().toISOString()} (logger) FATAL `;\n if (e instanceof Error) {\n msg += `failed to write log: ${e.message}\\n`;\n } else {\n msg += \"failed to write log\\n\";\n }\n process.stderr.write(msg);\n }\n}\n\n/**\n * Logger that writes to stderr when running under node,\n * and uses the corresponding console.* method to log in the browser.\n */\nexport class Logger {\n constructor(private tag: string) {}\n\n shouldLogTrace(): boolean {\n const level = byTagLogLevel[this.tag] ?? globalLogLevel;\n switch (level) {\n case LogLevel.Trace:\n return true;\n case LogLevel.Message:\n case LogLevel.Info:\n case LogLevel.Warn:\n case LogLevel.Error:\n case LogLevel.None:\n return false;\n }\n }\n\n shouldLogInfo(): boolean {\n const level = byTagLogLevel[this.tag] ?? globalLogLevel;\n switch (level) {\n case LogLevel.Trace:\n case LogLevel.Message:\n case LogLevel.Info:\n return true;\n case LogLevel.Warn:\n case LogLevel.Error:\n case LogLevel.None:\n return false;\n }\n }\n\n shouldLogWarn(): boolean {\n const level = byTagLogLevel[this.tag] ?? globalLogLevel;\n switch (level) {\n case LogLevel.Trace:\n case LogLevel.Message:\n case LogLevel.Info:\n case LogLevel.Warn:\n return true;\n case LogLevel.Error:\n case LogLevel.None:\n return false;\n }\n }\n\n shouldLogError(): boolean {\n const level = byTagLogLevel[this.tag] ?? globalLogLevel;\n switch (level) {\n case LogLevel.Trace:\n case LogLevel.Message:\n case LogLevel.Info:\n case LogLevel.Warn:\n case LogLevel.Error:\n return true;\n case LogLevel.None:\n return false;\n }\n }\n\n info(message: string, ...args: any[]): void {\n if (!this.shouldLogInfo()) {\n return;\n }\n if (isNode) {\n writeNodeLog(message, this.tag, \"INFO\", args);\n } else {\n console.info(\n `${new Date().toISOString()} ${this.tag} INFO ` + message,\n ...args,\n );\n }\n }\n\n warn(message: string, ...args: any[]): void {\n if (!this.shouldLogWarn()) {\n return;\n }\n if (isNode) {\n writeNodeLog(message, this.tag, \"WARN\", args);\n } else {\n console.warn(\n `${new Date().toISOString()} ${this.tag} INFO ` + message,\n ...args,\n );\n }\n }\n\n error(message: string, ...args: any[]): void {\n if (!this.shouldLogError()) {\n return;\n }\n if (isNode) {\n writeNodeLog(message, this.tag, \"ERROR\", args);\n } else {\n console.info(\n `${new Date().toISOString()} ${this.tag} ERROR ` + message,\n ...args,\n );\n }\n }\n\n trace(message: string, ...args: any[]): void {\n if (!this.shouldLogTrace()) {\n return;\n }\n if (isNode) {\n writeNodeLog(message, this.tag, \"TRACE\", args);\n } else {\n console.info(\n `${new Date().toISOString()} ${this.tag} TRACE ` + message,\n ...args,\n );\n }\n }\n\n reportBreak(): void {\n if (!this.shouldLogError()) {\n return;\n }\n const location = new Error(\"programming error\");\n this.error(`assertion failed: ${location.stack}`);\n }\n}\n", "// Copyright (c) 2017, 2021 Pieter Wuille\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nvar CHARSET = \"qpzry9x8gf2tvdw0s3jn54khce6mua7l\";\nvar GENERATOR = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3];\n\nconst encodings: any = {\n BECH32: \"bech32\",\n BECH32M: \"bech32m\",\n};\n\nexport default {\n decode: decode,\n encode: encode,\n encodings: encodings,\n};\n\nfunction getEncodingConst(enc: any) {\n if (enc == encodings.BECH32) {\n return 1;\n } else if (enc == encodings.BECH32M) {\n return 0x2bc830a3;\n } else {\n throw new Error(\"unknown encoding\");\n }\n}\n\nfunction polymod(values: any) {\n var chk = 1;\n for (var p = 0; p < values.length; ++p) {\n var top = chk >> 25;\n chk = ((chk & 0x1ffffff) << 5) ^ values[p];\n for (var i = 0; i < 5; ++i) {\n if ((top >> i) & 1) {\n chk ^= GENERATOR[i];\n }\n }\n }\n return chk;\n}\n\nfunction hrpExpand(hrp: any) {\n var ret = [];\n var p;\n for (p = 0; p < hrp.length; ++p) {\n ret.push(hrp.charCodeAt(p) >> 5);\n }\n ret.push(0);\n for (p = 0; p < hrp.length; ++p) {\n ret.push(hrp.charCodeAt(p) & 31);\n }\n return ret;\n}\n\nfunction verifyChecksum(hrp: any, data: any, enc: any) {\n return polymod(hrpExpand(hrp).concat(data)) === getEncodingConst(enc);\n}\n\nfunction createChecksum(hrp: any, data: any, enc: any) {\n var values = hrpExpand(hrp).concat(data).concat([0, 0, 0, 0, 0, 0]);\n var mod = polymod(values) ^ getEncodingConst(enc);\n var ret = [];\n for (var p = 0; p < 6; ++p) {\n ret.push((mod >> (5 * (5 - p))) & 31);\n }\n return ret;\n}\n\nfunction encode(hrp: any, data: any, enc: any): string {\n var combined = data.concat(createChecksum(hrp, data, enc));\n var ret = hrp + \"1\";\n for (var p = 0; p < combined.length; ++p) {\n ret += CHARSET.charAt(combined[p]);\n }\n return ret;\n}\n\nfunction decode(bechString: any, enc: any) {\n var p;\n var has_lower = false;\n var has_upper = false;\n for (p = 0; p < bechString.length; ++p) {\n if (bechString.charCodeAt(p) < 33 || bechString.charCodeAt(p) > 126) {\n return null;\n }\n if (bechString.charCodeAt(p) >= 97 && bechString.charCodeAt(p) <= 122) {\n has_lower = true;\n }\n if (bechString.charCodeAt(p) >= 65 && bechString.charCodeAt(p) <= 90) {\n has_upper = true;\n }\n }\n if (has_lower && has_upper) {\n return null;\n }\n bechString = bechString.toLowerCase();\n var pos = bechString.lastIndexOf(\"1\");\n if (pos < 1 || pos + 7 > bechString.length || bechString.length > 90) {\n return null;\n }\n var hrp = bechString.substring(0, pos);\n var data = [];\n for (p = pos + 1; p < bechString.length; ++p) {\n var d = CHARSET.indexOf(bechString.charAt(p));\n if (d === -1) {\n return null;\n }\n data.push(d);\n }\n if (!verifyChecksum(hrp, data, enc)) {\n return null;\n }\n return { hrp: hrp, data: data.slice(0, data.length - 6) };\n}\n", "// Copyright (c) 2017, 2021 Pieter Wuille\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport bech32 from \"./bech32.js\";\n\nexport default {\n encode: encode,\n decode: decode,\n};\n\nfunction convertbits(\n data: any,\n frombits: number,\n tobits: number,\n pad: boolean,\n): any[] {\n var acc = 0;\n var bits = 0;\n var ret = [];\n var maxv = (1 << tobits) - 1;\n for (var p = 0; p < data.length; ++p) {\n var value = data[p];\n if (value < 0 || value >> frombits !== 0) {\n return []; //check this, was returning null\n }\n acc = (acc << frombits) | value;\n bits += frombits;\n while (bits >= tobits) {\n bits -= tobits;\n ret.push((acc >> bits) & maxv);\n }\n }\n if (pad) {\n if (bits > 0) {\n ret.push((acc << (tobits - bits)) & maxv);\n }\n } else if (bits >= frombits || (acc << (tobits - bits)) & maxv) {\n return []; //check this, was returning null\n }\n return ret;\n}\n\nfunction decode(hrp: any, addr: string) {\n var bech32m = false;\n var dec = bech32.decode(addr, bech32.encodings.BECH32);\n if (dec === null) {\n dec = bech32.decode(addr, bech32.encodings.BECH32M);\n bech32m = true;\n }\n if (\n dec === null ||\n dec.hrp !== hrp ||\n dec.data.length < 1 ||\n dec.data[0] > 16\n ) {\n return null;\n }\n var res = convertbits(dec.data.slice(1), 5, 8, false);\n if (res === null || res.length < 2 || res.length > 40) {\n return null;\n }\n if (dec.data[0] === 0 && res.length !== 20 && res.length !== 32) {\n return null;\n }\n if (dec.data[0] === 0 && bech32m) {\n return null;\n }\n if (dec.data[0] !== 0 && !bech32m) {\n return null;\n }\n return { version: dec.data[0], program: res };\n}\n\nfunction encode(hrp: any, version: number, program: any): string {\n var enc = bech32.encodings.BECH32;\n if (version > 0) {\n enc = bech32.encodings.BECH32M;\n }\n var ret = bech32.encode(\n hrp,\n [version].concat(convertbits(program, 8, 5, true)),\n enc,\n );\n if (decode(hrp, ret /*, enc*/) === null) {\n return \"\"; //check this was returning null\n }\n return ret;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2019 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author sebasjm\n */\n\n/**\n * Imports.\n */\nimport { AmountJson, Amounts } from \"./amounts.js\";\nimport { decodeCrock } from \"./taler-crypto.js\";\nimport * as segwit from \"./segwit_addr.js\";\n\nfunction buf2hex(buffer: Uint8Array) {\n // buffer is an ArrayBuffer\n return [...new Uint8Array(buffer)]\n .map((x) => x.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n\nconst hext2buf = (hexString: string) =>\n new Uint8Array(hexString.match(/.{1,2}/g)!.map((byte) => parseInt(byte, 16)));\n\nexport function generateFakeSegwitAddress(\n reservePub: string | undefined,\n addr: string,\n): string[] {\n if (!reservePub) return [];\n let pub;\n try {\n pub = decodeCrock(reservePub);\n } catch {\n // pub = new Uint8Array(0)\n }\n if (!pub || pub.length !== 32) return [];\n\n const first_rnd = new Uint8Array(4);\n first_rnd.set(pub.subarray(0, 4));\n const second_rnd = new Uint8Array(4);\n second_rnd.set(pub.subarray(0, 4));\n\n first_rnd[0] = first_rnd[0] & 0b0111_1111;\n second_rnd[0] = second_rnd[0] | 0b1000_0000;\n\n const first_part = new Uint8Array(first_rnd.length + pub.length / 2);\n first_part.set(first_rnd, 0);\n first_part.set(pub.subarray(0, 16), 4);\n\n const second_part = new Uint8Array(first_rnd.length + pub.length / 2);\n second_part.set(second_rnd, 0);\n second_part.set(pub.subarray(16, 32), 4);\n\n const prefix =\n addr[0] === \"t\" && addr[1] == \"b\"\n ? \"tb\"\n : addr[0] === \"b\" && addr[1] == \"c\" && addr[2] === \"r\" && addr[3] == \"t\"\n ? \"bcrt\"\n : addr[0] === \"b\" && addr[1] == \"c\"\n ? \"bc\"\n : undefined;\n if (prefix === undefined) throw new Error(\"unknown bitcoin net\");\n\n const addr1 = segwit.default.encode(prefix, 0, first_part);\n const addr2 = segwit.default.encode(prefix, 0, second_part);\n\n return [addr1, addr2];\n}\n\n// https://github.com/bitcoin/bitcoin/blob/master/src/policy/policy.cpp\nexport function segwitMinAmount(currency: string): AmountJson {\n return Amounts.parseOrThrow(`${currency}:0.00000294`);\n}\n", "/*\n This file is part of GNU Taler\n (C) 2019 GNUnet e.V.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\nimport { generateFakeSegwitAddress } from \"./bitcoin.js\";\nimport { URLSearchParams } from \"./url.js\";\n\nexport type PaytoUri =\n | PaytoUriUnknown\n | PaytoUriIBAN\n | PaytoUriTalerBank\n | PaytoUriBitcoin;\n\nexport interface PaytoUriGeneric {\n targetType: string;\n targetPath: string;\n params: { [name: string]: string };\n}\n\nexport interface PaytoUriUnknown extends PaytoUriGeneric {\n isKnown: false;\n}\n\nexport interface PaytoUriIBAN extends PaytoUriGeneric {\n isKnown: true;\n targetType: \"iban\";\n iban: string;\n bic?: string;\n}\n\nexport interface PaytoUriTalerBank extends PaytoUriGeneric {\n isKnown: true;\n targetType: \"x-taler-bank\";\n host: string;\n account: string;\n}\n\nexport interface PaytoUriBitcoin extends PaytoUriGeneric {\n isKnown: true;\n targetType: \"bitcoin\";\n segwitAddrs: Array<string>;\n}\n\nconst paytoPfx = \"payto://\";\n\nexport function buildPayto(\n type: \"iban\",\n iban: string,\n bic: string | undefined,\n): PaytoUriIBAN;\nexport function buildPayto(\n type: \"bitcoin\",\n address: string,\n reserve: string | undefined,\n): PaytoUriBitcoin;\nexport function buildPayto(\n type: \"x-taler-bank\",\n host: string,\n account: string,\n): PaytoUriTalerBank;\nexport function buildPayto(\n type: \"iban\" | \"bitcoin\" | \"x-taler-bank\",\n first: string,\n second?: string,\n): PaytoUriGeneric {\n switch (type) {\n case \"bitcoin\": {\n const result: PaytoUriBitcoin = {\n isKnown: true,\n targetType: \"bitcoin\",\n targetPath: first,\n params: {},\n segwitAddrs: !second ? [] : generateFakeSegwitAddress(second, first),\n };\n return result;\n }\n case \"iban\": {\n const result: PaytoUriIBAN = {\n isKnown: true,\n targetType: \"iban\",\n iban: first,\n params: {},\n targetPath: !second ? first : `${second}/${first}`,\n };\n return result;\n }\n case \"x-taler-bank\": {\n if (!second) throw Error(\"missing account for payto://x-taler-bank\");\n const result: PaytoUriTalerBank = {\n isKnown: true,\n targetType: \"x-taler-bank\",\n host: first,\n account: second,\n params: {},\n targetPath: `${first}/${second}`,\n };\n return result;\n }\n default: {\n const unknownType: never = type;\n throw Error(`unknown payto:// type ${unknownType}`);\n }\n }\n}\n\n/**\n * Add query parameters to a payto URI\n */\nexport function addPaytoQueryParams(\n s: string,\n params: { [name: string]: string },\n): string {\n const [acct, search] = s.slice(paytoPfx.length).split(\"?\");\n const searchParams = new URLSearchParams(search || \"\");\n const keys = Object.keys(params);\n if (keys.length === 0) {\n return paytoPfx + acct;\n }\n for (const k of keys) {\n searchParams.set(k, params[k]);\n }\n return paytoPfx + acct + \"?\" + searchParams.toString();\n}\n\n/**\n * Serialize a PaytoURI into a valid payto:// string\n *\n * @param p\n * @returns\n */\nexport function stringifyPaytoUri(p: PaytoUri): string {\n const url = new URL(`${paytoPfx}${p.targetType}/${p.targetPath}`);\n const paramList = !p.params ? [] : Object.entries(p.params);\n paramList.forEach(([key, value]) => {\n url.searchParams.set(key, value);\n });\n return url.href;\n}\n\n/**\n * Parse a valid payto:// uri into a PaytoUri object\n * RFC 8905\n *\n * @param s\n * @returns\n */\nexport function parsePaytoUri(s: string): PaytoUri | undefined {\n if (!s.startsWith(paytoPfx)) {\n return undefined;\n }\n\n const [acct, search] = s.slice(paytoPfx.length).split(\"?\");\n\n const firstSlashPos = acct.indexOf(\"/\");\n\n if (firstSlashPos === -1) {\n return undefined;\n }\n\n const targetType = acct.slice(0, firstSlashPos);\n const targetPath = acct.slice(firstSlashPos + 1);\n\n const params: { [k: string]: string } = {};\n\n const searchParams = new URLSearchParams(search || \"\");\n\n searchParams.forEach((v, k) => {\n params[k] = v;\n });\n\n if (targetType === \"x-taler-bank\") {\n const parts = targetPath.split(\"/\");\n const host = parts[0];\n const account = parts[1];\n return {\n targetPath,\n targetType,\n params,\n isKnown: true,\n host,\n account,\n };\n }\n if (targetType === \"iban\") {\n const parts = targetPath.split(\"/\");\n let iban: string | undefined = undefined;\n let bic: string | undefined = undefined;\n if (parts.length === 1) {\n iban = parts[0];\n }\n if (parts.length === 2) {\n bic = parts[0];\n iban = parts[1];\n } else {\n iban = targetPath;\n }\n return {\n isKnown: true,\n targetPath,\n targetType,\n params,\n iban,\n bic,\n };\n }\n if (targetType === \"bitcoin\") {\n const msg = /\\b([A-Z0-9]{52})\\b/.exec(params[\"message\"]);\n const reserve = !msg ? params[\"subject\"] : msg[0];\n const segwitAddrs = !reserve\n ? []\n : generateFakeSegwitAddress(reserve, targetPath);\n\n const result: PaytoUriBitcoin = {\n isKnown: true,\n targetPath,\n targetType,\n params,\n segwitAddrs,\n };\n\n return result;\n }\n return {\n targetPath,\n targetType,\n params,\n isKnown: false,\n };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2019 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n * Type declarations for the exchange's reserve transaction information.\n *\n * @author Florian Dold <dold@taler.net>\n */\n\n/**\n * Imports.\n */\nimport {\n codecForString,\n buildCodecForObject,\n codecForConstString,\n buildCodecForUnion,\n Codec,\n codecForNumber,\n} from \"./codec.js\";\nimport {\n AmountString,\n Base32String,\n EddsaSignatureString,\n EddsaPublicKeyString,\n CoinPublicKeyString,\n} from \"./taler-types.js\";\nimport {\n AbsoluteTime,\n codecForTimestamp,\n TalerProtocolTimestamp,\n} from \"./time.js\";\n\nexport enum ReserveTransactionType {\n Withdraw = \"WITHDRAW\",\n Credit = \"CREDIT\",\n Recoup = \"RECOUP\",\n Closing = \"CLOSING\",\n}\n\nexport interface ReserveWithdrawTransaction {\n type: ReserveTransactionType.Withdraw;\n\n /**\n * Amount withdrawn.\n */\n amount: AmountString;\n\n /**\n * Hash of the denomination public key of the coin.\n */\n h_denom_pub: Base32String;\n\n /**\n * Hash of the blinded coin to be signed\n */\n h_coin_envelope: Base32String;\n\n /**\n * Signature of 'TALER_WithdrawRequestPS' created with the reserves's\n * private key.\n */\n reserve_sig: EddsaSignatureString;\n\n /**\n * Fee that is charged for withdraw.\n */\n withdraw_fee: AmountString;\n}\n\nexport interface ReserveCreditTransaction {\n type: ReserveTransactionType.Credit;\n\n /**\n * Amount withdrawn.\n */\n amount: AmountString;\n\n /**\n * Sender account payto://-URL\n */\n sender_account_url: string;\n\n /**\n * Transfer details uniquely identifying the transfer.\n */\n wire_reference: number;\n\n /**\n * Timestamp of the incoming wire transfer.\n */\n timestamp: TalerProtocolTimestamp;\n}\n\nexport interface ReserveClosingTransaction {\n type: ReserveTransactionType.Closing;\n\n /**\n * Closing balance.\n */\n amount: AmountString;\n\n /**\n * Closing fee charged by the exchange.\n */\n closing_fee: AmountString;\n\n /**\n * Wire transfer subject.\n */\n wtid: string;\n\n /**\n * Hash of the wire account into which the funds were returned to.\n */\n h_wire: string;\n\n /**\n * This is a signature over a\n * struct TALER_ReserveCloseConfirmationPS with purpose\n * TALER_SIGNATURE_EXCHANGE_RESERVE_CLOSED.\n */\n exchange_sig: EddsaSignatureString;\n\n /**\n * Public key used to create exchange_sig.\n */\n exchange_pub: EddsaPublicKeyString;\n\n /**\n * Time when the reserve was closed.\n */\n timestamp: TalerProtocolTimestamp;\n}\n\nexport interface ReserveRecoupTransaction {\n type: ReserveTransactionType.Recoup;\n\n /**\n * Amount paid back.\n */\n amount: AmountString;\n\n /**\n * This is a signature over\n * a struct TALER_PaybackConfirmationPS with purpose\n * TALER_SIGNATURE_EXCHANGE_CONFIRM_PAYBACK.\n */\n exchange_sig: EddsaSignatureString;\n\n /**\n * Public key used to create exchange_sig.\n */\n exchange_pub: EddsaPublicKeyString;\n\n /**\n * Time when the funds were paid back into the reserve.\n */\n timestamp: TalerProtocolTimestamp;\n\n /**\n * Public key of the coin that was paid back.\n */\n coin_pub: CoinPublicKeyString;\n}\n\n/**\n * Format of the exchange's transaction history for a reserve.\n */\nexport type ReserveTransaction =\n | ReserveWithdrawTransaction\n | ReserveCreditTransaction\n | ReserveClosingTransaction\n | ReserveRecoupTransaction;\n\nexport const codecForReserveWithdrawTransaction =\n (): Codec<ReserveWithdrawTransaction> =>\n buildCodecForObject<ReserveWithdrawTransaction>()\n .property(\"amount\", codecForString())\n .property(\"h_coin_envelope\", codecForString())\n .property(\"h_denom_pub\", codecForString())\n .property(\"reserve_sig\", codecForString())\n .property(\"type\", codecForConstString(ReserveTransactionType.Withdraw))\n .property(\"withdraw_fee\", codecForString())\n .build(\"ReserveWithdrawTransaction\");\n\nexport const codecForReserveCreditTransaction =\n (): Codec<ReserveCreditTransaction> =>\n buildCodecForObject<ReserveCreditTransaction>()\n .property(\"amount\", codecForString())\n .property(\"sender_account_url\", codecForString())\n .property(\"timestamp\", codecForTimestamp)\n .property(\"wire_reference\", codecForNumber())\n .property(\"type\", codecForConstString(ReserveTransactionType.Credit))\n .build(\"ReserveCreditTransaction\");\n\nexport const codecForReserveClosingTransaction =\n (): Codec<ReserveClosingTransaction> =>\n buildCodecForObject<ReserveClosingTransaction>()\n .property(\"amount\", codecForString())\n .property(\"closing_fee\", codecForString())\n .property(\"exchange_pub\", codecForString())\n .property(\"exchange_sig\", codecForString())\n .property(\"h_wire\", codecForString())\n .property(\"timestamp\", codecForTimestamp)\n .property(\"type\", codecForConstString(ReserveTransactionType.Closing))\n .property(\"wtid\", codecForString())\n .build(\"ReserveClosingTransaction\");\n\nexport const codecForReserveRecoupTransaction =\n (): Codec<ReserveRecoupTransaction> =>\n buildCodecForObject<ReserveRecoupTransaction>()\n .property(\"amount\", codecForString())\n .property(\"coin_pub\", codecForString())\n .property(\"exchange_pub\", codecForString())\n .property(\"exchange_sig\", codecForString())\n .property(\"timestamp\", codecForTimestamp)\n .property(\"type\", codecForConstString(ReserveTransactionType.Recoup))\n .build(\"ReserveRecoupTransaction\");\n\nexport const codecForReserveTransaction = (): Codec<ReserveTransaction> =>\n buildCodecForUnion<ReserveTransaction>()\n .discriminateOn(\"type\")\n .alternative(\n ReserveTransactionType.Withdraw,\n codecForReserveWithdrawTransaction(),\n )\n .alternative(\n ReserveTransactionType.Closing,\n codecForReserveClosingTransaction(),\n )\n .alternative(\n ReserveTransactionType.Recoup,\n codecForReserveRecoupTransaction(),\n )\n .alternative(\n ReserveTransactionType.Credit,\n codecForReserveCreditTransaction(),\n )\n .build<ReserveTransaction>(\"ReserveTransaction\");\n", "/*\n This file is part of GNU Taler\n (C) 2019-2020 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\nimport { BackupRecovery } from \"./backup-types.js\";\nimport { canonicalizeBaseUrl } from \"./helpers.js\";\nimport { URLSearchParams, URL } from \"./url.js\";\n\nexport interface PayUriResult {\n merchantBaseUrl: string;\n orderId: string;\n sessionId: string;\n claimToken: string | undefined;\n noncePriv: string | undefined;\n}\n\nexport interface PayTemplateUriResult {\n merchantBaseUrl: string;\n templateId: string;\n templateParams: Record<string, string>;\n}\n\nexport interface WithdrawUriResult {\n bankIntegrationApiBaseUrl: string;\n withdrawalOperationId: string;\n}\n\nexport interface RefundUriResult {\n merchantBaseUrl: string;\n orderId: string;\n}\n\nexport interface TipUriResult {\n merchantTipId: string;\n merchantBaseUrl: string;\n}\n\nexport interface PayPushUriResult {\n exchangeBaseUrl: string;\n contractPriv: string;\n}\n\nexport interface PayPullUriResult {\n exchangeBaseUrl: string;\n contractPriv: string;\n}\n\nexport interface DevExperimentUri {\n devExperimentId: string;\n}\n\n/**\n * Parse a taler[+http]://withdraw URI.\n * Return undefined if not passed a valid URI.\n */\nexport function parseWithdrawUri(s: string): WithdrawUriResult | undefined {\n const pi = parseProtoInfo(s, \"withdraw\");\n if (!pi) {\n return undefined;\n }\n const parts = pi.rest.split(\"/\");\n\n if (parts.length < 2) {\n return undefined;\n }\n\n const host = parts[0].toLowerCase();\n const pathSegments = parts.slice(1, parts.length - 1);\n /**\n * The statement below does not tolerate a slash-ended URI.\n * This results in (1) the withdrawalId being passed as the\n * empty string, and (2) the bankIntegrationApi ending with the\n * actual withdrawal operation ID. That can be fixed by\n * trimming the parts-list. FIXME\n */\n const withdrawId = parts[parts.length - 1];\n const p = [host, ...pathSegments].join(\"/\");\n\n return {\n bankIntegrationApiBaseUrl: canonicalizeBaseUrl(`${pi.innerProto}://${p}/`),\n withdrawalOperationId: withdrawId,\n };\n}\n\nexport enum TalerUriType {\n TalerPay = \"taler-pay\",\n TalerTemplate = \"taler-template\",\n TalerPayTemplate = \"taler-pay-template\",\n TalerWithdraw = \"taler-withdraw\",\n TalerTip = \"taler-tip\",\n TalerRefund = \"taler-refund\",\n TalerPayPush = \"taler-pay-push\",\n TalerPayPull = \"taler-pay-pull\",\n TalerRecovery = \"taler-recovery\",\n TalerDevExperiment = \"taler-dev-experiment\",\n Unknown = \"unknown\",\n}\n\nconst talerActionPayPull = \"pay-pull\";\nconst talerActionPayPush = \"pay-push\";\nconst talerActionPayTemplate = \"pay-template\";\n\n/**\n * Classify a taler:// URI.\n */\nexport function classifyTalerUri(s: string): TalerUriType {\n const sl = s.toLowerCase();\n if (sl.startsWith(\"taler://recovery/\")) {\n return TalerUriType.TalerRecovery;\n }\n if (sl.startsWith(\"taler+http://recovery/\")) {\n return TalerUriType.TalerRecovery;\n }\n if (sl.startsWith(\"taler://pay/\")) {\n return TalerUriType.TalerPay;\n }\n if (sl.startsWith(\"taler+http://pay/\")) {\n return TalerUriType.TalerPay;\n }\n if (sl.startsWith(\"taler://pay-template/\")) {\n return TalerUriType.TalerPayTemplate;\n }\n if (sl.startsWith(\"taler+http://pay-template/\")) {\n return TalerUriType.TalerPayTemplate;\n }\n if (sl.startsWith(\"taler://tip/\")) {\n return TalerUriType.TalerTip;\n }\n if (sl.startsWith(\"taler+http://tip/\")) {\n return TalerUriType.TalerTip;\n }\n if (sl.startsWith(\"taler://refund/\")) {\n return TalerUriType.TalerRefund;\n }\n if (sl.startsWith(\"taler+http://refund/\")) {\n return TalerUriType.TalerRefund;\n }\n if (sl.startsWith(\"taler://withdraw/\")) {\n return TalerUriType.TalerWithdraw;\n }\n if (sl.startsWith(\"taler+http://withdraw/\")) {\n return TalerUriType.TalerWithdraw;\n }\n if (sl.startsWith(`taler://${talerActionPayPush}/`)) {\n return TalerUriType.TalerPayPush;\n }\n if (sl.startsWith(`taler+http://${talerActionPayPush}/`)) {\n return TalerUriType.TalerPayPush;\n }\n if (sl.startsWith(`taler://${talerActionPayPull}/`)) {\n return TalerUriType.TalerPayPull;\n }\n if (sl.startsWith(`taler+http://${talerActionPayPull}/`)) {\n return TalerUriType.TalerPayPull;\n }\n if (sl.startsWith(\"taler://dev-experiment/\")) {\n return TalerUriType.TalerDevExperiment;\n }\n return TalerUriType.Unknown;\n}\n\ninterface TalerUriProtoInfo {\n innerProto: \"http\" | \"https\";\n rest: string;\n}\n\nfunction parseProtoInfo(\n s: string,\n action: string,\n): TalerUriProtoInfo | undefined {\n const pfxPlain = `taler://${action}/`;\n const pfxHttp = `taler+http://${action}/`;\n if (s.toLowerCase().startsWith(pfxPlain)) {\n return {\n innerProto: \"https\",\n rest: s.substring(pfxPlain.length),\n };\n } else if (s.toLowerCase().startsWith(pfxHttp)) {\n return {\n innerProto: \"http\",\n rest: s.substring(pfxHttp.length),\n };\n } else {\n return undefined;\n }\n}\n\n/**\n * Parse a taler[+http]://pay URI.\n * Return undefined if not passed a valid URI.\n */\nexport function parsePayUri(s: string): PayUriResult | undefined {\n const pi = parseProtoInfo(s, \"pay\");\n if (!pi) {\n return undefined;\n }\n const c = pi?.rest.split(\"?\");\n const q = new URLSearchParams(c[1] ?? \"\");\n const claimToken = q.get(\"c\") ?? undefined;\n const noncePriv = q.get(\"n\") ?? undefined;\n const parts = c[0].split(\"/\");\n if (parts.length < 3) {\n return undefined;\n }\n const host = parts[0].toLowerCase();\n const sessionId = parts[parts.length - 1];\n const orderId = parts[parts.length - 2];\n const pathSegments = parts.slice(1, parts.length - 2);\n const p = [host, ...pathSegments].join(\"/\");\n const merchantBaseUrl = canonicalizeBaseUrl(`${pi.innerProto}://${p}/`);\n\n return {\n merchantBaseUrl,\n orderId,\n sessionId: sessionId,\n claimToken,\n noncePriv,\n };\n}\n\nexport function parsePayTemplateUri(\n s: string,\n): PayTemplateUriResult | undefined {\n const pi = parseProtoInfo(s, talerActionPayTemplate);\n if (!pi) {\n return undefined;\n }\n const c = pi?.rest.split(\"?\");\n const q = new URLSearchParams(c[1] ?? \"\");\n const parts = c[0].split(\"/\");\n if (parts.length < 2) {\n return undefined;\n }\n const host = parts[0].toLowerCase();\n const templateId = parts[parts.length - 1];\n const pathSegments = parts.slice(1, parts.length - 1);\n const p = [host, ...pathSegments].join(\"/\");\n const merchantBaseUrl = canonicalizeBaseUrl(`${pi.innerProto}://${p}/`);\n\n const params: Record<string, string> = {};\n\n q.forEach((v, k) => {\n params[k] = v;\n });\n\n return {\n merchantBaseUrl,\n templateId,\n templateParams: params,\n };\n}\n\nexport function constructPayUri(\n merchantBaseUrl: string,\n orderId: string,\n sessionId: string,\n claimToken?: string,\n noncePriv?: string,\n): string {\n const base = canonicalizeBaseUrl(merchantBaseUrl);\n const url = new URL(base);\n const isHttp = base.startsWith(\"http://\");\n let result = isHttp ? `taler+http://pay/` : `taler://pay/`;\n result += url.hostname;\n if (url.port != \"\") {\n result += `:${url.port}`;\n }\n result += `${url.pathname}${orderId}/${sessionId}`;\n const qp = new URLSearchParams();\n if (claimToken) {\n qp.append(\"c\", claimToken);\n }\n if (noncePriv) {\n qp.append(\"n\", noncePriv);\n }\n const queryPart = qp.toString();\n if (queryPart) {\n result += \"?\" + queryPart;\n }\n return result;\n}\n\nexport function parsePayPushUri(s: string): PayPushUriResult | undefined {\n const pi = parseProtoInfo(s, talerActionPayPush);\n if (!pi) {\n return undefined;\n }\n const c = pi?.rest.split(\"?\");\n const parts = c[0].split(\"/\");\n if (parts.length < 2) {\n return undefined;\n }\n const host = parts[0].toLowerCase();\n const contractPriv = parts[parts.length - 1];\n const pathSegments = parts.slice(1, parts.length - 1);\n const p = [host, ...pathSegments].join(\"/\");\n const exchangeBaseUrl = canonicalizeBaseUrl(`${pi.innerProto}://${p}/`);\n\n return {\n exchangeBaseUrl,\n contractPriv,\n };\n}\n\nexport function parsePayPullUri(s: string): PayPullUriResult | undefined {\n const pi = parseProtoInfo(s, talerActionPayPull);\n if (!pi) {\n return undefined;\n }\n const c = pi?.rest.split(\"?\");\n const parts = c[0].split(\"/\");\n if (parts.length < 2) {\n return undefined;\n }\n const host = parts[0].toLowerCase();\n const contractPriv = parts[parts.length - 1];\n const pathSegments = parts.slice(1, parts.length - 1);\n const p = [host, ...pathSegments].join(\"/\");\n const exchangeBaseUrl = canonicalizeBaseUrl(`${pi.innerProto}://${p}/`);\n\n return {\n exchangeBaseUrl,\n contractPriv,\n };\n}\n\n/**\n * Parse a taler[+http]://tip URI.\n * Return undefined if not passed a valid URI.\n */\nexport function parseTipUri(s: string): TipUriResult | undefined {\n const pi = parseProtoInfo(s, \"tip\");\n if (!pi) {\n return undefined;\n }\n const c = pi?.rest.split(\"?\");\n const parts = c[0].split(\"/\");\n if (parts.length < 2) {\n return undefined;\n }\n const host = parts[0].toLowerCase();\n const tipId = parts[parts.length - 1];\n const pathSegments = parts.slice(1, parts.length - 1);\n const p = [host, ...pathSegments].join(\"/\");\n const merchantBaseUrl = canonicalizeBaseUrl(`${pi.innerProto}://${p}/`);\n\n return {\n merchantBaseUrl,\n merchantTipId: tipId,\n };\n}\n\n/**\n * Parse a taler[+http]://refund URI.\n * Return undefined if not passed a valid URI.\n */\nexport function parseRefundUri(s: string): RefundUriResult | undefined {\n const pi = parseProtoInfo(s, \"refund\");\n if (!pi) {\n return undefined;\n }\n const c = pi?.rest.split(\"?\");\n const parts = c[0].split(\"/\");\n if (parts.length < 3) {\n return undefined;\n }\n const host = parts[0].toLowerCase();\n const sessionId = parts[parts.length - 1];\n const orderId = parts[parts.length - 2];\n const pathSegments = parts.slice(1, parts.length - 2);\n const p = [host, ...pathSegments].join(\"/\");\n const merchantBaseUrl = canonicalizeBaseUrl(`${pi.innerProto}://${p}/`);\n\n return {\n merchantBaseUrl,\n orderId,\n };\n}\n\nexport function parseDevExperimentUri(s: string): DevExperimentUri | undefined {\n const pi = parseProtoInfo(s, \"dev-experiment\");\n const c = pi?.rest.split(\"?\");\n if (!c) {\n return undefined;\n }\n // const q = new URLSearchParams(c[1] ?? \"\");\n const parts = c[0].split(\"/\");\n return {\n devExperimentId: parts[0],\n };\n}\n\nexport function constructPayPushUri(args: {\n exchangeBaseUrl: string;\n contractPriv: string;\n}): string {\n const url = new URL(args.exchangeBaseUrl);\n let proto: string;\n if (url.protocol === \"https:\") {\n proto = \"taler\";\n } else if (url.protocol === \"http:\") {\n proto = \"taler+http\";\n } else {\n throw Error(`Unsupported exchange URL protocol ${args.exchangeBaseUrl}`);\n }\n if (!url.pathname.endsWith(\"/\")) {\n throw Error(\n `exchange base URL must end with a slash (got ${args.exchangeBaseUrl}instead)`,\n );\n }\n return `${proto}://pay-push/${url.host}${url.pathname}${args.contractPriv}`;\n}\n\nexport function constructPayPullUri(args: {\n exchangeBaseUrl: string;\n contractPriv: string;\n}): string {\n const url = new URL(args.exchangeBaseUrl);\n let proto: string;\n if (url.protocol === \"https:\") {\n proto = \"taler\";\n } else if (url.protocol === \"http:\") {\n proto = \"taler+http\";\n } else {\n throw Error(`Unsupported exchange URL protocol ${args.exchangeBaseUrl}`);\n }\n if (!url.pathname.endsWith(\"/\")) {\n throw Error(\n `exchange base URL must end with a slash (got ${args.exchangeBaseUrl}instead)`,\n );\n }\n return `${proto}://pay-pull/${url.host}${url.pathname}${args.contractPriv}`;\n}\n\nexport function constructRecoveryUri(args: BackupRecovery): string {\n const key = args.walletRootPriv;\n //FIXME: name may contain non valid characters\n const urls = args.providers\n .map((p) => `${p.name}=${canonicalizeBaseUrl(p.url)}`)\n .join(\"&\");\n\n return `taler://recovery/${key}?${urls}`;\n}\nexport function parseRecoveryUri(uri: string): BackupRecovery | undefined {\n const pi = parseProtoInfo(uri, \"recovery\");\n if (!pi) {\n return undefined;\n }\n const idx = pi.rest.indexOf(\"?\");\n if (idx === -1) {\n return undefined;\n }\n const path = pi.rest.slice(0, idx);\n const params = pi.rest.slice(idx + 1);\n if (!path || !params) {\n return undefined;\n }\n const parts = path.split(\"/\");\n const walletRootPriv = parts[0];\n if (!walletRootPriv) return undefined;\n const providers = new Array<{ name: string; url: string }>();\n const args = params.split(\"&\");\n for (const param in args) {\n const eq = args[param].indexOf(\"=\");\n if (eq === -1) return undefined;\n const name = args[param].slice(0, eq);\n const url = args[param].slice(eq + 1);\n providers.push({ name, url });\n }\n return { walletRootPriv, providers };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2019 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n * Type and schema definitions for the wallet's transaction list.\n *\n * @author Florian Dold\n * @author Torsten Grote\n */\n\n/**\n * Imports.\n */\nimport { TalerProtocolTimestamp } from \"./time.js\";\nimport {\n AmountString,\n Product,\n InternationalizedString,\n MerchantInfo,\n codecForInternationalizedString,\n codecForMerchantInfo,\n codecForProduct,\n Location,\n} from \"./taler-types.js\";\nimport {\n Codec,\n buildCodecForObject,\n codecOptional,\n codecForString,\n codecForList,\n codecForAny,\n codecForBoolean,\n} from \"./codec.js\";\nimport {\n RefreshReason,\n TalerErrorDetail,\n TransactionIdStr,\n} from \"./wallet-types.js\";\n\nexport enum ExtendedStatus {\n Pending = \"pending\",\n Done = \"done\",\n Aborting = \"aborting\",\n Aborted = \"aborted\",\n Failed = \"failed\",\n KycRequired = \"kyc-required\",\n}\n\nexport interface TransactionsRequest {\n /**\n * return only transactions in the given currency\n */\n currency?: string;\n\n /**\n * if present, results will be limited to transactions related to the given search string\n */\n search?: string;\n\n /**\n * If true, include all refreshes in the transactions list.\n */\n includeRefreshes?: boolean;\n}\n\nexport interface TransactionsResponse {\n // a list of past and pending transactions sorted by pending, timestamp and transactionId.\n // In case two events are both pending and have the same timestamp,\n // they are sorted by the transactionId\n // (lexically ascending and locale-independent comparison).\n transactions: Transaction[];\n}\n\nexport interface TransactionCommon {\n // opaque unique ID for the transaction, used as a starting point for paginating queries\n // and for invoking actions on the transaction (e.g. deleting/hiding it from the history)\n transactionId: TransactionIdStr;\n\n // the type of the transaction; different types might provide additional information\n type: TransactionType;\n\n // main timestamp of the transaction\n timestamp: TalerProtocolTimestamp;\n\n extendedStatus: ExtendedStatus;\n\n /**\n * true if the transaction is still pending, false otherwise\n * If a transaction is not longer pending, its timestamp will be updated,\n * but its transactionId will remain unchanged\n *\n * @deprecated show extendedStatus\n */\n pending: boolean;\n\n /**\n * True if the transaction encountered a problem that might be\n * permanent. A frozen transaction won't be automatically retried.\n *\n * @deprecated show extendedStatus\n */\n frozen: boolean;\n\n /**\n * Raw amount of the transaction (exclusive of fees or other extra costs).\n */\n amountRaw: AmountString;\n\n /**\n * Amount added or removed from the wallet's balance (including all fees and other costs).\n */\n amountEffective: AmountString;\n\n error?: TalerErrorDetail;\n}\n\nexport type Transaction =\n | TransactionWithdrawal\n | TransactionPayment\n | TransactionRefund\n | TransactionTip\n | TransactionRefresh\n | TransactionDeposit\n | TransactionPeerPullCredit\n | TransactionPeerPullDebit\n | TransactionPeerPushCredit\n | TransactionPeerPushDebit;\n\nexport enum TransactionType {\n Withdrawal = \"withdrawal\",\n Payment = \"payment\",\n Refund = \"refund\",\n Refresh = \"refresh\",\n Tip = \"tip\",\n Deposit = \"deposit\",\n PeerPushDebit = \"peer-push-debit\",\n PeerPushCredit = \"peer-push-credit\",\n PeerPullDebit = \"peer-pull-debit\",\n PeerPullCredit = \"peer-pull-credit\",\n}\n\nexport enum WithdrawalType {\n TalerBankIntegrationApi = \"taler-bank-integration-api\",\n ManualTransfer = \"manual-transfer\",\n}\n\nexport type WithdrawalDetails =\n | WithdrawalDetailsForManualTransfer\n | WithdrawalDetailsForTalerBankIntegrationApi;\n\ninterface WithdrawalDetailsForManualTransfer {\n type: WithdrawalType.ManualTransfer;\n\n /**\n * Payto URIs that the exchange supports.\n *\n * Already contains the amount and message.\n */\n exchangePaytoUris: string[];\n\n // Public key of the reserve\n reservePub: string;\n\n /**\n * Is the reserve ready for withdrawal?\n */\n reserveIsReady: boolean;\n}\n\ninterface WithdrawalDetailsForTalerBankIntegrationApi {\n type: WithdrawalType.TalerBankIntegrationApi;\n\n /**\n * Set to true if the bank has confirmed the withdrawal, false if not.\n * An unconfirmed withdrawal usually requires user-input and should be highlighted in the UI.\n * See also bankConfirmationUrl below.\n */\n confirmed: boolean;\n\n /**\n * If the withdrawal is unconfirmed, this can include a URL for user\n * initiated confirmation.\n */\n bankConfirmationUrl?: string;\n\n // Public key of the reserve\n reservePub: string;\n\n /**\n * Is the reserve ready for withdrawal?\n */\n reserveIsReady: boolean;\n}\n\n// This should only be used for actual withdrawals\n// and not for tips that have their own transactions type.\nexport interface TransactionWithdrawal extends TransactionCommon {\n type: TransactionType.Withdrawal;\n\n /**\n * Exchange of the withdrawal.\n */\n exchangeBaseUrl: string;\n\n /**\n * Amount that got subtracted from the reserve balance.\n */\n amountRaw: AmountString;\n\n /**\n * Amount that actually was (or will be) added to the wallet's balance.\n */\n amountEffective: AmountString;\n\n withdrawalDetails: WithdrawalDetails;\n}\n\nexport interface PeerInfoShort {\n expiration: TalerProtocolTimestamp | undefined;\n summary: string | undefined;\n}\n\n/**\n * Credit because we were paid for a P2P invoice we created.\n */\nexport interface TransactionPeerPullCredit extends TransactionCommon {\n type: TransactionType.PeerPullCredit;\n\n info: PeerInfoShort;\n /**\n * Exchange used.\n */\n exchangeBaseUrl: string;\n\n /**\n * Amount that got subtracted from the reserve balance.\n */\n amountRaw: AmountString;\n\n /**\n * Amount that actually was (or will be) added to the wallet's balance.\n */\n amountEffective: AmountString;\n\n /**\n * URI to send to the other party.\n */\n talerUri: string;\n}\n\n/**\n * Debit because we paid someone's invoice.\n */\nexport interface TransactionPeerPullDebit extends TransactionCommon {\n type: TransactionType.PeerPullDebit;\n\n info: PeerInfoShort;\n /**\n * Exchange used.\n */\n exchangeBaseUrl: string;\n\n amountRaw: AmountString;\n\n amountEffective: AmountString;\n}\n\n/**\n * We sent money via a P2P payment.\n */\nexport interface TransactionPeerPushDebit extends TransactionCommon {\n type: TransactionType.PeerPushDebit;\n\n info: PeerInfoShort;\n /**\n * Exchange used.\n */\n exchangeBaseUrl: string;\n\n /**\n * Amount that got subtracted from the reserve balance.\n */\n amountRaw: AmountString;\n\n /**\n * Amount that actually was (or will be) added to the wallet's balance.\n */\n amountEffective: AmountString;\n\n /**\n * URI to accept the payment.\n */\n talerUri: string;\n}\n\n/**\n * We received money via a P2P payment.\n */\nexport interface TransactionPeerPushCredit extends TransactionCommon {\n type: TransactionType.PeerPushCredit;\n\n info: PeerInfoShort;\n /**\n * Exchange used.\n */\n exchangeBaseUrl: string;\n\n /**\n * Amount that got subtracted from the reserve balance.\n */\n amountRaw: AmountString;\n\n /**\n * Amount that actually was (or will be) added to the wallet's balance.\n */\n amountEffective: AmountString;\n}\n\nexport enum PaymentStatus {\n /**\n * Explicitly aborted after timeout / failure\n */\n Aborted = \"aborted\",\n\n /**\n * Payment failed, wallet will auto-retry.\n * User should be given the option to retry now / abort.\n */\n Failed = \"failed\",\n\n /**\n * Paid successfully\n */\n Paid = \"paid\",\n\n /**\n * User accepted, payment is processing.\n */\n Accepted = \"accepted\",\n}\n\nexport interface TransactionPayment extends TransactionCommon {\n type: TransactionType.Payment;\n\n /**\n * Additional information about the payment.\n */\n info: OrderShortInfo;\n\n /**\n * Wallet-internal end-to-end identifier for the payment.\n */\n proposalId: string;\n\n /**\n * How far did the wallet get with processing the payment?\n *\n * @deprecated use extendedStatus\n */\n status: PaymentStatus;\n\n /**\n * Amount that must be paid for the contract\n */\n amountRaw: AmountString;\n\n /**\n * Amount that was paid, including deposit, wire and refresh fees.\n */\n amountEffective: AmountString;\n\n /**\n * Amount that has been refunded by the merchant\n */\n totalRefundRaw: AmountString;\n\n /**\n * Amount will be added to the wallet's balance after fees and refreshing\n */\n totalRefundEffective: AmountString;\n\n /**\n * Amount pending to be picked up\n */\n refundPending: AmountString | undefined;\n\n /**\n * Reference to applied refunds\n */\n refunds: RefundInfoShort[];\n\n /**\n * Is the wallet currently checking for a refund?\n */\n refundQueryActive: boolean;\n}\n\nexport interface OrderShortInfo {\n /**\n * Order ID, uniquely identifies the order within a merchant instance\n */\n orderId: string;\n\n /**\n * Hash of the contract terms.\n */\n contractTermsHash: string;\n\n /**\n * More information about the merchant\n */\n merchant: MerchantInfo;\n\n /**\n * Summary of the order, given by the merchant\n */\n summary: string;\n\n /**\n * Map from IETF BCP 47 language tags to localized summaries\n */\n summary_i18n?: InternationalizedString;\n\n /**\n * List of products that are part of the order\n */\n products: Product[] | undefined;\n\n /**\n * Time indicating when the order should be delivered.\n * May be overwritten by individual products.\n */\n delivery_date?: TalerProtocolTimestamp;\n\n /**\n * Delivery location for (all!) products.\n */\n delivery_location?: Location;\n\n /**\n * URL of the fulfillment, given by the merchant\n */\n fulfillmentUrl?: string;\n\n /**\n * Plain text message that should be shown to the user\n * when the payment is complete.\n */\n fulfillmentMessage?: string;\n\n /**\n * Translations of fulfillmentMessage.\n */\n fulfillmentMessage_i18n?: InternationalizedString;\n}\n\nexport interface RefundInfoShort {\n transactionId: string;\n timestamp: TalerProtocolTimestamp;\n amountEffective: AmountString;\n amountRaw: AmountString;\n}\n\nexport interface TransactionRefund extends TransactionCommon {\n type: TransactionType.Refund;\n\n // ID for the transaction that is refunded\n refundedTransactionId: string;\n\n // Additional information about the refunded payment\n info: OrderShortInfo;\n\n /**\n * Amount pending to be picked up\n */\n refundPending: AmountString | undefined;\n\n // Amount that has been refunded by the merchant\n amountRaw: AmountString;\n\n // Amount will be added to the wallet's balance after fees and refreshing\n amountEffective: AmountString;\n}\n\nexport interface TransactionTip extends TransactionCommon {\n type: TransactionType.Tip;\n\n // Raw amount of the tip, without extra fees that apply\n amountRaw: AmountString;\n\n /**\n * More information about the merchant\n */\n // merchant: MerchantInfo;\n\n // Amount will be (or was) added to the wallet's balance after fees and refreshing\n amountEffective: AmountString;\n\n merchantBaseUrl: string;\n}\n\n/**\n * A transaction shown for refreshes.\n * Only shown for (1) refreshes not associated with other transactions\n * and (2) refreshes in an error state.\n */\nexport interface TransactionRefresh extends TransactionCommon {\n type: TransactionType.Refresh;\n\n refreshReason: RefreshReason;\n\n /**\n * Transaction ID that caused this refresh.\n */\n originatingTransactionId?: string;\n\n /**\n * Always zero for refreshes\n */\n amountRaw: AmountString;\n\n /**\n * Fees, i.e. the effective, negative effect of the refresh\n * on the balance.\n * \n * Only applicable for stand-alone refreshes, and zero for\n * other refreshes where the transaction itself accounts for the\n * refresh fee.\n */\n amountEffective: AmountString;\n\n refreshInputAmount: AmountString;\n refreshOutputAmount: AmountString;\n}\n\n/**\n * Deposit transaction, which effectively sends\n * money from this wallet somewhere else.\n */\nexport interface TransactionDeposit extends TransactionCommon {\n type: TransactionType.Deposit;\n\n depositGroupId: string;\n\n /**\n * Target for the deposit.\n */\n targetPaytoUri: string;\n\n /**\n * Raw amount that is being deposited\n */\n amountRaw: AmountString;\n\n /**\n * Effective amount that is being deposited\n */\n amountEffective: AmountString;\n\n wireTransferDeadline: TalerProtocolTimestamp;\n\n wireTransferProgress: number;\n\n /**\n * Did all the deposit requests succeed?\n */\n deposited: boolean;\n}\n\nexport interface TransactionByIdRequest {\n transactionId: string;\n}\n\nexport const codecForTransactionByIdRequest =\n (): Codec<TransactionByIdRequest> =>\n buildCodecForObject<TransactionByIdRequest>()\n .property(\"transactionId\", codecForString())\n .build(\"TransactionByIdRequest\");\n\nexport const codecForTransactionsRequest = (): Codec<TransactionsRequest> =>\n buildCodecForObject<TransactionsRequest>()\n .property(\"currency\", codecOptional(codecForString()))\n .property(\"search\", codecOptional(codecForString()))\n .property(\"includeRefreshes\", codecOptional(codecForBoolean()))\n .build(\"TransactionsRequest\");\n\n// FIXME: do full validation here!\nexport const codecForTransactionsResponse = (): Codec<TransactionsResponse> =>\n buildCodecForObject<TransactionsResponse>()\n .property(\"transactions\", codecForList(codecForAny()))\n .build(\"TransactionsResponse\");\n\nexport const codecForOrderShortInfo = (): Codec<OrderShortInfo> =>\n buildCodecForObject<OrderShortInfo>()\n .property(\"contractTermsHash\", codecForString())\n .property(\"fulfillmentMessage\", codecOptional(codecForString()))\n .property(\n \"fulfillmentMessage_i18n\",\n codecOptional(codecForInternationalizedString()),\n )\n .property(\"fulfillmentUrl\", codecOptional(codecForString()))\n .property(\"merchant\", codecForMerchantInfo())\n .property(\"orderId\", codecForString())\n .property(\"products\", codecOptional(codecForList(codecForProduct())))\n .property(\"summary\", codecForString())\n .property(\"summary_i18n\", codecOptional(codecForInternationalizedString()))\n .build(\"OrderShortInfo\");\n", "/*\n This file is part of GNU Taler\n (C) 2015-2020 Taler Systems SA\n\n TALER is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n TALER is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n * Types used by clients of the wallet.\n *\n * These types are defined in a separate file make tree shaking easier, since\n * some components use these types (via RPC) but do not depend on the wallet\n * code directly.\n *\n * @author Florian Dold <dold@taler.net>\n */\n\n/**\n * Imports.\n */\nimport { AmountJson, codecForAmountString } from \"./amounts.js\";\nimport { BackupRecovery } from \"./backup-types.js\";\nimport {\n buildCodecForObject,\n buildCodecForUnion,\n Codec,\n codecForAny,\n codecForBoolean,\n codecForConstString,\n codecForEither,\n codecForList,\n codecForMap,\n codecForNumber,\n codecForString,\n codecOptional,\n} from \"./codec.js\";\nimport { VersionMatchResult } from \"./libtool-version.js\";\nimport { PaytoUri } from \"./payto.js\";\nimport { AgeCommitmentProof } from \"./taler-crypto.js\";\nimport { TalerErrorCode } from \"./taler-error-codes.js\";\nimport {\n AmountString,\n AuditorDenomSig,\n codecForMerchantContractTerms,\n CoinEnvelope,\n MerchantContractTerms,\n PeerContractTerms,\n DenominationPubKey,\n DenomKeyType,\n ExchangeAuditor,\n UnblindedSignature,\n codecForPeerContractTerms,\n TrackTransaction,\n} from \"./taler-types.js\";\nimport {\n AbsoluteTime,\n codecForAbsoluteTime,\n codecForTimestamp,\n TalerProtocolDuration,\n TalerProtocolTimestamp,\n} from \"./time.js\";\nimport {\n codecForOrderShortInfo,\n OrderShortInfo,\n} from \"./transactions-types.js\";\n\n/**\n * Identifier for a transaction in the wallet.\n */\nexport type TransactionIdStr = `txn:${string}:${string}`;\n\n/**\n * Identifier for a pending task in the wallet.\n */\nexport type PendingIdStr = `pnd:${string}:${string}`;\n\nexport type TombstoneIdStr = `tmb:${string}:${string}`;\n\n/**\n * Response for the create reserve request to the wallet.\n */\nexport class CreateReserveResponse {\n /**\n * Exchange URL where the bank should create the reserve.\n * The URL is canonicalized in the response.\n */\n exchange: string;\n\n /**\n * Reserve public key of the newly created reserve.\n */\n reservePub: string;\n}\n\nexport interface GetBalanceDetailRequest {\n currency: string;\n}\n\nexport const codecForGetBalanceDetailRequest =\n (): Codec<GetBalanceDetailRequest> =>\n buildCodecForObject<GetBalanceDetailRequest>()\n .property(\"currency\", codecForString())\n .build(\"GetBalanceDetailRequest\");\n\nexport interface Balance {\n scopeInfo: ScopeInfo;\n available: AmountString;\n pendingIncoming: AmountString;\n pendingOutgoing: AmountString;\n\n // Does the balance for this currency have a pending\n // transaction?\n hasPendingTransactions: boolean;\n\n // Is there a pending transaction that would affect the balance\n // and requires user input?\n requiresUserInput: boolean;\n}\n\nexport interface InitRequest {\n skipDefaults?: boolean;\n}\n\nexport interface InitResponse {\n versionInfo: WalletCoreVersion;\n}\n\nexport enum ScopeType {\n Global = \"global\",\n Exchange = \"exchange\",\n Auditor = \"auditor\",\n}\n\nexport type ScopeInfo =\n | { type: ScopeType.Global; currency: string }\n | { type: ScopeType.Exchange; currency: string; url: string }\n | { type: ScopeType.Auditor; currency: string; url: string };\n\nexport interface BalancesResponse {\n balances: Balance[];\n}\n\nexport const codecForBalance = (): Codec<Balance> =>\n buildCodecForObject<Balance>()\n .property(\"scopeInfo\", codecForAny()) // FIXME\n .property(\"available\", codecForString())\n .property(\"hasPendingTransactions\", codecForBoolean())\n .property(\"pendingIncoming\", codecForString())\n .property(\"pendingOutgoing\", codecForString())\n .property(\"requiresUserInput\", codecForBoolean())\n .build(\"Balance\");\n\nexport const codecForBalancesResponse = (): Codec<BalancesResponse> =>\n buildCodecForObject<BalancesResponse>()\n .property(\"balances\", codecForList(codecForBalance()))\n .build(\"BalancesResponse\");\n\n/**\n * For terseness.\n */\nexport function mkAmount(\n value: number,\n fraction: number,\n currency: string,\n): AmountJson {\n return { value, fraction, currency };\n}\n\n/**\n * Status of a coin.\n */\nexport enum CoinStatus {\n /**\n * Withdrawn and never shown to anybody.\n */\n Fresh = \"fresh\",\n\n /**\n * Fresh, but currently marked as \"suspended\", thus won't be used\n * for spending. Used for testing.\n */\n FreshSuspended = \"fresh-suspended\",\n\n /**\n * A coin that has been spent and refreshed.\n */\n Dormant = \"dormant\",\n}\n\n/**\n * Easy to process format for the public data of coins\n * managed by the wallet.\n */\nexport interface CoinDumpJson {\n coins: Array<{\n /**\n * The coin's denomination's public key.\n */\n denom_pub: DenominationPubKey;\n /**\n * Hash of denom_pub.\n */\n denom_pub_hash: string;\n /**\n * Value of the denomination (without any fees).\n */\n denom_value: string;\n /**\n * Public key of the coin.\n */\n coin_pub: string;\n /**\n * Base URL of the exchange for the coin.\n */\n exchange_base_url: string;\n /**\n * Public key of the parent coin.\n * Only present if this coin was obtained via refreshing.\n */\n refresh_parent_coin_pub: string | undefined;\n /**\n * Public key of the reserve for this coin.\n * Only present if this coin was obtained via refreshing.\n */\n withdrawal_reserve_pub: string | undefined;\n coin_status: CoinStatus;\n spend_allocation:\n | {\n id: string;\n amount: string;\n }\n | undefined;\n /**\n * Information about the age restriction\n */\n ageCommitmentProof: AgeCommitmentProof | undefined;\n }>;\n}\n\nexport enum ConfirmPayResultType {\n Done = \"done\",\n Pending = \"pending\",\n}\n\n/**\n * Result for confirmPay\n */\nexport interface ConfirmPayResultDone {\n type: ConfirmPayResultType.Done;\n contractTerms: MerchantContractTerms;\n transactionId: string;\n}\n\nexport interface ConfirmPayResultPending {\n type: ConfirmPayResultType.Pending;\n transactionId: string;\n lastError: TalerErrorDetail | undefined;\n}\n\nexport const codecForTalerErrorDetail = (): Codec<TalerErrorDetail> =>\n buildCodecForObject<TalerErrorDetail>()\n .property(\"code\", codecForNumber())\n .property(\"when\", codecForAbsoluteTime)\n .property(\"hint\", codecOptional(codecForString()))\n .build(\"TalerErrorDetail\");\n\nexport type ConfirmPayResult = ConfirmPayResultDone | ConfirmPayResultPending;\n\nexport const codecForConfirmPayResultPending =\n (): Codec<ConfirmPayResultPending> =>\n buildCodecForObject<ConfirmPayResultPending>()\n .property(\"lastError\", codecOptional(codecForTalerErrorDetail()))\n .property(\"transactionId\", codecForString())\n .property(\"type\", codecForConstString(ConfirmPayResultType.Pending))\n .build(\"ConfirmPayResultPending\");\n\nexport const codecForConfirmPayResultDone = (): Codec<ConfirmPayResultDone> =>\n buildCodecForObject<ConfirmPayResultDone>()\n .property(\"type\", codecForConstString(ConfirmPayResultType.Done))\n .property(\"transactionId\", codecForString())\n .property(\"contractTerms\", codecForMerchantContractTerms())\n .build(\"ConfirmPayResultDone\");\n\nexport const codecForConfirmPayResult = (): Codec<ConfirmPayResult> =>\n buildCodecForUnion<ConfirmPayResult>()\n .discriminateOn(\"type\")\n .alternative(\n ConfirmPayResultType.Pending,\n codecForConfirmPayResultPending(),\n )\n .alternative(ConfirmPayResultType.Done, codecForConfirmPayResultDone())\n .build(\"ConfirmPayResult\");\n\n/**\n * Information about all sender wire details known to the wallet,\n * as well as exchanges that accept these wire types.\n */\nexport interface SenderWireInfos {\n /**\n * Mapping from exchange base url to list of accepted\n * wire types.\n */\n exchangeWireTypes: { [exchangeBaseUrl: string]: string[] };\n\n /**\n * Sender wire information stored in the wallet.\n */\n senderWires: string[];\n}\n\n/**\n * Request to mark a reserve as confirmed.\n */\nexport interface ConfirmReserveRequest {\n /**\n * Public key of then reserve that should be marked\n * as confirmed.\n */\n reservePub: string;\n}\n\nexport const codecForConfirmReserveRequest = (): Codec<ConfirmReserveRequest> =>\n buildCodecForObject<ConfirmReserveRequest>()\n .property(\"reservePub\", codecForString())\n .build(\"ConfirmReserveRequest\");\n\nexport interface PrepareRefundResult {\n proposalId: string;\n\n effectivePaid: AmountString;\n gone: AmountString;\n granted: AmountString;\n pending: boolean;\n awaiting: AmountString;\n\n info: OrderShortInfo;\n}\n\nexport interface PrepareTipResult {\n /**\n * Unique ID for the tip assigned by the wallet.\n * Typically different from the merchant-generated tip ID.\n */\n walletTipId: string;\n\n /**\n * Has the tip already been accepted?\n */\n accepted: boolean;\n\n /**\n * Amount that the merchant gave.\n */\n tipAmountRaw: AmountString;\n\n /**\n * Amount that arrived at the wallet.\n * Might be lower than the raw amount due to fees.\n */\n tipAmountEffective: AmountString;\n\n /**\n * Base URL of the merchant backend giving then tip.\n */\n merchantBaseUrl: string;\n\n /**\n * Base URL of the exchange that is used to withdraw the tip.\n * Determined by the merchant, the wallet/user has no choice here.\n */\n exchangeBaseUrl: string;\n\n /**\n * Time when the tip will expire. After it expired, it can't be picked\n * up anymore.\n */\n expirationTimestamp: TalerProtocolTimestamp;\n}\n\nexport interface AcceptTipResponse {\n transactionId: string;\n next_url?: string;\n}\n\nexport const codecForPrepareTipResult = (): Codec<PrepareTipResult> =>\n buildCodecForObject<PrepareTipResult>()\n .property(\"accepted\", codecForBoolean())\n .property(\"tipAmountRaw\", codecForAmountString())\n .property(\"tipAmountEffective\", codecForAmountString())\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"merchantBaseUrl\", codecForString())\n .property(\"expirationTimestamp\", codecForTimestamp)\n .property(\"walletTipId\", codecForString())\n .build(\"PrepareTipResult\");\n\nexport interface BenchmarkResult {\n time: { [s: string]: number };\n repetitions: number;\n}\n\nexport enum PreparePayResultType {\n PaymentPossible = \"payment-possible\",\n InsufficientBalance = \"insufficient-balance\",\n AlreadyConfirmed = \"already-confirmed\",\n}\n\nexport const codecForPreparePayResultPaymentPossible =\n (): Codec<PreparePayResultPaymentPossible> =>\n buildCodecForObject<PreparePayResultPaymentPossible>()\n .property(\"amountEffective\", codecForAmountString())\n .property(\"amountRaw\", codecForAmountString())\n .property(\"contractTerms\", codecForMerchantContractTerms())\n .property(\"proposalId\", codecForString())\n .property(\"contractTermsHash\", codecForString())\n .property(\"talerUri\", codecForString())\n .property(\"noncePriv\", codecForString())\n .property(\n \"status\",\n codecForConstString(PreparePayResultType.PaymentPossible),\n )\n .build(\"PreparePayResultPaymentPossible\");\n\n/**\n * Detailed reason for why the wallet's balance is insufficient.\n */\nexport interface PayMerchantInsufficientBalanceDetails {\n /**\n * Amount requested by the merchant.\n */\n amountRequested: AmountString;\n\n /**\n * Balance of type \"available\" (see balance.ts for definition).\n */\n balanceAvailable: AmountString;\n\n /**\n * Balance of type \"material\" (see balance.ts for definition).\n */\n balanceMaterial: AmountString;\n\n /**\n * Balance of type \"age-acceptable\" (see balance.ts for definition).\n */\n balanceAgeAcceptable: AmountString;\n\n /**\n * Balance of type \"merchant-acceptable\" (see balance.ts for definition).\n */\n balanceMerchantAcceptable: AmountString;\n\n /**\n * Balance of type \"merchant-depositable\" (see balance.ts for definition).\n */\n balanceMerchantDepositable: AmountString;\n\n /**\n * If the payment would succeed without fees\n * (i.e. balanceMechantWireable >= amountRequested),\n * this field contains an estimate of the amount that would additionally\n * be required to cover the fees.\n *\n * It is not possible to give an exact value here, since it depends\n * on the coin selection for the amount that would be additionally withdrawn.\n */\n feeGapEstimate: AmountString;\n}\n\nexport const codecForPayMerchantInsufficientBalanceDetails =\n (): Codec<PayMerchantInsufficientBalanceDetails> =>\n buildCodecForObject<PayMerchantInsufficientBalanceDetails>()\n .property(\"amountRequested\", codecForAmountString())\n .property(\"balanceAgeAcceptable\", codecForAmountString())\n .property(\"balanceAvailable\", codecForAmountString())\n .property(\"balanceMaterial\", codecForAmountString())\n .property(\"balanceMerchantAcceptable\", codecForAmountString())\n .property(\"balanceMerchantDepositable\", codecForAmountString())\n .property(\"feeGapEstimate\", codecForAmountString())\n .build(\"PayMerchantInsufficientBalanceDetails\");\n\nexport const codecForPreparePayResultInsufficientBalance =\n (): Codec<PreparePayResultInsufficientBalance> =>\n buildCodecForObject<PreparePayResultInsufficientBalance>()\n .property(\"amountRaw\", codecForAmountString())\n .property(\"contractTerms\", codecForAny())\n .property(\"talerUri\", codecForString())\n .property(\"proposalId\", codecForString())\n .property(\"noncePriv\", codecForString())\n .property(\n \"status\",\n codecForConstString(PreparePayResultType.InsufficientBalance),\n )\n .property(\n \"balanceDetails\",\n codecForPayMerchantInsufficientBalanceDetails(),\n )\n .build(\"PreparePayResultInsufficientBalance\");\n\nexport const codecForPreparePayResultAlreadyConfirmed =\n (): Codec<PreparePayResultAlreadyConfirmed> =>\n buildCodecForObject<PreparePayResultAlreadyConfirmed>()\n .property(\n \"status\",\n codecForConstString(PreparePayResultType.AlreadyConfirmed),\n )\n .property(\"amountEffective\", codecForAmountString())\n .property(\"amountRaw\", codecForAmountString())\n .property(\"paid\", codecForBoolean())\n .property(\"talerUri\", codecOptional(codecForString()))\n .property(\"contractTerms\", codecForAny())\n .property(\"contractTermsHash\", codecForString())\n .property(\"proposalId\", codecForString())\n .build(\"PreparePayResultAlreadyConfirmed\");\n\nexport const codecForPreparePayResult = (): Codec<PreparePayResult> =>\n buildCodecForUnion<PreparePayResult>()\n .discriminateOn(\"status\")\n .alternative(\n PreparePayResultType.AlreadyConfirmed,\n codecForPreparePayResultAlreadyConfirmed(),\n )\n .alternative(\n PreparePayResultType.InsufficientBalance,\n codecForPreparePayResultInsufficientBalance(),\n )\n .alternative(\n PreparePayResultType.PaymentPossible,\n codecForPreparePayResultPaymentPossible(),\n )\n .build(\"PreparePayResult\");\n\n/**\n * Result of a prepare pay operation.\n */\nexport type PreparePayResult =\n | PreparePayResultInsufficientBalance\n | PreparePayResultAlreadyConfirmed\n | PreparePayResultPaymentPossible;\n\n/**\n * Payment is possible.\n */\nexport interface PreparePayResultPaymentPossible {\n status: PreparePayResultType.PaymentPossible;\n proposalId: string;\n contractTerms: MerchantContractTerms;\n contractTermsHash: string;\n amountRaw: string;\n amountEffective: string;\n noncePriv: string;\n talerUri: string;\n}\n\nexport interface PreparePayResultInsufficientBalance {\n status: PreparePayResultType.InsufficientBalance;\n proposalId: string;\n contractTerms: MerchantContractTerms;\n amountRaw: string;\n noncePriv: string;\n talerUri: string;\n balanceDetails: PayMerchantInsufficientBalanceDetails;\n}\n\nexport interface PreparePayResultAlreadyConfirmed {\n status: PreparePayResultType.AlreadyConfirmed;\n contractTerms: MerchantContractTerms;\n paid: boolean;\n amountRaw: string;\n amountEffective: string;\n contractTermsHash: string;\n proposalId: string;\n talerUri?: string;\n}\n\nexport interface BankWithdrawDetails {\n selectionDone: boolean;\n transferDone: boolean;\n amount: AmountJson;\n senderWire?: string;\n suggestedExchange?: string;\n confirmTransferUrl?: string;\n wireTypes: string[];\n}\n\nexport interface AcceptWithdrawalResponse {\n reservePub: string;\n confirmTransferUrl?: string;\n transactionId: string;\n}\n\n/**\n * Details about a purchase, including refund status.\n */\nexport interface PurchaseDetails {\n contractTerms: Record<string, undefined>;\n hasRefund: boolean;\n totalRefundAmount: AmountJson;\n totalRefundAndRefreshFees: AmountJson;\n}\n\nexport interface WalletDiagnostics {\n walletManifestVersion: string;\n walletManifestDisplayVersion: string;\n errors: string[];\n firefoxIdbProblem: boolean;\n dbOutdated: boolean;\n}\n\nexport interface TalerErrorDetail {\n code: TalerErrorCode;\n when?: AbsoluteTime;\n hint?: string;\n [x: string]: unknown;\n}\n\n/**\n * Minimal information needed about a planchet for unblinding a signature.\n *\n * Can be a withdrawal/tipping/refresh planchet.\n */\nexport interface PlanchetUnblindInfo {\n denomPub: DenominationPubKey;\n blindingKey: string;\n}\n\nexport interface WithdrawalPlanchet {\n coinPub: string;\n coinPriv: string;\n reservePub: string;\n denomPubHash: string;\n denomPub: DenominationPubKey;\n blindingKey: string;\n withdrawSig: string;\n coinEv: CoinEnvelope;\n coinValue: AmountJson;\n coinEvHash: string;\n ageCommitmentProof?: AgeCommitmentProof;\n}\n\nexport interface PlanchetCreationRequest {\n secretSeed: string;\n coinIndex: number;\n value: AmountJson;\n feeWithdraw: AmountJson;\n denomPub: DenominationPubKey;\n reservePub: string;\n reservePriv: string;\n restrictAge?: number;\n}\n\n/**\n * Reasons for why a coin is being refreshed.\n */\nexport enum RefreshReason {\n Manual = \"manual\",\n PayMerchant = \"pay-merchant\",\n PayDeposit = \"pay-deposit\",\n PayPeerPush = \"pay-peer-push\",\n PayPeerPull = \"pay-peer-pull\",\n Refund = \"refund\",\n AbortPay = \"abort-pay\",\n Recoup = \"recoup\",\n BackupRestored = \"backup-restored\",\n Scheduled = \"scheduled\",\n}\n\n/**\n * Request to refresh a single coin.\n */\nexport interface CoinRefreshRequest {\n readonly coinPub: string;\n readonly amount: AmountString;\n}\n\n/**\n * Wrapper for refresh group IDs.\n */\nexport interface RefreshGroupId {\n readonly refreshGroupId: string;\n}\n\n/**\n * Private data required to make a deposit permission.\n */\nexport interface DepositInfo {\n exchangeBaseUrl: string;\n contractTermsHash: string;\n coinPub: string;\n coinPriv: string;\n spendAmount: AmountJson;\n timestamp: TalerProtocolTimestamp;\n refundDeadline: TalerProtocolTimestamp;\n merchantPub: string;\n feeDeposit: AmountJson;\n wireInfoHash: string;\n denomKeyType: DenomKeyType;\n denomPubHash: string;\n denomSig: UnblindedSignature;\n\n requiredMinimumAge?: number;\n\n ageCommitmentProof?: AgeCommitmentProof;\n}\n\nexport interface ExchangesListResponse {\n exchanges: ExchangeListItem[];\n}\n\nexport interface ExchangeDetailedResponse {\n exchange: ExchangeFullDetails;\n}\n\nexport interface WalletCoreVersion {\n hash: string | undefined;\n version: string;\n exchange: string;\n merchant: string;\n bank: string;\n devMode: boolean;\n}\n\nexport interface KnownBankAccountsInfo {\n uri: PaytoUri;\n kyc_completed: boolean;\n currency: string;\n alias: string;\n}\n\nexport interface KnownBankAccounts {\n accounts: KnownBankAccountsInfo[];\n}\n\nexport interface ExchangeTosStatusDetails {\n acceptedVersion?: string;\n currentVersion?: string;\n contentType?: string;\n content?: string;\n}\n\n/**\n * Wire fee for one wire method\n */\nexport interface WireFee {\n /**\n * Fee for wire transfers.\n */\n wireFee: AmountString;\n\n /**\n * Fees to close and refund a reserve.\n */\n closingFee: AmountString;\n\n /**\n * Start date of the fee.\n */\n startStamp: TalerProtocolTimestamp;\n\n /**\n * End date of the fee.\n */\n endStamp: TalerProtocolTimestamp;\n\n /**\n * Signature made by the exchange master key.\n */\n sig: string;\n}\n\n/**\n * Information about one of the exchange's bank accounts.\n */\nexport interface ExchangeAccount {\n payto_uri: string;\n master_sig: string;\n}\n\nexport type WireFeeMap = { [wireMethod: string]: WireFee[] };\n\nexport interface WireInfo {\n feesForType: WireFeeMap;\n accounts: ExchangeAccount[];\n}\n\nexport interface ExchangeGlobalFees {\n startDate: TalerProtocolTimestamp;\n endDate: TalerProtocolTimestamp;\n\n historyFee: AmountString;\n accountFee: AmountString;\n purseFee: AmountString;\n\n historyTimeout: TalerProtocolDuration;\n purseTimeout: TalerProtocolDuration;\n\n purseLimit: number;\n\n signature: string;\n}\n\nconst codecForExchangeAccount = (): Codec<ExchangeAccount> =>\n buildCodecForObject<ExchangeAccount>()\n .property(\"payto_uri\", codecForString())\n .property(\"master_sig\", codecForString())\n .build(\"codecForExchangeAccount\");\n\nconst codecForWireFee = (): Codec<WireFee> =>\n buildCodecForObject<WireFee>()\n .property(\"sig\", codecForString())\n .property(\"wireFee\", codecForAmountString())\n .property(\"closingFee\", codecForAmountString())\n .property(\"startStamp\", codecForTimestamp)\n .property(\"endStamp\", codecForTimestamp)\n .build(\"codecForWireFee\");\n\nconst codecForWireInfo = (): Codec<WireInfo> =>\n buildCodecForObject<WireInfo>()\n .property(\"feesForType\", codecForMap(codecForList(codecForWireFee())))\n .property(\"accounts\", codecForList(codecForExchangeAccount()))\n .build(\"codecForWireInfo\");\n\nexport interface DenominationInfo {\n /**\n * Value of one coin of the denomination.\n */\n value: AmountString;\n\n /**\n * Hash of the denomination public key.\n * Stored in the database for faster lookups.\n */\n denomPubHash: string;\n\n denomPub: DenominationPubKey;\n\n /**\n * Fee for withdrawing.\n */\n feeWithdraw: AmountString;\n\n /**\n * Fee for depositing.\n */\n feeDeposit: AmountString;\n\n /**\n * Fee for refreshing.\n */\n feeRefresh: AmountString;\n\n /**\n * Fee for refunding.\n */\n feeRefund: AmountString;\n\n /**\n * Validity start date of the denomination.\n */\n stampStart: TalerProtocolTimestamp;\n\n /**\n * Date after which the currency can't be withdrawn anymore.\n */\n stampExpireWithdraw: TalerProtocolTimestamp;\n\n /**\n * Date after the denomination officially doesn't exist anymore.\n */\n stampExpireLegal: TalerProtocolTimestamp;\n\n /**\n * Data after which coins of this denomination can't be deposited anymore.\n */\n stampExpireDeposit: TalerProtocolTimestamp;\n\n exchangeBaseUrl: string;\n}\n\nexport type DenomOperation = \"deposit\" | \"withdraw\" | \"refresh\" | \"refund\";\nexport type DenomOperationMap<T> = { [op in DenomOperation]: T };\n\nexport interface FeeDescription {\n group: string;\n from: AbsoluteTime;\n until: AbsoluteTime;\n fee?: AmountString;\n}\n\nexport interface FeeDescriptionPair {\n group: string;\n from: AbsoluteTime;\n until: AbsoluteTime;\n left?: AmountString;\n right?: AmountString;\n}\n\nexport interface TimePoint<T> {\n id: string;\n group: string;\n fee: AmountString;\n type: \"start\" | \"end\";\n moment: AbsoluteTime;\n denom: T;\n}\n\nexport interface ExchangeFullDetails {\n exchangeBaseUrl: string;\n currency: string;\n paytoUris: string[];\n tos: ExchangeTosStatusDetails;\n auditors: ExchangeAuditor[];\n wireInfo: WireInfo;\n denomFees: DenomOperationMap<FeeDescription[]>;\n transferFees: Record<string, FeeDescription[]>;\n globalFees: FeeDescription[];\n}\n\nexport enum ExchangeTosStatus {\n New = \"new\",\n Accepted = \"accepted\",\n Changed = \"changed\",\n NotFound = \"not-found\",\n Unknown = \"unknown\",\n}\n\nexport enum ExchangeEntryStatus {\n Unknown = \"unknown\",\n Outdated = \"outdated\",\n Ok = \"ok\",\n}\n\nexport interface OperationErrorInfo {\n error: TalerErrorDetail;\n}\n\n// FIXME: This should probably include some error status.\nexport interface ExchangeListItem {\n exchangeBaseUrl: string;\n currency: string | undefined;\n paytoUris: string[];\n tosStatus: ExchangeTosStatus;\n exchangeStatus: ExchangeEntryStatus;\n ageRestrictionOptions: number[];\n /**\n * Permanently added to the wallet, as opposed to just\n * temporarily queried.\n */\n permanent: boolean;\n\n /**\n * Information about the last error that occurred when trying\n * to update the exchange info.\n */\n lastUpdateErrorInfo?: OperationErrorInfo;\n}\n\nconst codecForAuditorDenomSig = (): Codec<AuditorDenomSig> =>\n buildCodecForObject<AuditorDenomSig>()\n .property(\"denom_pub_h\", codecForString())\n .property(\"auditor_sig\", codecForString())\n .build(\"AuditorDenomSig\");\n\nconst codecForExchangeAuditor = (): Codec<ExchangeAuditor> =>\n buildCodecForObject<ExchangeAuditor>()\n .property(\"auditor_pub\", codecForString())\n .property(\"auditor_url\", codecForString())\n .property(\"denomination_keys\", codecForList(codecForAuditorDenomSig()))\n .build(\"codecForExchangeAuditor\");\n\nconst codecForExchangeTos = (): Codec<ExchangeTosStatusDetails> =>\n buildCodecForObject<ExchangeTosStatusDetails>()\n .property(\"acceptedVersion\", codecOptional(codecForString()))\n .property(\"currentVersion\", codecOptional(codecForString()))\n .property(\"contentType\", codecOptional(codecForString()))\n .property(\"content\", codecOptional(codecForString()))\n .build(\"ExchangeTos\");\n\nexport const codecForFeeDescriptionPair = (): Codec<FeeDescriptionPair> =>\n buildCodecForObject<FeeDescriptionPair>()\n .property(\"group\", codecForString())\n .property(\"from\", codecForAbsoluteTime)\n .property(\"until\", codecForAbsoluteTime)\n .property(\"left\", codecOptional(codecForAmountString()))\n .property(\"right\", codecOptional(codecForAmountString()))\n .build(\"FeeDescriptionPair\");\n\nexport const codecForFeeDescription = (): Codec<FeeDescription> =>\n buildCodecForObject<FeeDescription>()\n .property(\"group\", codecForString())\n .property(\"from\", codecForAbsoluteTime)\n .property(\"until\", codecForAbsoluteTime)\n .property(\"fee\", codecOptional(codecForAmountString()))\n .build(\"FeeDescription\");\n\nexport const codecForFeesByOperations = (): Codec<\n DenomOperationMap<FeeDescription[]>\n> =>\n buildCodecForObject<DenomOperationMap<FeeDescription[]>>()\n .property(\"deposit\", codecForList(codecForFeeDescription()))\n .property(\"withdraw\", codecForList(codecForFeeDescription()))\n .property(\"refresh\", codecForList(codecForFeeDescription()))\n .property(\"refund\", codecForList(codecForFeeDescription()))\n .build(\"DenomOperationMap\");\n\nexport const codecForExchangeFullDetails = (): Codec<ExchangeFullDetails> =>\n buildCodecForObject<ExchangeFullDetails>()\n .property(\"currency\", codecForString())\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"paytoUris\", codecForList(codecForString()))\n .property(\"tos\", codecForExchangeTos())\n .property(\"auditors\", codecForList(codecForExchangeAuditor()))\n .property(\"wireInfo\", codecForWireInfo())\n .property(\"denomFees\", codecForFeesByOperations())\n .property(\n \"transferFees\",\n codecForMap(codecForList(codecForFeeDescription())),\n )\n .property(\"globalFees\", codecForList(codecForFeeDescription()))\n .build(\"ExchangeFullDetails\");\n\nexport const codecForExchangeListItem = (): Codec<ExchangeListItem> =>\n buildCodecForObject<ExchangeListItem>()\n .property(\"currency\", codecForString())\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"paytoUris\", codecForList(codecForString()))\n .property(\"tosStatus\", codecForAny())\n .property(\"exchangeStatus\", codecForAny())\n .property(\"permanent\", codecForBoolean())\n .property(\"ageRestrictionOptions\", codecForList(codecForNumber()))\n .build(\"ExchangeListItem\");\n\nexport const codecForExchangesListResponse = (): Codec<ExchangesListResponse> =>\n buildCodecForObject<ExchangesListResponse>()\n .property(\"exchanges\", codecForList(codecForExchangeListItem()))\n .build(\"ExchangesListResponse\");\n\nexport interface AcceptManualWithdrawalResult {\n /**\n * Payto URIs that can be used to fund the withdrawal.\n */\n exchangePaytoUris: string[];\n\n /**\n * Public key of the newly created reserve.\n */\n reservePub: string;\n\n transactionId: string;\n}\n\nexport interface ManualWithdrawalDetails {\n /**\n * Did the user accept the current version of the exchange's\n * terms of service?\n */\n tosAccepted: boolean;\n\n /**\n * Amount that the user will transfer to the exchange.\n */\n amountRaw: AmountString;\n\n /**\n * Amount that will be added to the user's wallet balance.\n */\n amountEffective: AmountString;\n\n /**\n * Ways to pay the exchange.\n */\n paytoUris: string[];\n\n /**\n * If the exchange supports age-restricted coins it will return\n * the array of ages.\n */\n ageRestrictionOptions?: number[];\n}\n\n/**\n * Selected denominations withn some extra info.\n */\nexport interface DenomSelectionState {\n totalCoinValue: AmountString;\n totalWithdrawCost: AmountString;\n selectedDenoms: {\n denomPubHash: string;\n count: number;\n }[];\n}\n\n/**\n * Information about what will happen doing a withdrawal.\n *\n * Sent to the wallet frontend to be rendered and shown to the user.\n */\nexport interface ExchangeWithdrawalDetails {\n exchangePaytoUris: string[];\n\n /**\n * Filtered wire info to send to the bank.\n */\n exchangeWireAccounts: string[];\n\n /**\n * Selected denominations for withdraw.\n */\n selectedDenoms: DenomSelectionState;\n\n /**\n * Does the wallet know about an auditor for\n * the exchange that the reserve.\n */\n isAudited: boolean;\n\n /**\n * Did the user already accept the current terms of service for the exchange?\n */\n termsOfServiceAccepted: boolean;\n\n /**\n * The exchange is trusted directly.\n */\n isTrusted: boolean;\n\n /**\n * The earliest deposit expiration of the selected coins.\n */\n earliestDepositExpiration: TalerProtocolTimestamp;\n\n /**\n * Number of currently offered denominations.\n */\n numOfferedDenoms: number;\n\n /**\n * Public keys of trusted auditors for the currency we're withdrawing.\n */\n trustedAuditorPubs: string[];\n\n /**\n * Result of checking the wallet's version\n * against the exchange's version.\n *\n * Older exchanges don't return version information.\n */\n versionMatch: VersionMatchResult | undefined;\n\n /**\n * Libtool-style version string for the exchange or \"unknown\"\n * for older exchanges.\n */\n exchangeVersion: string;\n\n /**\n * Libtool-style version string for the wallet.\n */\n walletVersion: string;\n\n /**\n * Amount that will be subtracted from the reserve's balance.\n */\n withdrawalAmountRaw: AmountString;\n\n /**\n * Amount that will actually be added to the wallet's balance.\n */\n withdrawalAmountEffective: AmountString;\n\n /**\n * If the exchange supports age-restricted coins it will return\n * the array of ages.\n *\n */\n ageRestrictionOptions?: number[];\n}\n\nexport interface GetExchangeTosResult {\n /**\n * Markdown version of the current ToS.\n */\n content: string;\n\n /**\n * Version tag of the current ToS.\n */\n currentEtag: string;\n\n /**\n * Version tag of the last ToS that the user has accepted,\n * if any.\n */\n acceptedEtag: string | undefined;\n\n /**\n * Accepted content type\n */\n contentType: string;\n\n tosStatus: ExchangeTosStatus;\n}\n\nexport interface TestPayArgs {\n merchantBaseUrl: string;\n merchantAuthToken?: string;\n amount: string;\n summary: string;\n forcedCoinSel?: ForcedCoinSel;\n}\n\nexport const codecForTestPayArgs = (): Codec<TestPayArgs> =>\n buildCodecForObject<TestPayArgs>()\n .property(\"merchantBaseUrl\", codecForString())\n .property(\"merchantAuthToken\", codecOptional(codecForString()))\n .property(\"amount\", codecForString())\n .property(\"summary\", codecForString())\n .property(\"forcedCoinSel\", codecForAny())\n .build(\"TestPayArgs\");\n\nexport interface IntegrationTestArgs {\n exchangeBaseUrl: string;\n bankBaseUrl: string;\n bankAccessApiBaseUrl?: string;\n merchantBaseUrl: string;\n merchantAuthToken?: string;\n amountToWithdraw: string;\n amountToSpend: string;\n}\n\nexport const codecForIntegrationTestArgs = (): Codec<IntegrationTestArgs> =>\n buildCodecForObject<IntegrationTestArgs>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"bankBaseUrl\", codecForString())\n .property(\"merchantBaseUrl\", codecForString())\n .property(\"merchantAuthToken\", codecOptional(codecForString()))\n .property(\"amountToSpend\", codecForAmountString())\n .property(\"amountToWithdraw\", codecForAmountString())\n .property(\"bankAccessApiBaseUrl\", codecOptional(codecForAmountString()))\n .build(\"IntegrationTestArgs\");\n\nexport interface AddExchangeRequest {\n exchangeBaseUrl: string;\n forceUpdate?: boolean;\n}\n\nexport const codecForAddExchangeRequest = (): Codec<AddExchangeRequest> =>\n buildCodecForObject<AddExchangeRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"forceUpdate\", codecOptional(codecForBoolean()))\n .build(\"AddExchangeRequest\");\n\nexport interface ForceExchangeUpdateRequest {\n exchangeBaseUrl: string;\n}\n\nexport const codecForForceExchangeUpdateRequest =\n (): Codec<AddExchangeRequest> =>\n buildCodecForObject<AddExchangeRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .build(\"AddExchangeRequest\");\n\nexport interface GetExchangeTosRequest {\n exchangeBaseUrl: string;\n acceptedFormat?: string[];\n}\n\nexport const codecForGetExchangeTosRequest = (): Codec<GetExchangeTosRequest> =>\n buildCodecForObject<GetExchangeTosRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"acceptedFormat\", codecOptional(codecForList(codecForString())))\n .build(\"GetExchangeTosRequest\");\n\nexport interface AcceptManualWithdrawalRequest {\n exchangeBaseUrl: string;\n amount: string;\n restrictAge?: number;\n}\n\nexport const codecForAcceptManualWithdrawalRequet =\n (): Codec<AcceptManualWithdrawalRequest> =>\n buildCodecForObject<AcceptManualWithdrawalRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"amount\", codecForString())\n .property(\"restrictAge\", codecOptional(codecForNumber()))\n .build(\"AcceptManualWithdrawalRequest\");\n\nexport interface GetWithdrawalDetailsForAmountRequest {\n exchangeBaseUrl: string;\n amount: string;\n restrictAge?: number;\n}\n\nexport interface AcceptBankIntegratedWithdrawalRequest {\n talerWithdrawUri: string;\n exchangeBaseUrl: string;\n forcedDenomSel?: ForcedDenomSel;\n restrictAge?: number;\n}\n\nexport const codecForAcceptBankIntegratedWithdrawalRequest =\n (): Codec<AcceptBankIntegratedWithdrawalRequest> =>\n buildCodecForObject<AcceptBankIntegratedWithdrawalRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"talerWithdrawUri\", codecForString())\n .property(\"forcedDenomSel\", codecForAny())\n .property(\"restrictAge\", codecOptional(codecForNumber()))\n .build(\"AcceptBankIntegratedWithdrawalRequest\");\n\nexport const codecForGetWithdrawalDetailsForAmountRequest =\n (): Codec<GetWithdrawalDetailsForAmountRequest> =>\n buildCodecForObject<GetWithdrawalDetailsForAmountRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"amount\", codecForString())\n .property(\"restrictAge\", codecOptional(codecForNumber()))\n .build(\"GetWithdrawalDetailsForAmountRequest\");\n\nexport interface AcceptExchangeTosRequest {\n exchangeBaseUrl: string;\n etag: string | undefined;\n}\n\nexport const codecForAcceptExchangeTosRequest =\n (): Codec<AcceptExchangeTosRequest> =>\n buildCodecForObject<AcceptExchangeTosRequest>()\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"etag\", codecOptional(codecForString()))\n .build(\"AcceptExchangeTosRequest\");\n\nexport interface ApplyRefundRequest {\n talerRefundUri: string;\n}\n\nexport const codecForApplyRefundRequest = (): Codec<ApplyRefundRequest> =>\n buildCodecForObject<ApplyRefundRequest>()\n .property(\"talerRefundUri\", codecForString())\n .build(\"ApplyRefundRequest\");\n\nexport interface ApplyRefundFromPurchaseIdRequest {\n purchaseId: string;\n}\n\nexport const codecForApplyRefundFromPurchaseIdRequest =\n (): Codec<ApplyRefundFromPurchaseIdRequest> =>\n buildCodecForObject<ApplyRefundFromPurchaseIdRequest>()\n .property(\"purchaseId\", codecForString())\n .build(\"ApplyRefundFromPurchaseIdRequest\");\n\nexport interface GetWithdrawalDetailsForUriRequest {\n talerWithdrawUri: string;\n restrictAge?: number;\n}\n\nexport const codecForGetWithdrawalDetailsForUri =\n (): Codec<GetWithdrawalDetailsForUriRequest> =>\n buildCodecForObject<GetWithdrawalDetailsForUriRequest>()\n .property(\"talerWithdrawUri\", codecForString())\n .property(\"restrictAge\", codecOptional(codecForNumber()))\n .build(\"GetWithdrawalDetailsForUriRequest\");\n\nexport interface ListKnownBankAccountsRequest {\n currency?: string;\n}\n\nexport const codecForListKnownBankAccounts =\n (): Codec<ListKnownBankAccountsRequest> =>\n buildCodecForObject<ListKnownBankAccountsRequest>()\n .property(\"currency\", codecOptional(codecForString()))\n .build(\"ListKnownBankAccountsRequest\");\n\nexport interface AddKnownBankAccountsRequest {\n payto: string;\n alias: string;\n currency: string;\n}\nexport const codecForAddKnownBankAccounts =\n (): Codec<AddKnownBankAccountsRequest> =>\n buildCodecForObject<AddKnownBankAccountsRequest>()\n .property(\"payto\", codecForString())\n .property(\"alias\", codecForString())\n .property(\"currency\", codecForString())\n .build(\"AddKnownBankAccountsRequest\");\n\nexport interface ForgetKnownBankAccountsRequest {\n payto: string;\n}\n\nexport const codecForForgetKnownBankAccounts =\n (): Codec<ForgetKnownBankAccountsRequest> =>\n buildCodecForObject<ForgetKnownBankAccountsRequest>()\n .property(\"payto\", codecForString())\n .build(\"ForgetKnownBankAccountsRequest\");\n\nexport interface AbortProposalRequest {\n proposalId: string;\n}\n\nexport const codecForAbortProposalRequest = (): Codec<AbortProposalRequest> =>\n buildCodecForObject<AbortProposalRequest>()\n .property(\"proposalId\", codecForString())\n .build(\"AbortProposalRequest\");\n\nexport interface GetContractTermsDetailsRequest {\n proposalId: string;\n}\n\nexport const codecForGetContractTermsDetails =\n (): Codec<GetContractTermsDetailsRequest> =>\n buildCodecForObject<GetContractTermsDetailsRequest>()\n .property(\"proposalId\", codecForString())\n .build(\"GetContractTermsDetails\");\n\nexport interface PreparePayRequest {\n talerPayUri: string;\n}\n\nexport const codecForPreparePayRequest = (): Codec<PreparePayRequest> =>\n buildCodecForObject<PreparePayRequest>()\n .property(\"talerPayUri\", codecForString())\n .build(\"PreparePay\");\n\nexport interface PreparePayTemplateRequest {\n talerPayTemplateUri: string;\n templateParams: Record<string, string>;\n}\n\nexport const codecForPreparePayTemplateRequest =\n (): Codec<PreparePayTemplateRequest> =>\n buildCodecForObject<PreparePayTemplateRequest>()\n .property(\"talerPayTemplateUri\", codecForString())\n .property(\"templateParams\", codecForAny())\n .build(\"PreparePayTemplate\");\n\nexport interface ConfirmPayRequest {\n proposalId: string;\n sessionId?: string;\n forcedCoinSel?: ForcedCoinSel;\n}\n\nexport const codecForConfirmPayRequest = (): Codec<ConfirmPayRequest> =>\n buildCodecForObject<ConfirmPayRequest>()\n .property(\"proposalId\", codecForString())\n .property(\"sessionId\", codecOptional(codecForString()))\n .property(\"forcedCoinSel\", codecForAny())\n .build(\"ConfirmPay\");\n\nexport interface CoreApiRequestEnvelope {\n id: string;\n operation: string;\n args: unknown;\n}\nexport type CoreApiResponse = CoreApiResponseSuccess | CoreApiResponseError;\n\nexport type CoreApiMessageEnvelope = CoreApiResponse | CoreApiNotification;\n\nexport interface CoreApiNotification {\n type: \"notification\";\n payload: unknown;\n}\n\nexport interface CoreApiResponseSuccess {\n // To distinguish the message from notifications\n type: \"response\";\n operation: string;\n id: string;\n result: unknown;\n}\n\nexport interface CoreApiResponseError {\n // To distinguish the message from notifications\n type: \"error\";\n operation: string;\n id: string;\n error: TalerErrorDetail;\n}\n\nexport interface WithdrawTestBalanceRequest {\n amount: string;\n bankBaseUrl: string;\n /**\n * Bank access API base URL. Defaults to the bankBaseUrl.\n */\n bankAccessApiBaseUrl?: string;\n exchangeBaseUrl: string;\n forcedDenomSel?: ForcedDenomSel;\n}\n\nexport const withdrawTestBalanceDefaults = {\n amount: \"TESTKUDOS:10\",\n bankBaseUrl: \"https://bank.test.taler.net/\",\n exchangeBaseUrl: \"https://exchange.test.taler.net/\",\n};\n\n/**\n * Request to the crypto worker to make a sync signature.\n */\nexport interface MakeSyncSignatureRequest {\n accountPriv: string;\n oldHash: string | undefined;\n newHash: string;\n}\n\n/**\n * Planchet for a coin during refresh.\n */\nexport interface RefreshPlanchetInfo {\n /**\n * Public key for the coin.\n */\n coinPub: string;\n\n /**\n * Private key for the coin.\n */\n coinPriv: string;\n\n /**\n * Blinded public key.\n */\n coinEv: CoinEnvelope;\n\n coinEvHash: string;\n\n /**\n * Blinding key used.\n */\n blindingKey: string;\n\n maxAge: number;\n ageCommitmentProof?: AgeCommitmentProof;\n}\n\n/**\n * Strategy for loading recovery information.\n */\nexport enum RecoveryMergeStrategy {\n /**\n * Keep the local wallet root key, import and take over providers.\n */\n Ours = \"ours\",\n\n /**\n * Migrate to the wallet root key from the recovery information.\n */\n Theirs = \"theirs\",\n}\n\n/**\n * Load recovery information into the wallet.\n */\nexport interface RecoveryLoadRequest {\n recovery: BackupRecovery;\n strategy?: RecoveryMergeStrategy;\n}\n\nexport const codecForWithdrawTestBalance =\n (): Codec<WithdrawTestBalanceRequest> =>\n buildCodecForObject<WithdrawTestBalanceRequest>()\n .property(\"amount\", codecForString())\n .property(\"bankBaseUrl\", codecForString())\n .property(\"exchangeBaseUrl\", codecForString())\n .property(\"forcedDenomSel\", codecForAny())\n .property(\"bankAccessApiBaseUrl\", codecOptional(codecForString()))\n .build(\"WithdrawTestBalanceRequest\");\n\nexport interface ApplyRefundResponse {\n contractTermsHash: string;\n\n transactionId: string;\n\n proposalId: string;\n\n amountEffectivePaid: AmountString;\n\n amountRefundGranted: AmountString;\n\n amountRefundGone: AmountString;\n\n pendingAtExchange: boolean;\n\n info: OrderShortInfo;\n}\n\nexport const codecForApplyRefundResponse = (): Codec<ApplyRefundResponse> =>\n buildCodecForObject<ApplyRefundResponse>()\n .property(\"amountEffectivePaid\", codecForAmountString())\n .property(\"amountRefundGone\", codecForAmountString())\n .property(\"amountRefundGranted\", codecForAmountString())\n .property(\"contractTermsHash\", codecForString())\n .property(\"pendingAtExchange\", codecForBoolean())\n .property(\"proposalId\", codecForString())\n .property(\"transactionId\", codecForString())\n .property(\"info\", codecForOrderShortInfo())\n .build(\"ApplyRefundResponse\");\n\nexport interface SetCoinSuspendedRequest {\n coinPub: string;\n suspended: boolean;\n}\n\nexport const codecForSetCoinSuspendedRequest =\n (): Codec<SetCoinSuspendedRequest> =>\n buildCodecForObject<SetCoinSuspendedRequest>()\n .property(\"coinPub\", codecForString())\n .property(\"suspended\", codecForBoolean())\n .build(\"SetCoinSuspendedRequest\");\n\nexport interface ForceRefreshRequest {\n coinPubList: string[];\n}\n\nexport const codecForForceRefreshRequest = (): Codec<ForceRefreshRequest> =>\n buildCodecForObject<ForceRefreshRequest>()\n .property(\"coinPubList\", codecForList(codecForString()))\n .build(\"ForceRefreshRequest\");\n\nexport interface PrepareRefundRequest {\n talerRefundUri: string;\n}\n\nexport const codecForPrepareRefundRequest = (): Codec<PrepareRefundRequest> =>\n buildCodecForObject<PrepareRefundRequest>()\n .property(\"talerRefundUri\", codecForString())\n .build(\"PrepareRefundRequest\");\n\nexport interface PrepareTipRequest {\n talerTipUri: string;\n}\n\nexport const codecForPrepareTipRequest = (): Codec<PrepareTipRequest> =>\n buildCodecForObject<PrepareTipRequest>()\n .property(\"talerTipUri\", codecForString())\n .build(\"PrepareTipRequest\");\n\nexport interface AcceptTipRequest {\n walletTipId: string;\n}\n\nexport const codecForAcceptTipRequest = (): Codec<AcceptTipRequest> =>\n buildCodecForObject<AcceptTipRequest>()\n .property(\"walletTipId\", codecForString())\n .build(\"AcceptTipRequest\");\n\nexport interface SuspendTransactionRequest {\n transactionId: string;\n}\n\nexport const codecForSuspendTransaction =\n (): Codec<SuspendTransactionRequest> =>\n buildCodecForObject<AbortTransactionRequest>()\n .property(\"transactionId\", codecForString())\n .build(\"SuspendTransactionRequest\");\n\nexport interface ResumeTransactionRequest {\n transactionId: string;\n}\n\nexport const codecForResumeTransaction =\n (): Codec<ResumeTransactionRequest> =>\n buildCodecForObject<ResumeTransactionRequest>()\n .property(\"transactionId\", codecForString())\n .build(\"ResumeTransactionRequest\");\n\nexport interface AbortTransactionRequest {\n transactionId: string;\n\n /**\n * Move the payment immediately into an aborted state.\n * The UI should warn the user that this might lead\n * to money being lost.\n *\n * Defaults to false.\n */\n forceImmediateAbort?: boolean;\n}\n\nexport const codecForAbortTransaction = (): Codec<AbortTransactionRequest> =>\n buildCodecForObject<AbortTransactionRequest>()\n .property(\"transactionId\", codecForString())\n .property(\"forceImmediateAbort\", codecOptional(codecForBoolean()))\n .build(\"AbortTransactionRequest\");\n\nexport interface GetFeeForDepositRequest {\n depositPaytoUri: string;\n amount: AmountString;\n}\n\nexport interface DepositGroupFees {\n coin: AmountString;\n wire: AmountString;\n refresh: AmountString;\n}\n\nexport interface CreateDepositGroupRequest {\n depositPaytoUri: string;\n amount: AmountString;\n}\n\nexport const codecForGetFeeForDeposit = (): Codec<GetFeeForDepositRequest> =>\n buildCodecForObject<GetFeeForDepositRequest>()\n .property(\"amount\", codecForAmountString())\n .property(\"depositPaytoUri\", codecForString())\n .build(\"GetFeeForDepositRequest\");\n\nexport interface PrepareDepositRequest {\n depositPaytoUri: string;\n amount: AmountString;\n}\nexport const codecForPrepareDepositRequest = (): Codec<PrepareDepositRequest> =>\n buildCodecForObject<PrepareDepositRequest>()\n .property(\"amount\", codecForAmountString())\n .property(\"depositPaytoUri\", codecForString())\n .build(\"PrepareDepositRequest\");\n\nexport interface PrepareDepositResponse {\n totalDepositCost: AmountString;\n effectiveDepositAmount: AmountString;\n}\n\nexport const codecForCreateDepositGroupRequest =\n (): Codec<CreateDepositGroupRequest> =>\n buildCodecForObject<CreateDepositGroupRequest>()\n .property(\"amount\", codecForAmountString())\n .property(\"depositPaytoUri\", codecForString())\n .build(\"CreateDepositGroupRequest\");\n\nexport interface CreateDepositGroupResponse {\n depositGroupId: string;\n transactionId: string;\n}\n\nexport interface TrackDepositGroupRequest {\n depositGroupId: string;\n}\n\nexport interface TrackDepositGroupResponse {\n responses: TrackTransaction[];\n}\n\nexport const codecForTrackDepositGroupRequest =\n (): Codec<TrackDepositGroupRequest> =>\n buildCodecForObject<TrackDepositGroupRequest>()\n .property(\"depositGroupId\", codecForAmountString())\n .build(\"TrackDepositGroupRequest\");\n\nexport interface WithdrawUriInfoResponse {\n amount: AmountString;\n defaultExchangeBaseUrl?: string;\n possibleExchanges: ExchangeListItem[];\n}\n\nexport const codecForWithdrawUriInfoResponse =\n (): Codec<WithdrawUriInfoResponse> =>\n buildCodecForObject<WithdrawUriInfoResponse>()\n .property(\"amount\", codecForAmountString())\n .property(\"defaultExchangeBaseUrl\", codecOptional(codecForString()))\n .property(\"possibleExchanges\", codecForList(codecForExchangeListItem()))\n .build(\"WithdrawUriInfoResponse\");\n\nexport interface WalletCurrencyInfo {\n trustedAuditors: {\n currency: string;\n auditorPub: string;\n auditorBaseUrl: string;\n }[];\n trustedExchanges: {\n currency: string;\n exchangeMasterPub: string;\n exchangeBaseUrl: string;\n }[];\n}\n\nexport interface DeleteTransactionRequest {\n transactionId: string;\n}\n\nexport interface RetryTransactionRequest {\n transactionId: string;\n}\n\nexport const codecForDeleteTransactionRequest =\n (): Codec<DeleteTransactionRequest> =>\n buildCodecForObject<DeleteTransactionRequest>()\n .property(\"transactionId\", codecForString())\n .build(\"DeleteTransactionRequest\");\n\nexport const codecForRetryTransactionRequest =\n (): Codec<RetryTransactionRequest> =>\n buildCodecForObject<RetryTransactionRequest>()\n .property(\"transactionId\", codecForString())\n .build(\"RetryTransactionRequest\");\n\nexport interface SetWalletDeviceIdRequest {\n /**\n * New wallet device ID to set.\n */\n walletDeviceId: string;\n}\n\nexport const codecForSetWalletDeviceIdRequest =\n (): Codec<SetWalletDeviceIdRequest> =>\n buildCodecForObject<SetWalletDeviceIdRequest>()\n .property(\"walletDeviceId\", codecForString())\n .build(\"SetWalletDeviceIdRequest\");\n\nexport interface WithdrawFakebankRequest {\n amount: AmountString;\n exchange: string;\n bank: string;\n}\n\nexport enum AttentionPriority {\n High = \"high\",\n Medium = \"medium\",\n Low = \"low\",\n}\n\nexport interface UserAttentionByIdRequest {\n entityId: string;\n type: AttentionType;\n}\n\nexport const codecForUserAttentionByIdRequest =\n (): Codec<UserAttentionByIdRequest> =>\n buildCodecForObject<UserAttentionByIdRequest>()\n .property(\"type\", codecForAny())\n .property(\"entityId\", codecForString())\n .build(\"UserAttentionByIdRequest\");\n\nexport const codecForUserAttentionsRequest = (): Codec<UserAttentionsRequest> =>\n buildCodecForObject<UserAttentionsRequest>()\n .property(\n \"priority\",\n codecOptional(\n codecForEither(\n codecForConstString(AttentionPriority.Low),\n codecForConstString(AttentionPriority.Medium),\n codecForConstString(AttentionPriority.High),\n ),\n ),\n )\n .build(\"UserAttentionsRequest\");\n\nexport interface UserAttentionsRequest {\n priority?: AttentionPriority;\n}\n\nexport type AttentionInfo =\n | AttentionKycWithdrawal\n | AttentionBackupUnpaid\n | AttentionBackupExpiresSoon\n | AttentionMerchantRefund\n | AttentionExchangeTosChanged\n | AttentionExchangeKeyExpired\n | AttentionExchangeDenominationExpired\n | AttentionAuditorTosChanged\n | AttentionAuditorKeyExpires\n | AttentionAuditorDenominationExpires\n | AttentionPullPaymentPaid\n | AttentionPushPaymentReceived;\n\nexport enum AttentionType {\n KycWithdrawal = \"kyc-withdrawal\",\n\n BackupUnpaid = \"backup-unpaid\",\n BackupExpiresSoon = \"backup-expires-soon\",\n MerchantRefund = \"merchant-refund\",\n\n ExchangeTosChanged = \"exchange-tos-changed\",\n ExchangeKeyExpired = \"exchange-key-expired\",\n ExchangeKeyExpiresSoon = \"exchange-key-expires-soon\",\n ExchangeDenominationsExpired = \"exchange-denominations-expired\",\n ExchangeDenominationsExpiresSoon = \"exchange-denominations-expires-soon\",\n\n AuditorTosChanged = \"auditor-tos-changed\",\n AuditorKeyExpires = \"auditor-key-expires\",\n AuditorDenominationsExpires = \"auditor-denominations-expires\",\n\n PullPaymentPaid = \"pull-payment-paid\",\n PushPaymentReceived = \"push-payment-withdrawn\",\n}\n\nexport const UserAttentionPriority: {\n [type in AttentionType]: AttentionPriority;\n} = {\n \"kyc-withdrawal\": AttentionPriority.Medium,\n\n \"backup-unpaid\": AttentionPriority.High,\n \"backup-expires-soon\": AttentionPriority.Medium,\n \"merchant-refund\": AttentionPriority.Medium,\n\n \"exchange-tos-changed\": AttentionPriority.Medium,\n\n \"exchange-key-expired\": AttentionPriority.High,\n \"exchange-key-expires-soon\": AttentionPriority.Medium,\n \"exchange-denominations-expired\": AttentionPriority.High,\n \"exchange-denominations-expires-soon\": AttentionPriority.Medium,\n\n \"auditor-tos-changed\": AttentionPriority.Medium,\n \"auditor-key-expires\": AttentionPriority.Medium,\n \"auditor-denominations-expires\": AttentionPriority.Medium,\n\n \"pull-payment-paid\": AttentionPriority.High,\n \"push-payment-withdrawn\": AttentionPriority.High,\n};\n\ninterface AttentionBackupExpiresSoon {\n type: AttentionType.BackupExpiresSoon;\n provider_base_url: string;\n}\ninterface AttentionBackupUnpaid {\n type: AttentionType.BackupUnpaid;\n provider_base_url: string;\n talerUri: string;\n}\n\ninterface AttentionMerchantRefund {\n type: AttentionType.MerchantRefund;\n transactionId: string;\n}\n\ninterface AttentionKycWithdrawal {\n type: AttentionType.KycWithdrawal;\n transactionId: string;\n}\n\ninterface AttentionExchangeTosChanged {\n type: AttentionType.ExchangeTosChanged;\n exchange_base_url: string;\n}\ninterface AttentionExchangeKeyExpired {\n type: AttentionType.ExchangeKeyExpired;\n exchange_base_url: string;\n}\ninterface AttentionExchangeDenominationExpired {\n type: AttentionType.ExchangeDenominationsExpired;\n exchange_base_url: string;\n}\ninterface AttentionAuditorTosChanged {\n type: AttentionType.AuditorTosChanged;\n auditor_base_url: string;\n}\n\ninterface AttentionAuditorKeyExpires {\n type: AttentionType.AuditorKeyExpires;\n auditor_base_url: string;\n}\ninterface AttentionAuditorDenominationExpires {\n type: AttentionType.AuditorDenominationsExpires;\n auditor_base_url: string;\n}\ninterface AttentionPullPaymentPaid {\n type: AttentionType.PullPaymentPaid;\n transactionId: string;\n}\n\ninterface AttentionPushPaymentReceived {\n type: AttentionType.PushPaymentReceived;\n transactionId: string;\n}\n\nexport type UserAttentionUnreadList = Array<{\n info: AttentionInfo;\n when: AbsoluteTime;\n read: boolean;\n}>;\n\nexport interface UserAttentionsResponse {\n pending: UserAttentionUnreadList;\n}\n\nexport interface UserAttentionsCountResponse {\n total: number;\n}\n\nexport const codecForWithdrawFakebankRequest =\n (): Codec<WithdrawFakebankRequest> =>\n buildCodecForObject<WithdrawFakebankRequest>()\n .property(\"amount\", codecForAmountString())\n .property(\"bank\", codecForString())\n .property(\"exchange\", codecForString())\n .build(\"WithdrawFakebankRequest\");\n\nexport interface ImportDb {\n dump: any;\n}\n\nexport const codecForImportDbRequest = (): Codec<ImportDb> =>\n buildCodecForObject<ImportDb>()\n .property(\"dump\", codecForAny())\n .build(\"ImportDbRequest\");\n\nexport interface ForcedDenomSel {\n denoms: {\n value: AmountString;\n count: number;\n }[];\n}\n\n/**\n * Forced coin selection for deposits/payments.\n */\nexport interface ForcedCoinSel {\n coins: {\n value: AmountString;\n contribution: AmountString;\n }[];\n}\n\nexport interface TestPayResult {\n payCoinSelection: PayCoinSelection;\n}\n\n/**\n * Result of selecting coins, contains the exchange, and selected\n * coins with their denomination.\n */\nexport interface PayCoinSelection {\n /**\n * Amount requested by the merchant.\n */\n paymentAmount: AmountString;\n\n /**\n * Public keys of the coins that were selected.\n */\n coinPubs: string[];\n\n /**\n * Amount that each coin contributes.\n */\n coinContributions: AmountString[];\n\n /**\n * How much of the wire fees is the customer paying?\n */\n customerWireFees: AmountString;\n\n /**\n * How much of the deposit fees is the customer paying?\n */\n customerDepositFees: AmountString;\n}\n\nexport interface CheckPeerPushDebitRequest {\n /**\n * Preferred exchange to use for the p2p payment.\n */\n exchangeBaseUrl?: string;\n\n /**\n * Instructed amount.\n *\n * FIXME: Allow specifying the instructed amount type.\n */\n amount: AmountString;\n}\n\nexport const codecForCheckPeerPushDebitRequest =\n (): Codec<CheckPeerPushDebitRequest> =>\n buildCodecForObject<CheckPeerPushDebitRequest>()\n .property(\"exchangeBaseUrl\", codecOptional(codecForString()))\n .property(\"amount\", codecForAmountString())\n .build(\"CheckPeerPushDebitRequest\");\n\nexport interface CheckPeerPushDebitResponse {\n amountRaw: AmountString;\n amountEffective: AmountString;\n}\n\nexport interface InitiatePeerPushPaymentRequest {\n exchangeBaseUrl?: string;\n partialContractTerms: PeerContractTerms;\n}\n\nexport interface InitiatePeerPushPaymentResponse {\n exchangeBaseUrl: string;\n pursePub: string;\n mergePriv: string;\n contractPriv: string;\n talerUri: string;\n transactionId: string;\n}\n\nexport const codecForInitiatePeerPushPaymentRequest =\n (): Codec<InitiatePeerPushPaymentRequest> =>\n buildCodecForObject<InitiatePeerPushPaymentRequest>()\n .property(\"partialContractTerms\", codecForPeerContractTerms())\n .build(\"InitiatePeerPushPaymentRequest\");\n\nexport interface PreparePeerPushCredit {\n talerUri: string;\n}\n\nexport interface PreparePeerPullDebitRequest {\n talerUri: string;\n}\n\nexport interface PreparePeerPushCreditResponse {\n contractTerms: PeerContractTerms;\n /**\n * @deprecated\n */\n amount: AmountString;\n amountRaw: AmountString;\n amountEffective: AmountString;\n peerPushPaymentIncomingId: string;\n}\n\nexport interface PreparePeerPullDebitResponse {\n contractTerms: PeerContractTerms;\n /**\n * @deprecated Redundant field with bad name, will be removed soon.\n */\n amount: AmountString;\n\n amountRaw: AmountString;\n amountEffective: AmountString;\n\n peerPullPaymentIncomingId: string;\n}\n\nexport const codecForPreparePeerPushCreditRequest =\n (): Codec<PreparePeerPushCredit> =>\n buildCodecForObject<PreparePeerPushCredit>()\n .property(\"talerUri\", codecForString())\n .build(\"CheckPeerPushPaymentRequest\");\n\nexport const codecForCheckPeerPullPaymentRequest =\n (): Codec<PreparePeerPullDebitRequest> =>\n buildCodecForObject<PreparePeerPullDebitRequest>()\n .property(\"talerUri\", codecForString())\n .build(\"PreparePeerPullDebitRequest\");\n\nexport interface ConfirmPeerPushCreditRequest {\n /**\n * Transparent identifier of the incoming peer push payment.\n */\n peerPushPaymentIncomingId: string;\n}\nexport interface AcceptPeerPushPaymentResponse {\n transactionId: string;\n}\n\nexport interface AcceptPeerPullPaymentResponse {\n transactionId: string;\n}\n\nexport const codecForConfirmPeerPushPaymentRequest =\n (): Codec<ConfirmPeerPushCreditRequest> =>\n buildCodecForObject<ConfirmPeerPushCreditRequest>()\n .property(\"peerPushPaymentIncomingId\", codecForString())\n .build(\"ConfirmPeerPushCreditRequest\");\n\nexport interface ConfirmPeerPullDebitRequest {\n /**\n * Transparent identifier of the incoming peer pull payment.\n */\n peerPullPaymentIncomingId: string;\n}\n\nexport interface SetDevModeRequest {\n devModeEnabled: boolean;\n}\n\nexport const codecForSetDevModeRequest = (): Codec<SetDevModeRequest> =>\n buildCodecForObject<SetDevModeRequest>()\n .property(\"devModeEnabled\", codecForBoolean())\n .build(\"SetDevModeRequest\");\n\nexport interface ApplyDevExperimentRequest {\n devExperimentUri: string;\n}\n\nexport const codecForApplyDevExperiment =\n (): Codec<ApplyDevExperimentRequest> =>\n buildCodecForObject<ApplyDevExperimentRequest>()\n .property(\"devExperimentUri\", codecForString())\n .build(\"ApplyDevExperimentRequest\");\n\nexport const codecForAcceptPeerPullPaymentRequest =\n (): Codec<ConfirmPeerPullDebitRequest> =>\n buildCodecForObject<ConfirmPeerPullDebitRequest>()\n .property(\"peerPullPaymentIncomingId\", codecForString())\n .build(\"ConfirmPeerPullDebitRequest\");\n\nexport interface CheckPeerPullCreditRequest {\n exchangeBaseUrl?: string;\n amount: AmountString;\n}\nexport const codecForPreparePeerPullPaymentRequest =\n (): Codec<CheckPeerPullCreditRequest> =>\n buildCodecForObject<CheckPeerPullCreditRequest>()\n .property(\"amount\", codecForAmountString())\n .property(\"exchangeBaseUrl\", codecOptional(codecForString()))\n .build(\"CheckPeerPullCreditRequest\");\n\nexport interface CheckPeerPullCreditResponse {\n exchangeBaseUrl: string;\n amountRaw: AmountString;\n amountEffective: AmountString;\n}\nexport interface InitiatePeerPullCreditRequest {\n exchangeBaseUrl?: string;\n partialContractTerms: PeerContractTerms;\n}\n\nexport const codecForInitiatePeerPullPaymentRequest =\n (): Codec<InitiatePeerPullCreditRequest> =>\n buildCodecForObject<InitiatePeerPullCreditRequest>()\n .property(\"partialContractTerms\", codecForPeerContractTerms())\n .property(\"exchangeBaseUrl\", codecOptional(codecForString()))\n .build(\"InitiatePeerPullCreditRequest\");\n\nexport interface InitiatePeerPullCreditResponse {\n /**\n * Taler URI for the other party to make the payment\n * that was requested.\n */\n talerUri: string;\n\n transactionId: string;\n}\n\n/**\n * Detailed reason for why the wallet's balance is insufficient.\n */\nexport interface PayPeerInsufficientBalanceDetails {\n /**\n * Amount requested by the merchant.\n */\n amountRequested: AmountString;\n\n /**\n * Balance of type \"available\" (see balance.ts for definition).\n */\n balanceAvailable: AmountString;\n\n /**\n * Balance of type \"material\" (see balance.ts for definition).\n */\n balanceMaterial: AmountString;\n\n perExchange: {\n [url: string]: {\n balanceAvailable: AmountString;\n balanceMaterial: AmountString;\n feeGapEstimate: AmountString;\n };\n };\n}\n", "// @ts-ignore: no type decl for this library\nimport * as jedLib from \"jed\";\nimport { Logger } from \"./logging.js\";\n\nconst logger = new Logger(\"i18n/index.ts\");\n\nexport let jed: any = undefined;\n\n/**\n * Set up jed library for internationalization,\n * based on browser language settings.\n */\nexport function setupI18n(lang: string, strings: { [s: string]: any }): void {\n lang = lang.replace(\"_\", \"-\");\n\n if (!strings[lang]) {\n strings[lang] = {};\n // logger.warn(`language ${lang} not found, defaulting to source strings`);\n }\n jed = new jedLib.Jed(strings[lang]);\n}\n\n/**\n * Use different translations for testing. Should not be used outside\n * of test cases.\n */\nexport function internalSetStrings(langStrings: any): void {\n jed = new jedLib.Jed(langStrings);\n}\n\ndeclare const __translated: unique symbol;\nexport type TranslatedString = string & { [__translated]: true };\n\n/**\n * Convert template strings to a msgid\n */\nfunction toI18nString(stringSeq: ReadonlyArray<string>): TranslatedString {\n let s = \"\";\n for (let i = 0; i < stringSeq.length; i++) {\n s += stringSeq[i];\n if (i < stringSeq.length - 1) {\n s += `%${i + 1}$s`;\n }\n }\n return s as TranslatedString;\n}\n\n/**\n * Internationalize a string template with arbitrary serialized values.\n */\nexport function singular(\n stringSeq: TemplateStringsArray,\n ...values: any[]\n): TranslatedString {\n const s = toI18nString(stringSeq);\n const tr = jed\n .translate(s)\n .ifPlural(1, s)\n .fetch(...values);\n return tr;\n}\n\n/**\n * Internationalize a string template without serializing\n */\nexport function translate(\n stringSeq: TemplateStringsArray,\n ...values: any[]\n): TranslatedString[] {\n const s = toI18nString(stringSeq);\n if (!s) return [];\n const translation: TranslatedString = jed.ngettext(s, s, 1);\n return replacePlaceholderWithValues(translation, values);\n}\n\n/**\n * Internationalize a string template without serializing\n */\nexport function Translate({\n children,\n debug,\n}: {\n children: any;\n debug?: boolean;\n}): any {\n const c = [].concat(children);\n const s = stringifyArray(c);\n if (!s) return [];\n const translation: TranslatedString = jed.ngettext(s, s, 1);\n if (debug) {\n console.log(\"looking for \", s, \"got\", translation);\n }\n return replacePlaceholderWithValues(translation, c);\n}\n\n/**\n * Get an internationalized string (based on the globally set, current language)\n * from a JSON object. Fall back to the default language of the JSON object\n * if no match exists.\n */\nexport function getJsonI18n<K extends string>(\n obj: Record<K, string>,\n key: K,\n): string {\n return obj[key];\n}\n\nexport function getTranslatedArray(array: Array<any>) {\n const s = stringifyArray(array);\n const translation: TranslatedString = jed.ngettext(s, s, 1);\n return replacePlaceholderWithValues(translation, array);\n}\n\nfunction replacePlaceholderWithValues(\n translation: TranslatedString,\n childArray: Array<any>,\n): Array<any> {\n const tr = translation.split(/%(\\d+)\\$s/);\n // const childArray = toChildArray(children);\n // Merge consecutive string children.\n const placeholderChildren = [];\n for (let i = 0; i < childArray.length; i++) {\n const x = childArray[i];\n if (x === undefined) {\n continue;\n } else if (typeof x === \"string\") {\n continue;\n } else {\n placeholderChildren.push(x);\n }\n }\n const result = [];\n for (let i = 0; i < tr.length; i++) {\n if (i % 2 == 0) {\n // Text\n result.push(tr[i]);\n } else {\n const childIdx = Number.parseInt(tr[i]) - 1;\n result.push(placeholderChildren[childIdx]);\n }\n }\n return result;\n}\n\nfunction stringifyArray(children: Array<any>): string {\n let n = 1;\n const ss = children.map((c) => {\n if (typeof c === \"string\") {\n return c;\n }\n return `%${n++}$s`;\n });\n const s = ss.join(\"\").replace(/ +/g, \" \").trim();\n return s;\n}\n\nexport const i18n = {\n str: singular,\n singular,\n Translate,\n translate,\n};\n", "/*\n This file is part of GNU Taler\n (C) 2021 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n * Functional programming utilities.\n */\nexport namespace fnutil {\n export function all<T>(arr: T[], f: (x: T) => boolean): boolean {\n for (const x of arr) {\n if (!f(x)) {\n return false;\n }\n }\n return true;\n }\n\n export function any<T>(arr: T[], f: (x: T) => boolean): boolean {\n for (const x of arr) {\n if (f(x)) {\n return true;\n }\n }\n return false;\n }\n}\n", "/**\n * Hypertext Transfer Protocol (HTTP) response status codes.\n *\n * @see {@link https://en.wikipedia.org/wiki/List_of_HTTP_status_codes}\n */\nexport enum HttpStatusCode {\n /**\n * The server has received the request headers and the client should proceed to send the request body\n * (in the case of a request for which a body needs to be sent; for example, a POST request).\n * Sending a large request body to a server after a request has been rejected for inappropriate headers would be inefficient.\n * To have a server check the request's headers, a client must send Expect: 100-continue as a header in its initial request\n * and receive a 100 Continue status code in response before sending the body. The response 417 Expectation Failed indicates the request should not be continued.\n */\n Continue = 100,\n\n /**\n * The requester has asked the server to switch protocols and the server has agreed to do so.\n */\n SwitchingProtocols = 101,\n\n /**\n * A WebDAV request may contain many sub-requests involving file operations, requiring a long time to complete the request.\n * This code indicates that the server has received and is processing the request, but no response is available yet.\n * This prevents the client from timing out and assuming the request was lost.\n */\n Processing = 102,\n\n /**\n * Standard response for successful HTTP requests.\n * The actual response will depend on the request method used.\n * In a GET request, the response will contain an entity corresponding to the requested resource.\n * In a POST request, the response will contain an entity describing or containing the result of the action.\n */\n Ok = 200,\n\n /**\n * The request has been fulfilled, resulting in the creation of a new resource.\n */\n Created = 201,\n\n /**\n * The request has been accepted for processing, but the processing has not been completed.\n * The request might or might not be eventually acted upon, and may be disallowed when processing occurs.\n */\n Accepted = 202,\n\n /**\n * SINCE HTTP/1.1\n * The server is a transforming proxy that received a 200 OK from its origin,\n * but is returning a modified version of the origin's response.\n */\n NonAuthoritativeInformation = 203,\n\n /**\n * The server successfully processed the request and is not returning any content.\n */\n NoContent = 204,\n\n /**\n * The server successfully processed the request, but is not returning any content.\n * Unlike a 204 response, this response requires that the requester reset the document view.\n */\n ResetContent = 205,\n\n /**\n * The server is delivering only part of the resource (byte serving) due to a range header sent by the client.\n * The range header is used by HTTP clients to enable resuming of interrupted downloads,\n * or split a download into multiple simultaneous streams.\n */\n PartialContent = 206,\n\n /**\n * The message body that follows is an XML message and can contain a number of separate response codes,\n * depending on how many sub-requests were made.\n */\n MultiStatus = 207,\n\n /**\n * The members of a DAV binding have already been enumerated in a preceding part of the (multistatus) response,\n * and are not being included again.\n */\n AlreadyReported = 208,\n\n /**\n * The server has fulfilled a request for the resource,\n * and the response is a representation of the result of one or more instance-manipulations applied to the current instance.\n */\n ImUsed = 226,\n\n /**\n * Indicates multiple options for the resource from which the client may choose (via agent-driven content negotiation).\n * For example, this code could be used to present multiple video format options,\n * to list files with different filename extensions, or to suggest word-sense disambiguation.\n */\n MultipleChoices = 300,\n\n /**\n * This and all future requests should be directed to the given URI.\n */\n MovedPermanently = 301,\n\n /**\n * This is an example of industry practice contradicting the standard.\n * The HTTP/1.0 specification (RFC 1945) required the client to perform a temporary redirect\n * (the original describing phrase was \"Moved Temporarily\"), but popular browsers implemented 302\n * with the functionality of a 303 See Other. Therefore, HTTP/1.1 added status codes 303 and 307\n * to distinguish between the two behaviours. However, some Web applications and frameworks\n * use the 302 status code as if it were the 303.\n */\n Found = 302,\n\n /**\n * SINCE HTTP/1.1\n * The response to the request can be found under another URI using a GET method.\n * When received in response to a POST (or PUT/DELETE), the client should presume that\n * the server has received the data and should issue a redirect with a separate GET message.\n */\n SeeOther = 303,\n\n /**\n * Indicates that the resource has not been modified since the version specified by the request headers If-Modified-Since or If-None-Match.\n * In such case, there is no need to retransmit the resource since the client still has a previously-downloaded copy.\n */\n NotModified = 304,\n\n /**\n * SINCE HTTP/1.1\n * The requested resource is available only through a proxy, the address for which is provided in the response.\n * Many HTTP clients (such as Mozilla and Internet Explorer) do not correctly handle responses with this status code, primarily for security reasons.\n */\n UseProxy = 305,\n\n /**\n * No longer used. Originally meant \"Subsequent requests should use the specified proxy.\"\n */\n SwitchProxy = 306,\n\n /**\n * SINCE HTTP/1.1\n * In this case, the request should be repeated with another URI; however, future requests should still use the original URI.\n * In contrast to how 302 was historically implemented, the request method is not allowed to be changed when reissuing the original request.\n * For example, a POST request should be repeated using another POST request.\n */\n TemporaryRedirect = 307,\n\n /**\n * The request and all future requests should be repeated using another URI.\n * 307 and 308 parallel the behaviors of 302 and 301, but do not allow the HTTP method to change.\n * So, for example, submitting a form to a permanently redirected resource may continue smoothly.\n */\n PermanentRedirect = 308,\n\n /**\n * The server cannot or will not process the request due to an apparent client error\n * (e.g., malformed request syntax, too large size, invalid request message framing, or deceptive request routing).\n */\n BadRequest = 400,\n\n /**\n * Similar to 403 Forbidden, but specifically for use when authentication is required and has failed or has not yet\n * been provided. The response must include a WWW-Authenticate header field containing a challenge applicable to the\n * requested resource. See Basic access authentication and Digest access authentication. 401 semantically means\n * \"unauthenticated\",i.e. the user does not have the necessary credentials.\n */\n Unauthorized = 401,\n\n /**\n * Reserved for future use. The original intention was that this code might be used as part of some form of digital\n * cash or micro payment scheme, but that has not happened, and this code is not usually used.\n * Google Developers API uses this status if a particular developer has exceeded the daily limit on requests.\n */\n PaymentRequired = 402,\n\n /**\n * The request was valid, but the server is refusing action.\n * The user might not have the necessary permissions for a resource.\n */\n Forbidden = 403,\n\n /**\n * The requested resource could not be found but may be available in the future.\n * Subsequent requests by the client are permissible.\n */\n NotFound = 404,\n\n /**\n * A request method is not supported for the requested resource;\n * for example, a GET request on a form that requires data to be presented via POST, or a PUT request on a read-only resource.\n */\n MethodNotAllowed = 405,\n\n /**\n * The requested resource is capable of generating only content not acceptable according to the Accept headers sent in the request.\n */\n NotAcceptable = 406,\n\n /**\n * The client must first authenticate itself with the proxy.\n */\n ProxyAuthenticationRequired = 407,\n\n /**\n * The server timed out waiting for the request.\n * According to HTTP specifications:\n * \"The client did not produce a request within the time that the server was prepared to wait. The client MAY repeat the request without modifications at any later time.\"\n */\n RequestTimeout = 408,\n\n /**\n * Indicates that the request could not be processed because of conflict in the request,\n * such as an edit conflict between multiple simultaneous updates.\n */\n Conflict = 409,\n\n /**\n * Indicates that the resource requested is no longer available and will not be available again.\n * This should be used when a resource has been intentionally removed and the resource should be purged.\n * Upon receiving a 410 status code, the client should not request the resource in the future.\n * Clients such as search engines should remove the resource from their indices.\n * Most use cases do not require clients and search engines to purge the resource, and a \"404 Not Found\" may be used instead.\n */\n Gone = 410,\n\n /**\n * The request did not specify the length of its content, which is required by the requested resource.\n */\n LengthRequired = 411,\n\n /**\n * The server does not meet one of the preconditions that the requester put on the request.\n */\n PreconditionFailed = 412,\n\n /**\n * The request is larger than the server is willing or able to process. Previously called \"Request Entity Too Large\".\n */\n PayloadTooLarge = 413,\n\n /**\n * The URI provided was too long for the server to process. Often the result of too much data being encoded as a query-string of a GET request,\n * in which case it should be converted to a POST request.\n * Called \"Request-URI Too Long\" previously.\n */\n UriTooLong = 414,\n\n /**\n * The request entity has a media type which the server or resource does not support.\n * For example, the client uploads an image as image/svg+xml, but the server requires that images use a different format.\n */\n UnsupportedMediaType = 415,\n\n /**\n * The client has asked for a portion of the file (byte serving), but the server cannot supply that portion.\n * For example, if the client asked for a part of the file that lies beyond the end of the file.\n * Called \"Requested Range Not Satisfiable\" previously.\n */\n RangeNotSatisfiable = 416,\n\n /**\n * The server cannot meet the requirements of the Expect request-header field.\n */\n ExpectationFailed = 417,\n\n /**\n * This code was defined in 1998 as one of the traditional IETF April Fools' jokes, in RFC 2324, Hyper Text Coffee Pot Control Protocol,\n * and is not expected to be implemented by actual HTTP servers. The RFC specifies this code should be returned by\n * teapots requested to brew coffee. This HTTP status is used as an Easter egg in some websites, including Google.com.\n */\n IAmATeapot = 418,\n\n /**\n * The request was directed at a server that is not able to produce a response (for example because a connection reuse).\n */\n MisdirectedRequest = 421,\n\n /**\n * The request was well-formed but was unable to be followed due to semantic errors.\n */\n UnprocessableEntity = 422,\n\n /**\n * The resource that is being accessed is locked.\n */\n Locked = 423,\n\n /**\n * The request failed due to failure of a previous request (e.g., a PROPPATCH).\n */\n FailedDependency = 424,\n\n /**\n * The client should switch to a different protocol such as TLS/1.0, given in the Upgrade header field.\n */\n UpgradeRequired = 426,\n\n /**\n * The origin server requires the request to be conditional.\n * Intended to prevent \"the 'lost update' problem, where a client\n * GETs a resource's state, modifies it, and PUTs it back to the server,\n * when meanwhile a third party has modified the state on the server, leading to a conflict.\"\n */\n PreconditionRequired = 428,\n\n /**\n * The user has sent too many requests in a given amount of time. Intended for use with rate-limiting schemes.\n */\n TooManyRequests = 429,\n\n /**\n * The server is unwilling to process the request because either an individual header field,\n * or all the header fields collectively, are too large.\n */\n RequestHeaderFieldsTooLarge = 431,\n\n /**\n * A server operator has received a legal demand to deny access to a resource or to a set of resources\n * that includes the requested resource. The code 451 was chosen as a reference to the novel Fahrenheit 451.\n */\n UnavailableForLegalReasons = 451,\n\n /**\n * A generic error message, given when an unexpected condition was encountered and no more specific message is suitable.\n */\n InternalServerError = 500,\n\n /**\n * The server either does not recognize the request method, or it lacks the ability to fulfill the request.\n * Usually this implies future availability (e.g., a new feature of a web-service API).\n */\n NotImplemented = 501,\n\n /**\n * The server was acting as a gateway or proxy and received an invalid response from the upstream server.\n */\n BadGateway = 502,\n\n /**\n * The server is currently unavailable (because it is overloaded or down for maintenance).\n * Generally, this is a temporary state.\n */\n ServiceUnavailable = 503,\n\n /**\n * The server was acting as a gateway or proxy and did not receive a timely response from the upstream server.\n */\n GatewayTimeout = 504,\n\n /**\n * The server does not support the HTTP protocol version used in the request\n */\n HttpVersionNotSupported = 505,\n\n /**\n * Transparent content negotiation for the request results in a circular reference.\n */\n VariantAlsoNegotiates = 506,\n\n /**\n * The server is unable to store the representation needed to complete the request.\n */\n InsufficientStorage = 507,\n\n /**\n * The server detected an infinite loop while processing the request.\n */\n LoopDetected = 508,\n\n /**\n * Further extensions to the request are required for the server to fulfill it.\n */\n NotExtended = 510,\n\n /**\n * The client needs to authenticate to gain network access.\n * Intended for use by intercepting proxies used to control access to the network (e.g., \"captive portals\" used\n * to require agreement to Terms of Service before granting full Internet access via a Wi-Fi hotspot).\n */\n NetworkAuthenticationRequired = 511,\n}\n", "/*\n This file is part of GNU Taler\n (C) 2019 GNUnet e.V.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n TALER is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\nimport { Logger } from \"./logging.js\";\nimport { AbsoluteTime } from \"./time.js\";\n\n/**\n * Implementation of token bucket throttling.\n */\n\nconst logger = new Logger(\"RequestThrottler.ts\");\n\n/**\n * Maximum request per second, per origin.\n */\nconst MAX_PER_SECOND = 100;\n\n/**\n * Maximum request per minute, per origin.\n */\nconst MAX_PER_MINUTE = 500;\n\n/**\n * Maximum request per hour, per origin.\n */\nconst MAX_PER_HOUR = 2000;\n\n/**\n * Throttling state for one origin.\n */\nclass OriginState {\n tokensSecond: number = MAX_PER_SECOND;\n tokensMinute: number = MAX_PER_MINUTE;\n tokensHour: number = MAX_PER_HOUR;\n private lastUpdate = AbsoluteTime.now();\n\n private refill(): void {\n const now = AbsoluteTime.now();\n if (AbsoluteTime.cmp(now, this.lastUpdate) < 0) {\n // Did the system time change?\n this.lastUpdate = now;\n return;\n }\n const d = AbsoluteTime.difference(now, this.lastUpdate);\n if (d.d_ms === \"forever\") {\n throw Error(\"assertion failed\");\n }\n this.tokensSecond = Math.min(\n MAX_PER_SECOND,\n this.tokensSecond + d.d_ms / 1000,\n );\n this.tokensMinute = Math.min(\n MAX_PER_MINUTE,\n this.tokensMinute + d.d_ms / 1000 / 60,\n );\n this.tokensHour = Math.min(\n MAX_PER_HOUR,\n this.tokensHour + d.d_ms / 1000 / 60 / 60,\n );\n this.lastUpdate = now;\n }\n\n /**\n * Return true if the request for this origin should be throttled.\n * Otherwise, take a token out of the respective buckets.\n */\n applyThrottle(): boolean {\n this.refill();\n if (this.tokensSecond < 1) {\n logger.warn(\"request throttled (per second limit exceeded)\");\n return true;\n }\n if (this.tokensMinute < 1) {\n logger.warn(\"request throttled (per minute limit exceeded)\");\n return true;\n }\n if (this.tokensHour < 1) {\n logger.warn(\"request throttled (per hour limit exceeded)\");\n return true;\n }\n this.tokensSecond--;\n this.tokensMinute--;\n this.tokensHour--;\n return false;\n }\n}\n\n/**\n * Request throttler, used as a \"last layer of defense\" when some\n * other part of the re-try logic is broken and we're sending too\n * many requests to the same exchange/bank/merchant.\n */\nexport class RequestThrottler {\n private perOriginInfo: { [origin: string]: OriginState } = {};\n\n /**\n * Get the throttling state for an origin, or\n * initialize if no state is associated with the\n * origin yet.\n */\n private getState(origin: string): OriginState {\n const s = this.perOriginInfo[origin];\n if (s) {\n return s;\n }\n const ns = (this.perOriginInfo[origin] = new OriginState());\n return ns;\n }\n\n /**\n * Apply throttling to a request.\n *\n * @returns whether the request should be throttled.\n */\n applyThrottle(requestUrl: string): boolean {\n const origin = new URL(requestUrl).origin;\n return this.getState(origin).applyThrottle();\n }\n\n /**\n * Get the throttle statistics for a particular URL.\n */\n getThrottleStats(requestUrl: string): Record<string, unknown> {\n const origin = new URL(requestUrl).origin;\n const state = this.getState(origin);\n return {\n tokensHour: state.tokensHour,\n tokensMinute: state.tokensMinute,\n tokensSecond: state.tokensSecond,\n maxTokensHour: MAX_PER_HOUR,\n maxTokensMinute: MAX_PER_MINUTE,\n maxTokensSecond: MAX_PER_SECOND,\n };\n }\n}\n", "/*\nMIT License\n\nCopyright (c) 2017 Conrad Reuter\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/\n\nconst NOOP = () => {};\n\n/**\n * A token that can be passed around to inform consumers of the token that a\n * certain operation has been cancelled.\n */\nclass CancellationToken {\n private _reason: any;\n private _callbacks?: Set<(reason?: any) => void> = new Set();\n\n /**\n * A cancellation token that is already cancelled.\n */\n public static readonly CANCELLED: CancellationToken = new CancellationToken(\n true,\n true,\n );\n\n /**\n * A cancellation token that is never cancelled.\n */\n public static readonly CONTINUE: CancellationToken = new CancellationToken(\n false,\n false,\n );\n\n /**\n * Whether the token has been cancelled.\n */\n public get isCancelled(): boolean {\n return this._isCancelled;\n }\n\n /**\n * Whether the token can be cancelled.\n */\n public get canBeCancelled(): boolean {\n return this._canBeCancelled;\n }\n\n /**\n * Why this token has been cancelled.\n */\n public get reason(): any {\n if (this.isCancelled) {\n return this._reason;\n } else {\n throw new Error(\"This token is not cancelled.\");\n }\n }\n\n /**\n * Make a promise that resolves when the async operation resolves,\n * or rejects when the operation is rejected or this token is cancelled.\n */\n public racePromise<T>(asyncOperation: Promise<T>): Promise<T> {\n if (!this.canBeCancelled) {\n return asyncOperation;\n }\n return new Promise<T>((resolve, reject) => {\n // we could use Promise.finally here as soon as it's implemented in the major browsers\n const unregister = this.onCancelled((reason) =>\n reject(new CancellationToken.CancellationError(reason)),\n );\n asyncOperation.then(\n (value) => {\n resolve(value);\n unregister();\n },\n (err) => {\n reject(err);\n unregister();\n },\n );\n });\n }\n\n /**\n * Throw a {CancellationToken.CancellationError} if this token is cancelled.\n */\n public throwIfCancelled(): void {\n if (this._isCancelled) {\n throw new CancellationToken.CancellationError(this._reason);\n }\n }\n\n /**\n * Invoke the callback when this token is cancelled.\n * If this token is already cancelled, the callback is invoked immediately.\n * Returns a function that unregisters the cancellation callback.\n */\n public onCancelled(cb: (reason?: any) => void): () => void {\n if (!this.canBeCancelled) {\n return NOOP;\n }\n if (this.isCancelled) {\n cb(this.reason);\n return NOOP;\n }\n\n /* istanbul ignore next */\n this._callbacks?.add(cb);\n return () => this._callbacks?.delete(cb);\n }\n\n private constructor(\n /**\n * Whether the token is already cancelled.\n */\n private _isCancelled: boolean,\n /**\n * Whether the token can be cancelled.\n */\n private _canBeCancelled: boolean,\n ) {}\n\n /**\n * Create a {CancellationTokenSource}.\n */\n public static create(): CancellationToken.Source {\n const token = new CancellationToken(false, true);\n\n const cancel = (reason?: any) => {\n if (token._isCancelled) return;\n token._isCancelled = true;\n token._reason = reason;\n token._callbacks?.forEach((cb) => cb(reason));\n dispose();\n };\n\n const dispose = () => {\n token._canBeCancelled = token.isCancelled;\n delete token._callbacks; // release memory\n };\n\n return { token, cancel, dispose };\n }\n\n /**\n * Create a {CancellationTokenSource}.\n * The token will be cancelled automatically after the specified timeout in milliseconds.\n */\n public static timeout(ms: number): CancellationToken.Source {\n const {\n token,\n cancel: originalCancel,\n dispose: originalDispose,\n } = CancellationToken.create();\n\n let timer: NodeJS.Timeout | null;\n timer = setTimeout(() => originalCancel(CancellationToken.timeout), ms);\n const disposeTimer = () => {\n if (timer == null) return;\n clearTimeout(timer);\n timer = null;\n };\n\n const cancel = (reason?: any) => {\n disposeTimer();\n originalCancel(reason);\n };\n\n /* istanbul ignore next */\n const dispose = () => {\n disposeTimer();\n originalDispose();\n };\n\n return { token, cancel, dispose };\n }\n\n /**\n * Create a {CancellationToken} that is cancelled when all of the given tokens are cancelled.\n *\n * This is like {Promise<T>.all} for {CancellationToken}s.\n */\n public static all(...tokens: CancellationToken[]): CancellationToken {\n // If *any* of the tokens cannot be cancelled, then the token we return can never be.\n if (tokens.some((token) => !token.canBeCancelled)) {\n return CancellationToken.CONTINUE;\n }\n\n const combined = CancellationToken.create();\n let countdown = tokens.length;\n const handleNextTokenCancelled = () => {\n if (--countdown === 0) {\n const reasons = tokens.map((token) => token._reason);\n combined.cancel(reasons);\n }\n };\n tokens.forEach((token) => token.onCancelled(handleNextTokenCancelled));\n return combined.token;\n }\n\n /**\n * Create a {CancellationToken} that is cancelled when at least one of the given tokens is cancelled.\n *\n * This is like {Promise<T>.race} for {CancellationToken}s.\n */\n public static race(...tokens: CancellationToken[]): CancellationToken {\n // If *any* of the tokens is already cancelled, immediately return that token.\n for (const token of tokens) {\n if (token._isCancelled) {\n return token;\n }\n }\n\n const combined = CancellationToken.create();\n let unregistrations: (() => void)[];\n const handleAnyTokenCancelled = (reason?: any) => {\n unregistrations.forEach((unregister) => unregister()); // release memory\n combined.cancel(reason);\n };\n unregistrations = tokens.map((token) =>\n token.onCancelled(handleAnyTokenCancelled),\n );\n return combined.token;\n }\n}\n\n/* istanbul ignore next */\nnamespace CancellationToken {\n /**\n * Provides a {CancellationToken}, along with some methods to operate on it.\n */\n export interface Source {\n /**\n * The token provided by this source.\n */\n token: CancellationToken;\n\n /**\n * Cancel the provided token with the given reason.\n * Do nothing if the provided token cannot be cancelled or is already cancelled.\n */\n cancel(reason?: any): void;\n\n /**\n * Dispose of the token and this source and release memory.\n */\n dispose(): void;\n }\n\n /**\n * The error that is thrown when a {CancellationToken} has been cancelled and a\n * consumer of the token calls {CancellationToken.throwIfCancelled} on it.\n */\n export class CancellationError extends Error {\n public constructor(\n /**\n * The reason why the token was cancelled.\n */\n public readonly reason: any,\n ) {\n super(\"Operation cancelled\");\n Object.setPrototypeOf(this, CancellationError.prototype);\n }\n }\n}\n\nexport { CancellationToken };\n", "/*\n This file is part of GNU Taler\n (C) 2021 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\nimport { canonicalJson } from \"./helpers.js\";\nimport { Logger } from \"./logging.js\";\nimport {\n decodeCrock,\n encodeCrock,\n getRandomBytes,\n hash,\n kdf,\n stringToBytes,\n} from \"./taler-crypto.js\";\n\nconst logger = new Logger(\"contractTerms.ts\");\n\nexport namespace ContractTermsUtil {\n export function forgetAllImpl(\n anyJson: any,\n path: string[],\n pred: PathPredicate,\n ): any {\n const dup = JSON.parse(JSON.stringify(anyJson));\n if (Array.isArray(dup)) {\n for (let i = 0; i < dup.length; i++) {\n dup[i] = forgetAllImpl(dup[i], [...path, `${i}`], pred);\n }\n } else if (typeof dup === \"object\" && dup != null) {\n if (typeof dup.$forgettable === \"object\") {\n for (const x of Object.keys(dup.$forgettable)) {\n if (!pred([...path, x])) {\n continue;\n }\n if (!dup.$forgotten) {\n dup.$forgotten = {};\n }\n if (!dup.$forgotten[x]) {\n const membValCanon = stringToBytes(\n canonicalJson(scrub(dup[x])) + \"\\0\",\n );\n const membSalt = stringToBytes(dup.$forgettable[x] + \"\\0\");\n const h = kdf(64, membValCanon, membSalt, new Uint8Array([]));\n dup.$forgotten[x] = encodeCrock(h);\n }\n delete dup[x];\n delete dup.$forgettable[x];\n }\n if (Object.keys(dup.$forgettable).length === 0) {\n delete dup.$forgettable;\n }\n }\n for (const x of Object.keys(dup)) {\n if (x.startsWith(\"$\")) {\n continue;\n }\n dup[x] = forgetAllImpl(dup[x], [...path, x], pred);\n }\n }\n return dup;\n }\n\n export type PathPredicate = (path: string[]) => boolean;\n\n /**\n * Scrub all forgettable members from an object.\n */\n export function scrub(anyJson: any): any {\n return forgetAllImpl(anyJson, [], () => true);\n }\n\n /**\n * Recursively forget all forgettable members of an object,\n * where the path matches a predicate.\n */\n export function forgetAll(anyJson: any, pred: PathPredicate): any {\n return forgetAllImpl(anyJson, [], pred);\n }\n\n /**\n * Generate a salt for all members marked as forgettable,\n * but which don't have an actual salt yet.\n */\n export function saltForgettable(anyJson: any): any {\n const dup = JSON.parse(JSON.stringify(anyJson));\n if (Array.isArray(dup)) {\n for (let i = 0; i < dup.length; i++) {\n dup[i] = saltForgettable(dup[i]);\n }\n } else if (typeof dup === \"object\" && dup !== null) {\n if (typeof dup.$forgettable === \"object\") {\n for (const k of Object.keys(dup.$forgettable)) {\n if (dup.$forgettable[k] === true) {\n dup.$forgettable[k] = encodeCrock(getRandomBytes(32));\n }\n }\n }\n for (const x of Object.keys(dup)) {\n if (x.startsWith(\"$\")) {\n continue;\n }\n dup[x] = saltForgettable(dup[x]);\n }\n }\n return dup;\n }\n\n const nameRegex = /^[0-9A-Za-z_]+$/;\n\n /**\n * Check that the given JSON object is well-formed with regards\n * to forgettable fields and other restrictions for forgettable JSON.\n */\n export function validateForgettable(anyJson: any): boolean {\n if (typeof anyJson === \"string\") {\n return true;\n }\n if (typeof anyJson === \"number\") {\n return (\n Number.isInteger(anyJson) &&\n anyJson >= Number.MIN_SAFE_INTEGER &&\n anyJson <= Number.MAX_SAFE_INTEGER\n );\n }\n if (typeof anyJson === \"boolean\") {\n return true;\n }\n if (anyJson === null) {\n return true;\n }\n if (Array.isArray(anyJson)) {\n return anyJson.every((x) => validateForgettable(x));\n }\n if (typeof anyJson === \"object\") {\n for (const k of Object.keys(anyJson)) {\n if (k.match(nameRegex)) {\n if (validateForgettable(anyJson[k])) {\n continue;\n } else {\n return false;\n }\n }\n if (k === \"$forgettable\") {\n const fga = anyJson.$forgettable;\n if (!fga || typeof fga !== \"object\") {\n return false;\n }\n for (const fk of Object.keys(fga)) {\n if (!fk.match(nameRegex)) {\n return false;\n }\n if (!(fk in anyJson)) {\n return false;\n }\n const fv = anyJson.$forgettable[fk];\n if (typeof fv !== \"string\") {\n return false;\n }\n }\n } else if (k === \"$forgotten\") {\n const fgo = anyJson.$forgotten;\n if (!fgo || typeof fgo !== \"object\") {\n return false;\n }\n for (const fk of Object.keys(fgo)) {\n if (!fk.match(nameRegex)) {\n return false;\n }\n // Check that the value has actually been forgotten.\n if (fk in anyJson) {\n return false;\n }\n const fv = anyJson.$forgotten[fk];\n if (typeof fv !== \"string\") {\n return false;\n }\n try {\n const decFv = decodeCrock(fv);\n if (decFv.length != 64) {\n return false;\n }\n } catch (e) {\n return false;\n }\n // Check that salt has been deleted after forgetting.\n if (anyJson.$forgettable?.[k] !== undefined) {\n return false;\n }\n }\n } else {\n return false;\n }\n }\n return true;\n }\n return false;\n }\n\n /**\n * Check that no forgettable information has been forgotten.\n *\n * Must only be called on an object already validated with validateForgettable.\n */\n export function validateNothingForgotten(contractTerms: any): boolean {\n throw Error(\"not implemented yet\");\n }\n\n /**\n * Hash a contract terms object. Forgettable fields\n * are scrubbed and JSON canonicalization is applied\n * before hashing.\n */\n export function hashContractTerms(contractTerms: unknown): string {\n const cleaned = scrub(contractTerms);\n const canon = canonicalJson(cleaned) + \"\\0\";\n const bytes = stringToBytes(canon);\n return encodeCrock(hash(bytes));\n }\n}\n", "/*\n This file is part of GNU Taler\n (C) 2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n\n SPDX-License-Identifier: AGPL3.0-or-later\n*/\n\nimport { CancellationToken } from \"./CancellationToken.js\";\nimport { Codec } from \"./codec.js\";\nimport { j2s } from \"./helpers.js\";\nimport { TalerError, makeErrorDetail } from \"./index.js\";\nimport { Logger } from \"./logging.js\";\nimport { TalerErrorCode } from \"./taler-error-codes.js\";\nimport { Duration, AbsoluteTime } from \"./time.js\";\nimport { TalerErrorDetail } from \"./wallet-types.js\";\n\nconst textEncoder = new TextEncoder();\n\nconst logger = new Logger(\"http.ts\");\n\n/**\n * An HTTP response that is returned by all request methods of this library.\n */\nexport interface HttpResponse {\n requestUrl: string;\n requestMethod: string;\n status: number;\n headers: Headers;\n json(): Promise<any>;\n text(): Promise<string>;\n bytes(): Promise<ArrayBuffer>;\n}\n\nexport const DEFAULT_REQUEST_TIMEOUT_MS = 60000;\n\nexport interface HttpRequestOptions {\n method?: \"POST\" | \"PUT\" | \"GET\";\n headers?: { [name: string]: string };\n\n /**\n * Timeout after which the request should be aborted.\n */\n timeout?: Duration;\n\n /**\n * Cancellation token that should abort the request when\n * cancelled.\n */\n cancellationToken?: CancellationToken;\n\n body?: string | ArrayBuffer | object;\n}\n\n/**\n * Headers, roughly modeled after the fetch API's headers object.\n */\nexport class Headers {\n private headerMap = new Map<string, string>();\n\n get(name: string): string | null {\n const r = this.headerMap.get(name.toLowerCase());\n if (r) {\n return r;\n }\n return null;\n }\n\n set(name: string, value: string): void {\n const normalizedName = name.toLowerCase();\n const existing = this.headerMap.get(normalizedName);\n if (existing !== undefined) {\n this.headerMap.set(normalizedName, existing + \",\" + value);\n } else {\n this.headerMap.set(normalizedName, value);\n }\n }\n\n toJSON(): any {\n const m: Record<string, string> = {};\n this.headerMap.forEach((v, k) => (m[k] = v));\n return m;\n }\n}\n\n/**\n * Interface for the HTTP request library used by the wallet.\n *\n * The request library is bundled into an interface to make mocking and\n * request tunneling easy.\n */\nexport interface HttpRequestLibrary {\n /**\n * Make an HTTP GET request.\n *\n * FIXME: Get rid of this, we want the API surface to be minimal.\n */\n get(url: string, opt?: HttpRequestOptions): Promise<HttpResponse>;\n\n /**\n * Make an HTTP POST request with a JSON body.\n *\n * FIXME: Get rid of this, we want the API surface to be minimal.\n */\n postJson(\n url: string,\n body: any,\n opt?: HttpRequestOptions,\n ): Promise<HttpResponse>;\n\n /**\n * Make an HTTP POST request with a JSON body.\n */\n fetch(url: string, opt?: HttpRequestOptions): Promise<HttpResponse>;\n}\n\ntype TalerErrorResponse = {\n code: number;\n} & unknown;\n\ntype ResponseOrError<T> =\n | { isError: false; response: T }\n | { isError: true; talerErrorResponse: TalerErrorResponse };\n\nexport async function readTalerErrorResponse(\n httpResponse: HttpResponse,\n): Promise<TalerErrorDetail> {\n const errJson = await httpResponse.json();\n const talerErrorCode = errJson.code;\n if (typeof talerErrorCode !== \"number\") {\n logger.warn(\n `malformed error response (status ${httpResponse.status}): ${j2s(\n errJson,\n )}`,\n );\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl: httpResponse.requestUrl,\n requestMethod: httpResponse.requestMethod,\n httpStatusCode: httpResponse.status,\n },\n \"Error response did not contain error code\",\n );\n }\n return errJson;\n}\n\nexport async function readUnexpectedResponseDetails(\n httpResponse: HttpResponse,\n): Promise<TalerErrorDetail> {\n const errJson = await httpResponse.json();\n const talerErrorCode = errJson.code;\n if (typeof talerErrorCode !== \"number\") {\n return makeErrorDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl: httpResponse.requestUrl,\n requestMethod: httpResponse.requestMethod,\n httpStatusCode: httpResponse.status,\n },\n \"Error response did not contain error code\",\n );\n }\n return makeErrorDetail(\n TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR,\n {\n requestUrl: httpResponse.requestUrl,\n requestMethod: httpResponse.requestMethod,\n httpStatusCode: httpResponse.status,\n errorResponse: errJson,\n },\n `Unexpected HTTP status (${httpResponse.status}) in response`,\n );\n}\n\nexport async function readSuccessResponseJsonOrErrorCode<T>(\n httpResponse: HttpResponse,\n codec: Codec<T>,\n): Promise<ResponseOrError<T>> {\n if (!(httpResponse.status >= 200 && httpResponse.status < 300)) {\n return {\n isError: true,\n talerErrorResponse: await readTalerErrorResponse(httpResponse),\n };\n }\n const respJson = await httpResponse.json();\n let parsedResponse: T;\n try {\n parsedResponse = codec.decode(respJson);\n } catch (e: any) {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n requestUrl: httpResponse.requestUrl,\n requestMethod: httpResponse.requestMethod,\n httpStatusCode: httpResponse.status,\n validationError: e.toString(),\n },\n \"Response invalid\",\n );\n }\n return {\n isError: false,\n response: parsedResponse,\n };\n}\n\ntype HttpErrorDetails = {\n requestUrl: string;\n requestMethod: string;\n httpStatusCode: number;\n};\n\nexport function getHttpResponseErrorDetails(\n httpResponse: HttpResponse,\n): HttpErrorDetails {\n return {\n requestUrl: httpResponse.requestUrl,\n requestMethod: httpResponse.requestMethod,\n httpStatusCode: httpResponse.status,\n };\n}\n\nexport function throwUnexpectedRequestError(\n httpResponse: HttpResponse,\n talerErrorResponse: TalerErrorResponse,\n): never {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR,\n {\n requestUrl: httpResponse.requestUrl,\n requestMethod: httpResponse.requestMethod,\n httpStatusCode: httpResponse.status,\n errorResponse: talerErrorResponse,\n },\n `Unexpected HTTP status ${httpResponse.status} in response`,\n );\n}\n\nexport async function readSuccessResponseJsonOrThrow<T>(\n httpResponse: HttpResponse,\n codec: Codec<T>,\n): Promise<T> {\n const r = await readSuccessResponseJsonOrErrorCode(httpResponse, codec);\n if (!r.isError) {\n return r.response;\n }\n throwUnexpectedRequestError(httpResponse, r.talerErrorResponse);\n}\n\nexport async function readSuccessResponseTextOrErrorCode<T>(\n httpResponse: HttpResponse,\n): Promise<ResponseOrError<string>> {\n if (!(httpResponse.status >= 200 && httpResponse.status < 300)) {\n const errJson = await httpResponse.json();\n const talerErrorCode = errJson.code;\n if (typeof talerErrorCode !== \"number\") {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n httpStatusCode: httpResponse.status,\n requestUrl: httpResponse.requestUrl,\n requestMethod: httpResponse.requestMethod,\n },\n \"Error response did not contain error code\",\n );\n }\n return {\n isError: true,\n talerErrorResponse: errJson,\n };\n }\n const respJson = await httpResponse.text();\n return {\n isError: false,\n response: respJson,\n };\n}\n\nexport async function checkSuccessResponseOrThrow(\n httpResponse: HttpResponse,\n): Promise<void> {\n if (!(httpResponse.status >= 200 && httpResponse.status < 300)) {\n const errJson = await httpResponse.json();\n const talerErrorCode = errJson.code;\n if (typeof talerErrorCode !== \"number\") {\n throw TalerError.fromDetail(\n TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,\n {\n httpStatusCode: httpResponse.status,\n requestUrl: httpResponse.requestUrl,\n requestMethod: httpResponse.requestMethod,\n },\n \"Error response did not contain error code\",\n );\n }\n throwUnexpectedRequestError(httpResponse, errJson);\n }\n}\n\nexport async function readSuccessResponseTextOrThrow<T>(\n httpResponse: HttpResponse,\n): Promise<string> {\n const r = await readSuccessResponseTextOrErrorCode(httpResponse);\n if (!r.isError) {\n return r.response;\n }\n throwUnexpectedRequestError(httpResponse, r.talerErrorResponse);\n}\n\n/**\n * Get the timestamp at which the response's content is considered expired.\n */\nexport function getExpiry(\n httpResponse: HttpResponse,\n opt: { minDuration?: Duration },\n): AbsoluteTime {\n const expiryDateMs = new Date(\n httpResponse.headers.get(\"expiry\") ?? \"\",\n ).getTime();\n let t: AbsoluteTime;\n if (Number.isNaN(expiryDateMs)) {\n t = AbsoluteTime.now();\n } else {\n t = {\n t_ms: expiryDateMs,\n };\n }\n if (opt.minDuration) {\n const t2 = AbsoluteTime.addDuration(AbsoluteTime.now(), opt.minDuration);\n return AbsoluteTime.max(t, t2);\n }\n return t;\n}\n\nexport interface HttpLibArgs {\n enableThrottling?: boolean;\n}\n\nexport function encodeBody(body: any): ArrayBuffer {\n if (body == null) {\n return new ArrayBuffer(0);\n }\n if (typeof body === \"string\") {\n return textEncoder.encode(body).buffer;\n } else if (ArrayBuffer.isView(body)) {\n return body.buffer;\n } else if (body instanceof ArrayBuffer) {\n return body;\n } else if (typeof body === \"object\") {\n return textEncoder.encode(JSON.stringify(body)).buffer;\n }\n throw new TypeError(\"unsupported request body type\");\n}\n\nexport function getDefaultHeaders(method: string): Record<string, string> {\n const headers: Record<string, string> = {};\n\n if (method === \"POST\" || method === \"PUT\" || method === \"PATCH\") {\n // Default to JSON if we have a body\n headers[\"Content-Type\"] = \"application/json\";\n }\n\n headers[\"Accept\"] = \"application/json\";\n\n return headers;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n// Entry point for the browser.\n\nimport { loadBrowserPrng } from \"./prng-browser.js\";\nloadBrowserPrng();\nexport * from \"./index.js\";\n\n// The web stuff doesn't support package.json export declarations yet,\n// so we export more stuff here than we should.\nexport * from \"./http-common.js\";\n", "/*\n This file is part of GNU Anastasis\n (C) 2021-2022 Anastasis SARL\n\n GNU Anastasis is free software; you can redistribute it and/or modify it under the\n terms of the GNU Affero General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Anastasis is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.\n\n You should have received a copy of the GNU Affero General Public License along with\n GNU Anastasis; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { StateUpdater, useEffect, useState } from \"preact/hooks\";\n\nexport function useLocalStorage(\n key: string,\n initialValue?: string,\n): [string | undefined, StateUpdater<string | undefined>] {\n const [storedValue, setStoredValue] = useState<string | undefined>(\n (): string | undefined => {\n return typeof window !== \"undefined\"\n ? window.localStorage.getItem(key) || initialValue\n : initialValue;\n },\n );\n\n useEffect(() => {\n const listener = buildListenerForKey(key, (newValue) => {\n setStoredValue(newValue ?? initialValue);\n });\n window.addEventListener(\"storage\", listener);\n return () => {\n window.removeEventListener(\"storage\", listener);\n };\n }, []);\n\n const setValue = (\n value?: string | ((val?: string) => string | undefined),\n ): void => {\n setStoredValue((p) => {\n const toStore = value instanceof Function ? value(p) : value;\n if (typeof window !== \"undefined\") {\n if (!toStore) {\n window.localStorage.removeItem(key);\n } else {\n window.localStorage.setItem(key, toStore);\n }\n }\n return toStore;\n });\n };\n\n return [storedValue, setValue];\n}\n\nfunction buildListenerForKey(\n key: string,\n onUpdate: (newValue: string | undefined) => void,\n): () => void {\n return function listenKeyChange() {\n const value = window.localStorage.getItem(key);\n onUpdate(value ?? undefined);\n };\n}\n\n//TODO: merge with the above function\nexport function useNotNullLocalStorage(\n key: string,\n initialValue: string,\n): [string, StateUpdater<string>, boolean] {\n const [storedValue, setStoredValue] = useState<string>((): string => {\n return typeof window !== \"undefined\"\n ? window.localStorage.getItem(key) || initialValue\n : initialValue;\n });\n\n useEffect(() => {\n const listener = buildListenerForKey(key, (newValue) => {\n setStoredValue(newValue ?? initialValue);\n });\n window.addEventListener(\"storage\", listener);\n return () => {\n window.removeEventListener(\"storage\", listener);\n };\n });\n\n const setValue = (value: string | ((val: string) => string)): void => {\n const valueToStore = value instanceof Function ? value(storedValue) : value;\n setStoredValue(valueToStore);\n if (typeof window !== \"undefined\") {\n if (!valueToStore) {\n window.localStorage.removeItem(key);\n } else {\n window.localStorage.setItem(key, valueToStore);\n }\n }\n };\n\n const isSaved = window.localStorage.getItem(key) !== null;\n return [storedValue, setValue, isSaved];\n}\n", "/*\n This file is part of GNU Anastasis\n (C) 2021-2022 Anastasis SARL\n\n GNU Anastasis is free software; you can redistribute it and/or modify it under the\n terms of the GNU Affero General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Anastasis is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.\n\n You should have received a copy of the GNU Affero General Public License along with\n GNU Anastasis; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\nimport { useNotNullLocalStorage } from \"./useLocalStorage.js\";\n\nfunction getBrowserLang(): string | undefined {\n if (window.navigator.languages) return window.navigator.languages[0];\n if (window.navigator.language) return window.navigator.language;\n return undefined;\n}\n\nexport function useLang(\n initial?: string,\n): [string, (s: string) => void, boolean] {\n const defaultLang = (getBrowserLang() || initial || \"en\").substring(0, 2);\n return useNotNullLocalStorage(\"lang-preference\", defaultLang);\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\nimport { TalerErrorDetail } from \"@gnu-taler/taler-util\";\n// import { TalerError } from \"@gnu-taler/taler-wallet-core\";\nimport { useEffect, useMemo, useState } from \"preact/hooks\";\n\nexport interface HookOk<T> {\n hasError: false;\n response: T;\n}\n\nexport type HookError = HookGenericError | HookOperationalError;\n\nexport interface HookGenericError {\n hasError: true;\n operational: false;\n message: string;\n}\n\nexport interface HookOperationalError {\n hasError: true;\n operational: true;\n details: TalerErrorDetail;\n}\n\ninterface WithRetry {\n retry: () => void;\n}\n\nexport type HookResponse<T> = HookOk<T> | HookError | undefined;\nexport type HookResponseWithRetry<T> =\n | ((HookOk<T> | HookError) & WithRetry)\n | undefined;\n\nexport function useAsyncAsHook<T>(\n fn: () => Promise<T | false>,\n deps?: any[],\n): HookResponseWithRetry<T> {\n const [result, setHookResponse] = useState<HookResponse<T>>(undefined);\n\n const args = useMemo(\n () => ({\n fn,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }),\n deps || [],\n );\n\n async function doAsync(): Promise<void> {\n try {\n const response = await args.fn();\n if (response === false) return;\n setHookResponse({ hasError: false, response });\n } catch (e) {\n // if (e instanceof TalerError) {\n // setHookResponse({\n // hasError: true,\n // operational: true,\n // details: e.errorDetail,\n // });\n // } else\n if (e instanceof Error) {\n setHookResponse({\n hasError: true,\n operational: false,\n message: e.message,\n });\n }\n }\n }\n\n useEffect(() => {\n doAsync();\n }, [args]);\n\n if (!result) return undefined;\n return { ...result, retry: doAsync };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n\nexport function base64encode(str: string): string {\n return base64EncArr(strToUTF8Arr(str))\n}\n\nexport function base64decode(str: string): string {\n return UTF8ArrToStr(base64DecToArr(str))\n}\n\n// from https://developer.mozilla.org/en-US/docs/Glossary/Base64\n\n// Array of bytes to Base64 string decoding\nfunction b64ToUint6(nChr: number): number {\n return nChr > 64 && nChr < 91\n ? nChr - 65\n : nChr > 96 && nChr < 123\n ? nChr - 71\n : nChr > 47 && nChr < 58\n ? nChr + 4\n : nChr === 43\n ? 62\n : nChr === 47\n ? 63\n : 0;\n}\n\nfunction base64DecToArr(sBase64: string, nBlocksSize?: number): Uint8Array {\n const sB64Enc = sBase64.replace(/[^A-Za-z0-9+/]/g, \"\"); // Only necessary if the base64 includes whitespace such as line breaks.\n const nInLen = sB64Enc.length;\n const nOutLen = nBlocksSize\n ? Math.ceil(((nInLen * 3 + 1) >> 2) / nBlocksSize) * nBlocksSize\n : (nInLen * 3 + 1) >> 2;\n const taBytes = new Uint8Array(nOutLen);\n\n let nMod3;\n let nMod4;\n let nUint24 = 0;\n let nOutIdx = 0;\n for (let nInIdx = 0; nInIdx < nInLen; nInIdx++) {\n nMod4 = nInIdx & 3;\n nUint24 |= b64ToUint6(sB64Enc.charCodeAt(nInIdx)) << (6 * (3 - nMod4));\n if (nMod4 === 3 || nInLen - nInIdx === 1) {\n nMod3 = 0;\n while (nMod3 < 3 && nOutIdx < nOutLen) {\n taBytes[nOutIdx] = (nUint24 >>> ((16 >>> nMod3) & 24)) & 255;\n nMod3++;\n nOutIdx++;\n }\n nUint24 = 0;\n }\n }\n\n return taBytes;\n}\n\n/* Base64 string to array encoding */\nfunction uint6ToB64(nUint6: number): number {\n return nUint6 < 26\n ? nUint6 + 65\n : nUint6 < 52\n ? nUint6 + 71\n : nUint6 < 62\n ? nUint6 - 4\n : nUint6 === 62\n ? 43\n : nUint6 === 63\n ? 47\n : 65;\n}\n\nfunction base64EncArr(aBytes: Uint8Array): string {\n let nMod3 = 2;\n let sB64Enc = \"\";\n\n const nLen = aBytes.length;\n let nUint24 = 0;\n for (let nIdx = 0; nIdx < nLen; nIdx++) {\n nMod3 = nIdx % 3;\n // To break your base64 into several 80-character lines, add:\n // if (nIdx > 0 && ((nIdx * 4) / 3) % 76 === 0) {\n // sB64Enc += \"\\r\\n\";\n // }\n\n nUint24 |= aBytes[nIdx] << ((16 >>> nMod3) & 24);\n if (nMod3 === 2 || aBytes.length - nIdx === 1) {\n sB64Enc += String.fromCodePoint(\n uint6ToB64((nUint24 >>> 18) & 63),\n uint6ToB64((nUint24 >>> 12) & 63),\n uint6ToB64((nUint24 >>> 6) & 63),\n uint6ToB64(nUint24 & 63)\n );\n nUint24 = 0;\n }\n }\n return (\n sB64Enc.substring(0, sB64Enc.length - 2 + nMod3) +\n (nMod3 === 2 ? \"\" : nMod3 === 1 ? \"=\" : \"==\")\n );\n}\n\n/* UTF-8 array to JS string and vice versa */\n\nfunction UTF8ArrToStr(aBytes: Uint8Array): string {\n let sView = \"\";\n let nPart;\n const nLen = aBytes.length;\n for (let nIdx = 0; nIdx < nLen; nIdx++) {\n nPart = aBytes[nIdx];\n sView += String.fromCodePoint(\n nPart > 251 && nPart < 254 && nIdx + 5 < nLen /* six bytes */\n ? /* (nPart - 252 << 30) may be not so safe in ECMAScript! So\u2026: */\n (nPart - 252) * 1073741824 +\n ((aBytes[++nIdx] - 128) << 24) +\n ((aBytes[++nIdx] - 128) << 18) +\n ((aBytes[++nIdx] - 128) << 12) +\n ((aBytes[++nIdx] - 128) << 6) +\n aBytes[++nIdx] -\n 128\n : nPart > 247 && nPart < 252 && nIdx + 4 < nLen /* five bytes */\n ? ((nPart - 248) << 24) +\n ((aBytes[++nIdx] - 128) << 18) +\n ((aBytes[++nIdx] - 128) << 12) +\n ((aBytes[++nIdx] - 128) << 6) +\n aBytes[++nIdx] -\n 128\n : nPart > 239 && nPart < 248 && nIdx + 3 < nLen /* four bytes */\n ? ((nPart - 240) << 18) +\n ((aBytes[++nIdx] - 128) << 12) +\n ((aBytes[++nIdx] - 128) << 6) +\n aBytes[++nIdx] -\n 128\n : nPart > 223 && nPart < 240 && nIdx + 2 < nLen /* three bytes */\n ? ((nPart - 224) << 12) +\n ((aBytes[++nIdx] - 128) << 6) +\n aBytes[++nIdx] -\n 128\n : nPart > 191 && nPart < 224 && nIdx + 1 < nLen /* two bytes */\n ? ((nPart - 192) << 6) + aBytes[++nIdx] - 128\n : /* nPart < 127 ? */ /* one byte */\n nPart\n );\n }\n return sView;\n}\n\nfunction strToUTF8Arr(sDOMStr: string): Uint8Array {\n let nChr;\n const nStrLen = sDOMStr.length;\n let nArrLen = 0;\n\n /* mapping\u2026 */\n for (let nMapIdx = 0; nMapIdx < nStrLen; nMapIdx++) {\n nChr = sDOMStr.codePointAt(nMapIdx);\n if (nChr === undefined) {\n throw Error(`No char at ${nMapIdx} on string with length: ${sDOMStr.length}`)\n }\n\n if (nChr >= 0x10000) {\n nMapIdx++;\n }\n\n nArrLen +=\n nChr < 0x80\n ? 1\n : nChr < 0x800\n ? 2\n : nChr < 0x10000\n ? 3\n : nChr < 0x200000\n ? 4\n : nChr < 0x4000000\n ? 5\n : 6;\n }\n\n const aBytes = new Uint8Array(nArrLen);\n\n /* transcription\u2026 */\n let nIdx = 0;\n let nChrIdx = 0;\n while (nIdx < nArrLen) {\n nChr = sDOMStr.codePointAt(nChrIdx);\n if (nChr === undefined) {\n throw Error(`No char at ${nChrIdx} on string with length: ${sDOMStr.length}`)\n }\n if (nChr < 128) {\n /* one byte */\n aBytes[nIdx++] = nChr;\n } else if (nChr < 0x800) {\n /* two bytes */\n aBytes[nIdx++] = 192 + (nChr >>> 6);\n aBytes[nIdx++] = 128 + (nChr & 63);\n } else if (nChr < 0x10000) {\n /* three bytes */\n aBytes[nIdx++] = 224 + (nChr >>> 12);\n aBytes[nIdx++] = 128 + ((nChr >>> 6) & 63);\n aBytes[nIdx++] = 128 + (nChr & 63);\n } else if (nChr < 0x200000) {\n /* four bytes */\n aBytes[nIdx++] = 240 + (nChr >>> 18);\n aBytes[nIdx++] = 128 + ((nChr >>> 12) & 63);\n aBytes[nIdx++] = 128 + ((nChr >>> 6) & 63);\n aBytes[nIdx++] = 128 + (nChr & 63);\n nChrIdx++;\n } else if (nChr < 0x4000000) {\n /* five bytes */\n aBytes[nIdx++] = 248 + (nChr >>> 24);\n aBytes[nIdx++] = 128 + ((nChr >>> 18) & 63);\n aBytes[nIdx++] = 128 + ((nChr >>> 12) & 63);\n aBytes[nIdx++] = 128 + ((nChr >>> 6) & 63);\n aBytes[nIdx++] = 128 + (nChr & 63);\n nChrIdx++;\n } /* if (nChr <= 0x7fffffff) */ else {\n /* six bytes */\n aBytes[nIdx++] = 252 + (nChr >>> 30);\n aBytes[nIdx++] = 128 + ((nChr >>> 24) & 63);\n aBytes[nIdx++] = 128 + ((nChr >>> 18) & 63);\n aBytes[nIdx++] = 128 + ((nChr >>> 12) & 63);\n aBytes[nIdx++] = 128 + ((nChr >>> 6) & 63);\n aBytes[nIdx++] = 128 + (nChr & 63);\n nChrIdx++;\n }\n nChrIdx++;\n }\n\n return aBytes;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\nimport { HttpStatusCode } from \"@gnu-taler/taler-util\";\nimport { base64encode } from \"./base64.js\";\n\nexport enum ErrorType {\n CLIENT,\n SERVER,\n TIMEOUT,\n UNEXPECTED,\n}\n\n/**\n *\n * @param baseUrl URL where the service is located\n * @param endpoint endpoint of the service to be called\n * @param options auth, method and params\n * @returns\n */\nexport async function defaultRequestHandler<T>(\n baseUrl: string,\n endpoint: string,\n options: RequestOptions = {},\n): Promise<HttpResponseOk<T>> {\n const requestHeaders: Record<string, string> = {};\n if (options.token) {\n requestHeaders.Authorization = `Bearer ${options.token}`;\n } else if (options.basicAuth) {\n requestHeaders.Authorization = `Basic ${base64encode(\n `${options.basicAuth.username}:${options.basicAuth.password}`,\n )}`;\n }\n requestHeaders[\"Content-Type\"] =\n options.contentType === \"json\" ? \"application/json\" : \"text/plain\";\n\n const requestMethod = options?.method ?? \"GET\";\n const requestBody = options?.data;\n const requestTimeout = options?.timeout ?? 5 * 1000;\n const requestParams = options.params ?? {};\n\n const _url = new URL(`${baseUrl}${endpoint}`);\n\n Object.entries(requestParams).forEach(([key, value]) => {\n _url.searchParams.set(key, String(value));\n });\n\n let payload: BodyInit | undefined = undefined;\n if (requestBody != null) {\n if (typeof requestBody === \"string\") {\n payload = requestBody;\n } else if (requestBody instanceof ArrayBuffer) {\n payload = requestBody;\n } else if (ArrayBuffer.isView(requestBody)) {\n payload = requestBody;\n } else if (typeof requestBody === \"object\") {\n payload = JSON.stringify(requestBody);\n } else {\n throw Error(\"unsupported request body type\");\n }\n }\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => {\n controller.abort(\"HTTP_REQUEST_TIMEOUT\");\n }, requestTimeout);\n\n let response;\n try {\n response = await fetch(_url.href, {\n headers: requestHeaders,\n method: requestMethod,\n credentials: \"omit\",\n mode: \"cors\",\n body: payload,\n signal: controller.signal,\n });\n } catch (ex) {\n const info: RequestInfo = {\n payload,\n url: _url.href,\n hasToken: !!options.token,\n status: 0,\n };\n const error: HttpRequestTimeoutError = {\n clientError: true,\n isNotfound: false,\n isUnauthorized: false,\n error: undefined,\n info,\n type: ErrorType.TIMEOUT,\n message: \"Request timeout\",\n };\n throw new RequestError(error);\n }\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n const headerMap = new Headers();\n response.headers.forEach((value, key) => {\n headerMap.set(key, value);\n });\n\n if (response.ok) {\n const result = await buildRequestOk<T>(\n response,\n _url.href,\n payload,\n !!options.token,\n );\n return result;\n } else {\n const error = await buildRequestFailed(\n response,\n _url.href,\n payload,\n !!options.token,\n );\n throw new RequestError(error);\n }\n}\n\nexport type HttpResponse<T, ErrorDetail> =\n | HttpResponseOk<T>\n | HttpResponseLoading<T>\n | HttpError<ErrorDetail>;\n\nexport type HttpResponsePaginated<T, ErrorDetail> =\n | HttpResponseOkPaginated<T>\n | HttpResponseLoading<T>\n | HttpError<ErrorDetail>;\n\nexport interface RequestInfo {\n url: string;\n hasToken: boolean;\n payload: any;\n status: number;\n}\n\ninterface HttpResponseLoading<T> {\n ok?: false;\n loading: true;\n clientError?: false;\n serverError?: false;\n\n data?: T;\n}\nexport interface HttpResponseOk<T> {\n ok: true;\n loading?: false;\n clientError?: false;\n serverError?: false;\n\n data: T;\n info?: RequestInfo;\n}\n\nexport type HttpResponseOkPaginated<T> = HttpResponseOk<T> & WithPagination;\n\nexport interface WithPagination {\n loadMore: () => void;\n loadMorePrev: () => void;\n isReachingEnd?: boolean;\n isReachingStart?: boolean;\n}\n\nexport type HttpError<ErrorDetail> =\n | HttpRequestTimeoutError\n | HttpResponseClientError<ErrorDetail>\n | HttpResponseServerError<ErrorDetail>\n | HttpResponseUnexpectedError;\n\nexport interface HttpResponseServerError<ErrorDetail> {\n ok?: false;\n loading?: false;\n /**\n * @deprecated use status\n */\n clientError?: false;\n /**\n * @deprecated use status\n */\n serverError: true;\n type: ErrorType.SERVER;\n /**\n * @deprecated use payload\n */\n error: ErrorDetail;\n payload: ErrorDetail;\n status: HttpStatusCode;\n message: string;\n info?: RequestInfo;\n}\ninterface HttpRequestTimeoutError {\n ok?: false;\n loading?: false;\n /**\n * @deprecated use type\n */\n clientError: true;\n /**\n * @deprecated use type\n */\n serverError?: false;\n type: ErrorType.TIMEOUT;\n\n info?: RequestInfo;\n error: undefined;\n\n isUnauthorized: false;\n isNotfound: false;\n message: string;\n}\ninterface HttpResponseClientError<ErrorDetail> {\n ok?: false;\n loading?: false;\n /**\n * @deprecated use type\n */\n clientError: true;\n /**\n * @deprecated use type\n */\n serverError?: false;\n type: ErrorType.CLIENT;\n\n info?: RequestInfo;\n /**\n * @deprecated use status\n */\n isUnauthorized: boolean;\n /**\n * @deprecated use status\n */\n isNotfound: boolean;\n status: HttpStatusCode;\n /**\n * @deprecated use payload\n */\n error: ErrorDetail;\n payload: ErrorDetail;\n message: string;\n}\n\ninterface HttpResponseUnexpectedError {\n ok?: false;\n loading?: false;\n /**\n * @deprecated use type\n */\n clientError?: false;\n /**\n * @deprecated use type\n */\n serverError?: false;\n type: ErrorType.UNEXPECTED;\n\n info?: RequestInfo;\n status?: HttpStatusCode;\n /**\n * @deprecated use exception\n */\n error: unknown;\n exception: unknown;\n message: string;\n}\n\nexport class RequestError<ErrorDetail> extends Error {\n /**\n * @deprecated use cause\n */\n info: HttpError<ErrorDetail>;\n cause: HttpError<ErrorDetail>;\n constructor(d: HttpError<ErrorDetail>) {\n super(d.message);\n this.info = d;\n this.cause = d;\n }\n}\n\ntype Methods = \"GET\" | \"POST\" | \"PATCH\" | \"DELETE\" | \"PUT\";\n\nexport interface RequestOptions {\n method?: Methods;\n token?: string;\n basicAuth?: {\n username: string;\n password: string;\n };\n data?: any;\n params?: unknown;\n timeout?: number;\n contentType?: \"text\" | \"json\";\n}\n\nasync function buildRequestOk<T>(\n response: Response,\n url: string,\n payload: any,\n hasToken: boolean,\n): Promise<HttpResponseOk<T>> {\n const dataTxt = await response.text();\n const data = dataTxt ? JSON.parse(dataTxt) : undefined;\n return {\n ok: true,\n data,\n info: {\n payload,\n url,\n hasToken,\n status: response.status,\n },\n };\n}\n\nasync function buildRequestFailed<ErrorDetail>(\n response: Response,\n url: string,\n payload: any,\n hasToken: boolean,\n): Promise<\n | HttpResponseClientError<ErrorDetail>\n | HttpResponseServerError<ErrorDetail>\n | HttpResponseUnexpectedError\n> {\n const status = response?.status;\n\n const info: RequestInfo = {\n payload,\n url,\n hasToken,\n status: status || 0,\n };\n\n try {\n const dataTxt = await response.text();\n const data = dataTxt ? JSON.parse(dataTxt) : undefined;\n if (status && status >= 400 && status < 500) {\n const error: HttpResponseClientError<ErrorDetail> = {\n clientError: true,\n isNotfound: status === 404,\n isUnauthorized: status === 401,\n type: ErrorType.CLIENT,\n status,\n info,\n message: data?.hint,\n error: data, // remove this\n payload: data,\n };\n return error;\n }\n if (status && status >= 500 && status < 600) {\n const error: HttpResponseServerError<ErrorDetail> = {\n serverError: true,\n type: ErrorType.SERVER,\n status,\n info,\n message: `${data?.hint} (code ${data?.code})`,\n error: data, //remove this\n payload: data,\n };\n return error;\n }\n return {\n info,\n type: ErrorType.UNEXPECTED,\n status,\n error: {}, // remove this\n exception: undefined,\n message: \"NOT DEFINED\",\n };\n } catch (ex) {\n const error: HttpResponseUnexpectedError = {\n info,\n status,\n type: ErrorType.UNEXPECTED,\n error: ex,\n exception: ex,\n message: \"NOT DEFINED\",\n };\n\n return error;\n }\n}\n\n// export function isAxiosError<T>(\n// error: AxiosError | any,\n// ): error is AxiosError<T> {\n// return error && error.isAxiosError;\n// }\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { ComponentChildren, createContext, h, VNode } from \"preact\";\nimport { useContext } from \"preact/hooks\";\nimport { defaultRequestHandler } from \"../utils/request.js\";\n\ninterface Type {\n request: typeof defaultRequestHandler;\n}\n\nconst Context = createContext<Type>({\n request: defaultRequestHandler,\n});\n\nexport const useApiContext = (): Type => useContext(Context);\nexport const ApiContextProvider = ({\n children,\n value,\n}: {\n value: Type;\n children: ComponentChildren;\n}): VNode => {\n return h(Context.Provider, { value, children });\n};\n", "/*\n This file is part of GNU Taler\n (C) 2022 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\nimport { i18n, setupI18n } from \"@gnu-taler/taler-util\";\nimport { ComponentChildren, createContext, h, VNode } from \"preact\";\nimport { useContext, useEffect } from \"preact/hooks\";\nimport { useLang } from \"../hooks/index.js\";\n\nexport type InternationalizationAPI = typeof i18n;\n\ninterface Type {\n lang: string;\n supportedLang: { [id in keyof typeof supportedLang]: string };\n changeLanguage: (l: string) => void;\n i18n: InternationalizationAPI;\n isSaved: boolean;\n}\n\nconst supportedLang = {\n es: \"Espanol [es]\",\n en: \"English [en]\",\n fr: \"Francais [fr]\",\n de: \"Deutsch [de]\",\n sv: \"Svenska [sv]\",\n it: \"Italiane [it]\",\n navigator: \"Defined by navigator\",\n};\n\nconst initial = {\n lang: \"en\",\n supportedLang,\n changeLanguage: () => {\n // do not change anything\n },\n i18n,\n isSaved: false,\n};\nconst Context = createContext<Type>(initial);\n\ninterface Props {\n initial?: string;\n children: ComponentChildren;\n forceLang?: string;\n source: Record<string, any>;\n}\n\n// Outmost UI wrapper.\nexport const TranslationProvider = ({\n initial,\n children,\n forceLang,\n source,\n}: Props): VNode => {\n const [lang, changeLanguage, isSaved] = useLang(initial);\n useEffect(() => {\n if (forceLang) {\n changeLanguage(forceLang);\n }\n });\n useEffect(() => {\n setupI18n(lang, source);\n }, [lang]);\n if (forceLang) {\n setupI18n(forceLang, source);\n } else {\n setupI18n(lang, source);\n }\n\n return h(Context.Provider, {\n value: { lang, changeLanguage, supportedLang, i18n, isSaved },\n children,\n });\n};\n\nexport const useTranslationContext = (): Type => useContext(Context);\n", "import { createElement, VNode } from \"preact\";\n\nexport type StateFunc<S> = (p: S) => VNode;\n\nexport type StateViewMap<StateType extends { status: string }> = {\n [S in StateType as S[\"status\"]]: StateFunc<S>;\n};\n\nexport type RecursiveState<S extends object> = S | (() => RecursiveState<S>);\n\nexport function compose<SType extends { status: string }, PType>(\n hook: (p: PType) => RecursiveState<SType>,\n viewMap: StateViewMap<SType>,\n): (p: PType) => VNode {\n function withHook(stateHook: () => RecursiveState<SType>): () => VNode {\n function ComposedComponent(): VNode {\n const state = stateHook();\n\n if (typeof state === \"function\") {\n const subComponent = withHook(state);\n return createElement(subComponent, {});\n }\n\n const statusName = state.status as unknown as SType[\"status\"];\n const viewComponent = viewMap[statusName] as unknown as StateFunc<SType>;\n return createElement(viewComponent, state);\n }\n\n return ComposedComponent;\n }\n\n return (p: PType) => {\n const h = withHook(() => hook(p));\n return h();\n };\n}\n\n/**\n *\n * @param obj VNode\n * @returns\n */\nexport function saveVNodeForInspection<T>(obj: T): T {\n // @ts-ignore\n window[\"showVNodeInfo\"] = function showVNodeInfo() {\n inspect(obj);\n };\n return obj;\n}\nfunction inspect(obj: any) {\n if (!obj) return;\n if (obj.__c && obj.__c.__H) {\n const componentName = obj.__c.constructor.name;\n const hookState = obj.__c.__H;\n const stateList = hookState.__ as Array<any>;\n console.log(\"==============\", componentName);\n stateList.forEach((hook) => {\n const { __: value, c: context, __h: factory, __H: args } = hook;\n if (typeof context !== \"undefined\") {\n const { __c: contextId } = context;\n console.log(\"context:\", contextId, hook);\n } else if (typeof factory === \"function\") {\n console.log(\"memo:\", value, \"deps:\", args);\n } else if (typeof value === \"function\") {\n const effectName = value.name;\n console.log(\"effect:\", effectName, \"deps:\", args);\n } else if (typeof value.current !== \"undefined\") {\n const ref = value.current;\n console.log(\"ref:\", ref instanceof Element ? ref.outerHTML : ref);\n } else if (value instanceof Array) {\n console.log(\"state:\", value[0]);\n } else {\n console.log(hook);\n }\n });\n }\n const children = obj.__k;\n if (children instanceof Array) {\n children.forEach((e) => inspect(e));\n } else {\n inspect(children);\n }\n}\n", "export * from \"./hook.js\";\n// export * from \"./axios.js\"\n", "/*\n This file is part of GNU Taler\n (C) 2022 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\nimport {\n ComponentChildren,\n Fragment,\n FunctionalComponent,\n h as create,\n options,\n render as renderIntoDom,\n VNode\n} from \"preact\";\n\n// This library is expected to be included in testing environment only\n// When doing tests we want the requestAnimationFrame to be as fast as possible.\n// without this option the RAF will timeout after 100ms making the tests slower\noptions.requestAnimationFrame = (fn: () => void) => {\n return fn();\n};\n\nexport function createExample<Props>(\n Component: FunctionalComponent<Props>,\n props: Partial<Props> | (() => Partial<Props>),\n): ComponentChildren {\n const evaluatedProps = typeof props === \"function\" ? props() : props;\n const Render = (args: any): VNode => create(Component, args);\n\n return {\n component: Render,\n props: evaluatedProps,\n };\n}\n\nconst isNode = typeof window === \"undefined\";\n\n/**\n * To be used on automated unit test.\n * So test will run under node or browser\n * @param Component\n * @param args\n */\nexport function renderNodeOrBrowser(\n Component: any,\n args: any,\n Context?: any,\n): void {\n const vdom = !Context\n ? create(Component, args)\n : create(Context, { children: [create(Component, args)] });\n\n const customElement = {} as Element;\n const parentElement = isNode ? customElement : document.createElement(\"div\");\n if (!isNode) {\n document.body.appendChild(parentElement);\n }\n // renderIntoDom works also in nodejs\n // if the VirtualDOM is composed only by functional components\n // then no called is going to be made to the DOM api.\n // vdom should not have any 'div' or other html component\n renderIntoDom(vdom, parentElement);\n\n if (!isNode) {\n document.body.removeChild(parentElement);\n }\n}\ntype RecursiveState<S> = S | (() => RecursiveState<S>);\n\ninterface Mounted<T> {\n // unmount: () => void;\n pullLastResultOrThrow: () => Exclude<T, VoidFunction>;\n assertNoPendingUpdate: () => Promise<boolean>;\n // waitNextUpdate: (s?: string) => Promise<void>;\n waitForStateUpdate: () => Promise<boolean>;\n}\n\n/**\n * Manual API mount the hook and return testing API\n * Consider using hookBehaveLikeThis() function\n * \n * @param hookToBeTested\n * @param Context\n * \n * @returns testing API\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function mountHook<T extends object>(\n hookToBeTested: () => RecursiveState<T>,\n Context?: ({ children }: { children: any }) => VNode | null,\n): Mounted<T> {\n let lastResult: Exclude<T, VoidFunction> | Error | null = null;\n\n const listener: Array<() => void> = [];\n\n // component that's going to hold the hook\n function Component(): VNode {\n try {\n let componentOrResult = hookToBeTested();\n while (typeof componentOrResult === \"function\") {\n componentOrResult = componentOrResult();\n }\n //typecheck fails here\n const l: Exclude<T, () => void> = componentOrResult as any;\n lastResult = l;\n } catch (e) {\n if (e instanceof Error) {\n lastResult = e;\n } else {\n lastResult = new Error(`mounting the hook throw an exception: ${e}`);\n }\n }\n\n // notify to everyone waiting for an update and clean the queue\n listener.splice(0, listener.length).forEach((cb) => cb());\n return create(Fragment, {});\n }\n\n renderNodeOrBrowser(Component, {}, Context);\n\n function pullLastResult(): Exclude<T | Error | null, VoidFunction> {\n const copy: Exclude<T | Error | null, VoidFunction> = lastResult;\n lastResult = null;\n return copy;\n }\n\n function pullLastResultOrThrow(): Exclude<T, VoidFunction> {\n const r = pullLastResult();\n if (r instanceof Error) throw r;\n //sanity check\n if (!r) throw Error(\"there was no last result\");\n return r;\n }\n\n async function assertNoPendingUpdate(): Promise<boolean> {\n await new Promise((res, rej) => {\n const tid = setTimeout(() => {\n res(true);\n }, 10);\n\n listener.push(() => {\n clearTimeout(tid);\n res(false);\n // Error(`Expecting no pending result but the hook got updated.\n // If the update was not intended you need to check the hook dependencies\n // (or dependencies of the internal state) but otherwise make\n // sure to consume the result before ending the test.`),\n // );\n });\n });\n\n const r = pullLastResult();\n if (r) {\n return Promise.resolve(false);\n }\n return Promise.resolve(true);\n // throw Error(`There are still pending results.\n // This may happen because the hook did a new update but the test didn't consume the result using pullLastResult`);\n }\n async function waitForStateUpdate(): Promise<boolean> {\n return await new Promise((res, rej) => {\n const tid = setTimeout(() => {\n res(false);\n }, 10);\n\n listener.push(() => {\n clearTimeout(tid);\n res(true);\n });\n });\n }\n\n return {\n // unmount,\n pullLastResultOrThrow,\n waitForStateUpdate,\n assertNoPendingUpdate,\n };\n}\n\nexport const nullFunction = (): void => {\n null;\n};\nexport const nullAsyncFunction = (): Promise<void> => {\n return Promise.resolve();\n};\n\ntype HookTestResult = HookTestResultOk | HookTestResultError;\n\ninterface HookTestResultOk {\n result: \"ok\";\n}\ninterface HookTestResultError {\n result: \"fail\";\n error: string;\n index: number;\n}\n\n/**\n * Main testing driver.\n * It will assert that there are no more and no less hook updates than expected. \n * \n * @param hookFunction hook function to be tested\n * @param props initial props for the hook\n * @param checks step by step state validation\n * @param Context additional testing context for overrides\n * \n * @returns testing result, should also be checked to be \"ok\"\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport async function hookBehaveLikeThis<T extends object, PropsType>(\n hookFunction: (p: PropsType) => RecursiveState<T>,\n props: PropsType,\n checks: Array<(state: Exclude<T, VoidFunction>) => void>,\n Context?: ({ children }: { children: any }) => VNode | null,\n): Promise<HookTestResult> {\n const { pullLastResultOrThrow, waitForStateUpdate, assertNoPendingUpdate } =\n mountHook<T>(() => hookFunction(props), Context);\n\n const [firstCheck, ...resultOfTheChecks] = checks;\n {\n const state = pullLastResultOrThrow();\n const checkError = firstCheck(state);\n if (checkError !== undefined) {\n return {\n result: \"fail\",\n index: 0,\n error: `Check return not undefined error: ${checkError}`,\n };\n }\n }\n\n let index = 1;\n for (const check of resultOfTheChecks) {\n const hasNext = await waitForStateUpdate();\n if (!hasNext) {\n return {\n result: \"fail\",\n error: \"Component didn't update and the test expected one more state\",\n index,\n };\n }\n const state = pullLastResultOrThrow();\n const checkError = check(state);\n if (checkError !== undefined) {\n return {\n result: \"fail\",\n index,\n error: `Check return not undefined error: ${checkError}`,\n };\n }\n index++;\n }\n\n const hasNext = await waitForStateUpdate();\n if (hasNext) {\n return {\n result: \"fail\",\n index,\n error: \"Component updated and test didn't expect more states\",\n };\n }\n const noMoreUpdates = await assertNoPendingUpdate();\n if (noMoreUpdates === false) {\n return {\n result: \"fail\",\n index,\n error: \"Component was updated but the test does not cover the update\",\n };\n }\n\n return {\n result: \"ok\",\n };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2022 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { setupI18n } from \"@gnu-taler/taler-util\";\nimport e from \"express\";\nimport {\n ComponentChild,\n ComponentChildren,\n Fragment,\n FunctionalComponent,\n FunctionComponent,\n h,\n JSX,\n render,\n VNode,\n} from \"preact\";\nimport { useEffect, useErrorBoundary, useState } from \"preact/hooks\";\n\nconst Page: FunctionalComponent = ({ children }): VNode => {\n return (\n <div\n style={{\n fontFamily: \"Arial, Helvetica, sans-serif\",\n width: \"100%\",\n display: \"flex\",\n flexDirection: \"row\",\n }}\n >\n {children}\n </div>\n );\n};\n\nconst SideBar: FunctionalComponent<{ width: number }> = ({\n width,\n children,\n}): VNode => {\n return (\n <div\n style={{\n minWidth: width,\n height: \"calc(100vh - 20px)\",\n overflowX: \"hidden\",\n overflowY: \"visible\",\n scrollBehavior: \"smooth\",\n }}\n >\n {children}\n </div>\n );\n};\n\nconst ResizeHandleDiv: FunctionalComponent<\n JSX.HTMLAttributes<HTMLDivElement>\n> = ({ children, ...props }): VNode => {\n return (\n <div\n {...props}\n style={{\n width: 10,\n backgroundColor: \"#ddd\",\n cursor: \"ew-resize\",\n }}\n >\n {children}\n </div>\n );\n};\n\nconst Content: FunctionalComponent = ({ children }): VNode => {\n return (\n <div\n style={{\n width: \"100%\",\n padding: 20,\n }}\n >\n {children}\n </div>\n );\n};\n\nfunction findByGroupComponentName(\n allExamples: Group[],\n group: string,\n component: string,\n name: string,\n): ExampleItem | undefined {\n const gl = allExamples.filter((e) => e.title === group);\n if (gl.length === 0) {\n return undefined;\n }\n const cl = gl[0].list.filter((l) => l.name === component);\n if (cl.length === 0) {\n return undefined;\n }\n const el = cl[0].examples.filter((c) => c.name === name);\n if (el.length === 0) {\n return undefined;\n }\n return el[0];\n}\n\nfunction getContentForExample(\n item: ExampleItem | undefined,\n allExamples: Group[],\n): FunctionalComponent {\n if (!item)\n return function SelectExampleMessage() {\n return <div>select example from the list on the left</div>;\n };\n const example = findByGroupComponentName(\n allExamples,\n item.group,\n item.component,\n item.name,\n );\n if (!example) {\n return function ExampleNotFoundMessage() {\n return <div>example not found</div>;\n };\n }\n return () => example.render.component(example.render.props);\n}\n\nfunction ExampleList({\n name,\n list,\n selected,\n onSelectStory,\n}: {\n name: string;\n list: {\n name: string;\n examples: ExampleItem[];\n }[];\n selected: ExampleItem | undefined;\n onSelectStory: (i: ExampleItem, id: string) => void;\n}): VNode {\n const [isOpen, setOpen] = useState(selected && selected.group === name);\n return (\n <ol style={{ padding: 4, margin: 0 }}>\n <div\n style={{ backgroundColor: \"lightcoral\", cursor: \"pointer\" }}\n onClick={() => setOpen(!isOpen)}\n >\n {name}\n </div>\n <div style={{ display: isOpen ? undefined : \"none\" }}>\n {list.map((k) => (\n <li key={k.name}>\n <dl style={{ margin: 0 }}>\n <dt>{k.name}</dt>\n {k.examples.map((r, i) => {\n const e = encodeURIComponent;\n const eId = `${e(r.group)}-${e(r.component)}-${e(r.name)}`;\n const isSelected =\n selected &&\n selected.component === r.component &&\n selected.group === r.group &&\n selected.name === r.name;\n return (\n <dd\n id={eId}\n key={r.name}\n style={{\n backgroundColor: isSelected\n ? \"green\"\n : i % 2\n ? \"lightgray\"\n : \"lightblue\",\n marginLeft: \"1em\",\n padding: 4,\n cursor: \"pointer\",\n borderRadius: 4,\n marginBottom: 4,\n }}\n >\n <a\n href={`#${eId}`}\n style={{ color: \"black\" }}\n onClick={(e) => {\n e.preventDefault();\n location.hash = `#${eId}`;\n onSelectStory(r, eId);\n history.pushState({}, \"\", `#${eId}`);\n }}\n >\n {r.name}\n </a>\n </dd>\n );\n })}\n </dl>\n </li>\n ))}\n </div>\n </ol>\n );\n}\n\n/**\n * Prevents the UI from redirecting and inform the dev\n * where the <a /> should have redirected\n * @returns\n */\nfunction PreventLinkNavigation({\n children,\n}: {\n children: ComponentChildren;\n}): VNode {\n return (\n <div\n onClick={(e) => {\n let t: any = e.target;\n do {\n if (t.localName === \"a\" && t.getAttribute(\"href\")) {\n alert(`should navigate to: ${t.attributes.href.value}`);\n e.stopImmediatePropagation();\n e.stopPropagation();\n e.preventDefault();\n return false;\n }\n } while ((t = t.parentNode));\n return true;\n }}\n >\n {children}\n </div>\n );\n}\n\nfunction ErrorReport({\n children,\n selected,\n}: {\n children: ComponentChild;\n selected: ExampleItem | undefined;\n}): VNode {\n const [error, resetError] = useErrorBoundary();\n //if there is an error, reset when unloading this component\n useEffect(() => (error ? resetError : undefined));\n if (error) {\n return (\n <div>\n <p>Error was thrown trying to render</p>\n {selected && (\n <ul>\n <li>\n <b>group</b>: {selected.group}\n </li>\n <li>\n <b>component</b>: {selected.component}\n </li>\n <li>\n <b>example</b>: {selected.name}\n </li>\n <li>\n <b>args</b>:{\" \"}\n <pre>{JSON.stringify(selected.render.props, undefined, 2)}</pre>\n </li>\n </ul>\n )}\n <p>{error.message}</p>\n <pre>{error.stack}</pre>\n </div>\n );\n }\n return <Fragment>{children}</Fragment>;\n}\n\nfunction getSelectionFromLocationHash(\n hash: string,\n allExamples: Group[],\n): ExampleItem | undefined {\n if (!hash) return undefined;\n const parts = hash.substring(1).split(\"-\");\n if (parts.length < 3) return undefined;\n return findByGroupComponentName(\n allExamples,\n decodeURIComponent(parts[0]),\n decodeURIComponent(parts[1]),\n decodeURIComponent(parts[2]),\n );\n}\n\nfunction parseExampleImport(\n group: string,\n componentName: string,\n im: MaybeComponent,\n): ComponentItem {\n const examples: ExampleItem[] = Object.entries(im)\n .filter(([k]) => k !== \"default\")\n .map(([exampleName, exampleValue]): ExampleItem => {\n if (!exampleValue) {\n throw Error(\n `example \"${exampleName}\" from component \"${componentName}\" in group \"${group}\" is undefined`,\n );\n }\n\n if (typeof exampleValue === \"function\") {\n return {\n group,\n component: componentName,\n name: exampleName,\n render: {\n component: exampleValue as FunctionComponent,\n props: {},\n },\n };\n }\n const v: any = exampleValue;\n if (\n \"component\" in v &&\n typeof v.component === \"function\" &&\n \"props\" in v\n ) {\n return {\n group,\n component: componentName,\n name: exampleName,\n render: v,\n };\n }\n throw Error(\n `example \"${exampleName}\" from component \"${componentName}\" in group \"${group}\" doesn't follow one of the two ways of example`,\n );\n });\n return {\n name: componentName,\n examples,\n };\n}\n\nexport function parseGroupImport(\n groups: Record<string, ComponentOrFolder>,\n): Group[] {\n return Object.entries(groups).map(([groupName, value]) => {\n return {\n title: groupName,\n list: Object.entries(value).flatMap(([key, value]) =>\n folder(groupName, value),\n ),\n };\n });\n}\n\nexport interface Group {\n title: string;\n list: ComponentItem[];\n}\n\nexport interface ComponentItem {\n name: string;\n examples: ExampleItem[];\n}\n\nexport interface ExampleItem {\n group: string;\n component: string;\n name: string;\n render: {\n component: FunctionalComponent;\n props: object;\n };\n}\n\ntype ComponentOrFolder = MaybeComponent | MaybeFolder;\ninterface MaybeFolder {\n default?: { title: string };\n // [exampleName: string]: FunctionalComponent;\n}\ninterface MaybeComponent {\n // default?: undefined;\n [exampleName: string]: undefined | object;\n}\n\nfunction folder(groupName: string, value: ComponentOrFolder): ComponentItem[] {\n let title: string | undefined = undefined;\n try {\n title =\n typeof value === \"object\" &&\n typeof value.default === \"object\" &&\n value.default !== undefined &&\n \"title\" in value.default &&\n typeof value.default.title === \"string\"\n ? value.default.title\n : undefined;\n } catch (e) {\n throw Error(\n `Could not defined if it is component or folder ${groupName}: ${JSON.stringify(\n value,\n undefined,\n 2,\n )}`,\n );\n }\n if (title) {\n const c = parseExampleImport(groupName, title, value as MaybeComponent);\n return [c];\n }\n return Object.entries(value).flatMap(([subkey, value]) =>\n folder(groupName, value),\n );\n}\n\ninterface Props {\n getWrapperForGroup: (name: string) => FunctionComponent;\n examplesInGroups: Group[];\n langs: Record<string, object>;\n}\n\nfunction Application({\n langs,\n examplesInGroups,\n getWrapperForGroup,\n}: Props): VNode {\n const initialSelection = getSelectionFromLocationHash(\n location.hash,\n examplesInGroups,\n );\n\n const url = new URL(window.location.href);\n const currentLang = url.searchParams.get(\"lang\") || \"en\";\n\n if (!langs[\"en\"]) {\n langs[\"en\"] = {};\n }\n setupI18n(currentLang, langs);\n\n const [selected, updateSelected] = useState<ExampleItem | undefined>(\n initialSelection,\n );\n const [sidebarWidth, setSidebarWidth] = useState(200);\n useEffect(() => {\n if (location.hash) {\n const hash = location.hash.substring(1);\n const found = document.getElementById(hash);\n if (found) {\n setTimeout(() => {\n found.scrollIntoView({\n block: \"center\",\n });\n }, 10);\n }\n }\n }, []);\n\n const GroupWrapper = getWrapperForGroup(selected?.group || \"default\");\n const ExampleContent = getContentForExample(selected, examplesInGroups);\n\n //style={{ \"--with-size\": `${sidebarWidth}px` }}\n return (\n <Page>\n {/* <LiveReload /> */}\n <SideBar width={sidebarWidth}>\n <div>\n Language:\n <select\n value={currentLang}\n onChange={(e) => {\n const url = new URL(window.location.href);\n url.searchParams.set(\"lang\", e.currentTarget.value);\n window.location.href = url.href;\n }}\n >\n {Object.keys(langs).map((l) => (\n <option key={l}>{l}</option>\n ))}\n </select>\n </div>\n {examplesInGroups.map((group) => (\n <ExampleList\n key={group.title}\n name={group.title}\n list={group.list}\n selected={selected}\n onSelectStory={(item, htmlId) => {\n document.getElementById(htmlId)?.scrollIntoView({\n block: \"center\",\n });\n updateSelected(item);\n }}\n />\n ))}\n <hr />\n </SideBar>\n <ResizeHandle\n onUpdate={(x) => {\n setSidebarWidth((s) => s + x);\n }}\n />\n <Content>\n <ErrorReport selected={selected}>\n <PreventLinkNavigation>\n <GroupWrapper>\n <ExampleContent />\n </GroupWrapper>\n </PreventLinkNavigation>\n </ErrorReport>\n </Content>\n </Page>\n );\n}\n\nexport interface Options {\n id?: string;\n strings?: any;\n getWrapperForGroup?: (name: string) => FunctionComponent;\n}\n\nexport function renderStories(\n groups: Record<string, ComponentOrFolder>,\n options: Options = {},\n): void {\n const examples = parseGroupImport(groups);\n\n try {\n const cid = options.id ?? \"container\";\n const container = document.getElementById(cid);\n if (!container) {\n throw Error(\n `container with id ${cid} not found, can't mount page contents`,\n );\n }\n render(\n <Application\n examplesInGroups={examples}\n getWrapperForGroup={options.getWrapperForGroup ?? (() => Fragment)}\n langs={options.strings ?? { en: {} }}\n />,\n container,\n );\n } catch (e) {\n console.error(\"got error\", e);\n if (e instanceof Error) {\n document.body.innerText = `Fatal error: \"${e.message}\". Please report this bug at https://bugs.gnunet.org/.`;\n }\n }\n}\n\nfunction ResizeHandle({ onUpdate }: { onUpdate: (x: number) => void }): VNode {\n const [start, setStart] = useState<number | undefined>(undefined);\n return (\n <ResizeHandleDiv\n onMouseDown={(e: any) => {\n setStart(e.pageX);\n console.log(\"active\", e.pageX);\n return false;\n }}\n onMouseMove={(e: any) => {\n if (start !== undefined) {\n onUpdate(e.pageX - start);\n }\n return false;\n }}\n onMouseUp={() => {\n setStart(undefined);\n return false;\n }}\n />\n );\n}\n", "\nconst EMPTY = {};\n\nexport function assign(obj, props) {\n\t// eslint-disable-next-line guard-for-in\n\tfor (let i in props) {\n\t\tobj[i] = props[i];\n\t}\n\treturn obj;\n}\n\nexport function exec(url, route, opts) {\n\tlet reg = /(?:\\?([^#]*))?(#.*)?$/,\n\t\tc = url.match(reg),\n\t\tmatches = {},\n\t\tret;\n\tif (c && c[1]) {\n\t\tlet p = c[1].split('&');\n\t\tfor (let i=0; i<p.length; i++) {\n\t\t\tlet r = p[i].split('=');\n\t\t\tmatches[decodeURIComponent(r[0])] = decodeURIComponent(r.slice(1).join('='));\n\t\t}\n\t}\n\turl = segmentize(url.replace(reg, ''));\n\troute = segmentize(route || '');\n\tlet max = Math.max(url.length, route.length);\n\tfor (let i=0; i<max; i++) {\n\t\tif (route[i] && route[i].charAt(0)===':') {\n\t\t\tlet param = route[i].replace(/(^:|[+*?]+$)/g, ''),\n\t\t\t\tflags = (route[i].match(/[+*?]+$/) || EMPTY)[0] || '',\n\t\t\t\tplus = ~flags.indexOf('+'),\n\t\t\t\tstar = ~flags.indexOf('*'),\n\t\t\t\tval = url[i] || '';\n\t\t\tif (!val && !star && (flags.indexOf('?')<0 || plus)) {\n\t\t\t\tret = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatches[param] = decodeURIComponent(val);\n\t\t\tif (plus || star) {\n\t\t\t\tmatches[param] = url.slice(i).map(decodeURIComponent).join('/');\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\telse if (route[i]!==url[i]) {\n\t\t\tret = false;\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (opts.default!==true && ret===false) return false;\n\treturn matches;\n}\n\nexport function pathRankSort(a, b) {\n\treturn (\n\t\t(a.rank < b.rank) ? 1 :\n\t\t\t(a.rank > b.rank) ? -1 :\n\t\t\t\t(a.index - b.index)\n\t);\n}\n\n// filter out VNodes without attributes (which are unrankeable), and add `index`/`rank` properties to be used in sorting.\nexport function prepareVNodeForRanking(vnode, index) {\n\tvnode.index = index;\n\tvnode.rank = rankChild(vnode);\n\treturn vnode.props;\n}\n\nexport function segmentize(url) {\n\treturn url.replace(/(^\\/+|\\/+$)/g, '').split('/');\n}\n\nexport function rankSegment(segment) {\n\treturn segment.charAt(0)==':' ? (1 + '*+?'.indexOf(segment.charAt(segment.length-1))) || 4 : 5;\n}\n\nexport function rank(path) {\n\treturn segmentize(path).map(rankSegment).join('');\n}\n\nfunction rankChild(vnode) {\n\treturn vnode.props.default ? 0 : rank(vnode.props.path);\n}\n", "import { cloneElement, createElement, Component, toChildArray } from 'preact';\nimport { exec, prepareVNodeForRanking, assign, pathRankSort } from './util';\n\nlet customHistory = null;\n\nconst ROUTERS = [];\n\nconst subscribers = [];\n\nconst EMPTY = {};\n\nfunction setUrl(url, type='push') {\n\tif (customHistory && customHistory[type]) {\n\t\tcustomHistory[type](url);\n\t}\n\telse if (typeof history!=='undefined' && history[type+'State']) {\n\t\thistory[type+'State'](null, null, url);\n\t}\n}\n\n\nfunction getCurrentUrl() {\n\tlet url;\n\tif (customHistory && customHistory.location) {\n\t\turl = customHistory.location;\n\t}\n\telse if (customHistory && customHistory.getCurrentLocation) {\n\t\turl = customHistory.getCurrentLocation();\n\t}\n\telse {\n\t\turl = typeof location!=='undefined' ? location : EMPTY;\n\t}\n\treturn `${url.pathname || ''}${url.search || ''}`;\n}\n\n\n\nfunction route(url, replace=false) {\n\tif (typeof url!=='string' && url.url) {\n\t\treplace = url.replace;\n\t\turl = url.url;\n\t}\n\n\t// only push URL into history if we can handle it\n\tif (canRoute(url)) {\n\t\tsetUrl(url, replace ? 'replace' : 'push');\n\t}\n\n\treturn routeTo(url);\n}\n\n\n/** Check if the given URL can be handled by any router instances. */\nfunction canRoute(url) {\n\tfor (let i=ROUTERS.length; i--; ) {\n\t\tif (ROUTERS[i].canRoute(url)) return true;\n\t}\n\treturn false;\n}\n\n\n/** Tell all router instances to handle the given URL. */\nfunction routeTo(url) {\n\tlet didRoute = false;\n\tfor (let i=0; i<ROUTERS.length; i++) {\n\t\tif (ROUTERS[i].routeTo(url)===true) {\n\t\t\tdidRoute = true;\n\t\t}\n\t}\n\tfor (let i=subscribers.length; i--; ) {\n\t\tsubscribers[i](url);\n\t}\n\treturn didRoute;\n}\n\n\nfunction routeFromLink(node) {\n\t// only valid elements\n\tif (!node || !node.getAttribute) return;\n\n\tlet href = node.getAttribute('href'),\n\t\ttarget = node.getAttribute('target');\n\n\t// ignore links with targets and non-path URLs\n\tif (!href || !href.match(/^\\//g) || (target && !target.match(/^_?self$/i))) return;\n\n\t// attempt to route, if no match simply cede control to browser\n\treturn route(href);\n}\n\n\nfunction handleLinkClick(e) {\n\tif (e.ctrlKey || e.metaKey || e.altKey || e.shiftKey || e.button!==0) return;\n\trouteFromLink(e.currentTarget || e.target || this);\n\treturn prevent(e);\n}\n\n\nfunction prevent(e) {\n\tif (e) {\n\t\tif (e.stopImmediatePropagation) e.stopImmediatePropagation();\n\t\tif (e.stopPropagation) e.stopPropagation();\n\t\te.preventDefault();\n\t}\n\treturn false;\n}\n\n\nfunction delegateLinkHandler(e) {\n\t// ignore events the browser takes care of already:\n\tif (e.ctrlKey || e.metaKey || e.altKey || e.shiftKey || e.button!==0) return;\n\n\tlet t = e.target;\n\tdo {\n\t\tif (String(t.nodeName).toUpperCase()==='A' && t.getAttribute('href')) {\n\t\t\tif (t.hasAttribute('native')) return;\n\t\t\t// if link is handled by the router, prevent browser defaults\n\t\t\tif (routeFromLink(t)) {\n\t\t\t\treturn prevent(e);\n\t\t\t}\n\t\t}\n\t} while ((t=t.parentNode));\n}\n\n\nlet eventListenersInitialized = false;\n\nfunction initEventListeners() {\n\tif (eventListenersInitialized) return;\n\n\tif (typeof addEventListener==='function') {\n\t\tif (!customHistory) {\n\t\t\taddEventListener('popstate', () => {\n\t\t\t\trouteTo(getCurrentUrl());\n\t\t\t});\n\t\t}\n\t\taddEventListener('click', delegateLinkHandler);\n\t}\n\teventListenersInitialized = true;\n}\n\n\nclass Router extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tif (props.history) {\n\t\t\tcustomHistory = props.history;\n\t\t}\n\n\t\tthis.state = {\n\t\t\turl: props.url || getCurrentUrl()\n\t\t};\n\n\t\tinitEventListeners();\n\t}\n\n\tshouldComponentUpdate(props) {\n\t\tif (props.static!==true) return true;\n\t\treturn props.url!==this.props.url || props.onChange!==this.props.onChange;\n\t}\n\n\t/** Check if the given URL can be matched against any children */\n\tcanRoute(url) {\n\t\tconst children = toChildArray(this.props.children);\n\t\treturn this.getMatchingChildren(children, url, false).length > 0;\n\t}\n\n\t/** Re-render children with a new URL to match against. */\n\trouteTo(url) {\n\t\tthis.setState({ url });\n\n\t\tconst didRoute = this.canRoute(url);\n\n\t\t// trigger a manual re-route if we're not in the middle of an update:\n\t\tif (!this.updating) this.forceUpdate();\n\n\t\treturn didRoute;\n\t}\n\n\tcomponentWillMount() {\n\t\tROUTERS.push(this);\n\t\tthis.updating = true;\n\t}\n\n\tcomponentDidMount() {\n\t\tif (customHistory) {\n\t\t\tthis.unlisten = customHistory.listen((location) => {\n\t\t\t\tthis.routeTo(`${location.pathname || ''}${location.search || ''}`);\n\t\t\t});\n\t\t}\n\t\tthis.updating = false;\n\t}\n\n\tcomponentWillUnmount() {\n\t\tif (typeof this.unlisten==='function') this.unlisten();\n\t\tROUTERS.splice(ROUTERS.indexOf(this), 1);\n\t}\n\n\tcomponentWillUpdate() {\n\t\tthis.updating = true;\n\t}\n\n\tcomponentDidUpdate() {\n\t\tthis.updating = false;\n\t}\n\n\tgetMatchingChildren(children, url, invoke) {\n\t\treturn children\n\t\t\t.filter(prepareVNodeForRanking)\n\t\t\t.sort(pathRankSort)\n\t\t\t.map( vnode => {\n\t\t\t\tlet matches = exec(url, vnode.props.path, vnode.props);\n\t\t\t\tif (matches) {\n\t\t\t\t\tif (invoke !== false) {\n\t\t\t\t\t\tlet newProps = { url, matches };\n\t\t\t\t\t\tassign(newProps, matches);\n\t\t\t\t\t\tdelete newProps.ref;\n\t\t\t\t\t\tdelete newProps.key;\n\t\t\t\t\t\treturn cloneElement(vnode, newProps);\n\t\t\t\t\t}\n\t\t\t\t\treturn vnode;\n\t\t\t\t}\n\t\t\t}).filter(Boolean);\n\t}\n\n\trender({ children, onChange }, { url }) {\n\t\tlet active = this.getMatchingChildren(toChildArray(children), url, true);\n\n\t\tlet current = active[0] || null;\n\n\t\tlet previous = this.previousUrl;\n\t\tif (url!==previous) {\n\t\t\tthis.previousUrl = url;\n\t\t\tif (typeof onChange==='function') {\n\t\t\t\tonChange({\n\t\t\t\t\trouter: this,\n\t\t\t\t\turl,\n\t\t\t\t\tprevious,\n\t\t\t\t\tactive,\n\t\t\t\t\tcurrent\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn current;\n\t}\n}\n\nconst Link = (props) => (\n\tcreateElement('a', assign({ onClick: handleLinkClick }, props))\n);\n\nconst Route = props => createElement(props.component, props);\n\nRouter.subscribers = subscribers;\nRouter.getCurrentUrl = getCurrentUrl;\nRouter.route = route;\nRouter.Router = Router;\nRouter.Route = Route;\nRouter.Link = Link;\nRouter.exec = exec;\n\nexport { subscribers, getCurrentUrl, route, Router, Route, Link, exec };\nexport default Router;\n", "export default function _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}", "function isAbsolute(pathname) {\n return pathname.charAt(0) === '/';\n}\n\n// About 1.5x faster than the two-arg version of Array#splice()\nfunction spliceOne(list, index) {\n for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) {\n list[i] = list[k];\n }\n\n list.pop();\n}\n\n// This implementation is based heavily on node's url.parse\nfunction resolvePathname(to, from) {\n if (from === undefined) from = '';\n\n var toParts = (to && to.split('/')) || [];\n var fromParts = (from && from.split('/')) || [];\n\n var isToAbs = to && isAbsolute(to);\n var isFromAbs = from && isAbsolute(from);\n var mustEndAbs = isToAbs || isFromAbs;\n\n if (to && isAbsolute(to)) {\n // to is absolute\n fromParts = toParts;\n } else if (toParts.length) {\n // to is relative, drop the filename\n fromParts.pop();\n fromParts = fromParts.concat(toParts);\n }\n\n if (!fromParts.length) return '/';\n\n var hasTrailingSlash;\n if (fromParts.length) {\n var last = fromParts[fromParts.length - 1];\n hasTrailingSlash = last === '.' || last === '..' || last === '';\n } else {\n hasTrailingSlash = false;\n }\n\n var up = 0;\n for (var i = fromParts.length; i >= 0; i--) {\n var part = fromParts[i];\n\n if (part === '.') {\n spliceOne(fromParts, i);\n } else if (part === '..') {\n spliceOne(fromParts, i);\n up++;\n } else if (up) {\n spliceOne(fromParts, i);\n up--;\n }\n }\n\n if (!mustEndAbs) for (; up--; up) fromParts.unshift('..');\n\n if (\n mustEndAbs &&\n fromParts[0] !== '' &&\n (!fromParts[0] || !isAbsolute(fromParts[0]))\n )\n fromParts.unshift('');\n\n var result = fromParts.join('/');\n\n if (hasTrailingSlash && result.substr(-1) !== '/') result += '/';\n\n return result;\n}\n\nexport default resolvePathname;\n", "var isProduction = process.env.NODE_ENV === 'production';\nfunction warning(condition, message) {\n if (!isProduction) {\n if (condition) {\n return;\n }\n\n var text = \"Warning: \" + message;\n\n if (typeof console !== 'undefined') {\n console.warn(text);\n }\n\n try {\n throw Error(text);\n } catch (x) {}\n }\n}\n\nexport default warning;\n", "var isProduction = process.env.NODE_ENV === 'production';\nvar prefix = 'Invariant failed';\nfunction invariant(condition, message) {\n if (condition) {\n return;\n }\n if (isProduction) {\n throw new Error(prefix);\n }\n var provided = typeof message === 'function' ? message() : message;\n var value = provided ? \"\".concat(prefix, \": \").concat(provided) : prefix;\n throw new Error(value);\n}\n\nexport { invariant as default };\n", "import _extends from '@babel/runtime/helpers/esm/extends';\nimport resolvePathname from 'resolve-pathname';\nimport valueEqual from 'value-equal';\nimport warning from 'tiny-warning';\nimport invariant from 'tiny-invariant';\n\nfunction addLeadingSlash(path) {\n return path.charAt(0) === '/' ? path : '/' + path;\n}\nfunction stripLeadingSlash(path) {\n return path.charAt(0) === '/' ? path.substr(1) : path;\n}\nfunction hasBasename(path, prefix) {\n return path.toLowerCase().indexOf(prefix.toLowerCase()) === 0 && '/?#'.indexOf(path.charAt(prefix.length)) !== -1;\n}\nfunction stripBasename(path, prefix) {\n return hasBasename(path, prefix) ? path.substr(prefix.length) : path;\n}\nfunction stripTrailingSlash(path) {\n return path.charAt(path.length - 1) === '/' ? path.slice(0, -1) : path;\n}\nfunction parsePath(path) {\n var pathname = path || '/';\n var search = '';\n var hash = '';\n var hashIndex = pathname.indexOf('#');\n\n if (hashIndex !== -1) {\n hash = pathname.substr(hashIndex);\n pathname = pathname.substr(0, hashIndex);\n }\n\n var searchIndex = pathname.indexOf('?');\n\n if (searchIndex !== -1) {\n search = pathname.substr(searchIndex);\n pathname = pathname.substr(0, searchIndex);\n }\n\n return {\n pathname: pathname,\n search: search === '?' ? '' : search,\n hash: hash === '#' ? '' : hash\n };\n}\nfunction createPath(location) {\n var pathname = location.pathname,\n search = location.search,\n hash = location.hash;\n var path = pathname || '/';\n if (search && search !== '?') path += search.charAt(0) === '?' ? search : \"?\" + search;\n if (hash && hash !== '#') path += hash.charAt(0) === '#' ? hash : \"#\" + hash;\n return path;\n}\n\nfunction createLocation(path, state, key, currentLocation) {\n var location;\n\n if (typeof path === 'string') {\n // Two-arg form: push(path, state)\n location = parsePath(path);\n location.state = state;\n } else {\n // One-arg form: push(location)\n location = _extends({}, path);\n if (location.pathname === undefined) location.pathname = '';\n\n if (location.search) {\n if (location.search.charAt(0) !== '?') location.search = '?' + location.search;\n } else {\n location.search = '';\n }\n\n if (location.hash) {\n if (location.hash.charAt(0) !== '#') location.hash = '#' + location.hash;\n } else {\n location.hash = '';\n }\n\n if (state !== undefined && location.state === undefined) location.state = state;\n }\n\n try {\n location.pathname = decodeURI(location.pathname);\n } catch (e) {\n if (e instanceof URIError) {\n throw new URIError('Pathname \"' + location.pathname + '\" could not be decoded. ' + 'This is likely caused by an invalid percent-encoding.');\n } else {\n throw e;\n }\n }\n\n if (key) location.key = key;\n\n if (currentLocation) {\n // Resolve incomplete/relative pathname relative to current location.\n if (!location.pathname) {\n location.pathname = currentLocation.pathname;\n } else if (location.pathname.charAt(0) !== '/') {\n location.pathname = resolvePathname(location.pathname, currentLocation.pathname);\n }\n } else {\n // When there is no prior location and pathname is empty, set it to /\n if (!location.pathname) {\n location.pathname = '/';\n }\n }\n\n return location;\n}\nfunction locationsAreEqual(a, b) {\n return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash && a.key === b.key && valueEqual(a.state, b.state);\n}\n\nfunction createTransitionManager() {\n var prompt = null;\n\n function setPrompt(nextPrompt) {\n process.env.NODE_ENV !== \"production\" ? warning(prompt == null, 'A history supports only one prompt at a time') : void 0;\n prompt = nextPrompt;\n return function () {\n if (prompt === nextPrompt) prompt = null;\n };\n }\n\n function confirmTransitionTo(location, action, getUserConfirmation, callback) {\n // TODO: If another transition starts while we're still confirming\n // the previous one, we may end up in a weird state. Figure out the\n // best way to handle this.\n if (prompt != null) {\n var result = typeof prompt === 'function' ? prompt(location, action) : prompt;\n\n if (typeof result === 'string') {\n if (typeof getUserConfirmation === 'function') {\n getUserConfirmation(result, callback);\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(false, 'A history needs a getUserConfirmation function in order to use a prompt message') : void 0;\n callback(true);\n }\n } else {\n // Return false from a transition hook to cancel the transition.\n callback(result !== false);\n }\n } else {\n callback(true);\n }\n }\n\n var listeners = [];\n\n function appendListener(fn) {\n var isActive = true;\n\n function listener() {\n if (isActive) fn.apply(void 0, arguments);\n }\n\n listeners.push(listener);\n return function () {\n isActive = false;\n listeners = listeners.filter(function (item) {\n return item !== listener;\n });\n };\n }\n\n function notifyListeners() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n listeners.forEach(function (listener) {\n return listener.apply(void 0, args);\n });\n }\n\n return {\n setPrompt: setPrompt,\n confirmTransitionTo: confirmTransitionTo,\n appendListener: appendListener,\n notifyListeners: notifyListeners\n };\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nfunction getConfirmation(message, callback) {\n callback(window.confirm(message)); // eslint-disable-line no-alert\n}\n/**\n * Returns true if the HTML5 history API is supported. Taken from Modernizr.\n *\n * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\n * changed to avoid false negatives for Windows Phones: https://github.com/reactjs/react-router/issues/586\n */\n\nfunction supportsHistory() {\n var ua = window.navigator.userAgent;\n if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) return false;\n return window.history && 'pushState' in window.history;\n}\n/**\n * Returns true if browser fires popstate on hash change.\n * IE10 and IE11 do not.\n */\n\nfunction supportsPopStateOnHashChange() {\n return window.navigator.userAgent.indexOf('Trident') === -1;\n}\n/**\n * Returns false if using go(n) with hash history causes a full page reload.\n */\n\nfunction supportsGoWithoutReloadUsingHash() {\n return window.navigator.userAgent.indexOf('Firefox') === -1;\n}\n/**\n * Returns true if a given popstate event is an extraneous WebKit event.\n * Accounts for the fact that Chrome on iOS fires real popstate events\n * containing undefined state when pressing the back button.\n */\n\nfunction isExtraneousPopstateEvent(event) {\n return event.state === undefined && navigator.userAgent.indexOf('CriOS') === -1;\n}\n\nvar PopStateEvent = 'popstate';\nvar HashChangeEvent = 'hashchange';\n\nfunction getHistoryState() {\n try {\n return window.history.state || {};\n } catch (e) {\n // IE 11 sometimes throws when accessing window.history.state\n // See https://github.com/ReactTraining/history/pull/289\n return {};\n }\n}\n/**\n * Creates a history object that uses the HTML5 history API including\n * pushState, replaceState, and the popstate event.\n */\n\n\nfunction createBrowserHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n !canUseDOM ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Browser history needs a DOM') : invariant(false) : void 0;\n var globalHistory = window.history;\n var canUseHistory = supportsHistory();\n var needsHashChangeListener = !supportsPopStateOnHashChange();\n var _props = props,\n _props$forceRefresh = _props.forceRefresh,\n forceRefresh = _props$forceRefresh === void 0 ? false : _props$forceRefresh,\n _props$getUserConfirm = _props.getUserConfirmation,\n getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n _props$keyLength = _props.keyLength,\n keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n\n function getDOMLocation(historyState) {\n var _ref = historyState || {},\n key = _ref.key,\n state = _ref.state;\n\n var _window$location = window.location,\n pathname = _window$location.pathname,\n search = _window$location.search,\n hash = _window$location.hash;\n var path = pathname + search + hash;\n process.env.NODE_ENV !== \"production\" ? warning(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : void 0;\n if (basename) path = stripBasename(path, basename);\n return createLocation(path, state, key);\n }\n\n function createKey() {\n return Math.random().toString(36).substr(2, keyLength);\n }\n\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n _extends(history, nextState);\n\n history.length = globalHistory.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n function handlePopState(event) {\n // Ignore extraneous popstate events in WebKit.\n if (isExtraneousPopstateEvent(event)) return;\n handlePop(getDOMLocation(event.state));\n }\n\n function handleHashChange() {\n handlePop(getDOMLocation(getHistoryState()));\n }\n\n var forceNextPop = false;\n\n function handlePop(location) {\n if (forceNextPop) {\n forceNextPop = false;\n setState();\n } else {\n var action = 'POP';\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location\n });\n } else {\n revertPop(location);\n }\n });\n }\n }\n\n function revertPop(fromLocation) {\n var toLocation = history.location; // TODO: We could probably make this more reliable by\n // keeping a list of keys we've seen in sessionStorage.\n // Instead, we just default to 0 for keys we don't know.\n\n var toIndex = allKeys.indexOf(toLocation.key);\n if (toIndex === -1) toIndex = 0;\n var fromIndex = allKeys.indexOf(fromLocation.key);\n if (fromIndex === -1) fromIndex = 0;\n var delta = toIndex - fromIndex;\n\n if (delta) {\n forceNextPop = true;\n go(delta);\n }\n }\n\n var initialLocation = getDOMLocation(getHistoryState());\n var allKeys = [initialLocation.key]; // Public interface\n\n function createHref(location) {\n return basename + createPath(location);\n }\n\n function push(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'PUSH';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var href = createHref(location);\n var key = location.key,\n state = location.state;\n\n if (canUseHistory) {\n globalHistory.pushState({\n key: key,\n state: state\n }, null, href);\n\n if (forceRefresh) {\n window.location.href = href;\n } else {\n var prevIndex = allKeys.indexOf(history.location.key);\n var nextKeys = allKeys.slice(0, prevIndex + 1);\n nextKeys.push(location.key);\n allKeys = nextKeys;\n setState({\n action: action,\n location: location\n });\n }\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Browser history cannot push state in browsers that do not support HTML5 history') : void 0;\n window.location.href = href;\n }\n });\n }\n\n function replace(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var href = createHref(location);\n var key = location.key,\n state = location.state;\n\n if (canUseHistory) {\n globalHistory.replaceState({\n key: key,\n state: state\n }, null, href);\n\n if (forceRefresh) {\n window.location.replace(href);\n } else {\n var prevIndex = allKeys.indexOf(history.location.key);\n if (prevIndex !== -1) allKeys[prevIndex] = location.key;\n setState({\n action: action,\n location: location\n });\n }\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Browser history cannot replace state in browsers that do not support HTML5 history') : void 0;\n window.location.replace(href);\n }\n });\n }\n\n function go(n) {\n globalHistory.go(n);\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n var listenerCount = 0;\n\n function checkDOMListeners(delta) {\n listenerCount += delta;\n\n if (listenerCount === 1 && delta === 1) {\n window.addEventListener(PopStateEvent, handlePopState);\n if (needsHashChangeListener) window.addEventListener(HashChangeEvent, handleHashChange);\n } else if (listenerCount === 0) {\n window.removeEventListener(PopStateEvent, handlePopState);\n if (needsHashChangeListener) window.removeEventListener(HashChangeEvent, handleHashChange);\n }\n }\n\n var isBlocked = false;\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n var unblock = transitionManager.setPrompt(prompt);\n\n if (!isBlocked) {\n checkDOMListeners(1);\n isBlocked = true;\n }\n\n return function () {\n if (isBlocked) {\n isBlocked = false;\n checkDOMListeners(-1);\n }\n\n return unblock();\n };\n }\n\n function listen(listener) {\n var unlisten = transitionManager.appendListener(listener);\n checkDOMListeners(1);\n return function () {\n checkDOMListeners(-1);\n unlisten();\n };\n }\n\n var history = {\n length: globalHistory.length,\n action: 'POP',\n location: initialLocation,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n block: block,\n listen: listen\n };\n return history;\n}\n\nvar HashChangeEvent$1 = 'hashchange';\nvar HashPathCoders = {\n hashbang: {\n encodePath: function encodePath(path) {\n return path.charAt(0) === '!' ? path : '!/' + stripLeadingSlash(path);\n },\n decodePath: function decodePath(path) {\n return path.charAt(0) === '!' ? path.substr(1) : path;\n }\n },\n noslash: {\n encodePath: stripLeadingSlash,\n decodePath: addLeadingSlash\n },\n slash: {\n encodePath: addLeadingSlash,\n decodePath: addLeadingSlash\n }\n};\n\nfunction stripHash(url) {\n var hashIndex = url.indexOf('#');\n return hashIndex === -1 ? url : url.slice(0, hashIndex);\n}\n\nfunction getHashPath() {\n // We can't use window.location.hash here because it's not\n // consistent across browsers - Firefox will pre-decode it!\n var href = window.location.href;\n var hashIndex = href.indexOf('#');\n return hashIndex === -1 ? '' : href.substring(hashIndex + 1);\n}\n\nfunction pushHashPath(path) {\n window.location.hash = path;\n}\n\nfunction replaceHashPath(path) {\n window.location.replace(stripHash(window.location.href) + '#' + path);\n}\n\nfunction createHashHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n !canUseDOM ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Hash history needs a DOM') : invariant(false) : void 0;\n var globalHistory = window.history;\n var canGoWithoutReload = supportsGoWithoutReloadUsingHash();\n var _props = props,\n _props$getUserConfirm = _props.getUserConfirmation,\n getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n _props$hashType = _props.hashType,\n hashType = _props$hashType === void 0 ? 'slash' : _props$hashType;\n var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n var _HashPathCoders$hashT = HashPathCoders[hashType],\n encodePath = _HashPathCoders$hashT.encodePath,\n decodePath = _HashPathCoders$hashT.decodePath;\n\n function getDOMLocation() {\n var path = decodePath(getHashPath());\n process.env.NODE_ENV !== \"production\" ? warning(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : void 0;\n if (basename) path = stripBasename(path, basename);\n return createLocation(path);\n }\n\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n _extends(history, nextState);\n\n history.length = globalHistory.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n var forceNextPop = false;\n var ignorePath = null;\n\n function locationsAreEqual$$1(a, b) {\n return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash;\n }\n\n function handleHashChange() {\n var path = getHashPath();\n var encodedPath = encodePath(path);\n\n if (path !== encodedPath) {\n // Ensure we always have a properly-encoded hash.\n replaceHashPath(encodedPath);\n } else {\n var location = getDOMLocation();\n var prevLocation = history.location;\n if (!forceNextPop && locationsAreEqual$$1(prevLocation, location)) return; // A hashchange doesn't always == location change.\n\n if (ignorePath === createPath(location)) return; // Ignore this change; we already setState in push/replace.\n\n ignorePath = null;\n handlePop(location);\n }\n }\n\n function handlePop(location) {\n if (forceNextPop) {\n forceNextPop = false;\n setState();\n } else {\n var action = 'POP';\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location\n });\n } else {\n revertPop(location);\n }\n });\n }\n }\n\n function revertPop(fromLocation) {\n var toLocation = history.location; // TODO: We could probably make this more reliable by\n // keeping a list of paths we've seen in sessionStorage.\n // Instead, we just default to 0 for paths we don't know.\n\n var toIndex = allPaths.lastIndexOf(createPath(toLocation));\n if (toIndex === -1) toIndex = 0;\n var fromIndex = allPaths.lastIndexOf(createPath(fromLocation));\n if (fromIndex === -1) fromIndex = 0;\n var delta = toIndex - fromIndex;\n\n if (delta) {\n forceNextPop = true;\n go(delta);\n }\n } // Ensure the hash is encoded properly before doing anything else.\n\n\n var path = getHashPath();\n var encodedPath = encodePath(path);\n if (path !== encodedPath) replaceHashPath(encodedPath);\n var initialLocation = getDOMLocation();\n var allPaths = [createPath(initialLocation)]; // Public interface\n\n function createHref(location) {\n var baseTag = document.querySelector('base');\n var href = '';\n\n if (baseTag && baseTag.getAttribute('href')) {\n href = stripHash(window.location.href);\n }\n\n return href + '#' + encodePath(basename + createPath(location));\n }\n\n function push(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Hash history cannot push state; it is ignored') : void 0;\n var action = 'PUSH';\n var location = createLocation(path, undefined, undefined, history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var path = createPath(location);\n var encodedPath = encodePath(basename + path);\n var hashChanged = getHashPath() !== encodedPath;\n\n if (hashChanged) {\n // We cannot tell if a hashchange was caused by a PUSH, so we'd\n // rather setState here and ignore the hashchange. The caveat here\n // is that other hash histories in the page will consider it a POP.\n ignorePath = path;\n pushHashPath(encodedPath);\n var prevIndex = allPaths.lastIndexOf(createPath(history.location));\n var nextPaths = allPaths.slice(0, prevIndex + 1);\n nextPaths.push(path);\n allPaths = nextPaths;\n setState({\n action: action,\n location: location\n });\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(false, 'Hash history cannot PUSH the same path; a new entry will not be added to the history stack') : void 0;\n setState();\n }\n });\n }\n\n function replace(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Hash history cannot replace state; it is ignored') : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, undefined, undefined, history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var path = createPath(location);\n var encodedPath = encodePath(basename + path);\n var hashChanged = getHashPath() !== encodedPath;\n\n if (hashChanged) {\n // We cannot tell if a hashchange was caused by a REPLACE, so we'd\n // rather setState here and ignore the hashchange. The caveat here\n // is that other hash histories in the page will consider it a POP.\n ignorePath = path;\n replaceHashPath(encodedPath);\n }\n\n var prevIndex = allPaths.indexOf(createPath(history.location));\n if (prevIndex !== -1) allPaths[prevIndex] = path;\n setState({\n action: action,\n location: location\n });\n });\n }\n\n function go(n) {\n process.env.NODE_ENV !== \"production\" ? warning(canGoWithoutReload, 'Hash history go(n) causes a full page reload in this browser') : void 0;\n globalHistory.go(n);\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n var listenerCount = 0;\n\n function checkDOMListeners(delta) {\n listenerCount += delta;\n\n if (listenerCount === 1 && delta === 1) {\n window.addEventListener(HashChangeEvent$1, handleHashChange);\n } else if (listenerCount === 0) {\n window.removeEventListener(HashChangeEvent$1, handleHashChange);\n }\n }\n\n var isBlocked = false;\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n var unblock = transitionManager.setPrompt(prompt);\n\n if (!isBlocked) {\n checkDOMListeners(1);\n isBlocked = true;\n }\n\n return function () {\n if (isBlocked) {\n isBlocked = false;\n checkDOMListeners(-1);\n }\n\n return unblock();\n };\n }\n\n function listen(listener) {\n var unlisten = transitionManager.appendListener(listener);\n checkDOMListeners(1);\n return function () {\n checkDOMListeners(-1);\n unlisten();\n };\n }\n\n var history = {\n length: globalHistory.length,\n action: 'POP',\n location: initialLocation,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n block: block,\n listen: listen\n };\n return history;\n}\n\nfunction clamp(n, lowerBound, upperBound) {\n return Math.min(Math.max(n, lowerBound), upperBound);\n}\n/**\n * Creates a history object that stores locations in memory.\n */\n\n\nfunction createMemoryHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n var _props = props,\n getUserConfirmation = _props.getUserConfirmation,\n _props$initialEntries = _props.initialEntries,\n initialEntries = _props$initialEntries === void 0 ? ['/'] : _props$initialEntries,\n _props$initialIndex = _props.initialIndex,\n initialIndex = _props$initialIndex === void 0 ? 0 : _props$initialIndex,\n _props$keyLength = _props.keyLength,\n keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n _extends(history, nextState);\n\n history.length = history.entries.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n function createKey() {\n return Math.random().toString(36).substr(2, keyLength);\n }\n\n var index = clamp(initialIndex, 0, initialEntries.length - 1);\n var entries = initialEntries.map(function (entry) {\n return typeof entry === 'string' ? createLocation(entry, undefined, createKey()) : createLocation(entry, undefined, entry.key || createKey());\n }); // Public interface\n\n var createHref = createPath;\n\n function push(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'PUSH';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var prevIndex = history.index;\n var nextIndex = prevIndex + 1;\n var nextEntries = history.entries.slice(0);\n\n if (nextEntries.length > nextIndex) {\n nextEntries.splice(nextIndex, nextEntries.length - nextIndex, location);\n } else {\n nextEntries.push(location);\n }\n\n setState({\n action: action,\n location: location,\n index: nextIndex,\n entries: nextEntries\n });\n });\n }\n\n function replace(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n history.entries[history.index] = location;\n setState({\n action: action,\n location: location\n });\n });\n }\n\n function go(n) {\n var nextIndex = clamp(history.index + n, 0, history.entries.length - 1);\n var action = 'POP';\n var location = history.entries[nextIndex];\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location,\n index: nextIndex\n });\n } else {\n // Mimic the behavior of DOM histories by\n // causing a render after a cancelled POP.\n setState();\n }\n });\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n function canGo(n) {\n var nextIndex = history.index + n;\n return nextIndex >= 0 && nextIndex < history.entries.length;\n }\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n return transitionManager.setPrompt(prompt);\n }\n\n function listen(listener) {\n return transitionManager.appendListener(listener);\n }\n\n var history = {\n length: entries.length,\n action: 'POP',\n location: entries[index],\n index: index,\n entries: entries,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n canGo: canGo,\n block: block,\n listen: listen\n };\n return history;\n}\n\nexport { createBrowserHistory, createHashHistory, createMemoryHistory, createLocation, locationsAreEqual, parsePath, createPath };\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { StateUpdater, useCallback, useState } from \"preact/hooks\";\nimport { ValueOrFunction } from \"../utils/types.js\";\n\nconst calculateRootPath = () => {\n const rootPath =\n typeof window !== undefined\n ? window.location.origin + window.location.pathname\n : \"/\";\n return rootPath;\n};\n\nexport function useBackendURL(\n url?: string,\n): [string, boolean, StateUpdater<string>, () => void] {\n const [value, setter] = useNotNullLocalStorage(\n \"backend-url\",\n url || calculateRootPath(),\n );\n const [triedToLog, setTriedToLog] = useLocalStorage(\"tried-login\");\n\n const checkedSetter = (v: ValueOrFunction<string>) => {\n setTriedToLog(\"yes\");\n return setter((p) => (v instanceof Function ? v(p) : v).replace(/\\/$/, \"\"));\n };\n\n const resetBackend = () => {\n setTriedToLog(undefined);\n };\n return [value, !!triedToLog, checkedSetter, resetBackend];\n}\n\nexport function useBackendDefaultToken(\n initialValue?: string,\n): [string | undefined, StateUpdater<string | undefined>] {\n return useLocalStorage(\"backend-token\", initialValue);\n}\n\nexport function useBackendInstanceToken(\n id: string,\n): [string | undefined, StateUpdater<string | undefined>] {\n const [random, setRandom] = useState(0);\n const [token, setToken] = useLocalStorage(`backend-token-${id}`);\n const [defaultToken, defaultSetToken] = useBackendDefaultToken();\n\n // instance named 'default' use the default token\n if (id === \"default\") {\n return [defaultToken, defaultSetToken];\n }\n function updateToken(\n value:\n | (string | undefined)\n | ((s: string | undefined) => string | undefined),\n ): void {\n setToken((p) => {\n const toStore = value instanceof Function ? value(p) : value;\n // setToken(value)\n setRandom(new Date().getTime());\n return toStore;\n });\n }\n\n return [token, updateToken];\n}\n\nexport function useLang(initial?: string): [string, StateUpdater<string>] {\n const browserLang =\n typeof window !== \"undefined\"\n ? navigator.language || (navigator as any).userLanguage\n : undefined;\n const defaultLang = (browserLang || initial || \"en\").substring(0, 2);\n return useNotNullLocalStorage(\"lang-preference\", defaultLang);\n}\n\nexport function useLocalStorage(\n key: string,\n initialValue?: string,\n): [string | undefined, StateUpdater<string | undefined>] {\n const [storedValue, setStoredValue] = useState<string | undefined>(\n (): string | undefined => {\n return typeof window !== \"undefined\"\n ? window.localStorage.getItem(key) || initialValue\n : initialValue;\n },\n );\n\n const setValue = (\n value?: string | ((val?: string) => string | undefined),\n ) => {\n setStoredValue((p) => {\n const toStore = value instanceof Function ? value(p) : value;\n if (typeof window !== \"undefined\") {\n if (!toStore) {\n window.localStorage.removeItem(key);\n } else {\n window.localStorage.setItem(key, toStore);\n }\n }\n return toStore;\n });\n };\n\n return [storedValue, setValue];\n}\n\nexport function useNotNullLocalStorage(\n key: string,\n initialValue: string,\n): [string, StateUpdater<string>] {\n const [storedValue, setStoredValue] = useState<string>((): string => {\n return typeof window !== \"undefined\"\n ? window.localStorage.getItem(key) || initialValue\n : initialValue;\n });\n\n const setValue = (value: string | ((val: string) => string)) => {\n const valueToStore = value instanceof Function ? value(storedValue) : value;\n setStoredValue(valueToStore);\n if (typeof window !== \"undefined\") {\n if (!valueToStore) {\n window.localStorage.removeItem(key);\n } else {\n window.localStorage.setItem(key, valueToStore);\n }\n }\n };\n\n return [storedValue, setValue];\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { createContext, h, VNode } from \"preact\";\nimport { useCallback, useContext, useState } from \"preact/hooks\";\nimport { useBackendDefaultToken, useBackendURL } from \"../hooks/index.js\";\n\ninterface BackendContextType {\n url: string;\n token?: string;\n triedToLog: boolean;\n resetBackend: () => void;\n clearAllTokens: () => void;\n addTokenCleaner: (c: () => void) => void;\n updateLoginStatus: (url: string, token?: string) => void;\n updateToken: (token?: string) => void;\n}\n\nconst BackendContext = createContext<BackendContextType>({\n url: \"\",\n token: undefined,\n triedToLog: false,\n resetBackend: () => null,\n clearAllTokens: () => null,\n addTokenCleaner: () => null,\n updateLoginStatus: () => null,\n updateToken: () => null,\n});\n\nfunction useBackendContextState(\n defaultUrl?: string,\n initialToken?: string,\n): BackendContextType {\n const [url, triedToLog, changeBackend, resetBackend] =\n useBackendURL(defaultUrl);\n const [token, _updateToken] = useBackendDefaultToken(initialToken);\n const updateToken = (t?: string) => {\n _updateToken(t);\n };\n\n const tokenCleaner = useCallback(() => {\n updateToken(undefined);\n }, []);\n const [cleaners, setCleaners] = useState([tokenCleaner]);\n const addTokenCleaner = (c: () => void) => setCleaners((cs) => [...cs, c]);\n const addTokenCleanerMemo = useCallback(\n (c: () => void) => {\n addTokenCleaner(c);\n },\n [tokenCleaner],\n );\n\n const clearAllTokens = () => {\n cleaners.forEach((c) => c());\n for (let i = 0; i < localStorage.length; i++) {\n const k = localStorage.key(i);\n if (k && /^backend-token/.test(k)) localStorage.removeItem(k);\n }\n resetBackend();\n };\n\n const updateLoginStatus = (url: string, token?: string) => {\n changeBackend(url);\n if (token) updateToken(token);\n };\n\n return {\n url,\n token,\n triedToLog,\n updateLoginStatus,\n resetBackend,\n clearAllTokens,\n updateToken,\n addTokenCleaner: addTokenCleanerMemo,\n };\n}\n\nexport const BackendContextProvider = ({\n children,\n defaultUrl,\n initialToken,\n}: {\n children: any;\n defaultUrl?: string;\n initialToken?: string;\n}): VNode => {\n const value = useBackendContextState(defaultUrl, initialToken);\n\n return h(BackendContext.Provider, { value, children });\n};\n\nexport const useBackendContext = (): BackendContextType =>\n useContext(BackendContext);\n", "/**\n * Assign properties from `props` to `obj`\n * @template O, P The obj and props types\n * @param {O} obj The object to copy properties to\n * @param {P} props The object to copy properties from\n * @returns {O & P}\n */\nexport function assign(obj, props) {\n\tfor (let i in props) obj[i] = props[i];\n\treturn /** @type {O & P} */ (obj);\n}\n\n/**\n * Check if two objects have a different shape\n * @param {object} a\n * @param {object} b\n * @returns {boolean}\n */\nexport function shallowDiffers(a, b) {\n\tfor (let i in a) if (i !== '__source' && !(i in b)) return true;\n\tfor (let i in b) if (i !== '__source' && a[i] !== b[i]) return true;\n\treturn false;\n}\n\nexport function removeNode(node) {\n\tlet parentNode = node.parentNode;\n\tif (parentNode) parentNode.removeChild(node);\n}\n\n/**\n * Check if two values are the same value\n * @param {*} x\n * @param {*} y\n * @returns {boolean}\n */\nexport function is(x, y) {\n\treturn (x === y && (x !== 0 || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\n", "import { Component } from 'preact';\nimport { shallowDiffers } from './util';\n\n/**\n * Component class with a predefined `shouldComponentUpdate` implementation\n */\nexport function PureComponent(p) {\n\tthis.props = p;\n}\nPureComponent.prototype = new Component();\n// Some third-party libraries check if this property is present\nPureComponent.prototype.isPureReactComponent = true;\nPureComponent.prototype.shouldComponentUpdate = function(props, state) {\n\treturn shallowDiffers(this.props, props) || shallowDiffers(this.state, state);\n};\n", "import { createElement } from 'preact';\nimport { shallowDiffers } from './util';\n\n/**\n * Memoize a component, so that it only updates when the props actually have\n * changed. This was previously known as `React.pure`.\n * @param {import('./internal').FunctionComponent} c functional component\n * @param {(prev: object, next: object) => boolean} [comparer] Custom equality function\n * @returns {import('./internal').FunctionComponent}\n */\nexport function memo(c, comparer) {\n\tfunction shouldUpdate(nextProps) {\n\t\tlet ref = this.props.ref;\n\t\tlet updateRef = ref == nextProps.ref;\n\t\tif (!updateRef && ref) {\n\t\t\tref.call ? ref(null) : (ref.current = null);\n\t\t}\n\n\t\tif (!comparer) {\n\t\t\treturn shallowDiffers(this.props, nextProps);\n\t\t}\n\n\t\treturn !comparer(this.props, nextProps) || !updateRef;\n\t}\n\n\tfunction Memoed(props) {\n\t\tthis.shouldComponentUpdate = shouldUpdate;\n\t\treturn createElement(c, props);\n\t}\n\tMemoed.displayName = 'Memo(' + (c.displayName || c.name) + ')';\n\tMemoed.prototype.isReactComponent = true;\n\tMemoed._forwarded = true;\n\treturn Memoed;\n}\n", "import { options } from 'preact';\nimport { assign } from './util';\n\nlet oldDiffHook = options._diff;\noptions._diff = vnode => {\n\tif (vnode.type && vnode.type._forwarded && vnode.ref) {\n\t\tvnode.props.ref = vnode.ref;\n\t\tvnode.ref = null;\n\t}\n\tif (oldDiffHook) oldDiffHook(vnode);\n};\n\nexport const REACT_FORWARD_SYMBOL =\n\t(typeof Symbol != 'undefined' &&\n\t\tSymbol.for &&\n\t\tSymbol.for('react.forward_ref')) ||\n\t0xf47;\n\n/**\n * Pass ref down to a child. This is mainly used in libraries with HOCs that\n * wrap components. Using `forwardRef` there is an easy way to get a reference\n * of the wrapped component instead of one of the wrapper itself.\n * @param {import('./index').ForwardFn} fn\n * @returns {import('./internal').FunctionComponent}\n */\nexport function forwardRef(fn) {\n\tfunction Forwarded(props) {\n\t\tlet clone = assign({}, props);\n\t\tdelete clone.ref;\n\t\treturn fn(clone, props.ref || null);\n\t}\n\n\t// mobx-react checks for this being present\n\tForwarded.$$typeof = REACT_FORWARD_SYMBOL;\n\t// mobx-react heavily relies on implementation details.\n\t// It expects an object here with a `render` property,\n\t// and prototype.render will fail. Without this\n\t// mobx-react throws.\n\tForwarded.render = Forwarded;\n\n\tForwarded.prototype.isReactComponent = Forwarded._forwarded = true;\n\tForwarded.displayName = 'ForwardRef(' + (fn.displayName || fn.name) + ')';\n\treturn Forwarded;\n}\n", "import { toChildArray } from 'preact';\n\nconst mapFn = (children, fn) => {\n\tif (children == null) return null;\n\treturn toChildArray(toChildArray(children).map(fn));\n};\n\n// This API is completely unnecessary for Preact, so it's basically passthrough.\nexport const Children = {\n\tmap: mapFn,\n\tforEach: mapFn,\n\tcount(children) {\n\t\treturn children ? toChildArray(children).length : 0;\n\t},\n\tonly(children) {\n\t\tconst normalized = toChildArray(children);\n\t\tif (normalized.length !== 1) throw 'Children.only';\n\t\treturn normalized[0];\n\t},\n\ttoArray: toChildArray\n};\n", "import { Component, createElement, options, Fragment } from 'preact';\nimport { assign } from './util';\n\nconst oldCatchError = options._catchError;\noptions._catchError = function(error, newVNode, oldVNode, errorInfo) {\n\tif (error.then) {\n\t\t/** @type {import('./internal').Component} */\n\t\tlet component;\n\t\tlet vnode = newVNode;\n\n\t\tfor (; (vnode = vnode._parent); ) {\n\t\t\tif ((component = vnode._component) && component._childDidSuspend) {\n\t\t\t\tif (newVNode._dom == null) {\n\t\t\t\t\tnewVNode._dom = oldVNode._dom;\n\t\t\t\t\tnewVNode._children = oldVNode._children;\n\t\t\t\t}\n\t\t\t\t// Don't call oldCatchError if we found a Suspense\n\t\t\t\treturn component._childDidSuspend(error, newVNode);\n\t\t\t}\n\t\t}\n\t}\n\toldCatchError(error, newVNode, oldVNode, errorInfo);\n};\n\nconst oldUnmount = options.unmount;\noptions.unmount = function(vnode) {\n\t/** @type {import('./internal').Component} */\n\tconst component = vnode._component;\n\tif (component && component._onResolve) {\n\t\tcomponent._onResolve();\n\t}\n\n\t// if the component is still hydrating\n\t// most likely it is because the component is suspended\n\t// we set the vnode.type as `null` so that it is not a typeof function\n\t// so the unmount will remove the vnode._dom\n\tif (component && vnode._hydrating === true) {\n\t\tvnode.type = null;\n\t}\n\n\tif (oldUnmount) oldUnmount(vnode);\n};\n\nfunction detachedClone(vnode, detachedParent, parentDom) {\n\tif (vnode) {\n\t\tif (vnode._component && vnode._component.__hooks) {\n\t\t\tvnode._component.__hooks._list.forEach(effect => {\n\t\t\t\tif (typeof effect._cleanup == 'function') effect._cleanup();\n\t\t\t});\n\n\t\t\tvnode._component.__hooks = null;\n\t\t}\n\n\t\tvnode = assign({}, vnode);\n\t\tif (vnode._component != null) {\n\t\t\tif (vnode._component._parentDom === parentDom) {\n\t\t\t\tvnode._component._parentDom = detachedParent;\n\t\t\t}\n\t\t\tvnode._component = null;\n\t\t}\n\n\t\tvnode._children =\n\t\t\tvnode._children &&\n\t\t\tvnode._children.map(child =>\n\t\t\t\tdetachedClone(child, detachedParent, parentDom)\n\t\t\t);\n\t}\n\n\treturn vnode;\n}\n\nfunction removeOriginal(vnode, detachedParent, originalParent) {\n\tif (vnode) {\n\t\tvnode._original = null;\n\t\tvnode._children =\n\t\t\tvnode._children &&\n\t\t\tvnode._children.map(child =>\n\t\t\t\tremoveOriginal(child, detachedParent, originalParent)\n\t\t\t);\n\n\t\tif (vnode._component) {\n\t\t\tif (vnode._component._parentDom === detachedParent) {\n\t\t\t\tif (vnode._dom) {\n\t\t\t\t\toriginalParent.insertBefore(vnode._dom, vnode._nextDom);\n\t\t\t\t}\n\t\t\t\tvnode._component._force = true;\n\t\t\t\tvnode._component._parentDom = originalParent;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn vnode;\n}\n\n// having custom inheritance instead of a class here saves a lot of bytes\nexport function Suspense() {\n\t// we do not call super here to golf some bytes...\n\tthis._pendingSuspensionCount = 0;\n\tthis._suspenders = null;\n\tthis._detachOnNextRender = null;\n}\n\n// Things we do here to save some bytes but are not proper JS inheritance:\n// - call `new Component()` as the prototype\n// - do not set `Suspense.prototype.constructor` to `Suspense`\nSuspense.prototype = new Component();\n\n/**\n * @this {import('./internal').SuspenseComponent}\n * @param {Promise} promise The thrown promise\n * @param {import('./internal').VNode<any, any>} suspendingVNode The suspending component\n */\nSuspense.prototype._childDidSuspend = function(promise, suspendingVNode) {\n\tconst suspendingComponent = suspendingVNode._component;\n\n\t/** @type {import('./internal').SuspenseComponent} */\n\tconst c = this;\n\n\tif (c._suspenders == null) {\n\t\tc._suspenders = [];\n\t}\n\tc._suspenders.push(suspendingComponent);\n\n\tconst resolve = suspended(c._vnode);\n\n\tlet resolved = false;\n\tconst onResolved = () => {\n\t\tif (resolved) return;\n\n\t\tresolved = true;\n\t\tsuspendingComponent._onResolve = null;\n\n\t\tif (resolve) {\n\t\t\tresolve(onSuspensionComplete);\n\t\t} else {\n\t\t\tonSuspensionComplete();\n\t\t}\n\t};\n\n\tsuspendingComponent._onResolve = onResolved;\n\n\tconst onSuspensionComplete = () => {\n\t\tif (!--c._pendingSuspensionCount) {\n\t\t\t// If the suspension was during hydration we don't need to restore the\n\t\t\t// suspended children into the _children array\n\t\t\tif (c.state._suspended) {\n\t\t\t\tconst suspendedVNode = c.state._suspended;\n\t\t\t\tc._vnode._children[0] = removeOriginal(\n\t\t\t\t\tsuspendedVNode,\n\t\t\t\t\tsuspendedVNode._component._parentDom,\n\t\t\t\t\tsuspendedVNode._component._originalParentDom\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tc.setState({ _suspended: (c._detachOnNextRender = null) });\n\n\t\t\tlet suspended;\n\t\t\twhile ((suspended = c._suspenders.pop())) {\n\t\t\t\tsuspended.forceUpdate();\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * We do not set `suspended: true` during hydration because we want the actual markup\n\t * to remain on screen and hydrate it when the suspense actually gets resolved.\n\t * While in non-hydration cases the usual fallback -> component flow would occour.\n\t */\n\tconst wasHydrating = suspendingVNode._hydrating === true;\n\tif (!c._pendingSuspensionCount++ && !wasHydrating) {\n\t\tc.setState({ _suspended: (c._detachOnNextRender = c._vnode._children[0]) });\n\t}\n\tpromise.then(onResolved, onResolved);\n};\n\nSuspense.prototype.componentWillUnmount = function() {\n\tthis._suspenders = [];\n};\n\n/**\n * @this {import('./internal').SuspenseComponent}\n * @param {import('./internal').SuspenseComponent[\"props\"]} props\n * @param {import('./internal').SuspenseState} state\n */\nSuspense.prototype.render = function(props, state) {\n\tif (this._detachOnNextRender) {\n\t\t// When the Suspense's _vnode was created by a call to createVNode\n\t\t// (i.e. due to a setState further up in the tree)\n\t\t// it's _children prop is null, in this case we \"forget\" about the parked vnodes to detach\n\t\tif (this._vnode._children) {\n\t\t\tconst detachedParent = document.createElement('div');\n\t\t\tconst detachedComponent = this._vnode._children[0]._component;\n\t\t\tthis._vnode._children[0] = detachedClone(\n\t\t\t\tthis._detachOnNextRender,\n\t\t\t\tdetachedParent,\n\t\t\t\t(detachedComponent._originalParentDom = detachedComponent._parentDom)\n\t\t\t);\n\t\t}\n\n\t\tthis._detachOnNextRender = null;\n\t}\n\n\t// Wrap fallback tree in a VNode that prevents itself from being marked as aborting mid-hydration:\n\t/** @type {import('./internal').VNode} */\n\tconst fallback =\n\t\tstate._suspended && createElement(Fragment, null, props.fallback);\n\tif (fallback) fallback._hydrating = null;\n\n\treturn [\n\t\tcreateElement(Fragment, null, state._suspended ? null : props.children),\n\t\tfallback\n\t];\n};\n\n/**\n * Checks and calls the parent component's _suspended method, passing in the\n * suspended vnode. This is a way for a parent (e.g. SuspenseList) to get notified\n * that one of its children/descendants suspended.\n *\n * The parent MAY return a callback. The callback will get called when the\n * suspension resolves, notifying the parent of the fact.\n * Moreover, the callback gets function `unsuspend` as a parameter. The resolved\n * child descendant will not actually get unsuspended until `unsuspend` gets called.\n * This is a way for the parent to delay unsuspending.\n *\n * If the parent does not return a callback then the resolved vnode\n * gets unsuspended immediately when it resolves.\n *\n * @param {import('./internal').VNode} vnode\n * @returns {((unsuspend: () => void) => void)?}\n */\nexport function suspended(vnode) {\n\t/** @type {import('./internal').Component} */\n\tlet component = vnode._parent._component;\n\treturn component && component._suspended && component._suspended(vnode);\n}\n\nexport function lazy(loader) {\n\tlet prom;\n\tlet component;\n\tlet error;\n\n\tfunction Lazy(props) {\n\t\tif (!prom) {\n\t\t\tprom = loader();\n\t\t\tprom.then(\n\t\t\t\texports => {\n\t\t\t\t\tcomponent = exports.default || exports;\n\t\t\t\t},\n\t\t\t\te => {\n\t\t\t\t\terror = e;\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tif (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t\tif (!component) {\n\t\t\tthrow prom;\n\t\t}\n\n\t\treturn createElement(component, props);\n\t}\n\n\tLazy.displayName = 'Lazy';\n\tLazy._forwarded = true;\n\treturn Lazy;\n}\n", "import { Component, toChildArray } from 'preact';\nimport { suspended } from './suspense.js';\n\n// Indexes to linked list nodes (nodes are stored as arrays to save bytes).\nconst SUSPENDED_COUNT = 0;\nconst RESOLVED_COUNT = 1;\nconst NEXT_NODE = 2;\n\n// Having custom inheritance instead of a class here saves a lot of bytes.\nexport function SuspenseList() {\n\tthis._next = null;\n\tthis._map = null;\n}\n\n// Mark one of child's earlier suspensions as resolved.\n// Some pending callbacks may become callable due to this\n// (e.g. the last suspended descendant gets resolved when\n// revealOrder === 'together'). Process those callbacks as well.\nconst resolve = (list, child, node) => {\n\tif (++node[RESOLVED_COUNT] === node[SUSPENDED_COUNT]) {\n\t\t// The number a child (or any of its descendants) has been suspended\n\t\t// matches the number of times it's been resolved. Therefore we\n\t\t// mark the child as completely resolved by deleting it from ._map.\n\t\t// This is used to figure out when *all* children have been completely\n\t\t// resolved when revealOrder is 'together'.\n\t\tlist._map.delete(child);\n\t}\n\n\t// If revealOrder is falsy then we can do an early exit, as the\n\t// callbacks won't get queued in the node anyway.\n\t// If revealOrder is 'together' then also do an early exit\n\t// if all suspended descendants have not yet been resolved.\n\tif (\n\t\t!list.props.revealOrder ||\n\t\t(list.props.revealOrder[0] === 't' && list._map.size)\n\t) {\n\t\treturn;\n\t}\n\n\t// Walk the currently suspended children in order, calling their\n\t// stored callbacks on the way. Stop if we encounter a child that\n\t// has not been completely resolved yet.\n\tnode = list._next;\n\twhile (node) {\n\t\twhile (node.length > 3) {\n\t\t\tnode.pop()();\n\t\t}\n\t\tif (node[RESOLVED_COUNT] < node[SUSPENDED_COUNT]) {\n\t\t\tbreak;\n\t\t}\n\t\tlist._next = node = node[NEXT_NODE];\n\t}\n};\n\n// Things we do here to save some bytes but are not proper JS inheritance:\n// - call `new Component()` as the prototype\n// - do not set `Suspense.prototype.constructor` to `Suspense`\nSuspenseList.prototype = new Component();\n\nSuspenseList.prototype._suspended = function(child) {\n\tconst list = this;\n\tconst delegated = suspended(list._vnode);\n\n\tlet node = list._map.get(child);\n\tnode[SUSPENDED_COUNT]++;\n\n\treturn unsuspend => {\n\t\tconst wrappedUnsuspend = () => {\n\t\t\tif (!list.props.revealOrder) {\n\t\t\t\t// Special case the undefined (falsy) revealOrder, as there\n\t\t\t\t// is no need to coordinate a specific order or unsuspends.\n\t\t\t\tunsuspend();\n\t\t\t} else {\n\t\t\t\tnode.push(unsuspend);\n\t\t\t\tresolve(list, child, node);\n\t\t\t}\n\t\t};\n\t\tif (delegated) {\n\t\t\tdelegated(wrappedUnsuspend);\n\t\t} else {\n\t\t\twrappedUnsuspend();\n\t\t}\n\t};\n};\n\nSuspenseList.prototype.render = function(props) {\n\tthis._next = null;\n\tthis._map = new Map();\n\n\tconst children = toChildArray(props.children);\n\tif (props.revealOrder && props.revealOrder[0] === 'b') {\n\t\t// If order === 'backwards' (or, well, anything starting with a 'b')\n\t\t// then flip the child list around so that the last child will be\n\t\t// the first in the linked list.\n\t\tchildren.reverse();\n\t}\n\t// Build the linked list. Iterate through the children in reverse order\n\t// so that `_next` points to the first linked list node to be resolved.\n\tfor (let i = children.length; i--; ) {\n\t\t// Create a new linked list node as an array of form:\n\t\t// \t[suspended_count, resolved_count, next_node]\n\t\t// where suspended_count and resolved_count are numeric counters for\n\t\t// keeping track how many times a node has been suspended and resolved.\n\t\t//\n\t\t// Note that suspended_count starts from 1 instead of 0, so we can block\n\t\t// processing callbacks until componentDidMount has been called. In a sense\n\t\t// node is suspended at least until componentDidMount gets called!\n\t\t//\n\t\t// Pending callbacks are added to the end of the node:\n\t\t// \t[suspended_count, resolved_count, next_node, callback_0, callback_1, ...]\n\t\tthis._map.set(children[i], (this._next = [1, 0, this._next]));\n\t}\n\treturn props.children;\n};\n\nSuspenseList.prototype.componentDidUpdate = SuspenseList.prototype.componentDidMount = function() {\n\t// Iterate through all children after mounting for two reasons:\n\t// 1. As each node[SUSPENDED_COUNT] starts from 1, this iteration increases\n\t// each node[RELEASED_COUNT] by 1, therefore balancing the counters.\n\t// The nodes can now be completely consumed from the linked list.\n\t// 2. Handle nodes that might have gotten resolved between render and\n\t// componentDidMount.\n\tthis._map.forEach((node, child) => {\n\t\tresolve(this, child, node);\n\t});\n};\n", "import { createElement, render } from 'preact';\n\n/**\n * @param {import('../../src/index').RenderableProps<{ context: any }>} props\n */\nfunction ContextProvider(props) {\n\tthis.getChildContext = () => props.context;\n\treturn props.children;\n}\n\n/**\n * Portal component\n * @this {import('./internal').Component}\n * @param {object | null | undefined} props\n *\n * TODO: use createRoot() instead of fake root\n */\nfunction Portal(props) {\n\tconst _this = this;\n\tlet container = props._container;\n\n\t_this.componentWillUnmount = function() {\n\t\trender(null, _this._temp);\n\t\t_this._temp = null;\n\t\t_this._container = null;\n\t};\n\n\t// When we change container we should clear our old container and\n\t// indicate a new mount.\n\tif (_this._container && _this._container !== container) {\n\t\t_this.componentWillUnmount();\n\t}\n\n\t// When props.vnode is undefined/false/null we are dealing with some kind of\n\t// conditional vnode. This should not trigger a render.\n\tif (props._vnode) {\n\t\tif (!_this._temp) {\n\t\t\t_this._container = container;\n\n\t\t\t// Create a fake DOM parent node that manages a subset of `container`'s children:\n\t\t\t_this._temp = {\n\t\t\t\tnodeType: 1,\n\t\t\t\tparentNode: container,\n\t\t\t\tchildNodes: [],\n\t\t\t\tappendChild(child) {\n\t\t\t\t\tthis.childNodes.push(child);\n\t\t\t\t\t_this._container.appendChild(child);\n\t\t\t\t},\n\t\t\t\tinsertBefore(child, before) {\n\t\t\t\t\tthis.childNodes.push(child);\n\t\t\t\t\t_this._container.appendChild(child);\n\t\t\t\t},\n\t\t\t\tremoveChild(child) {\n\t\t\t\t\tthis.childNodes.splice(this.childNodes.indexOf(child) >>> 1, 1);\n\t\t\t\t\t_this._container.removeChild(child);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\t// Render our wrapping element into temp.\n\t\trender(\n\t\t\tcreateElement(ContextProvider, { context: _this.context }, props._vnode),\n\t\t\t_this._temp\n\t\t);\n\t}\n\t// When we come from a conditional render, on a mounted\n\t// portal we should clear the DOM.\n\telse if (_this._temp) {\n\t\t_this.componentWillUnmount();\n\t}\n}\n\n/**\n * Create a `Portal` to continue rendering the vnode tree at a different DOM node\n * @param {import('./internal').VNode} vnode The vnode to render\n * @param {import('./internal').PreactElement} container The DOM node to continue rendering in to.\n */\nexport function createPortal(vnode, container) {\n\tconst el = createElement(Portal, { _vnode: vnode, _container: container });\n\tel.containerInfo = container;\n\treturn el;\n}\n", "import {\n\trender as preactRender,\n\thydrate as preactHydrate,\n\toptions,\n\ttoChildArray,\n\tComponent\n} from 'preact';\n\nexport const REACT_ELEMENT_TYPE =\n\t(typeof Symbol != 'undefined' && Symbol.for && Symbol.for('react.element')) ||\n\t0xeac7;\n\nconst CAMEL_PROPS = /^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/;\n\nconst IS_DOM = typeof document !== 'undefined';\n\n// Input types for which onchange should not be converted to oninput.\n// type=\"file|checkbox|radio\", plus \"range\" in IE11.\n// (IE11 doesn't support Symbol, which we use here to turn `rad` into `ra` which matches \"range\")\nconst onChangeInputType = type =>\n\t(typeof Symbol != 'undefined' && typeof Symbol() == 'symbol'\n\t\t? /fil|che|rad/i\n\t\t: /fil|che|ra/i\n\t).test(type);\n\n// Some libraries like `react-virtualized` explicitly check for this.\nComponent.prototype.isReactComponent = {};\n\n// `UNSAFE_*` lifecycle hooks\n// Preact only ever invokes the unprefixed methods.\n// Here we provide a base \"fallback\" implementation that calls any defined UNSAFE_ prefixed method.\n// - If a component defines its own `componentDidMount()` (including via defineProperty), use that.\n// - If a component defines `UNSAFE_componentDidMount()`, `componentDidMount` is the alias getter/setter.\n// - If anything assigns to an `UNSAFE_*` property, the assignment is forwarded to the unprefixed property.\n// See https://github.com/preactjs/preact/issues/1941\n[\n\t'componentWillMount',\n\t'componentWillReceiveProps',\n\t'componentWillUpdate'\n].forEach(key => {\n\tObject.defineProperty(Component.prototype, key, {\n\t\tconfigurable: true,\n\t\tget() {\n\t\t\treturn this['UNSAFE_' + key];\n\t\t},\n\t\tset(v) {\n\t\t\tObject.defineProperty(this, key, {\n\t\t\t\tconfigurable: true,\n\t\t\t\twritable: true,\n\t\t\t\tvalue: v\n\t\t\t});\n\t\t}\n\t});\n});\n\n/**\n * Proxy render() since React returns a Component reference.\n * @param {import('./internal').VNode} vnode VNode tree to render\n * @param {import('./internal').PreactElement} parent DOM node to render vnode tree into\n * @param {() => void} [callback] Optional callback that will be called after rendering\n * @returns {import('./internal').Component | null} The root component reference or null\n */\nexport function render(vnode, parent, callback) {\n\t// React destroys any existing DOM nodes, see #1727\n\t// ...but only on the first render, see #1828\n\tif (parent._children == null) {\n\t\tparent.textContent = '';\n\t}\n\n\tpreactRender(vnode, parent);\n\tif (typeof callback == 'function') callback();\n\n\treturn vnode ? vnode._component : null;\n}\n\nexport function hydrate(vnode, parent, callback) {\n\tpreactHydrate(vnode, parent);\n\tif (typeof callback == 'function') callback();\n\n\treturn vnode ? vnode._component : null;\n}\n\nlet oldEventHook = options.event;\noptions.event = e => {\n\tif (oldEventHook) e = oldEventHook(e);\n\te.persist = empty;\n\te.isPropagationStopped = isPropagationStopped;\n\te.isDefaultPrevented = isDefaultPrevented;\n\treturn (e.nativeEvent = e);\n};\n\nfunction empty() {}\n\nfunction isPropagationStopped() {\n\treturn this.cancelBubble;\n}\n\nfunction isDefaultPrevented() {\n\treturn this.defaultPrevented;\n}\n\nlet classNameDescriptor = {\n\tconfigurable: true,\n\tget() {\n\t\treturn this.class;\n\t}\n};\n\nlet oldVNodeHook = options.vnode;\noptions.vnode = vnode => {\n\tlet type = vnode.type;\n\tlet props = vnode.props;\n\tlet normalizedProps = props;\n\n\t// only normalize props on Element nodes\n\tif (typeof type === 'string') {\n\t\tconst nonCustomElement = type.indexOf('-') === -1;\n\t\tnormalizedProps = {};\n\n\t\tfor (let i in props) {\n\t\t\tlet value = props[i];\n\n\t\t\tif (IS_DOM && i === 'children' && type === 'noscript') {\n\t\t\t\t// Emulate React's behavior of not rendering the contents of noscript tags on the client.\n\t\t\t\tcontinue;\n\t\t\t} else if (i === 'value' && 'defaultValue' in props && value == null) {\n\t\t\t\t// Skip applying value if it is null/undefined and we already set\n\t\t\t\t// a default value\n\t\t\t\tcontinue;\n\t\t\t} else if (\n\t\t\t\ti === 'defaultValue' &&\n\t\t\t\t'value' in props &&\n\t\t\t\tprops.value == null\n\t\t\t) {\n\t\t\t\t// `defaultValue` is treated as a fallback `value` when a value prop is present but null/undefined.\n\t\t\t\t// `defaultValue` for Elements with no value prop is the same as the DOM defaultValue property.\n\t\t\t\ti = 'value';\n\t\t\t} else if (i === 'download' && value === true) {\n\t\t\t\t// Calling `setAttribute` with a truthy value will lead to it being\n\t\t\t\t// passed as a stringified value, e.g. `download=\"true\"`. React\n\t\t\t\t// converts it to an empty string instead, otherwise the attribute\n\t\t\t\t// value will be used as the file name and the file will be called\n\t\t\t\t// \"true\" upon downloading it.\n\t\t\t\tvalue = '';\n\t\t\t} else if (/ondoubleclick/i.test(i)) {\n\t\t\t\ti = 'ondblclick';\n\t\t\t} else if (\n\t\t\t\t/^onchange(textarea|input)/i.test(i + type) &&\n\t\t\t\t!onChangeInputType(props.type)\n\t\t\t) {\n\t\t\t\ti = 'oninput';\n\t\t\t} else if (/^onfocus$/i.test(i)) {\n\t\t\t\ti = 'onfocusin';\n\t\t\t} else if (/^onblur$/i.test(i)) {\n\t\t\t\ti = 'onfocusout';\n\t\t\t} else if (/^on(Ani|Tra|Tou|BeforeInp|Compo)/.test(i)) {\n\t\t\t\ti = i.toLowerCase();\n\t\t\t} else if (nonCustomElement && CAMEL_PROPS.test(i)) {\n\t\t\t\ti = i.replace(/[A-Z0-9]/g, '-$&').toLowerCase();\n\t\t\t} else if (value === null) {\n\t\t\t\tvalue = undefined;\n\t\t\t}\n\n\t\t\t// Add support for onInput and onChange, see #3561\n\t\t\t// if we have an oninput prop already change it to oninputCapture\n\t\t\tif (/^oninput$/i.test(i)) {\n\t\t\t\ti = i.toLowerCase();\n\t\t\t\tif (normalizedProps[i]) {\n\t\t\t\t\ti = 'oninputCapture';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tnormalizedProps[i] = value;\n\t\t}\n\n\t\t// Add support for array select values: <select multiple value={[]} />\n\t\tif (\n\t\t\ttype == 'select' &&\n\t\t\tnormalizedProps.multiple &&\n\t\t\tArray.isArray(normalizedProps.value)\n\t\t) {\n\t\t\t// forEach() always returns undefined, which we abuse here to unset the value prop.\n\t\t\tnormalizedProps.value = toChildArray(props.children).forEach(child => {\n\t\t\t\tchild.props.selected =\n\t\t\t\t\tnormalizedProps.value.indexOf(child.props.value) != -1;\n\t\t\t});\n\t\t}\n\n\t\t// Adding support for defaultValue in select tag\n\t\tif (type == 'select' && normalizedProps.defaultValue != null) {\n\t\t\tnormalizedProps.value = toChildArray(props.children).forEach(child => {\n\t\t\t\tif (normalizedProps.multiple) {\n\t\t\t\t\tchild.props.selected =\n\t\t\t\t\t\tnormalizedProps.defaultValue.indexOf(child.props.value) != -1;\n\t\t\t\t} else {\n\t\t\t\t\tchild.props.selected =\n\t\t\t\t\t\tnormalizedProps.defaultValue == child.props.value;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tvnode.props = normalizedProps;\n\n\t\tif (props.class != props.className) {\n\t\t\tclassNameDescriptor.enumerable = 'className' in props;\n\t\t\tif (props.className != null) normalizedProps.class = props.className;\n\t\t\tObject.defineProperty(normalizedProps, 'className', classNameDescriptor);\n\t\t}\n\t}\n\n\tvnode.$$typeof = REACT_ELEMENT_TYPE;\n\n\tif (oldVNodeHook) oldVNodeHook(vnode);\n};\n\n// Only needed for react-relay\nlet currentComponent;\nconst oldBeforeRender = options._render;\noptions._render = function(vnode) {\n\tif (oldBeforeRender) {\n\t\toldBeforeRender(vnode);\n\t}\n\tcurrentComponent = vnode._component;\n};\n\n// This is a very very private internal function for React it\n// is used to sort-of do runtime dependency injection. So far\n// only `react-relay` makes use of it. It uses it to read the\n// context value.\nexport const __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = {\n\tReactCurrentDispatcher: {\n\t\tcurrent: {\n\t\t\treadContext(context) {\n\t\t\t\treturn currentComponent._globalContext[context._id].props.value;\n\t\t\t}\n\t\t}\n\t}\n};\n", "import {\n\tcreateElement,\n\trender as preactRender,\n\tcloneElement as preactCloneElement,\n\tcreateRef,\n\tComponent,\n\tcreateContext,\n\tFragment\n} from 'preact';\nimport {\n\tuseState,\n\tuseId,\n\tuseReducer,\n\tuseEffect,\n\tuseLayoutEffect,\n\tuseRef,\n\tuseImperativeHandle,\n\tuseMemo,\n\tuseCallback,\n\tuseContext,\n\tuseDebugValue\n} from 'preact/hooks';\nimport { PureComponent } from './PureComponent';\nimport { memo } from './memo';\nimport { forwardRef } from './forwardRef';\nimport { Children } from './Children';\nimport { Suspense, lazy } from './suspense';\nimport { SuspenseList } from './suspense-list';\nimport { createPortal } from './portals';\nimport { is } from './util';\nimport {\n\thydrate,\n\trender,\n\tREACT_ELEMENT_TYPE,\n\t__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\n} from './render';\n\nconst version = '17.0.2'; // trick libraries to think we are react\n\n/**\n * Legacy version of createElement.\n * @param {import('./internal').VNode[\"type\"]} type The node name or Component constructor\n */\nfunction createFactory(type) {\n\treturn createElement.bind(null, type);\n}\n\n/**\n * Check if the passed element is a valid (p)react node.\n * @param {*} element The element to check\n * @returns {boolean}\n */\nfunction isValidElement(element) {\n\treturn !!element && element.$$typeof === REACT_ELEMENT_TYPE;\n}\n\n/**\n * Wrap `cloneElement` to abort if the passed element is not a valid element and apply\n * all vnode normalizations.\n * @param {import('./internal').VNode} element The vnode to clone\n * @param {object} props Props to add when cloning\n * @param {Array<import('./internal').ComponentChildren>} rest Optional component children\n */\nfunction cloneElement(element) {\n\tif (!isValidElement(element)) return element;\n\treturn preactCloneElement.apply(null, arguments);\n}\n\n/**\n * Remove a component tree from the DOM, including state and event handlers.\n * @param {import('./internal').PreactElement} container\n * @returns {boolean}\n */\nfunction unmountComponentAtNode(container) {\n\tif (container._children) {\n\t\tpreactRender(null, container);\n\t\treturn true;\n\t}\n\treturn false;\n}\n\n/**\n * Get the matching DOM node for a component\n * @param {import('./internal').Component} component\n * @returns {import('./internal').PreactElement | null}\n */\nfunction findDOMNode(component) {\n\treturn (\n\t\t(component &&\n\t\t\t(component.base || (component.nodeType === 1 && component))) ||\n\t\tnull\n\t);\n}\n\n/**\n * Deprecated way to control batched rendering inside the reconciler, but we\n * already schedule in batches inside our rendering code\n * @template Arg\n * @param {(arg: Arg) => void} callback function that triggers the updated\n * @param {Arg} [arg] Optional argument that can be passed to the callback\n */\n// eslint-disable-next-line camelcase\nconst unstable_batchedUpdates = (callback, arg) => callback(arg);\n\n/**\n * In React, `flushSync` flushes the entire tree and forces a rerender. It's\n * implmented here as a no-op.\n * @template Arg\n * @template Result\n * @param {(arg: Arg) => Result} callback function that runs before the flush\n * @param {Arg} [arg] Optional arugment that can be passed to the callback\n * @returns\n */\nconst flushSync = (callback, arg) => callback(arg);\n\n/**\n * Strict Mode is not implemented in Preact, so we provide a stand-in for it\n * that just renders its children without imposing any restrictions.\n */\nconst StrictMode = Fragment;\n\nexport function startTransition(cb) {\n\tcb();\n}\n\nexport function useDeferredValue(val) {\n\treturn val;\n}\n\nexport function useTransition() {\n\treturn [false, startTransition];\n}\n\n// TODO: in theory this should be done after a VNode is diffed as we want to insert\n// styles/... before it attaches\nexport const useInsertionEffect = useLayoutEffect;\n\n/**\n * This is taken from https://github.com/facebook/react/blob/main/packages/use-sync-external-store/src/useSyncExternalStoreShimClient.js#L84\n * on a high level this cuts out the warnings, ... and attempts a smaller implementation\n */\nexport function useSyncExternalStore(subscribe, getSnapshot) {\n\tconst value = getSnapshot();\n\n\tconst [{ _instance }, forceUpdate] = useState({\n\t\t_instance: { _value: value, _getSnapshot: getSnapshot }\n\t});\n\n\tuseLayoutEffect(() => {\n\t\t_instance._value = value;\n\t\t_instance._getSnapshot = getSnapshot;\n\n\t\tif (!is(_instance._value, getSnapshot())) {\n\t\t\tforceUpdate({ _instance });\n\t\t}\n\t}, [subscribe, value, getSnapshot]);\n\n\tuseEffect(() => {\n\t\tif (!is(_instance._value, _instance._getSnapshot())) {\n\t\t\tforceUpdate({ _instance });\n\t\t}\n\n\t\treturn subscribe(() => {\n\t\t\tif (!is(_instance._value, _instance._getSnapshot())) {\n\t\t\t\tforceUpdate({ _instance });\n\t\t\t}\n\t\t});\n\t}, [subscribe]);\n\n\treturn value;\n}\n\nexport * from 'preact/hooks';\nexport {\n\tversion,\n\tChildren,\n\trender,\n\thydrate,\n\tunmountComponentAtNode,\n\tcreatePortal,\n\tcreateElement,\n\tcreateContext,\n\tcreateFactory,\n\tcloneElement,\n\tcreateRef,\n\tFragment,\n\tisValidElement,\n\tfindDOMNode,\n\tComponent,\n\tPureComponent,\n\tmemo,\n\tforwardRef,\n\tflushSync,\n\t// eslint-disable-next-line camelcase\n\tunstable_batchedUpdates,\n\tStrictMode,\n\tSuspense,\n\tSuspenseList,\n\tlazy,\n\t__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\n};\n\n// React copies the named exports to the default one.\nexport default {\n\tuseState,\n\tuseId,\n\tuseReducer,\n\tuseEffect,\n\tuseLayoutEffect,\n\tuseInsertionEffect,\n\tuseTransition,\n\tuseDeferredValue,\n\tuseSyncExternalStore,\n\tstartTransition,\n\tuseRef,\n\tuseImperativeHandle,\n\tuseMemo,\n\tuseCallback,\n\tuseContext,\n\tuseDebugValue,\n\tversion,\n\tChildren,\n\trender,\n\thydrate,\n\tunmountComponentAtNode,\n\tcreatePortal,\n\tcreateElement,\n\tcreateContext,\n\tcreateFactory,\n\tcloneElement,\n\tcreateRef,\n\tFragment,\n\tisValidElement,\n\tfindDOMNode,\n\tComponent,\n\tPureComponent,\n\tmemo,\n\tforwardRef,\n\tflushSync,\n\tunstable_batchedUpdates,\n\tStrictMode,\n\tSuspense,\n\tSuspenseList,\n\tlazy,\n\t__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\n};\n", "import { useEffect, useLayoutEffect, createContext, useContext, useState, createElement, useRef, useCallback, useDebugValue } from 'react';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nfunction __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\n\nvar noop = function () { };\n// Using noop() as the undefined value as undefined can possibly be replaced\n// by something else. Prettier ignore and extra parentheses are necessary here\n// to ensure that tsc doesn't remove the __NOINLINE__ comment.\n// prettier-ignore\nvar UNDEFINED = ( /*#__NOINLINE__*/noop());\nvar OBJECT = Object;\nvar isUndefined = function (v) { return v === UNDEFINED; };\nvar isFunction = function (v) { return typeof v == 'function'; };\nvar mergeObjects = function (a, b) { return OBJECT.assign({}, a, b); };\nvar STR_UNDEFINED = 'undefined';\n// NOTE: Use function to guarantee it's re-evaluated between jsdom and node runtime for tests.\nvar hasWindow = function () { return typeof window != STR_UNDEFINED; };\nvar hasDocument = function () { return typeof document != STR_UNDEFINED; };\nvar hasRequestAnimationFrame = function () {\n return hasWindow() && typeof window['requestAnimationFrame'] != STR_UNDEFINED;\n};\n\n// use WeakMap to store the object->key mapping\n// so the objects can be garbage collected.\n// WeakMap uses a hashtable under the hood, so the lookup\n// complexity is almost O(1).\nvar table = new WeakMap();\n// counter of the key\nvar counter = 0;\n// A stable hash implementation that supports:\n// - Fast and ensures unique hash properties\n// - Handles unserializable values\n// - Handles object key ordering\n// - Generates short results\n//\n// This is not a serialization function, and the result is not guaranteed to be\n// parsible.\nvar stableHash = function (arg) {\n var type = typeof arg;\n var constructor = arg && arg.constructor;\n var isDate = constructor == Date;\n var result;\n var index;\n if (OBJECT(arg) === arg && !isDate && constructor != RegExp) {\n // Object/function, not null/date/regexp. Use WeakMap to store the id first.\n // If it's already hashed, directly return the result.\n result = table.get(arg);\n if (result)\n return result;\n // Store the hash first for circular reference detection before entering the\n // recursive `stableHash` calls.\n // For other objects like set and map, we use this id directly as the hash.\n result = ++counter + '~';\n table.set(arg, result);\n if (constructor == Array) {\n // Array.\n result = '@';\n for (index = 0; index < arg.length; index++) {\n result += stableHash(arg[index]) + ',';\n }\n table.set(arg, result);\n }\n if (constructor == OBJECT) {\n // Object, sort keys.\n result = '#';\n var keys = OBJECT.keys(arg).sort();\n while (!isUndefined((index = keys.pop()))) {\n if (!isUndefined(arg[index])) {\n result += index + ':' + stableHash(arg[index]) + ',';\n }\n }\n table.set(arg, result);\n }\n }\n else {\n result = isDate\n ? arg.toJSON()\n : type == 'symbol'\n ? arg.toString()\n : type == 'string'\n ? JSON.stringify(arg)\n : '' + arg;\n }\n return result;\n};\n\n/**\n * Due to bug https://bugs.chromium.org/p/chromium/issues/detail?id=678075,\n * it's not reliable to detect if the browser is currently online or offline\n * based on `navigator.onLine`.\n * As a work around, we always assume it's online on first load, and change\n * the status upon `online` or `offline` events.\n */\nvar online = true;\nvar isOnline = function () { return online; };\nvar hasWin = hasWindow();\nvar hasDoc = hasDocument();\n// For node and React Native, `add/removeEventListener` doesn't exist on window.\nvar onWindowEvent = hasWin && window.addEventListener\n ? window.addEventListener.bind(window)\n : noop;\nvar onDocumentEvent = hasDoc ? document.addEventListener.bind(document) : noop;\nvar offWindowEvent = hasWin && window.removeEventListener\n ? window.removeEventListener.bind(window)\n : noop;\nvar offDocumentEvent = hasDoc\n ? document.removeEventListener.bind(document)\n : noop;\nvar isVisible = function () {\n var visibilityState = hasDoc && document.visibilityState;\n return isUndefined(visibilityState) || visibilityState !== 'hidden';\n};\nvar initFocus = function (callback) {\n // focus revalidate\n onDocumentEvent('visibilitychange', callback);\n onWindowEvent('focus', callback);\n return function () {\n offDocumentEvent('visibilitychange', callback);\n offWindowEvent('focus', callback);\n };\n};\nvar initReconnect = function (callback) {\n // revalidate on reconnected\n var onOnline = function () {\n online = true;\n callback();\n };\n // nothing to revalidate, just update the status\n var onOffline = function () {\n online = false;\n };\n onWindowEvent('online', onOnline);\n onWindowEvent('offline', onOffline);\n return function () {\n offWindowEvent('online', onOnline);\n offWindowEvent('offline', onOffline);\n };\n};\nvar preset = {\n isOnline: isOnline,\n isVisible: isVisible\n};\nvar defaultConfigOptions = {\n initFocus: initFocus,\n initReconnect: initReconnect\n};\n\nvar IS_SERVER = !hasWindow() || 'Deno' in window;\n// Polyfill requestAnimationFrame\nvar rAF = function (f) {\n return hasRequestAnimationFrame() ? window['requestAnimationFrame'](f) : setTimeout(f, 1);\n};\n// React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser.\nvar useIsomorphicLayoutEffect = IS_SERVER ? useEffect : useLayoutEffect;\n// This assignment is to extend the Navigator type to use effectiveType.\nvar navigatorConnection = typeof navigator !== 'undefined' &&\n navigator.connection;\n// Adjust the config based on slow connection status (<= 70Kbps).\nvar slowConnection = !IS_SERVER &&\n navigatorConnection &&\n (['slow-2g', '2g'].includes(navigatorConnection.effectiveType) ||\n navigatorConnection.saveData);\n\nvar serialize = function (key) {\n if (isFunction(key)) {\n try {\n key = key();\n }\n catch (err) {\n // dependencies not ready\n key = '';\n }\n }\n var args = [].concat(key);\n // If key is not falsy, or not an empty array, hash it.\n key =\n typeof key == 'string'\n ? key\n : (Array.isArray(key) ? key.length : key)\n ? stableHash(key)\n : '';\n var infoKey = key ? '$swr$' + key : '';\n return [key, args, infoKey];\n};\n\n// Global state used to deduplicate requests and store listeners\nvar SWRGlobalState = new WeakMap();\n\nvar FOCUS_EVENT = 0;\nvar RECONNECT_EVENT = 1;\nvar MUTATE_EVENT = 2;\n\nvar broadcastState = function (cache, key, data, error, isValidating, revalidate, broadcast) {\n if (broadcast === void 0) { broadcast = true; }\n var _a = SWRGlobalState.get(cache), EVENT_REVALIDATORS = _a[0], STATE_UPDATERS = _a[1], FETCH = _a[3];\n var revalidators = EVENT_REVALIDATORS[key];\n var updaters = STATE_UPDATERS[key];\n // Cache was populated, update states of all hooks.\n if (broadcast && updaters) {\n for (var i = 0; i < updaters.length; ++i) {\n updaters[i](data, error, isValidating);\n }\n }\n // If we also need to revalidate, only do it for the first hook.\n if (revalidate) {\n // Invalidate the key by deleting the concurrent request markers so new\n // requests will not be deduped.\n delete FETCH[key];\n if (revalidators && revalidators[0]) {\n return revalidators[0](MUTATE_EVENT).then(function () {\n return cache.get(key);\n });\n }\n }\n return cache.get(key);\n};\n\n// Global timestamp.\nvar __timestamp = 0;\nvar getTimestamp = function () { return ++__timestamp; };\n\nvar internalMutate = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return __awaiter(void 0, void 0, void 0, function () {\n var cache, _key, _data, _opts, options, populateCache, revalidate, rollbackOnError, customOptimisticData, _a, key, keyInfo, _b, MUTATION, data, error, beforeMutationTs, hasCustomOptimisticData, rollbackData, optimisticData, res;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n cache = args[0], _key = args[1], _data = args[2], _opts = args[3];\n options = typeof _opts === 'boolean' ? { revalidate: _opts } : _opts || {};\n populateCache = isUndefined(options.populateCache)\n ? true\n : options.populateCache;\n revalidate = options.revalidate !== false;\n rollbackOnError = options.rollbackOnError !== false;\n customOptimisticData = options.optimisticData;\n _a = serialize(_key), key = _a[0], keyInfo = _a[2];\n if (!key)\n return [2 /*return*/];\n _b = SWRGlobalState.get(cache), MUTATION = _b[2];\n // If there is no new data provided, revalidate the key with current state.\n if (args.length < 3) {\n // Revalidate and broadcast state.\n return [2 /*return*/, broadcastState(cache, key, cache.get(key), UNDEFINED, UNDEFINED, revalidate, true)];\n }\n data = _data;\n beforeMutationTs = getTimestamp();\n MUTATION[key] = [beforeMutationTs, 0];\n hasCustomOptimisticData = !isUndefined(customOptimisticData);\n rollbackData = cache.get(key);\n // Do optimistic data update.\n if (hasCustomOptimisticData) {\n optimisticData = isFunction(customOptimisticData)\n ? customOptimisticData(rollbackData)\n : customOptimisticData;\n cache.set(key, optimisticData);\n broadcastState(cache, key, optimisticData);\n }\n if (isFunction(data)) {\n // `data` is a function, call it passing current cache value.\n try {\n data = data(cache.get(key));\n }\n catch (err) {\n // If it throws an error synchronously, we shouldn't update the cache.\n error = err;\n }\n }\n if (!(data && isFunction(data.then))) return [3 /*break*/, 2];\n return [4 /*yield*/, data.catch(function (err) {\n error = err;\n })\n // Check if other mutations have occurred since we've started this mutation.\n // If there's a race we don't update cache or broadcast the change,\n // just return the data.\n ];\n case 1:\n // This means that the mutation is async, we need to check timestamps to\n // avoid race conditions.\n data = _c.sent();\n // Check if other mutations have occurred since we've started this mutation.\n // If there's a race we don't update cache or broadcast the change,\n // just return the data.\n if (beforeMutationTs !== MUTATION[key][0]) {\n if (error)\n throw error;\n return [2 /*return*/, data];\n }\n else if (error && hasCustomOptimisticData && rollbackOnError) {\n // Rollback. Always populate the cache in this case but without\n // transforming the data.\n populateCache = true;\n data = rollbackData;\n cache.set(key, rollbackData);\n }\n _c.label = 2;\n case 2:\n // If we should write back the cache after request.\n if (populateCache) {\n if (!error) {\n // Transform the result into data.\n if (isFunction(populateCache)) {\n data = populateCache(data, rollbackData);\n }\n // Only update cached data if there's no error. Data can be `undefined` here.\n cache.set(key, data);\n }\n // Always update or reset the error.\n cache.set(keyInfo, mergeObjects(cache.get(keyInfo), { error: error }));\n }\n // Reset the timestamp to mark the mutation has ended.\n MUTATION[key][1] = getTimestamp();\n return [4 /*yield*/, broadcastState(cache, key, data, error, UNDEFINED, revalidate, !!populateCache)\n // Throw error or return data\n ];\n case 3:\n res = _c.sent();\n // Throw error or return data\n if (error)\n throw error;\n return [2 /*return*/, populateCache ? res : data];\n }\n });\n });\n};\n\nvar revalidateAllKeys = function (revalidators, type) {\n for (var key in revalidators) {\n if (revalidators[key][0])\n revalidators[key][0](type);\n }\n};\nvar initCache = function (provider, options) {\n // The global state for a specific provider will be used to deduplicate\n // requests and store listeners. As well as a mutate function that bound to\n // the cache.\n // Provider's global state might be already initialized. Let's try to get the\n // global state associated with the provider first.\n if (!SWRGlobalState.has(provider)) {\n var opts = mergeObjects(defaultConfigOptions, options);\n // If there's no global state bound to the provider, create a new one with the\n // new mutate function.\n var EVENT_REVALIDATORS = {};\n var mutate = internalMutate.bind(UNDEFINED, provider);\n var unmount = noop;\n // Update the state if it's new, or the provider has been extended.\n SWRGlobalState.set(provider, [EVENT_REVALIDATORS, {}, {}, {}, mutate]);\n // This is a new provider, we need to initialize it and setup DOM events\n // listeners for `focus` and `reconnect` actions.\n if (!IS_SERVER) {\n // When listening to the native events for auto revalidations,\n // we intentionally put a delay (setTimeout) here to make sure they are\n // fired after immediate JavaScript executions, which can possibly be\n // React's state updates.\n // This avoids some unnecessary revalidations such as\n // https://github.com/vercel/swr/issues/1680.\n var releaseFocus_1 = opts.initFocus(setTimeout.bind(UNDEFINED, revalidateAllKeys.bind(UNDEFINED, EVENT_REVALIDATORS, FOCUS_EVENT)));\n var releaseReconnect_1 = opts.initReconnect(setTimeout.bind(UNDEFINED, revalidateAllKeys.bind(UNDEFINED, EVENT_REVALIDATORS, RECONNECT_EVENT)));\n unmount = function () {\n releaseFocus_1 && releaseFocus_1();\n releaseReconnect_1 && releaseReconnect_1();\n // When un-mounting, we need to remove the cache provider from the state\n // storage too because it's a side-effect. Otherwise when re-mounting we\n // will not re-register those event listeners.\n SWRGlobalState.delete(provider);\n };\n }\n // We might want to inject an extra layer on top of `provider` in the future,\n // such as key serialization, auto GC, etc.\n // For now, it's just a `Map` interface without any modifications.\n return [provider, mutate, unmount];\n }\n return [provider, SWRGlobalState.get(provider)[4]];\n};\n\n// error retry\nvar onErrorRetry = function (_, __, config, revalidate, opts) {\n var maxRetryCount = config.errorRetryCount;\n var currentRetryCount = opts.retryCount;\n // Exponential backoff\n var timeout = ~~((Math.random() + 0.5) *\n (1 << (currentRetryCount < 8 ? currentRetryCount : 8))) * config.errorRetryInterval;\n if (!isUndefined(maxRetryCount) && currentRetryCount > maxRetryCount) {\n return;\n }\n setTimeout(revalidate, timeout, opts);\n};\n// Default cache provider\nvar _a = initCache(new Map()), cache = _a[0], mutate = _a[1];\n// Default config\nvar defaultConfig = mergeObjects({\n // events\n onLoadingSlow: noop,\n onSuccess: noop,\n onError: noop,\n onErrorRetry: onErrorRetry,\n onDiscarded: noop,\n // switches\n revalidateOnFocus: true,\n revalidateOnReconnect: true,\n revalidateIfStale: true,\n shouldRetryOnError: true,\n // timeouts\n errorRetryInterval: slowConnection ? 10000 : 5000,\n focusThrottleInterval: 5 * 1000,\n dedupingInterval: 2 * 1000,\n loadingTimeout: slowConnection ? 5000 : 3000,\n // providers\n compare: function (currentData, newData) {\n return stableHash(currentData) == stableHash(newData);\n },\n isPaused: function () { return false; },\n cache: cache,\n mutate: mutate,\n fallback: {}\n}, \n// use web preset by default\npreset);\n\nvar mergeConfigs = function (a, b) {\n // Need to create a new object to avoid mutating the original here.\n var v = mergeObjects(a, b);\n // If two configs are provided, merge their `use` and `fallback` options.\n if (b) {\n var u1 = a.use, f1 = a.fallback;\n var u2 = b.use, f2 = b.fallback;\n if (u1 && u2) {\n v.use = u1.concat(u2);\n }\n if (f1 && f2) {\n v.fallback = mergeObjects(f1, f2);\n }\n }\n return v;\n};\n\nvar SWRConfigContext = createContext({});\nvar SWRConfig$1 = function (props) {\n var value = props.value;\n // Extend parent context values and middleware.\n var extendedConfig = mergeConfigs(useContext(SWRConfigContext), value);\n // Should not use the inherited provider.\n var provider = value && value.provider;\n // Use a lazy initialized state to create the cache on first access.\n var cacheContext = useState(function () {\n return provider\n ? initCache(provider(extendedConfig.cache || cache), value)\n : UNDEFINED;\n })[0];\n // Override the cache if a new provider is given.\n if (cacheContext) {\n extendedConfig.cache = cacheContext[0];\n extendedConfig.mutate = cacheContext[1];\n }\n // Unsubscribe events.\n useIsomorphicLayoutEffect(function () { return (cacheContext ? cacheContext[2] : UNDEFINED); }, []);\n return createElement(SWRConfigContext.Provider, mergeObjects(props, {\n value: extendedConfig\n }));\n};\n\n/**\n * An implementation of state with dependency-tracking.\n */\nvar useStateWithDeps = function (state, unmountedRef) {\n var rerender = useState({})[1];\n var stateRef = useRef(state);\n // If a state property (data, error or isValidating) is accessed by the render\n // function, we mark the property as a dependency so if it is updated again\n // in the future, we trigger a rerender.\n // This is also known as dependency-tracking.\n var stateDependenciesRef = useRef({\n data: false,\n error: false,\n isValidating: false\n });\n /**\n * @param payload To change stateRef, pass the values explicitly to setState:\n * @example\n * ```js\n * setState({\n * isValidating: false\n * data: newData // set data to newData\n * error: undefined // set error to undefined\n * })\n *\n * setState({\n * isValidating: false\n * data: undefined // set data to undefined\n * error: err // set error to err\n * })\n * ```\n */\n var setState = useCallback(function (payload) {\n var shouldRerender = false;\n var currentState = stateRef.current;\n for (var _ in payload) {\n var k = _;\n // If the property has changed, update the state and mark rerender as\n // needed.\n if (currentState[k] !== payload[k]) {\n currentState[k] = payload[k];\n // If the property is accessed by the component, a rerender should be\n // triggered.\n if (stateDependenciesRef.current[k]) {\n shouldRerender = true;\n }\n }\n }\n if (shouldRerender && !unmountedRef.current) {\n rerender({});\n }\n }, \n // config.suspense isn't allowed to change during the lifecycle\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []);\n // Always update the state reference.\n useIsomorphicLayoutEffect(function () {\n stateRef.current = state;\n });\n return [stateRef, stateDependenciesRef.current, setState];\n};\n\nvar normalize = function (args) {\n return isFunction(args[1])\n ? [args[0], args[1], args[2] || {}]\n : [args[0], null, (args[1] === null ? args[2] : args[1]) || {}];\n};\n\nvar useSWRConfig = function () {\n return mergeObjects(defaultConfig, useContext(SWRConfigContext));\n};\n\n// It's tricky to pass generic types as parameters, so we just directly override\n// the types here.\nvar withArgs = function (hook) {\n return function useSWRArgs() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n // Get the default and inherited configuration.\n var fallbackConfig = useSWRConfig();\n // Normalize arguments.\n var _a = normalize(args), key = _a[0], fn = _a[1], _config = _a[2];\n // Merge configurations.\n var config = mergeConfigs(fallbackConfig, _config);\n // Apply middleware\n var next = hook;\n var use = config.use;\n if (use) {\n for (var i = use.length; i-- > 0;) {\n next = use[i](next);\n }\n }\n return next(key, fn || config.fetcher, config);\n };\n};\n\n// Add a callback function to a list of keyed callback functions and return\n// the unsubscribe function.\nvar subscribeCallback = function (key, callbacks, callback) {\n var keyedRevalidators = callbacks[key] || (callbacks[key] = []);\n keyedRevalidators.push(callback);\n return function () {\n var index = keyedRevalidators.indexOf(callback);\n if (index >= 0) {\n // O(1): faster than splice\n keyedRevalidators[index] = keyedRevalidators[keyedRevalidators.length - 1];\n keyedRevalidators.pop();\n }\n };\n};\n\nvar WITH_DEDUPE = { dedupe: true };\nvar useSWRHandler = function (_key, fetcher, config) {\n var cache = config.cache, compare = config.compare, fallbackData = config.fallbackData, suspense = config.suspense, revalidateOnMount = config.revalidateOnMount, refreshInterval = config.refreshInterval, refreshWhenHidden = config.refreshWhenHidden, refreshWhenOffline = config.refreshWhenOffline;\n var _a = SWRGlobalState.get(cache), EVENT_REVALIDATORS = _a[0], STATE_UPDATERS = _a[1], MUTATION = _a[2], FETCH = _a[3];\n // `key` is the identifier of the SWR `data` state, `keyInfo` holds extra\n // states such as `error` and `isValidating` inside,\n // all of them are derived from `_key`.\n // `fnArgs` is an array of arguments parsed from the key, which will be passed\n // to the fetcher.\n var _b = serialize(_key), key = _b[0], fnArgs = _b[1], keyInfo = _b[2];\n // If it's the initial render of this hook.\n var initialMountedRef = useRef(false);\n // If the hook is unmounted already. This will be used to prevent some effects\n // to be called after unmounting.\n var unmountedRef = useRef(false);\n // Refs to keep the key and config.\n var keyRef = useRef(key);\n var fetcherRef = useRef(fetcher);\n var configRef = useRef(config);\n var getConfig = function () { return configRef.current; };\n var isActive = function () { return getConfig().isVisible() && getConfig().isOnline(); };\n var patchFetchInfo = function (info) {\n return cache.set(keyInfo, mergeObjects(cache.get(keyInfo), info));\n };\n // Get the current state that SWR should return.\n var cached = cache.get(key);\n var fallback = isUndefined(fallbackData)\n ? config.fallback[key]\n : fallbackData;\n var data = isUndefined(cached) ? fallback : cached;\n var info = cache.get(keyInfo) || {};\n var error = info.error;\n var isInitialMount = !initialMountedRef.current;\n // - Suspense mode and there's stale data for the initial render.\n // - Not suspense mode and there is no fallback data and `revalidateIfStale` is enabled.\n // - `revalidateIfStale` is enabled but `data` is not defined.\n var shouldRevalidate = function () {\n // If `revalidateOnMount` is set, we take the value directly.\n if (isInitialMount && !isUndefined(revalidateOnMount))\n return revalidateOnMount;\n // If it's paused, we skip revalidation.\n if (getConfig().isPaused())\n return false;\n // Under suspense mode, it will always fetch on render if there is no\n // stale data so no need to revalidate immediately on mount again.\n // If data exists, only revalidate if `revalidateIfStale` is true.\n if (suspense)\n return isUndefined(data) ? false : config.revalidateIfStale;\n // If there is no stale data, we need to revalidate on mount;\n // If `revalidateIfStale` is set to true, we will always revalidate.\n return isUndefined(data) || config.revalidateIfStale;\n };\n // Resolve the current validating state.\n var resolveValidating = function () {\n if (!key || !fetcher)\n return false;\n if (info.isValidating)\n return true;\n // If it's not mounted yet and it should revalidate on mount, revalidate.\n return isInitialMount && shouldRevalidate();\n };\n var isValidating = resolveValidating();\n var _c = useStateWithDeps({\n data: data,\n error: error,\n isValidating: isValidating\n }, unmountedRef), stateRef = _c[0], stateDependencies = _c[1], setState = _c[2];\n // The revalidation function is a carefully crafted wrapper of the original\n // `fetcher`, to correctly handle the many edge cases.\n var revalidate = useCallback(function (revalidateOpts) { return __awaiter(void 0, void 0, void 0, function () {\n var currentFetcher, newData, startAt, loading, opts, shouldStartNewRequest, isCurrentKeyMounted, cleanupState, newState, finishRequestAndUpdateState, mutationInfo, err_1;\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n currentFetcher = fetcherRef.current;\n if (!key ||\n !currentFetcher ||\n unmountedRef.current ||\n getConfig().isPaused()) {\n return [2 /*return*/, false];\n }\n loading = true;\n opts = revalidateOpts || {};\n shouldStartNewRequest = !FETCH[key] || !opts.dedupe;\n isCurrentKeyMounted = function () {\n return !unmountedRef.current &&\n key === keyRef.current &&\n initialMountedRef.current;\n };\n cleanupState = function () {\n // Check if it's still the same request before deleting.\n var requestInfo = FETCH[key];\n if (requestInfo && requestInfo[1] === startAt) {\n delete FETCH[key];\n }\n };\n newState = { isValidating: false };\n finishRequestAndUpdateState = function () {\n patchFetchInfo({ isValidating: false });\n // We can only set state if it's safe (still mounted with the same key).\n if (isCurrentKeyMounted()) {\n setState(newState);\n }\n };\n // Start fetching. Change the `isValidating` state, update the cache.\n patchFetchInfo({\n isValidating: true\n });\n setState({ isValidating: true });\n _b.label = 1;\n case 1:\n _b.trys.push([1, 3, , 4]);\n if (shouldStartNewRequest) {\n // Tell all other hooks to change the `isValidating` state.\n broadcastState(cache, key, stateRef.current.data, stateRef.current.error, true);\n // If no cache being rendered currently (it shows a blank page),\n // we trigger the loading slow event.\n if (config.loadingTimeout && !cache.get(key)) {\n setTimeout(function () {\n if (loading && isCurrentKeyMounted()) {\n getConfig().onLoadingSlow(key, config);\n }\n }, config.loadingTimeout);\n }\n // Start the request and save the timestamp.\n FETCH[key] = [currentFetcher.apply(void 0, fnArgs), getTimestamp()];\n }\n _a = FETCH[key], newData = _a[0], startAt = _a[1];\n return [4 /*yield*/, newData];\n case 2:\n newData = _b.sent();\n if (shouldStartNewRequest) {\n // If the request isn't interrupted, clean it up after the\n // deduplication interval.\n setTimeout(cleanupState, config.dedupingInterval);\n }\n // If there're other ongoing request(s), started after the current one,\n // we need to ignore the current one to avoid possible race conditions:\n // req1------------------>res1 (current one)\n // req2---------------->res2\n // the request that fired later will always be kept.\n // The timestamp maybe be `undefined` or a number\n if (!FETCH[key] || FETCH[key][1] !== startAt) {\n if (shouldStartNewRequest) {\n if (isCurrentKeyMounted()) {\n getConfig().onDiscarded(key);\n }\n }\n return [2 /*return*/, false];\n }\n // Clear error.\n patchFetchInfo({\n error: UNDEFINED\n });\n newState.error = UNDEFINED;\n mutationInfo = MUTATION[key];\n if (!isUndefined(mutationInfo) &&\n // case 1\n (startAt <= mutationInfo[0] ||\n // case 2\n startAt <= mutationInfo[1] ||\n // case 3\n mutationInfo[1] === 0)) {\n finishRequestAndUpdateState();\n if (shouldStartNewRequest) {\n if (isCurrentKeyMounted()) {\n getConfig().onDiscarded(key);\n }\n }\n return [2 /*return*/, false];\n }\n // Deep compare with latest state to avoid extra re-renders.\n // For local state, compare and assign.\n if (!compare(stateRef.current.data, newData)) {\n newState.data = newData;\n }\n else {\n // data and newData are deeply equal\n // it should be safe to broadcast the stale data\n newState.data = stateRef.current.data;\n // At the end of this function, `brocastState` invokes the `onStateUpdate` function,\n // which takes care of avoiding the re-render\n }\n // For global state, it's possible that the key has changed.\n // https://github.com/vercel/swr/pull/1058\n if (!compare(cache.get(key), newData)) {\n cache.set(key, newData);\n }\n // Trigger the successful callback if it's the original request.\n if (shouldStartNewRequest) {\n if (isCurrentKeyMounted()) {\n getConfig().onSuccess(newData, key, config);\n }\n }\n return [3 /*break*/, 4];\n case 3:\n err_1 = _b.sent();\n cleanupState();\n // Not paused, we continue handling the error. Otherwise discard it.\n if (!getConfig().isPaused()) {\n // Get a new error, don't use deep comparison for errors.\n patchFetchInfo({ error: err_1 });\n newState.error = err_1;\n // Error event and retry logic. Only for the actual request, not\n // deduped ones.\n if (shouldStartNewRequest && isCurrentKeyMounted()) {\n getConfig().onError(err_1, key, config);\n if ((typeof config.shouldRetryOnError === 'boolean' &&\n config.shouldRetryOnError) ||\n (isFunction(config.shouldRetryOnError) &&\n config.shouldRetryOnError(err_1))) {\n // When retrying, dedupe is always enabled\n if (isActive()) {\n // If it's active, stop. It will auto revalidate when refocusing\n // or reconnecting.\n getConfig().onErrorRetry(err_1, key, config, revalidate, {\n retryCount: (opts.retryCount || 0) + 1,\n dedupe: true\n });\n }\n }\n }\n }\n return [3 /*break*/, 4];\n case 4:\n // Mark loading as stopped.\n loading = false;\n // Update the current hook's state.\n finishRequestAndUpdateState();\n // Here is the source of the request, need to tell all other hooks to\n // update their states.\n if (isCurrentKeyMounted() && shouldStartNewRequest) {\n broadcastState(cache, key, newState.data, newState.error, false);\n }\n return [2 /*return*/, true];\n }\n });\n }); }, \n // `setState` is immutable, and `eventsCallback`, `fnArgs`, `keyInfo`,\n // and `keyValidating` are depending on `key`, so we can exclude them from\n // the deps array.\n //\n // FIXME:\n // `fn` and `config` might be changed during the lifecycle,\n // but they might be changed every render like this.\n // `useSWR('key', () => fetch('/api/'), { suspense: true })`\n // So we omit the values from the deps array\n // even though it might cause unexpected behaviors.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [key]);\n // Similar to the global mutate, but bound to the current cache and key.\n // `cache` isn't allowed to change during the lifecycle.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n var boundMutate = useCallback(\n // By using `bind` we don't need to modify the size of the rest arguments.\n // Due to https://github.com/microsoft/TypeScript/issues/37181, we have to\n // cast it to any for now.\n internalMutate.bind(UNDEFINED, cache, function () { return keyRef.current; }), \n // eslint-disable-next-line react-hooks/exhaustive-deps\n []);\n // Always update fetcher and config refs.\n useIsomorphicLayoutEffect(function () {\n fetcherRef.current = fetcher;\n configRef.current = config;\n });\n // After mounted or key changed.\n useIsomorphicLayoutEffect(function () {\n if (!key)\n return;\n var keyChanged = key !== keyRef.current;\n var softRevalidate = revalidate.bind(UNDEFINED, WITH_DEDUPE);\n // Expose state updater to global event listeners. So we can update hook's\n // internal state from the outside.\n var onStateUpdate = function (updatedData, updatedError, updatedIsValidating) {\n setState(mergeObjects({\n error: updatedError,\n isValidating: updatedIsValidating\n }, \n // Since `setState` only shallowly compares states, we do a deep\n // comparison here.\n compare(stateRef.current.data, updatedData)\n ? UNDEFINED\n : {\n data: updatedData\n }));\n };\n // Expose revalidators to global event listeners. So we can trigger\n // revalidation from the outside.\n var nextFocusRevalidatedAt = 0;\n var onRevalidate = function (type) {\n if (type == FOCUS_EVENT) {\n var now = Date.now();\n if (getConfig().revalidateOnFocus &&\n now > nextFocusRevalidatedAt &&\n isActive()) {\n nextFocusRevalidatedAt = now + getConfig().focusThrottleInterval;\n softRevalidate();\n }\n }\n else if (type == RECONNECT_EVENT) {\n if (getConfig().revalidateOnReconnect && isActive()) {\n softRevalidate();\n }\n }\n else if (type == MUTATE_EVENT) {\n return revalidate();\n }\n return;\n };\n var unsubUpdate = subscribeCallback(key, STATE_UPDATERS, onStateUpdate);\n var unsubEvents = subscribeCallback(key, EVENT_REVALIDATORS, onRevalidate);\n // Mark the component as mounted and update corresponding refs.\n unmountedRef.current = false;\n keyRef.current = key;\n initialMountedRef.current = true;\n // When `key` updates, reset the state to the initial value\n // and trigger a rerender if necessary.\n if (keyChanged) {\n setState({\n data: data,\n error: error,\n isValidating: isValidating\n });\n }\n // Trigger a revalidation.\n if (shouldRevalidate()) {\n if (isUndefined(data) || IS_SERVER) {\n // Revalidate immediately.\n softRevalidate();\n }\n else {\n // Delay the revalidate if we have data to return so we won't block\n // rendering.\n rAF(softRevalidate);\n }\n }\n return function () {\n // Mark it as unmounted.\n unmountedRef.current = true;\n unsubUpdate();\n unsubEvents();\n };\n }, [key, revalidate]);\n // Polling\n useIsomorphicLayoutEffect(function () {\n var timer;\n function next() {\n // Use the passed interval\n // ...or invoke the function with the updated data to get the interval\n var interval = isFunction(refreshInterval)\n ? refreshInterval(data)\n : refreshInterval;\n // We only start next interval if `refreshInterval` is not 0, and:\n // - `force` is true, which is the start of polling\n // - or `timer` is not 0, which means the effect wasn't canceled\n if (interval && timer !== -1) {\n timer = setTimeout(execute, interval);\n }\n }\n function execute() {\n // Check if it's OK to execute:\n // Only revalidate when the page is visible, online and not errored.\n if (!stateRef.current.error &&\n (refreshWhenHidden || getConfig().isVisible()) &&\n (refreshWhenOffline || getConfig().isOnline())) {\n revalidate(WITH_DEDUPE).then(next);\n }\n else {\n // Schedule next interval to check again.\n next();\n }\n }\n next();\n return function () {\n if (timer) {\n clearTimeout(timer);\n timer = -1;\n }\n };\n }, [refreshInterval, refreshWhenHidden, refreshWhenOffline, revalidate]);\n // Display debug info in React DevTools.\n useDebugValue(data);\n // In Suspense mode, we can't return the empty `data` state.\n // If there is `error`, the `error` needs to be thrown to the error boundary.\n // If there is no `error`, the `revalidation` promise needs to be thrown to\n // the suspense boundary.\n if (suspense && isUndefined(data) && key) {\n // Always update fetcher and config refs even with the Suspense mode.\n fetcherRef.current = fetcher;\n configRef.current = config;\n unmountedRef.current = false;\n throw isUndefined(error) ? revalidate(WITH_DEDUPE) : error;\n }\n return {\n mutate: boundMutate,\n get data() {\n stateDependencies.data = true;\n return data;\n },\n get error() {\n stateDependencies.error = true;\n return error;\n },\n get isValidating() {\n stateDependencies.isValidating = true;\n return isValidating;\n }\n };\n};\nvar SWRConfig = OBJECT.defineProperty(SWRConfig$1, 'default', {\n value: defaultConfig\n});\nvar unstable_serialize = function (key) { return serialize(key)[0]; };\nvar useSWR = withArgs(useSWRHandler);\n\n// useSWR\n\nexport { SWRConfig, useSWR as default, mutate, unstable_serialize, useSWRConfig };\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { createContext } from \"preact\";\nimport { useContext } from \"preact/hooks\";\n\ninterface Type {\n id: string;\n token?: string;\n admin?: boolean;\n changeToken: (t?: string) => void;\n}\n\nconst Context = createContext<Type>({} as any);\n\nexport const InstanceContextProvider = Context.Provider;\nexport const useInstanceContext = (): Type => useContext(Context);\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useSWRConfig } from \"swr\";\nimport { MerchantBackend } from \"../declaration.js\";\nimport { useBackendContext } from \"../context/backend.js\";\nimport { useCallback, useEffect, useState } from \"preact/hooks\";\nimport { useInstanceContext } from \"../context/instance.js\";\nimport {\n HttpResponse,\n HttpResponseOk,\n RequestOptions,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { useApiContext } from \"@gnu-taler/web-util/lib/index.browser\";\n\nexport function useMatchMutate(): (\n re: RegExp,\n value?: unknown,\n) => Promise<any> {\n const { cache, mutate } = useSWRConfig();\n\n if (!(cache instanceof Map)) {\n throw new Error(\n \"matchMutate requires the cache provider to be a Map instance\",\n );\n }\n\n return function matchRegexMutate(re: RegExp, value?: unknown) {\n const allKeys = Array.from(cache.keys());\n const keys = allKeys.filter((key) => re.test(key));\n const mutations = keys.map((key) => {\n return mutate(key, value, true);\n });\n return Promise.all(mutations);\n };\n}\n\nexport function useBackendInstancesTestForAdmin(): HttpResponse<\n MerchantBackend.Instances.InstancesResponse,\n MerchantBackend.ErrorDetail\n> {\n const { request } = useBackendBaseRequest();\n\n type Type = MerchantBackend.Instances.InstancesResponse;\n\n const [result, setResult] = useState<\n HttpResponse<Type, MerchantBackend.ErrorDetail>\n >({ loading: true });\n\n useEffect(() => {\n request<Type>(`/management/instances`)\n .then((data) => setResult(data))\n .catch((error) => setResult(error));\n }, [request]);\n\n return result;\n}\n\nexport function useBackendConfig(): HttpResponse<\n MerchantBackend.VersionResponse,\n MerchantBackend.ErrorDetail\n> {\n const { request } = useBackendBaseRequest();\n\n type Type = MerchantBackend.VersionResponse;\n\n const [result, setResult] = useState<\n HttpResponse<Type, MerchantBackend.ErrorDetail>\n >({ loading: true });\n\n useEffect(() => {\n request<Type>(`/config`)\n .then((data) => setResult(data))\n .catch((error) => setResult(error));\n }, [request]);\n\n return result;\n}\n\ninterface useBackendInstanceRequestType {\n request: <T>(\n endpoint: string,\n options?: RequestOptions,\n ) => Promise<HttpResponseOk<T>>;\n fetcher: <T>(endpoint: string) => Promise<HttpResponseOk<T>>;\n reserveDetailFetcher: <T>(endpoint: string) => Promise<HttpResponseOk<T>>;\n tipsDetailFetcher: <T>(endpoint: string) => Promise<HttpResponseOk<T>>;\n multiFetcher: <T>(url: string[]) => Promise<HttpResponseOk<T>[]>;\n orderFetcher: <T>(\n endpoint: string,\n paid?: YesOrNo,\n refunded?: YesOrNo,\n wired?: YesOrNo,\n searchDate?: Date,\n delta?: number,\n ) => Promise<HttpResponseOk<T>>;\n transferFetcher: <T>(\n endpoint: string,\n payto_uri?: string,\n verified?: string,\n position?: string,\n delta?: number,\n ) => Promise<HttpResponseOk<T>>;\n templateFetcher: <T>(\n endpoint: string,\n position?: string,\n delta?: number,\n ) => Promise<HttpResponseOk<T>>;\n webhookFetcher: <T>(\n endpoint: string,\n position?: string,\n delta?: number,\n ) => Promise<HttpResponseOk<T>>;\n}\ninterface useBackendBaseRequestType {\n request: <T>(\n endpoint: string,\n options?: RequestOptions,\n ) => Promise<HttpResponseOk<T>>;\n}\n\ntype YesOrNo = \"yes\" | \"no\";\n\n/**\n *\n * @param root the request is intended to the base URL and no the instance URL\n * @returns request handler to\n */\nexport function useBackendBaseRequest(): useBackendBaseRequestType {\n const { url: backend, token } = useBackendContext();\n const { request: requestHandler } = useApiContext();\n\n const request = useCallback(\n function requestImpl<T>(\n endpoint: string,\n options: RequestOptions = {},\n ): Promise<HttpResponseOk<T>> {\n return requestHandler<T>(backend, endpoint, { token, ...options });\n },\n [backend, token],\n );\n\n return { request };\n}\n\nexport function useBackendInstanceRequest(): useBackendInstanceRequestType {\n const { url: rootBackendUrl, token: rootToken } = useBackendContext();\n const { token: instanceToken, id, admin } = useInstanceContext();\n const { request: requestHandler } = useApiContext();\n\n const { baseUrl, token } = !admin\n ? { baseUrl: rootBackendUrl, token: rootToken }\n : { baseUrl: `${rootBackendUrl}/instances/${id}`, token: instanceToken };\n\n const request = useCallback(\n function requestImpl<T>(\n endpoint: string,\n options: RequestOptions = {},\n ): Promise<HttpResponseOk<T>> {\n return requestHandler<T>(baseUrl, endpoint, { token, ...options });\n },\n [baseUrl, token],\n );\n\n const multiFetcher = useCallback(\n function multiFetcherImpl<T>(\n endpoints: string[],\n ): Promise<HttpResponseOk<T>[]> {\n return Promise.all(\n endpoints.map((endpoint) =>\n requestHandler<T>(baseUrl, endpoint, { token }),\n ),\n );\n },\n [baseUrl, token],\n );\n\n const fetcher = useCallback(\n function fetcherImpl<T>(endpoint: string): Promise<HttpResponseOk<T>> {\n return requestHandler<T>(baseUrl, endpoint, { token });\n },\n [baseUrl, token],\n );\n\n const orderFetcher = useCallback(\n function orderFetcherImpl<T>(\n endpoint: string,\n paid?: YesOrNo,\n refunded?: YesOrNo,\n wired?: YesOrNo,\n searchDate?: Date,\n delta?: number,\n ): Promise<HttpResponseOk<T>> {\n const date_ms =\n delta && delta < 0 && searchDate\n ? searchDate.getTime() + 1\n : searchDate?.getTime();\n const params: any = {};\n if (paid !== undefined) params.paid = paid;\n if (delta !== undefined) params.delta = delta;\n if (refunded !== undefined) params.refunded = refunded;\n if (wired !== undefined) params.wired = wired;\n if (date_ms !== undefined) params.date_ms = date_ms;\n return requestHandler<T>(baseUrl, endpoint, { params, token });\n },\n [baseUrl, token],\n );\n\n const reserveDetailFetcher = useCallback(\n function reserveDetailFetcherImpl<T>(\n endpoint: string,\n ): Promise<HttpResponseOk<T>> {\n return requestHandler<T>(baseUrl, endpoint, {\n params: {\n tips: \"yes\",\n },\n token,\n });\n },\n [baseUrl, token],\n );\n\n const tipsDetailFetcher = useCallback(\n function tipsDetailFetcherImpl<T>(\n endpoint: string,\n ): Promise<HttpResponseOk<T>> {\n return requestHandler<T>(baseUrl, endpoint, {\n params: {\n pickups: \"yes\",\n },\n token,\n });\n },\n [baseUrl, token],\n );\n\n const transferFetcher = useCallback(\n function transferFetcherImpl<T>(\n endpoint: string,\n payto_uri?: string,\n verified?: string,\n position?: string,\n delta?: number,\n ): Promise<HttpResponseOk<T>> {\n const params: any = {};\n if (payto_uri !== undefined) params.payto_uri = payto_uri;\n if (verified !== undefined) params.verified = verified;\n if (delta !== undefined) {\n params.limit = delta;\n }\n if (position !== undefined) params.offset = position;\n\n return requestHandler<T>(baseUrl, endpoint, { params, token });\n },\n [baseUrl, token],\n );\n\n const templateFetcher = useCallback(\n function templateFetcherImpl<T>(\n endpoint: string,\n position?: string,\n delta?: number,\n ): Promise<HttpResponseOk<T>> {\n const params: any = {};\n if (delta !== undefined) {\n params.limit = delta;\n }\n if (position !== undefined) params.offset = position;\n\n return requestHandler<T>(baseUrl, endpoint, { params, token });\n },\n [baseUrl, token],\n );\n\n const webhookFetcher = useCallback(\n function webhookFetcherImpl<T>(\n endpoint: string,\n position?: string,\n delta?: number,\n ): Promise<HttpResponseOk<T>> {\n const params: any = {};\n if (delta !== undefined) {\n params.limit = delta;\n }\n if (position !== undefined) params.offset = position;\n\n return requestHandler<T>(baseUrl, endpoint, { params, token });\n },\n [baseUrl, token],\n );\n\n return {\n request,\n fetcher,\n multiFetcher,\n orderFetcher,\n reserveDetailFetcher,\n tipsDetailFetcher,\n transferFetcher,\n templateFetcher,\n webhookFetcher,\n };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\nimport {\n HttpResponse,\n HttpResponseOk,\n RequestError,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { useBackendContext } from \"../context/backend.js\";\nimport { MerchantBackend } from \"../declaration.js\";\nimport {\n useBackendBaseRequest,\n useBackendInstanceRequest,\n useMatchMutate,\n} from \"./backend.js\";\n\n// FIX default import https://github.com/microsoft/TypeScript/issues/49189\nimport _useSWR, { SWRHook, useSWRConfig } from \"swr\";\nconst useSWR = _useSWR as unknown as SWRHook;\n\ninterface InstanceAPI {\n updateInstance: (\n data: MerchantBackend.Instances.InstanceReconfigurationMessage,\n ) => Promise<void>;\n deleteInstance: () => Promise<void>;\n clearToken: () => Promise<void>;\n setNewToken: (token: string) => Promise<void>;\n}\n\nexport function useAdminAPI(): AdminAPI {\n const { request } = useBackendBaseRequest();\n const mutateAll = useMatchMutate();\n\n const createInstance = async (\n instance: MerchantBackend.Instances.InstanceConfigurationMessage,\n ): Promise<void> => {\n await request(`/management/instances`, {\n method: \"POST\",\n data: instance,\n });\n\n mutateAll(/\\/management\\/instances/);\n };\n\n const deleteInstance = async (id: string): Promise<void> => {\n await request(`/management/instances/${id}`, {\n method: \"DELETE\",\n });\n\n mutateAll(/\\/management\\/instances/);\n };\n\n const purgeInstance = async (id: string): Promise<void> => {\n await request(`/management/instances/${id}`, {\n method: \"DELETE\",\n params: {\n purge: \"YES\",\n },\n });\n\n mutateAll(/\\/management\\/instances/);\n };\n\n return { createInstance, deleteInstance, purgeInstance };\n}\n\nexport interface AdminAPI {\n createInstance: (\n data: MerchantBackend.Instances.InstanceConfigurationMessage,\n ) => Promise<void>;\n deleteInstance: (id: string) => Promise<void>;\n purgeInstance: (id: string) => Promise<void>;\n}\n\nexport function useManagementAPI(instanceId: string): InstanceAPI {\n const mutateAll = useMatchMutate();\n const { updateToken } = useBackendContext();\n const { request } = useBackendBaseRequest();\n\n const updateInstance = async (\n instance: MerchantBackend.Instances.InstanceReconfigurationMessage,\n ): Promise<void> => {\n await request(`/management/instances/${instanceId}`, {\n method: \"PATCH\",\n data: instance,\n });\n\n mutateAll(/\\/management\\/instances/);\n };\n\n const deleteInstance = async (): Promise<void> => {\n await request(`/management/instances/${instanceId}`, {\n method: \"DELETE\",\n });\n\n mutateAll(/\\/management\\/instances/);\n };\n\n const clearToken = async (): Promise<void> => {\n await request(`/management/instances/${instanceId}/auth`, {\n method: \"POST\",\n data: { method: \"external\" },\n });\n\n mutateAll(/\\/management\\/instances/);\n };\n\n const setNewToken = async (newToken: string): Promise<void> => {\n await request(`/management/instances/${instanceId}/auth`, {\n method: \"POST\",\n data: { method: \"token\", token: newToken },\n });\n\n updateToken(newToken);\n mutateAll(/\\/management\\/instances/);\n };\n\n return { updateInstance, deleteInstance, setNewToken, clearToken };\n}\n\nexport function useInstanceAPI(): InstanceAPI {\n const { mutate } = useSWRConfig();\n const {\n url: baseUrl,\n token: adminToken,\n updateLoginStatus,\n } = useBackendContext();\n const { request } = useBackendInstanceRequest();\n\n const updateInstance = async (\n instance: MerchantBackend.Instances.InstanceReconfigurationMessage,\n ): Promise<void> => {\n await request(`/private/`, {\n method: \"PATCH\",\n data: instance,\n });\n\n if (adminToken) mutate([\"/private/instances\", adminToken, baseUrl], null);\n mutate([`/private/`], null);\n };\n\n const deleteInstance = async (): Promise<void> => {\n await request(`/private/`, {\n method: \"DELETE\",\n // token: adminToken,\n });\n\n if (adminToken) mutate([\"/private/instances\", adminToken, baseUrl], null);\n mutate([`/private/`], null);\n };\n\n const clearToken = async (): Promise<void> => {\n await request(`/private/auth`, {\n method: \"POST\",\n data: { method: \"external\" },\n });\n\n mutate([`/private/`], null);\n };\n\n const setNewToken = async (newToken: string): Promise<void> => {\n await request(`/private/auth`, {\n method: \"POST\",\n data: { method: \"token\", token: newToken },\n });\n\n updateLoginStatus(baseUrl, newToken);\n mutate([`/private/`], null);\n };\n\n return { updateInstance, deleteInstance, setNewToken, clearToken };\n}\n\nexport function useInstanceDetails(): HttpResponse<\n MerchantBackend.Instances.QueryInstancesResponse,\n MerchantBackend.ErrorDetail\n> {\n const { fetcher } = useBackendInstanceRequest();\n\n const { data, error, isValidating } = useSWR<\n HttpResponseOk<MerchantBackend.Instances.QueryInstancesResponse>,\n RequestError<MerchantBackend.ErrorDetail>\n >([`/private/`], fetcher, {\n refreshInterval: 0,\n refreshWhenHidden: false,\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n refreshWhenOffline: false,\n errorRetryCount: 0,\n errorRetryInterval: 1,\n shouldRetryOnError: false,\n });\n\n if (isValidating) return { loading: true, data: data?.data };\n if (data) return data;\n if (error) return error.info;\n return { loading: true };\n}\n\ntype KYCStatus =\n | { type: \"ok\" }\n | { type: \"redirect\"; status: MerchantBackend.Instances.AccountKycRedirects };\n\nexport function useInstanceKYCDetails(): HttpResponse<\n KYCStatus,\n MerchantBackend.ErrorDetail\n> {\n const { fetcher } = useBackendInstanceRequest();\n\n const { data, error } = useSWR<\n HttpResponseOk<MerchantBackend.Instances.AccountKycRedirects>,\n RequestError<MerchantBackend.ErrorDetail>\n >([`/private/kyc`], fetcher, {\n refreshInterval: 60 * 1000,\n refreshWhenHidden: false,\n revalidateOnFocus: false,\n revalidateIfStale: false,\n revalidateOnMount: false,\n revalidateOnReconnect: false,\n refreshWhenOffline: false,\n errorRetryCount: 0,\n errorRetryInterval: 1,\n shouldRetryOnError: false,\n });\n\n if (data) {\n if (data.info?.status === 202)\n return { ok: true, data: { type: \"redirect\", status: data.data } };\n return { ok: true, data: { type: \"ok\" } };\n }\n if (error) return error.info;\n return { loading: true };\n}\n\nexport function useManagedInstanceDetails(\n instanceId: string,\n): HttpResponse<\n MerchantBackend.Instances.QueryInstancesResponse,\n MerchantBackend.ErrorDetail\n> {\n const { request } = useBackendBaseRequest();\n\n const { data, error, isValidating } = useSWR<\n HttpResponseOk<MerchantBackend.Instances.QueryInstancesResponse>,\n RequestError<MerchantBackend.ErrorDetail>\n >([`/management/instances/${instanceId}`], request, {\n refreshInterval: 0,\n refreshWhenHidden: false,\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n refreshWhenOffline: false,\n errorRetryCount: 0,\n errorRetryInterval: 1,\n shouldRetryOnError: false,\n });\n\n if (isValidating) return { loading: true, data: data?.data };\n if (data) return data;\n if (error) return error.info;\n return { loading: true };\n}\n\nexport function useBackendInstances(): HttpResponse<\n MerchantBackend.Instances.InstancesResponse,\n MerchantBackend.ErrorDetail\n> {\n const { request } = useBackendBaseRequest();\n\n const { data, error, isValidating } = useSWR<\n HttpResponseOk<MerchantBackend.Instances.InstancesResponse>,\n RequestError<MerchantBackend.ErrorDetail>\n >([\"/management/instances\"], request);\n\n if (isValidating) return { loading: true, data: data?.data };\n if (data) return data;\n if (error) return error.info;\n return { loading: true };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\n//https://tools.ietf.org/html/rfc8905\nexport const PAYTO_REGEX =\n /^payto:\\/\\/[a-zA-Z][a-zA-Z0-9-.]+(\\/[a-zA-Z0-9\\-\\.\\~\\(\\)@_%:!$&'*+,;=]*)*\\??((amount|receiver-name|sender-name|instruction|message)=[a-zA-Z0-9\\-\\.\\~\\(\\)@_%:!$'*+,;=]*&?)*$/;\nexport const PAYTO_WIRE_METHOD_LOOKUP =\n /payto:\\/\\/([a-zA-Z][a-zA-Z0-9-.]+)\\/.*/;\n\nexport const AMOUNT_REGEX = /^[a-zA-Z][a-zA-Z]*:[0-9][0-9,]*\\.?[0-9,]*$/;\n\nexport const INSTANCE_ID_LOOKUP = /\\/instances\\/([^/]*)\\/?$/;\n\nexport const AMOUNT_ZERO_REGEX = /^[a-zA-Z][a-zA-Z]*:0$/;\n\nexport const CROCKFORD_BASE32_REGEX =\n /^[0123456789ABCDEFGHJKMNPQRSTVWXYZ]+[*~$=U]*$/;\n\nexport const URL_REGEX =\n /^((https?:)(\\/\\/\\/?)([\\w]*(?::[\\w]*)?@)?([\\d\\w\\.-]+)(?::(\\d+))?)\\/$/;\n\n// how much rows we add every time user hit load more\nexport const PAGE_SIZE = 20;\n// how bigger can be the result set\n// after this threshold, load more with move the cursor\nexport const MAX_RESULT_SIZE = PAGE_SIZE * 2 - 1;\n\n// how much we will wait for all request, in seconds\nexport const DEFAULT_REQUEST_TIMEOUT = 10;\n\nexport const MAX_IMAGE_SIZE = 1024 * 1024;\n\nexport const INSTANCE_ID_REGEX = /^[a-zA-Z0-9][a-zA-Z0-9_.@-]+$/;\n\nexport const COUNTRY_TABLE = {\n AE: \"U.A.E.\",\n AF: \"Afghanistan\",\n AL: \"Albania\",\n AM: \"Armenia\",\n AN: \"Netherlands Antilles\",\n AR: \"Argentina\",\n AT: \"Austria\",\n AU: \"Australia\",\n AZ: \"Azerbaijan\",\n BA: \"Bosnia and Herzegovina\",\n BD: \"Bangladesh\",\n BE: \"Belgium\",\n BG: \"Bulgaria\",\n BH: \"Bahrain\",\n BN: \"Brunei Darussalam\",\n BO: \"Bolivia\",\n BR: \"Brazil\",\n BT: \"Bhutan\",\n BY: \"Belarus\",\n BZ: \"Belize\",\n CA: \"Canada\",\n CG: \"Congo\",\n CH: \"Switzerland\",\n CI: \"Cote d'Ivoire\",\n CL: \"Chile\",\n CM: \"Cameroon\",\n CN: \"People's Republic of China\",\n CO: \"Colombia\",\n CR: \"Costa Rica\",\n CS: \"Serbia and Montenegro\",\n CZ: \"Czech Republic\",\n DE: \"Germany\",\n DK: \"Denmark\",\n DO: \"Dominican Republic\",\n DZ: \"Algeria\",\n EC: \"Ecuador\",\n EE: \"Estonia\",\n EG: \"Egypt\",\n ER: \"Eritrea\",\n ES: \"Spain\",\n ET: \"Ethiopia\",\n FI: \"Finland\",\n FO: \"Faroe Islands\",\n FR: \"France\",\n GB: \"United Kingdom\",\n GD: \"Caribbean\",\n GE: \"Georgia\",\n GL: \"Greenland\",\n GR: \"Greece\",\n GT: \"Guatemala\",\n HK: \"Hong Kong\",\n // HK: \"Hong Kong S.A.R.\",\n HN: \"Honduras\",\n HR: \"Croatia\",\n HT: \"Haiti\",\n HU: \"Hungary\",\n ID: \"Indonesia\",\n IE: \"Ireland\",\n IL: \"Israel\",\n IN: \"India\",\n IQ: \"Iraq\",\n IR: \"Iran\",\n IS: \"Iceland\",\n IT: \"Italy\",\n JM: \"Jamaica\",\n JO: \"Jordan\",\n JP: \"Japan\",\n KE: \"Kenya\",\n KG: \"Kyrgyzstan\",\n KH: \"Cambodia\",\n KR: \"South Korea\",\n KW: \"Kuwait\",\n KZ: \"Kazakhstan\",\n LA: \"Laos\",\n LB: \"Lebanon\",\n LI: \"Liechtenstein\",\n LK: \"Sri Lanka\",\n LT: \"Lithuania\",\n LU: \"Luxembourg\",\n LV: \"Latvia\",\n LY: \"Libya\",\n MA: \"Morocco\",\n MC: \"Principality of Monaco\",\n MD: \"Moldava\",\n // MD: \"Moldova\",\n ME: \"Montenegro\",\n MK: \"Former Yugoslav Republic of Macedonia\",\n ML: \"Mali\",\n MM: \"Myanmar\",\n MN: \"Mongolia\",\n MO: \"Macau S.A.R.\",\n MT: \"Malta\",\n MV: \"Maldives\",\n MX: \"Mexico\",\n MY: \"Malaysia\",\n NG: \"Nigeria\",\n NI: \"Nicaragua\",\n NL: \"Netherlands\",\n NO: \"Norway\",\n NP: \"Nepal\",\n NZ: \"New Zealand\",\n OM: \"Oman\",\n PA: \"Panama\",\n PE: \"Peru\",\n PH: \"Philippines\",\n PK: \"Islamic Republic of Pakistan\",\n PL: \"Poland\",\n PR: \"Puerto Rico\",\n PT: \"Portugal\",\n PY: \"Paraguay\",\n QA: \"Qatar\",\n RE: \"Reunion\",\n RO: \"Romania\",\n RS: \"Serbia\",\n RU: \"Russia\",\n RW: \"Rwanda\",\n SA: \"Saudi Arabia\",\n SE: \"Sweden\",\n SG: \"Singapore\",\n SI: \"Slovenia\",\n SK: \"Slovak\",\n SN: \"Senegal\",\n SO: \"Somalia\",\n SR: \"Suriname\",\n SV: \"El Salvador\",\n SY: \"Syria\",\n TH: \"Thailand\",\n TJ: \"Tajikistan\",\n TM: \"Turkmenistan\",\n TN: \"Tunisia\",\n TR: \"Turkey\",\n TT: \"Trinidad and Tobago\",\n TW: \"Taiwan\",\n TZ: \"Tanzania\",\n UA: \"Ukraine\",\n US: \"United States\",\n UY: \"Uruguay\",\n VA: \"Vatican\",\n VE: \"Venezuela\",\n VN: \"Viet Nam\",\n YE: \"Yemen\",\n ZA: \"South Africa\",\n ZW: \"Zimbabwe\",\n};\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { h, VNode } from \"preact\";\n\nexport function Loading(): VNode {\n return (\n <div\n class=\"columns is-centered is-vcentered\"\n style={{\n height: \"calc(100% - 3rem)\",\n position: \"absolute\",\n width: \"100%\",\n }}\n >\n <Spinner />\n </div>\n );\n}\n\nexport function Spinner(): VNode {\n return (\n <div class=\"lds-ring\">\n <div />\n <div />\n <div />\n <div />\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { ComponentChildren, createContext, h, VNode } from \"preact\";\nimport { useContext, useMemo } from \"preact/hooks\";\n\ntype Updater<S> = (value: (prevState: S) => S) => void;\n\nexport interface Props<T> {\n object?: Partial<T>;\n errors?: FormErrors<T>;\n name?: string;\n valueHandler: Updater<Partial<T>> | null;\n children: ComponentChildren;\n}\n\nconst noUpdater: Updater<Partial<unknown>> = () => (s: unknown) => s;\n\nexport function FormProvider<T>({\n object = {},\n errors = {},\n name = \"\",\n valueHandler,\n children,\n}: Props<T>): VNode {\n const initialObject = useMemo(() => object, []);\n const value = useMemo<FormType<T>>(\n () => ({\n errors,\n object,\n initialObject,\n valueHandler: valueHandler ? valueHandler : noUpdater,\n name,\n toStr: {},\n fromStr: {},\n }),\n [errors, object, valueHandler],\n );\n\n return (\n <FormContext.Provider value={value}>\n <form\n class=\"field\"\n onSubmit={(e) => {\n e.preventDefault();\n // if (valueHandler) valueHandler(object);\n }}\n >\n {children}\n </form>\n </FormContext.Provider>\n );\n}\n\nexport interface FormType<T> {\n object: Partial<T>;\n initialObject: Partial<T>;\n errors: FormErrors<T>;\n toStr: FormtoStr<T>;\n name: string;\n fromStr: FormfromStr<T>;\n valueHandler: Updater<Partial<T>>;\n}\n\nconst FormContext = createContext<FormType<unknown>>(null!);\n\nexport function useFormContext<T>() {\n return useContext<FormType<T>>(FormContext);\n}\n\nexport type FormErrors<T> = {\n [P in keyof T]?: string | FormErrors<T[P]>;\n};\n\nexport type FormtoStr<T> = {\n [P in keyof T]?: (f?: T[P]) => string;\n};\n\nexport type FormfromStr<T> = {\n [P in keyof T]?: (f: string) => T[P];\n};\n\nexport type FormUpdater<T> = {\n [P in keyof T]?: (f: keyof T) => (v: T[P]) => void;\n};\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { ComponentChildren, VNode } from \"preact\";\nimport { useFormContext } from \"./FormProvider.js\";\n\ninterface Use<V> {\n error?: string;\n required: boolean;\n value: any;\n initial: any;\n onChange: (v: V) => void;\n toStr: (f: V | undefined) => string;\n fromStr: (v: string) => V;\n}\n\nexport function useField<T>(name: keyof T): Use<T[typeof name]> {\n const { errors, object, initialObject, toStr, fromStr, valueHandler } =\n useFormContext<T>();\n type P = typeof name;\n type V = T[P];\n\n const updateField =\n (field: P) =>\n (value: V): void => {\n return valueHandler((prev) => {\n return setValueDeeper(prev, String(field).split(\".\"), value);\n });\n };\n\n const defaultToString = (f?: V): string => String(!f ? \"\" : f);\n const defaultFromString = (v: string): V => v as any;\n const value = readField(object, String(name));\n const initial = readField(initialObject, String(name));\n const isDirty = value !== initial;\n const hasError = readField(errors, String(name));\n return {\n error: isDirty ? hasError : undefined,\n required: !isDirty && hasError,\n value,\n initial,\n onChange: updateField(name) as any,\n toStr: toStr[name] ? toStr[name]! : defaultToString,\n fromStr: fromStr[name] ? fromStr[name]! : defaultFromString,\n };\n}\n/**\n * read the field of an object an support accessing it using '.'\n *\n * @param object\n * @param name\n * @returns\n */\nconst readField = (object: any, name: string) => {\n return name\n .split(\".\")\n .reduce((prev, current) => prev && prev[current], object);\n};\n\nconst setValueDeeper = (object: any, names: string[], value: any): any => {\n if (names.length === 0) return value;\n const [head, ...rest] = names;\n return { ...object, [head]: setValueDeeper(object[head] || {}, rest, value) };\n};\n\nexport interface InputProps<T> {\n name: T;\n label: ComponentChildren;\n placeholder?: string;\n tooltip?: ComponentChildren;\n readonly?: boolean;\n help?: ComponentChildren;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { ComponentChildren, h, VNode } from \"preact\";\nimport { useField, InputProps } from \"./useField.js\";\n\ninterface Props<T> extends InputProps<T> {\n inputType?: \"text\" | \"number\" | \"multiline\" | \"password\";\n expand?: boolean;\n toStr?: (v?: any) => string;\n fromStr?: (s: string) => any;\n inputExtra?: any;\n side?: ComponentChildren;\n children?: ComponentChildren;\n}\n\nconst defaultToString = (f?: any): string => f || \"\";\nconst defaultFromString = (v: string): any => v as any;\n\nconst TextInput = ({ inputType, error, ...rest }: any) =>\n inputType === \"multiline\" ? (\n <textarea\n {...rest}\n class={error ? \"textarea is-danger\" : \"textarea\"}\n rows=\"3\"\n />\n ) : (\n <input\n {...rest}\n class={error ? \"input is-danger\" : \"input\"}\n type={inputType}\n />\n );\n\nexport function Input<T>({\n name,\n readonly,\n placeholder,\n tooltip,\n label,\n expand,\n help,\n children,\n inputType,\n inputExtra,\n side,\n fromStr = defaultFromString,\n toStr = defaultToString,\n}: Props<keyof T>): VNode {\n const { error, value, onChange, required } = useField<T>(name);\n return (\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">\n {label}\n {tooltip && (\n <span class=\"icon has-tooltip-right\" data-tooltip={tooltip}>\n <i class=\"mdi mdi-information\" />\n </span>\n )}\n </label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n <p\n class={\n expand\n ? \"control is-expanded has-icons-right\"\n : \"control has-icons-right\"\n }\n >\n <TextInput\n error={error}\n {...inputExtra}\n inputType={inputType}\n placeholder={placeholder}\n readonly={readonly}\n disabled={readonly}\n name={String(name)}\n value={toStr(value)}\n onChange={(e: h.JSX.TargetedEvent<HTMLInputElement>): void =>\n onChange(fromStr(e.currentTarget.value))\n }\n />\n {help}\n {children}\n {required && (\n <span class=\"icon has-text-danger is-right\">\n <i class=\"mdi mdi-alert\" />\n </span>\n )}\n </p>\n {error && <p class=\"help is-danger\">{error}</p>}\n </div>\n {side}\n </div>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { ComponentChildren, Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { useInstanceContext } from \"../../context/instance.js\";\nimport { DEFAULT_REQUEST_TIMEOUT } from \"../../utils/constants.js\";\nimport { Spinner } from \"../exception/loading.js\";\nimport { FormProvider } from \"../form/FormProvider.js\";\nimport { Input } from \"../form/Input.js\";\n\ninterface Props {\n active?: boolean;\n description?: string;\n onCancel?: () => void;\n onConfirm?: () => void;\n label?: string;\n children?: ComponentChildren;\n danger?: boolean;\n disabled?: boolean;\n}\n\nexport function ConfirmModal({\n active,\n description,\n onCancel,\n onConfirm,\n children,\n danger,\n disabled,\n label = \"Confirm\",\n}: Props): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class={active ? \"modal is-active\" : \"modal\"}>\n <div class=\"modal-background \" onClick={onCancel} />\n <div class=\"modal-card\" style={{ maxWidth: 700 }}>\n <header class=\"modal-card-head\">\n {!description ? null : (\n <p class=\"modal-card-title\">\n <b>{description}</b>\n </p>\n )}\n <button class=\"delete \" aria-label=\"close\" onClick={onCancel} />\n </header>\n <section class=\"modal-card-body\">{children}</section>\n <footer class=\"modal-card-foot\">\n <div class=\"buttons is-right\" style={{ width: \"100%\" }}>\n {onConfirm ? (\n <Fragment>\n <button class=\"button \" onClick={onCancel}>\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n\n <button\n class={danger ? \"button is-danger \" : \"button is-info \"}\n disabled={disabled}\n onClick={onConfirm}\n >\n <i18n.Translate>{label}</i18n.Translate>\n </button>\n </Fragment>\n ) : (\n <button class=\"button \" onClick={onCancel}>\n <i18n.Translate>Close</i18n.Translate>\n </button>\n )}\n </div>\n </footer>\n </div>\n <button\n class=\"modal-close is-large \"\n aria-label=\"close\"\n onClick={onCancel}\n />\n </div>\n );\n}\n\nexport function ContinueModal({\n active,\n description,\n onCancel,\n onConfirm,\n children,\n disabled,\n}: Props): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class={active ? \"modal is-active\" : \"modal\"}>\n <div class=\"modal-background \" onClick={onCancel} />\n <div class=\"modal-card\">\n <header class=\"modal-card-head has-background-success\">\n {!description ? null : <p class=\"modal-card-title\">{description}</p>}\n <button class=\"delete \" aria-label=\"close\" onClick={onCancel} />\n </header>\n <section class=\"modal-card-body\">{children}</section>\n <footer class=\"modal-card-foot\">\n <div class=\"buttons is-right\" style={{ width: \"100%\" }}>\n <button\n class=\"button is-success \"\n disabled={disabled}\n onClick={onConfirm}\n >\n <i18n.Translate>Continue</i18n.Translate>\n </button>\n </div>\n </footer>\n </div>\n <button\n class=\"modal-close is-large \"\n aria-label=\"close\"\n onClick={onCancel}\n />\n </div>\n );\n}\n\nexport function SimpleModal({ onCancel, children }: any): VNode {\n return (\n <div class=\"modal is-active\">\n <div class=\"modal-background \" onClick={onCancel} />\n <div class=\"modal-card\">\n <section class=\"modal-card-body is-main-section\">{children}</section>\n </div>\n <button\n class=\"modal-close is-large \"\n aria-label=\"close\"\n onClick={onCancel}\n />\n </div>\n );\n}\n\nexport function ClearConfirmModal({\n description,\n onCancel,\n onClear,\n onConfirm,\n children,\n}: Props & { onClear?: () => void }): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"modal is-active\">\n <div class=\"modal-background \" onClick={onCancel} />\n <div class=\"modal-card\">\n <header class=\"modal-card-head\">\n {!description ? null : <p class=\"modal-card-title\">{description}</p>}\n <button class=\"delete \" aria-label=\"close\" onClick={onCancel} />\n </header>\n <section class=\"modal-card-body is-main-section\">{children}</section>\n <footer class=\"modal-card-foot\">\n {onClear && (\n <button\n class=\"button is-danger\"\n onClick={onClear}\n disabled={onClear === undefined}\n >\n <i18n.Translate>Clear</i18n.Translate>\n </button>\n )}\n <div class=\"buttons is-right\" style={{ width: \"100%\" }}>\n <button class=\"button \" onClick={onCancel}>\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n <button\n class=\"button is-info\"\n onClick={onConfirm}\n disabled={onConfirm === undefined}\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </button>\n </div>\n </footer>\n </div>\n <button\n class=\"modal-close is-large \"\n aria-label=\"close\"\n onClick={onCancel}\n />\n </div>\n );\n}\n\ninterface DeleteModalProps {\n element: { id: string; name: string };\n onCancel: () => void;\n onConfirm: (id: string) => void;\n}\n\nexport function DeleteModal({\n element,\n onCancel,\n onConfirm,\n}: DeleteModalProps): VNode {\n return (\n <ConfirmModal\n label={`Delete instance`}\n description={`Delete the instance \"${element.name}\"`}\n danger\n active\n onCancel={onCancel}\n onConfirm={() => onConfirm(element.id)}\n >\n <p>\n If you delete the instance named <b>&quot;{element.name}&quot;</b> (ID:{\" \"}\n <b>{element.id}</b>), the merchant will no longer be able to process\n orders or refunds\n </p>\n <p>\n This action deletes the instance private key, but preserves all\n transaction data. You can still access that data after deleting the\n instance.\n </p>\n <p class=\"warning\">\n Deleting an instance <b>cannot be undone</b>.\n </p>\n </ConfirmModal>\n );\n}\n\nexport function PurgeModal({\n element,\n onCancel,\n onConfirm,\n}: DeleteModalProps): VNode {\n return (\n <ConfirmModal\n label={`Purge the instance`}\n description={`Purge the instance \"${element.name}\"`}\n danger\n active\n onCancel={onCancel}\n onConfirm={() => onConfirm(element.id)}\n >\n <p>\n If you purge the instance named <b>&quot;{element.name}&quot;</b> (ID:{\" \"}\n <b>{element.id}</b>), you will also delete all it&apos;s transaction\n data.\n </p>\n <p>\n The instance will disappear from your list, and you will no longer be\n able to access it&apos;s data.\n </p>\n <p class=\"warning\">\n Purging an instance <b>cannot be undone</b>.\n </p>\n </ConfirmModal>\n );\n}\n\ninterface UpdateTokenModalProps {\n oldToken?: string;\n onCancel: () => void;\n onConfirm: (value: string) => void;\n onClear: () => void;\n}\n\n//FIXME: merge UpdateTokenModal with SetTokenNewInstanceModal\nexport function UpdateTokenModal({\n onCancel,\n onClear,\n onConfirm,\n oldToken,\n}: UpdateTokenModalProps): VNode {\n type State = { old_token: string; new_token: string; repeat_token: string };\n const [form, setValue] = useState<Partial<State>>({\n old_token: \"\",\n new_token: \"\",\n repeat_token: \"\",\n });\n const { i18n } = useTranslationContext();\n\n const hasInputTheCorrectOldToken = oldToken && oldToken !== form.old_token;\n const errors = {\n old_token: hasInputTheCorrectOldToken\n ? i18n.str`is not the same as the current access token`\n : undefined,\n new_token: !form.new_token\n ? i18n.str`cannot be empty`\n : form.new_token === form.old_token\n ? i18n.str`cannot be the same as the old token`\n : undefined,\n repeat_token:\n form.new_token !== form.repeat_token\n ? i18n.str`is not the same`\n : undefined,\n };\n\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n\n const instance = useInstanceContext();\n\n const text = i18n.str`You are updating the access token from instance with id ${instance.id}`;\n\n return (\n <ClearConfirmModal\n description={text}\n onCancel={onCancel}\n onConfirm={!hasErrors ? () => onConfirm(form.new_token!) : undefined}\n onClear={!hasInputTheCorrectOldToken && oldToken ? onClear : undefined}\n >\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-four-fifths\">\n <FormProvider errors={errors} object={form} valueHandler={setValue}>\n {oldToken && (\n <Input<State>\n name=\"old_token\"\n label={i18n.str`Old access token`}\n tooltip={i18n.str`access token currently in use`}\n inputType=\"password\"\n />\n )}\n <Input<State>\n name=\"new_token\"\n label={i18n.str`New access token`}\n tooltip={i18n.str`next access token to be used`}\n inputType=\"password\"\n />\n <Input<State>\n name=\"repeat_token\"\n label={i18n.str`Repeat access token`}\n tooltip={i18n.str`confirm the same access token`}\n inputType=\"password\"\n />\n </FormProvider>\n <p>\n <i18n.Translate>\n Clearing the access token will mean public access to the instance\n </i18n.Translate>\n </p>\n </div>\n <div class=\"column\" />\n </div>\n </ClearConfirmModal>\n );\n}\n\nexport function SetTokenNewInstanceModal({\n onCancel,\n onClear,\n onConfirm,\n}: UpdateTokenModalProps): VNode {\n type State = { old_token: string; new_token: string; repeat_token: string };\n const [form, setValue] = useState<Partial<State>>({\n new_token: \"\",\n repeat_token: \"\",\n });\n const { i18n } = useTranslationContext();\n\n const errors = {\n new_token: !form.new_token\n ? i18n.str`cannot be empty`\n : form.new_token === form.old_token\n ? i18n.str`cannot be the same as the old access token`\n : undefined,\n repeat_token:\n form.new_token !== form.repeat_token\n ? i18n.str`is not the same`\n : undefined,\n };\n\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n\n return (\n <div class=\"modal is-active\">\n <div class=\"modal-background \" onClick={onCancel} />\n <div class=\"modal-card\">\n <header class=\"modal-card-head\">\n <p class=\"modal-card-title\">{i18n.str`You are setting the access token for the new instance`}</p>\n <button class=\"delete \" aria-label=\"close\" onClick={onCancel} />\n </header>\n <section class=\"modal-card-body is-main-section\">\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-four-fifths\">\n <FormProvider\n errors={errors}\n object={form}\n valueHandler={setValue}\n >\n <Input<State>\n name=\"new_token\"\n label={i18n.str`New access token`}\n tooltip={i18n.str`next access token to be used`}\n inputType=\"password\"\n />\n <Input<State>\n name=\"repeat_token\"\n label={i18n.str`Repeat access token`}\n tooltip={i18n.str`confirm the same access token`}\n inputType=\"password\"\n />\n </FormProvider>\n <p>\n <i18n.Translate>\n With external authorization method no check will be done by\n the merchant backend\n </i18n.Translate>\n </p>\n </div>\n <div class=\"column\" />\n </div>\n </section>\n <footer class=\"modal-card-foot\">\n {onClear && (\n <button\n class=\"button is-danger\"\n onClick={onClear}\n disabled={onClear === undefined}\n >\n <i18n.Translate>Set external authorization</i18n.Translate>\n </button>\n )}\n <div class=\"buttons is-right\" style={{ width: \"100%\" }}>\n <button class=\"button \" onClick={onCancel}>\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n <button\n class=\"button is-info\"\n onClick={() => onConfirm(form.new_token!)}\n disabled={hasErrors}\n >\n <i18n.Translate>Set access token</i18n.Translate>\n </button>\n </div>\n </footer>\n </div>\n <button\n class=\"modal-close is-large \"\n aria-label=\"close\"\n onClick={onCancel}\n />\n </div>\n );\n}\n\nexport function LoadingModal({ onCancel }: { onCancel: () => void }): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"modal is-active\">\n <div class=\"modal-background \" onClick={onCancel} />\n <div class=\"modal-card\">\n <header class=\"modal-card-head\">\n <p class=\"modal-card-title\">\n <i18n.Translate>Operation in progress...</i18n.Translate>\n </p>\n </header>\n <section class=\"modal-card-body\">\n <div class=\"columns\">\n <div class=\"column\" />\n <Spinner />\n <div class=\"column\" />\n </div>\n <p>{i18n.str`The operation will be automatically canceled after ${DEFAULT_REQUEST_TIMEOUT} seconds`}</p>\n </section>\n <footer class=\"modal-card-foot\">\n <div class=\"buttons is-right\" style={{ width: \"100%\" }}>\n <button class=\"button \" onClick={onCancel}>\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n </div>\n </footer>\n </div>\n <button\n class=\"modal-close is-large \"\n aria-label=\"close\"\n onClick={onCancel}\n />\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { useState } from \"preact/hooks\";\n\nexport interface Options {\n slowTolerance: number;\n}\n\nexport interface AsyncOperationApi<T> {\n request: (...a: any) => void;\n cancel: () => void;\n data: T | undefined;\n isSlow: boolean;\n isLoading: boolean;\n error: string | undefined;\n}\n\nexport function useAsync<T>(\n fn?: (...args: any) => Promise<T>,\n { slowTolerance: tooLong }: Options = { slowTolerance: 1000 },\n): AsyncOperationApi<T> {\n const [data, setData] = useState<T | undefined>(undefined);\n const [isLoading, setLoading] = useState<boolean>(false);\n const [error, setError] = useState<any>(undefined);\n const [isSlow, setSlow] = useState(false);\n\n const request = async (...args: any) => {\n if (!fn) return;\n setLoading(true);\n\n const handler = setTimeout(() => {\n setSlow(true);\n }, tooLong);\n\n try {\n const result = await fn(...args);\n setData(result);\n } catch (error) {\n setError(error);\n }\n setLoading(false);\n setSlow(false);\n clearTimeout(handler);\n };\n\n function cancel(): void {\n setLoading(false);\n setSlow(false);\n }\n\n return {\n request,\n cancel,\n data,\n isSlow,\n isLoading,\n error,\n };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { ComponentChildren, h } from \"preact\";\nimport { LoadingModal } from \"../modal/index.js\";\nimport { useAsync } from \"../../hooks/async.js\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\n\ntype Props = {\n children: ComponentChildren;\n disabled: boolean;\n onClick?: () => Promise<void>;\n [rest: string]: any;\n};\n\nexport function AsyncButton({ onClick, disabled, children, ...rest }: Props) {\n const { isSlow, isLoading, request, cancel } = useAsync(onClick);\n const { i18n } = useTranslationContext();\n if (isSlow) {\n return <LoadingModal onCancel={cancel} />;\n }\n if (isLoading) {\n return (\n <button class=\"button\">\n <i18n.Translate>Loading...</i18n.Translate>\n </button>\n );\n }\n\n return (\n <span {...rest}>\n <button class=\"button is-success\" onClick={request} disabled={disabled}>\n {children}\n </button>\n </span>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { createContext } from \"preact\";\nimport { useContext } from \"preact/hooks\";\n\ninterface Type {\n currency: string;\n version: string;\n}\nconst Context = createContext<Type>(null!);\n\nexport const ConfigContextProvider = Context.Provider;\nexport const useConfigContext = (): Type => useContext(Context);\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { ComponentChildren, h, VNode } from \"preact\";\nimport { InputProps, useField } from \"./useField.js\";\n\nexport interface Props<T> extends InputProps<T> {\n expand?: boolean;\n inputType?: \"text\" | \"number\" | \"password\";\n addonBefore?: ComponentChildren;\n addonAfter?: ComponentChildren;\n toStr?: (v?: any) => string;\n fromStr?: (s: string) => any;\n inputExtra?: any;\n children?: ComponentChildren;\n side?: ComponentChildren;\n}\n\nconst defaultToString = (f?: any): string => f || \"\";\nconst defaultFromString = (v: string): any => v as any;\n\nexport function InputWithAddon<T>({\n name,\n readonly,\n addonBefore,\n children,\n expand,\n label,\n placeholder,\n help,\n tooltip,\n inputType,\n inputExtra,\n side,\n addonAfter,\n toStr = defaultToString,\n fromStr = defaultFromString,\n}: Props<keyof T>): VNode {\n const { error, value, onChange, required } = useField<T>(name);\n\n return (\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">\n {label}\n {tooltip && (\n <span class=\"icon has-tooltip-right\" data-tooltip={tooltip}>\n <i class=\"mdi mdi-information\" />\n </span>\n )}\n </label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n <div class=\"field has-addons\">\n {addonBefore && (\n <div class=\"control\">\n <a class=\"button is-static\">{addonBefore}</a>\n </div>\n )}\n <p\n class={`control${expand ? \" is-expanded\" : \"\"}${\n required ? \" has-icons-right\" : \"\"\n }`}\n >\n <input\n {...(inputExtra || {})}\n class={error ? \"input is-danger\" : \"input\"}\n type={inputType}\n placeholder={placeholder}\n readonly={readonly}\n disabled={readonly}\n name={String(name)}\n value={toStr(value)}\n onChange={(e): void => onChange(fromStr(e.currentTarget.value))}\n />\n {required && (\n <span class=\"icon has-text-danger is-right\">\n <i class=\"mdi mdi-alert\" />\n </span>\n )}\n {help}\n {children}\n </p>\n {addonAfter && (\n <div class=\"control\">\n <a class=\"button is-static\">{addonAfter}</a>\n </div>\n )}\n </div>\n {error && <p class=\"help is-danger\">{error}</p>}\n </div>\n {side}\n </div>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { ComponentChildren, h, VNode } from \"preact\";\nimport { useConfigContext } from \"../../context/config.js\";\nimport { Amount } from \"../../declaration.js\";\nimport { InputWithAddon } from \"./InputWithAddon.js\";\nimport { InputProps } from \"./useField.js\";\n\nexport interface Props<T> extends InputProps<T> {\n expand?: boolean;\n addonAfter?: ComponentChildren;\n children?: ComponentChildren;\n side?: ComponentChildren;\n}\n\nexport function InputCurrency<T>({\n name,\n readonly,\n label,\n placeholder,\n help,\n tooltip,\n expand,\n addonAfter,\n children,\n side,\n}: Props<keyof T>): VNode {\n const config = useConfigContext();\n return (\n <InputWithAddon<T>\n name={name}\n readonly={readonly}\n addonBefore={config.currency}\n side={side}\n label={label}\n placeholder={placeholder}\n help={help}\n tooltip={tooltip}\n addonAfter={addonAfter}\n inputType=\"number\"\n expand={expand}\n toStr={(v?: Amount) => v?.split(\":\")[1] || \"\"}\n fromStr={(v: string) => (!v ? undefined : `${config.currency}:${v}`)}\n inputExtra={{ min: 0 }}\n >\n {children}\n </InputWithAddon>\n );\n}\n", "export default function toInteger(dirtyNumber) {\n if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) {\n return NaN;\n }\n\n var number = Number(dirtyNumber);\n\n if (isNaN(number)) {\n return number;\n }\n\n return number < 0 ? Math.ceil(number) : Math.floor(number);\n}", "export default function requiredArgs(required, args) {\n if (args.length < required) {\n throw new TypeError(required + ' argument' + (required > 1 ? 's' : '') + ' required, but only ' + args.length + ' present');\n }\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @param {Date|Number} argument - the value to convert\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\n\nexport default function toDate(argument) {\n requiredArgs(1, arguments);\n var argStr = Object.prototype.toString.call(argument); // Clone the date\n\n if (argument instanceof Date || _typeof(argument) === 'object' && argStr === '[object Date]') {\n // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n return new Date(argument.getTime());\n } else if (typeof argument === 'number' || argStr === '[object Number]') {\n return new Date(argument);\n } else {\n if ((typeof argument === 'string' || argStr === '[object String]') && typeof console !== 'undefined') {\n // eslint-disable-next-line no-console\n console.warn(\"Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#string-arguments\"); // eslint-disable-next-line no-console\n\n console.warn(new Error().stack);\n }\n\n return new Date(NaN);\n }\n}", "import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addDays\n * @category Day Helpers\n * @summary Add the specified number of days to the given date.\n *\n * @description\n * Add the specified number of days to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of days to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} - the new date with the days added\n * @throws {TypeError} - 2 arguments required\n *\n * @example\n * // Add 10 days to 1 September 2014:\n * const result = addDays(new Date(2014, 8, 1), 10)\n * //=> Thu Sep 11 2014 00:00:00\n */\n\nexport default function addDays(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var amount = toInteger(dirtyAmount);\n\n if (isNaN(amount)) {\n return new Date(NaN);\n }\n\n if (!amount) {\n // If 0 days, no-op to avoid changing times in the hour before end of DST\n return date;\n }\n\n date.setDate(date.getDate() + amount);\n return date;\n}", "import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addMonths\n * @category Month Helpers\n * @summary Add the specified number of months to the given date.\n *\n * @description\n * Add the specified number of months to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of months to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the months added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 5 months to 1 September 2014:\n * const result = addMonths(new Date(2014, 8, 1), 5)\n * //=> Sun Feb 01 2015 00:00:00\n */\n\nexport default function addMonths(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var amount = toInteger(dirtyAmount);\n\n if (isNaN(amount)) {\n return new Date(NaN);\n }\n\n if (!amount) {\n // If 0 months, no-op to avoid changing times in the hour before end of DST\n return date;\n }\n\n var dayOfMonth = date.getDate(); // The JS Date object supports date math by accepting out-of-bounds values for\n // month, day, etc. For example, new Date(2020, 0, 0) returns 31 Dec 2019 and\n // new Date(2020, 13, 1) returns 1 Feb 2021. This is *almost* the behavior we\n // want except that dates will wrap around the end of a month, meaning that\n // new Date(2020, 13, 31) will return 3 Mar 2021 not 28 Feb 2021 as desired. So\n // we'll default to the end of the desired month by adding 1 to the desired\n // month and using a date of 0 to back up one day to the end of the desired\n // month.\n\n var endOfDesiredMonth = new Date(date.getTime());\n endOfDesiredMonth.setMonth(date.getMonth() + amount + 1, 0);\n var daysInMonth = endOfDesiredMonth.getDate();\n\n if (dayOfMonth >= daysInMonth) {\n // If we're already at the end of the month, then this is the correct date\n // and we're done.\n return endOfDesiredMonth;\n } else {\n // Otherwise, we now know that setting the original day-of-month value won't\n // cause an overflow, so set the desired day-of-month. Note that we can't\n // just set the date of `endOfDesiredMonth` because that object may have had\n // its time changed in the unusual case where where a DST transition was on\n // the last day of the month and its local time was in the hour skipped or\n // repeated next to a DST transition. So we use `date` instead which is\n // guaranteed to still have the original time.\n date.setFullYear(endOfDesiredMonth.getFullYear(), endOfDesiredMonth.getMonth(), dayOfMonth);\n return date;\n }\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nimport addDays from \"../addDays/index.js\";\nimport addMonths from \"../addMonths/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n\n/**\n * @name add\n * @category Common Helpers\n * @summary Add the specified years, months, weeks, days, hours, minutes and seconds to the given date.\n *\n * @description\n * Add the specified years, months, weeks, days, hours, minutes and seconds to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Duration} duration - the object with years, months, weeks, days, hours, minutes and seconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n *\n * | Key | Description |\n * |----------------|------------------------------------|\n * | years | Amount of years to be added |\n * | months | Amount of months to be added |\n * | weeks | Amount of weeks to be added |\n * | days | Amount of days to be added |\n * | hours | Amount of hours to be added |\n * | minutes | Amount of minutes to be added |\n * | seconds | Amount of seconds to be added |\n *\n * All values default to 0\n *\n * @returns {Date} the new date with the seconds added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add the following duration to 1 September 2014, 10:19:50\n * const result = add(new Date(2014, 8, 1, 10, 19, 50), {\n * years: 2,\n * months: 9,\n * weeks: 1,\n * days: 7,\n * hours: 5,\n * minutes: 9,\n * seconds: 30,\n * })\n * //=> Thu Jun 15 2017 15:29:20\n */\nexport default function add(dirtyDate, duration) {\n requiredArgs(2, arguments);\n if (!duration || _typeof(duration) !== 'object') return new Date(NaN);\n var years = duration.years ? toInteger(duration.years) : 0;\n var months = duration.months ? toInteger(duration.months) : 0;\n var weeks = duration.weeks ? toInteger(duration.weeks) : 0;\n var days = duration.days ? toInteger(duration.days) : 0;\n var hours = duration.hours ? toInteger(duration.hours) : 0;\n var minutes = duration.minutes ? toInteger(duration.minutes) : 0;\n var seconds = duration.seconds ? toInteger(duration.seconds) : 0; // Add years and months\n\n var date = toDate(dirtyDate);\n var dateWithMonths = months || years ? addMonths(date, months + years * 12) : date; // Add weeks and days\n\n var dateWithDays = days || weeks ? addDays(dateWithMonths, days + weeks * 7) : dateWithMonths; // Add days, hours, minutes and seconds\n\n var minutesToAdd = minutes + hours * 60;\n var secondsToAdd = seconds + minutesToAdd * 60;\n var msToAdd = secondsToAdd * 1000;\n var finalDate = new Date(dateWithDays.getTime() + msToAdd);\n return finalDate;\n}", "import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addMilliseconds\n * @category Millisecond Helpers\n * @summary Add the specified number of milliseconds to the given date.\n *\n * @description\n * Add the specified number of milliseconds to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the milliseconds added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 750 milliseconds to 10 July 2014 12:45:30.000:\n * const result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:30.750\n */\n\nexport default function addMilliseconds(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var timestamp = toDate(dirtyDate).getTime();\n var amount = toInteger(dirtyAmount);\n return new Date(timestamp + amount);\n}", "var defaultOptions = {};\nexport function getDefaultOptions() {\n return defaultOptions;\n}\nexport function setDefaultOptions(newOptions) {\n defaultOptions = newOptions;\n}", "/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport default function getTimezoneOffsetInMilliseconds(date) {\n var utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()));\n utcDate.setUTCFullYear(date.getFullYear());\n return date.getTime() - utcDate.getTime();\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfDay\n * @category Day Helpers\n * @summary Return the start of a day for the given date.\n *\n * @description\n * Return the start of a day for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a day\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a day for 2 September 2014 11:55:00:\n * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 00:00:00\n */\n\nexport default function startOfDay(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n date.setHours(0, 0, 0, 0);\n return date;\n}", "import getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport startOfDay from \"../startOfDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_DAY = 86400000;\n/**\n * @name differenceInCalendarDays\n * @category Day Helpers\n * @summary Get the number of calendar days between the given dates.\n *\n * @description\n * Get the number of calendar days between the given dates. This means that the times are removed\n * from the dates and then the difference in days is calculated.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar days\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInCalendarDays(\n * new Date(2012, 6, 2, 0, 0),\n * new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 366\n * // How many calendar days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInCalendarDays(\n * new Date(2011, 6, 3, 0, 1),\n * new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 1\n */\n\nexport default function differenceInCalendarDays(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var startOfDayLeft = startOfDay(dirtyDateLeft);\n var startOfDayRight = startOfDay(dirtyDateRight);\n var timestampLeft = startOfDayLeft.getTime() - getTimezoneOffsetInMilliseconds(startOfDayLeft);\n var timestampRight = startOfDayRight.getTime() - getTimezoneOffsetInMilliseconds(startOfDayRight); // Round the number of days to the nearest integer\n // because the number of milliseconds in a day is not constant\n // (e.g. it's different in the day of the daylight saving time clock shift)\n\n return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_DAY);\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name compareAsc\n * @category Common Helpers\n * @summary Compare the two dates and return -1, 0 or 1.\n *\n * @description\n * Compare the two dates and return 1 if the first date is after the second,\n * -1 if the first date is before the second or 0 if dates are equal.\n *\n * @param {Date|Number} dateLeft - the first date to compare\n * @param {Date|Number} dateRight - the second date to compare\n * @returns {Number} the result of the comparison\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Compare 11 February 1987 and 10 July 1989:\n * const result = compareAsc(new Date(1987, 1, 11), new Date(1989, 6, 10))\n * //=> -1\n *\n * @example\n * // Sort the array of dates:\n * const result = [\n * new Date(1995, 6, 2),\n * new Date(1987, 1, 11),\n * new Date(1989, 6, 10)\n * ].sort(compareAsc)\n * //=> [\n * // Wed Feb 11 1987 00:00:00,\n * // Mon Jul 10 1989 00:00:00,\n * // Sun Jul 02 1995 00:00:00\n * // ]\n */\n\nexport default function compareAsc(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n var diff = dateLeft.getTime() - dateRight.getTime();\n\n if (diff < 0) {\n return -1;\n } else if (diff > 0) {\n return 1; // Return 0 if diff is 0; return NaN if diff is NaN\n } else {\n return diff;\n }\n}", "/**\n * Days in 1 week.\n *\n * @name daysInWeek\n * @constant\n * @type {number}\n * @default\n */\nexport var daysInWeek = 7;\n/**\n * Days in 1 year\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occures every 4 years, except for years that are divisable by 100 and not divisable by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n *\n * @name daysInYear\n * @constant\n * @type {number}\n * @default\n */\n\nexport var daysInYear = 365.2425;\n/**\n * Maximum allowed time.\n *\n * @name maxTime\n * @constant\n * @type {number}\n * @default\n */\n\nexport var maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n/**\n * Milliseconds in 1 minute\n *\n * @name millisecondsInMinute\n * @constant\n * @type {number}\n * @default\n */\n\nexport var millisecondsInMinute = 60000;\n/**\n * Milliseconds in 1 hour\n *\n * @name millisecondsInHour\n * @constant\n * @type {number}\n * @default\n */\n\nexport var millisecondsInHour = 3600000;\n/**\n * Milliseconds in 1 second\n *\n * @name millisecondsInSecond\n * @constant\n * @type {number}\n * @default\n */\n\nexport var millisecondsInSecond = 1000;\n/**\n * Minimum allowed time.\n *\n * @name minTime\n * @constant\n * @type {number}\n * @default\n */\n\nexport var minTime = -maxTime;\n/**\n * Minutes in 1 hour\n *\n * @name minutesInHour\n * @constant\n * @type {number}\n * @default\n */\n\nexport var minutesInHour = 60;\n/**\n * Months in 1 quarter\n *\n * @name monthsInQuarter\n * @constant\n * @type {number}\n * @default\n */\n\nexport var monthsInQuarter = 3;\n/**\n * Months in 1 year\n *\n * @name monthsInYear\n * @constant\n * @type {number}\n * @default\n */\n\nexport var monthsInYear = 12;\n/**\n * Quarters in 1 year\n *\n * @name quartersInYear\n * @constant\n * @type {number}\n * @default\n */\n\nexport var quartersInYear = 4;\n/**\n * Seconds in 1 hour\n *\n * @name secondsInHour\n * @constant\n * @type {number}\n * @default\n */\n\nexport var secondsInHour = 3600;\n/**\n * Seconds in 1 minute\n *\n * @name secondsInMinute\n * @constant\n * @type {number}\n * @default\n */\n\nexport var secondsInMinute = 60;\n/**\n * Seconds in 1 day\n *\n * @name secondsInDay\n * @constant\n * @type {number}\n * @default\n */\n\nexport var secondsInDay = secondsInHour * 24;\n/**\n * Seconds in 1 week\n *\n * @name secondsInWeek\n * @constant\n * @type {number}\n * @default\n */\n\nexport var secondsInWeek = secondsInDay * 7;\n/**\n * Seconds in 1 year\n *\n * @name secondsInYear\n * @constant\n * @type {number}\n * @default\n */\n\nexport var secondsInYear = secondsInDay * daysInYear;\n/**\n * Seconds in 1 month\n *\n * @name secondsInMonth\n * @constant\n * @type {number}\n * @default\n */\n\nexport var secondsInMonth = secondsInYear / 12;\n/**\n * Seconds in 1 quarter\n *\n * @name secondsInQuarter\n * @constant\n * @type {number}\n * @default\n */\n\nexport var secondsInQuarter = secondsInMonth * 3;", "function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * @param {*} value - the value to check\n * @returns {boolean} true if the given value is a date\n * @throws {TypeError} 1 arguments required\n *\n * @example\n * // For a valid date:\n * const result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * const result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * const result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * const result = isDate({})\n * //=> false\n */\n\nexport default function isDate(value) {\n requiredArgs(1, arguments);\n return value instanceof Date || _typeof(value) === 'object' && Object.prototype.toString.call(value) === '[object Date]';\n}", "import isDate from \"../isDate/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @param {*} date - the date to check\n * @returns {Boolean} the date is valid\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // For the valid date:\n * const result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertable into a date:\n * const result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isValid(new Date(''))\n * //=> false\n */\n\nexport default function isValid(dirtyDate) {\n requiredArgs(1, arguments);\n\n if (!isDate(dirtyDate) && typeof dirtyDate !== 'number') {\n return false;\n }\n\n var date = toDate(dirtyDate);\n return !isNaN(Number(date));\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInCalendarMonths\n * @category Month Helpers\n * @summary Get the number of calendar months between the given dates.\n *\n * @description\n * Get the number of calendar months between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar months\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar months are between 31 January 2014 and 1 September 2014?\n * const result = differenceInCalendarMonths(\n * new Date(2014, 8, 1),\n * new Date(2014, 0, 31)\n * )\n * //=> 8\n */\n\nexport default function differenceInCalendarMonths(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n var yearDiff = dateLeft.getFullYear() - dateRight.getFullYear();\n var monthDiff = dateLeft.getMonth() - dateRight.getMonth();\n return yearDiff * 12 + monthDiff;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInCalendarYears\n * @category Year Helpers\n * @summary Get the number of calendar years between the given dates.\n *\n * @description\n * Get the number of calendar years between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar years\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar years are between 31 December 2013 and 11 February 2015?\n * const result = differenceInCalendarYears(\n * new Date(2015, 1, 11),\n * new Date(2013, 11, 31)\n * )\n * //=> 2\n */\n\nexport default function differenceInCalendarYears(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n return dateLeft.getFullYear() - dateRight.getFullYear();\n}", "import toDate from \"../toDate/index.js\";\nimport differenceInCalendarDays from \"../differenceInCalendarDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\"; // Like `compareAsc` but uses local time not UTC, which is needed\n// for accurate equality comparisons of UTC timestamps that end up\n// having the same representation in local time, e.g. one hour before\n// DST ends vs. the instant that DST ends.\n\nfunction compareLocalAsc(dateLeft, dateRight) {\n var diff = dateLeft.getFullYear() - dateRight.getFullYear() || dateLeft.getMonth() - dateRight.getMonth() || dateLeft.getDate() - dateRight.getDate() || dateLeft.getHours() - dateRight.getHours() || dateLeft.getMinutes() - dateRight.getMinutes() || dateLeft.getSeconds() - dateRight.getSeconds() || dateLeft.getMilliseconds() - dateRight.getMilliseconds();\n\n if (diff < 0) {\n return -1;\n } else if (diff > 0) {\n return 1; // Return 0 if diff is 0; return NaN if diff is NaN\n } else {\n return diff;\n }\n}\n/**\n * @name differenceInDays\n * @category Day Helpers\n * @summary Get the number of full days between the given dates.\n *\n * @description\n * Get the number of full day periods between two dates. Fractional days are\n * truncated towards zero.\n *\n * One \"full day\" is the distance between a local time in one day to the same\n * local time on the next or previous day. A full day can sometimes be less than\n * or more than 24 hours if a daylight savings change happens between two dates.\n *\n * To ignore DST and only measure exact 24-hour periods, use this instead:\n * `Math.floor(differenceInHours(dateLeft, dateRight)/24)|0`.\n *\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full days according to the local timezone\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInDays(\n * new Date(2012, 6, 2, 0, 0),\n * new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 365\n * // How many full days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInDays(\n * new Date(2011, 6, 3, 0, 1),\n * new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 0\n * // How many full days are between\n * // 1 March 2020 0:00 and 1 June 2020 0:00 ?\n * // Note: because local time is used, the\n * // result will always be 92 days, even in\n * // time zones where DST starts and the\n * // period has only 92*24-1 hours.\n * const result = differenceInDays(\n * new Date(2020, 5, 1),\n * new Date(2020, 2, 1)\n * )\n//=> 92\n */\n\n\nexport default function differenceInDays(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n var sign = compareLocalAsc(dateLeft, dateRight);\n var difference = Math.abs(differenceInCalendarDays(dateLeft, dateRight));\n dateLeft.setDate(dateLeft.getDate() - sign * difference); // Math.abs(diff in full days - diff in calendar days) === 1 if last calendar day is not full\n // If so, result must be decreased by 1 in absolute value\n\n var isLastDayNotFull = Number(compareLocalAsc(dateLeft, dateRight) === -sign);\n var result = sign * (difference - isLastDayNotFull); // Prevent negative zero\n\n return result === 0 ? 0 : result;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInMilliseconds\n * @category Millisecond Helpers\n * @summary Get the number of milliseconds between the given dates.\n *\n * @description\n * Get the number of milliseconds between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of milliseconds\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many milliseconds are between\n * // 2 July 2014 12:30:20.600 and 2 July 2014 12:30:21.700?\n * const result = differenceInMilliseconds(\n * new Date(2014, 6, 2, 12, 30, 21, 700),\n * new Date(2014, 6, 2, 12, 30, 20, 600)\n * )\n * //=> 1100\n */\n\nexport default function differenceInMilliseconds(dateLeft, dateRight) {\n requiredArgs(2, arguments);\n return toDate(dateLeft).getTime() - toDate(dateRight).getTime();\n}", "var roundingMap = {\n ceil: Math.ceil,\n round: Math.round,\n floor: Math.floor,\n trunc: function trunc(value) {\n return value < 0 ? Math.ceil(value) : Math.floor(value);\n } // Math.trunc is not supported by IE\n\n};\nvar defaultRoundingMethod = 'trunc';\nexport function getRoundingMethod(method) {\n return method ? roundingMap[method] : roundingMap[defaultRoundingMethod];\n}", "import { millisecondsInHour } from \"../constants/index.js\";\nimport differenceInMilliseconds from \"../differenceInMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getRoundingMethod } from \"../_lib/roundingMethods/index.js\";\n/**\n * @name differenceInHours\n * @category Hour Helpers\n * @summary Get the number of hours between the given dates.\n *\n * @description\n * Get the number of hours between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @param {Object} [options] - an object with options.\n * @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)\n * @returns {Number} the number of hours\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many hours are between 2 July 2014 06:50:00 and 2 July 2014 19:00:00?\n * const result = differenceInHours(\n * new Date(2014, 6, 2, 19, 0),\n * new Date(2014, 6, 2, 6, 50)\n * )\n * //=> 12\n */\n\nexport default function differenceInHours(dateLeft, dateRight, options) {\n requiredArgs(2, arguments);\n var diff = differenceInMilliseconds(dateLeft, dateRight) / millisecondsInHour;\n return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);\n}", "import { millisecondsInMinute } from \"../constants/index.js\";\nimport differenceInMilliseconds from \"../differenceInMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getRoundingMethod } from \"../_lib/roundingMethods/index.js\";\n/**\n * @name differenceInMinutes\n * @category Minute Helpers\n * @summary Get the number of minutes between the given dates.\n *\n * @description\n * Get the signed number of full (rounded towards 0) minutes between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @param {Object} [options] - an object with options.\n * @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)\n * @returns {Number} the number of minutes\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many minutes are between 2 July 2014 12:07:59 and 2 July 2014 12:20:00?\n * const result = differenceInMinutes(\n * new Date(2014, 6, 2, 12, 20, 0),\n * new Date(2014, 6, 2, 12, 7, 59)\n * )\n * //=> 12\n *\n * @example\n * // How many minutes are between 10:01:59 and 10:00:00\n * const result = differenceInMinutes(\n * new Date(2000, 0, 1, 10, 0, 0),\n * new Date(2000, 0, 1, 10, 1, 59)\n * )\n * //=> -1\n */\n\nexport default function differenceInMinutes(dateLeft, dateRight, options) {\n requiredArgs(2, arguments);\n var diff = differenceInMilliseconds(dateLeft, dateRight) / millisecondsInMinute;\n return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfDay\n * @category Day Helpers\n * @summary Return the end of a day for the given date.\n *\n * @description\n * Return the end of a day for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a day\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a day for 2 September 2014 11:55:00:\n * const result = endOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 23:59:59.999\n */\n\nexport default function endOfDay(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n date.setHours(23, 59, 59, 999);\n return date;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfMonth\n * @category Month Helpers\n * @summary Return the end of a month for the given date.\n *\n * @description\n * Return the end of a month for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a month for 2 September 2014 11:55:00:\n * const result = endOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 23:59:59.999\n */\n\nexport default function endOfMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var month = date.getMonth();\n date.setFullYear(date.getFullYear(), month + 1, 0);\n date.setHours(23, 59, 59, 999);\n return date;\n}", "import toDate from \"../toDate/index.js\";\nimport endOfDay from \"../endOfDay/index.js\";\nimport endOfMonth from \"../endOfMonth/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isLastDayOfMonth\n * @category Month Helpers\n * @summary Is the given date the last day of a month?\n *\n * @description\n * Is the given date the last day of a month?\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is the last day of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 28 February 2014 the last day of a month?\n * const result = isLastDayOfMonth(new Date(2014, 1, 28))\n * //=> true\n */\n\nexport default function isLastDayOfMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n return endOfDay(date).getTime() === endOfMonth(date).getTime();\n}", "import toDate from \"../toDate/index.js\";\nimport differenceInCalendarMonths from \"../differenceInCalendarMonths/index.js\";\nimport compareAsc from \"../compareAsc/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport isLastDayOfMonth from \"../isLastDayOfMonth/index.js\";\n/**\n * @name differenceInMonths\n * @category Month Helpers\n * @summary Get the number of full months between the given dates.\n *\n * @description\n * Get the number of full months between the given dates using trunc as a default rounding method.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full months\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full months are between 31 January 2014 and 1 September 2014?\n * const result = differenceInMonths(new Date(2014, 8, 1), new Date(2014, 0, 31))\n * //=> 7\n */\n\nexport default function differenceInMonths(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n var sign = compareAsc(dateLeft, dateRight);\n var difference = Math.abs(differenceInCalendarMonths(dateLeft, dateRight));\n var result; // Check for the difference of less than month\n\n if (difference < 1) {\n result = 0;\n } else {\n if (dateLeft.getMonth() === 1 && dateLeft.getDate() > 27) {\n // This will check if the date is end of Feb and assign a higher end of month date\n // to compare it with Jan\n dateLeft.setDate(30);\n }\n\n dateLeft.setMonth(dateLeft.getMonth() - sign * difference); // Math.abs(diff in full months - diff in calendar months) === 1 if last calendar month is not full\n // If so, result must be decreased by 1 in absolute value\n\n var isLastMonthNotFull = compareAsc(dateLeft, dateRight) === -sign; // Check for cases of one full calendar month\n\n if (isLastDayOfMonth(toDate(dirtyDateLeft)) && difference === 1 && compareAsc(dirtyDateLeft, dateRight) === 1) {\n isLastMonthNotFull = false;\n }\n\n result = sign * (difference - Number(isLastMonthNotFull));\n } // Prevent negative zero\n\n\n return result === 0 ? 0 : result;\n}", "import differenceInMilliseconds from \"../differenceInMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getRoundingMethod } from \"../_lib/roundingMethods/index.js\";\n/**\n * @name differenceInSeconds\n * @category Second Helpers\n * @summary Get the number of seconds between the given dates.\n *\n * @description\n * Get the number of seconds between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @param {Object} [options] - an object with options.\n * @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)\n * @returns {Number} the number of seconds\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many seconds are between\n * // 2 July 2014 12:30:07.999 and 2 July 2014 12:30:20.000?\n * const result = differenceInSeconds(\n * new Date(2014, 6, 2, 12, 30, 20, 0),\n * new Date(2014, 6, 2, 12, 30, 7, 999)\n * )\n * //=> 12\n */\n\nexport default function differenceInSeconds(dateLeft, dateRight, options) {\n requiredArgs(2, arguments);\n var diff = differenceInMilliseconds(dateLeft, dateRight) / 1000;\n return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);\n}", "import toDate from \"../toDate/index.js\";\nimport differenceInCalendarYears from \"../differenceInCalendarYears/index.js\";\nimport compareAsc from \"../compareAsc/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInYears\n * @category Year Helpers\n * @summary Get the number of full years between the given dates.\n *\n * @description\n * Get the number of full years between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full years\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full years are between 31 December 2013 and 11 February 2015?\n * const result = differenceInYears(new Date(2015, 1, 11), new Date(2013, 11, 31))\n * //=> 1\n */\n\nexport default function differenceInYears(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n var sign = compareAsc(dateLeft, dateRight);\n var difference = Math.abs(differenceInCalendarYears(dateLeft, dateRight)); // Set both dates to a valid leap year for accurate comparison when dealing\n // with leap days\n\n dateLeft.setFullYear(1584);\n dateRight.setFullYear(1584); // Math.abs(diff in full years - diff in calendar years) === 1 if last calendar year is not full\n // If so, result must be decreased by 1 in absolute value\n\n var isLastYearNotFull = compareAsc(dateLeft, dateRight) === -sign;\n var result = sign * (difference - Number(isLastYearNotFull)); // Prevent negative zero\n\n return result === 0 ? 0 : result;\n}", "import addMilliseconds from \"../addMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name subMilliseconds\n * @category Millisecond Helpers\n * @summary Subtract the specified number of milliseconds from the given date.\n *\n * @description\n * Subtract the specified number of milliseconds from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the milliseconds subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 750 milliseconds from 10 July 2014 12:45:30.000:\n * const result = subMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:29.250\n */\n\nexport default function subMilliseconds(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addMilliseconds(dirtyDate, -amount);\n}", "import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_DAY = 86400000;\nexport default function getUTCDayOfYear(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var timestamp = date.getTime();\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n var startOfYearTimestamp = date.getTime();\n var difference = timestamp - startOfYearTimestamp;\n return Math.floor(difference / MILLISECONDS_IN_DAY) + 1;\n}", "import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nexport default function startOfUTCISOWeek(dirtyDate) {\n requiredArgs(1, arguments);\n var weekStartsOn = 1;\n var date = toDate(dirtyDate);\n var day = date.getUTCDay();\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n date.setUTCDate(date.getUTCDate() - diff);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n}", "import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\";\nexport default function getUTCISOWeekYear(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var year = date.getUTCFullYear();\n var fourthOfJanuaryOfNextYear = new Date(0);\n fourthOfJanuaryOfNextYear.setUTCFullYear(year + 1, 0, 4);\n fourthOfJanuaryOfNextYear.setUTCHours(0, 0, 0, 0);\n var startOfNextYear = startOfUTCISOWeek(fourthOfJanuaryOfNextYear);\n var fourthOfJanuaryOfThisYear = new Date(0);\n fourthOfJanuaryOfThisYear.setUTCFullYear(year, 0, 4);\n fourthOfJanuaryOfThisYear.setUTCHours(0, 0, 0, 0);\n var startOfThisYear = startOfUTCISOWeek(fourthOfJanuaryOfThisYear);\n\n if (date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}", "import getUTCISOWeekYear from \"../getUTCISOWeekYear/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nexport default function startOfUTCISOWeekYear(dirtyDate) {\n requiredArgs(1, arguments);\n var year = getUTCISOWeekYear(dirtyDate);\n var fourthOfJanuary = new Date(0);\n fourthOfJanuary.setUTCFullYear(year, 0, 4);\n fourthOfJanuary.setUTCHours(0, 0, 0, 0);\n var date = startOfUTCISOWeek(fourthOfJanuary);\n return date;\n}", "import toDate from \"../../toDate/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\";\nimport startOfUTCISOWeekYear from \"../startOfUTCISOWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000;\nexport default function getUTCISOWeek(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var diff = startOfUTCISOWeek(date).getTime() - startOfUTCISOWeekYear(date).getTime(); // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n\n return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}", "import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport toInteger from \"../toInteger/index.js\";\nimport { getDefaultOptions } from \"../defaultOptions/index.js\";\nexport default function startOfUTCWeek(dirtyDate, options) {\n var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n\n requiredArgs(1, arguments);\n var defaultOptions = getDefaultOptions();\n var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n\n var date = toDate(dirtyDate);\n var day = date.getUTCDay();\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n date.setUTCDate(date.getUTCDate() - diff);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n}", "import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport toInteger from \"../toInteger/index.js\";\nimport { getDefaultOptions } from \"../defaultOptions/index.js\";\nexport default function getUTCWeekYear(dirtyDate, options) {\n var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var year = date.getUTCFullYear();\n var defaultOptions = getDefaultOptions();\n var firstWeekContainsDate = toInteger((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n }\n\n var firstWeekOfNextYear = new Date(0);\n firstWeekOfNextYear.setUTCFullYear(year + 1, 0, firstWeekContainsDate);\n firstWeekOfNextYear.setUTCHours(0, 0, 0, 0);\n var startOfNextYear = startOfUTCWeek(firstWeekOfNextYear, options);\n var firstWeekOfThisYear = new Date(0);\n firstWeekOfThisYear.setUTCFullYear(year, 0, firstWeekContainsDate);\n firstWeekOfThisYear.setUTCHours(0, 0, 0, 0);\n var startOfThisYear = startOfUTCWeek(firstWeekOfThisYear, options);\n\n if (date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}", "import getUTCWeekYear from \"../getUTCWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport toInteger from \"../toInteger/index.js\";\nimport { getDefaultOptions } from \"../defaultOptions/index.js\";\nexport default function startOfUTCWeekYear(dirtyDate, options) {\n var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n\n requiredArgs(1, arguments);\n var defaultOptions = getDefaultOptions();\n var firstWeekContainsDate = toInteger((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1);\n var year = getUTCWeekYear(dirtyDate, options);\n var firstWeek = new Date(0);\n firstWeek.setUTCFullYear(year, 0, firstWeekContainsDate);\n firstWeek.setUTCHours(0, 0, 0, 0);\n var date = startOfUTCWeek(firstWeek, options);\n return date;\n}", "import toDate from \"../../toDate/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport startOfUTCWeekYear from \"../startOfUTCWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000;\nexport default function getUTCWeek(dirtyDate, options) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var diff = startOfUTCWeek(date, options).getTime() - startOfUTCWeekYear(date, options).getTime(); // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n\n return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}", "export default function addLeadingZeros(number, targetLength) {\n var sign = number < 0 ? '-' : '';\n var output = Math.abs(number).toString();\n\n while (output.length < targetLength) {\n output = '0' + output;\n }\n\n return sign + output;\n}", "import addLeadingZeros from \"../../addLeadingZeros/index.js\";\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | |\n * | d | Day of month | D | |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | m | Minute | M | Month |\n * | s | Second | S | Fraction of second |\n * | y | Year (abs) | Y | |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n */\n\nvar formatters = {\n // Year\n y: function y(date, token) {\n // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens\n // | Year | y | yy | yyy | yyyy | yyyyy |\n // |----------|-------|----|-------|-------|-------|\n // | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n // | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n // | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n var signedYear = date.getUTCFullYear(); // Returns 1 for 1 BC (which is year 0 in JavaScript)\n\n var year = signedYear > 0 ? signedYear : 1 - signedYear;\n return addLeadingZeros(token === 'yy' ? year % 100 : year, token.length);\n },\n // Month\n M: function M(date, token) {\n var month = date.getUTCMonth();\n return token === 'M' ? String(month + 1) : addLeadingZeros(month + 1, 2);\n },\n // Day of the month\n d: function d(date, token) {\n return addLeadingZeros(date.getUTCDate(), token.length);\n },\n // AM or PM\n a: function a(date, token) {\n var dayPeriodEnumValue = date.getUTCHours() / 12 >= 1 ? 'pm' : 'am';\n\n switch (token) {\n case 'a':\n case 'aa':\n return dayPeriodEnumValue.toUpperCase();\n\n case 'aaa':\n return dayPeriodEnumValue;\n\n case 'aaaaa':\n return dayPeriodEnumValue[0];\n\n case 'aaaa':\n default:\n return dayPeriodEnumValue === 'am' ? 'a.m.' : 'p.m.';\n }\n },\n // Hour [1-12]\n h: function h(date, token) {\n return addLeadingZeros(date.getUTCHours() % 12 || 12, token.length);\n },\n // Hour [0-23]\n H: function H(date, token) {\n return addLeadingZeros(date.getUTCHours(), token.length);\n },\n // Minute\n m: function m(date, token) {\n return addLeadingZeros(date.getUTCMinutes(), token.length);\n },\n // Second\n s: function s(date, token) {\n return addLeadingZeros(date.getUTCSeconds(), token.length);\n },\n // Fraction of second\n S: function S(date, token) {\n var numberOfDigits = token.length;\n var milliseconds = date.getUTCMilliseconds();\n var fractionalSeconds = Math.floor(milliseconds * Math.pow(10, numberOfDigits - 3));\n return addLeadingZeros(fractionalSeconds, token.length);\n }\n};\nexport default formatters;", "import getUTCDayOfYear from \"../../../_lib/getUTCDayOfYear/index.js\";\nimport getUTCISOWeek from \"../../../_lib/getUTCISOWeek/index.js\";\nimport getUTCISOWeekYear from \"../../../_lib/getUTCISOWeekYear/index.js\";\nimport getUTCWeek from \"../../../_lib/getUTCWeek/index.js\";\nimport getUTCWeekYear from \"../../../_lib/getUTCWeekYear/index.js\";\nimport addLeadingZeros from \"../../addLeadingZeros/index.js\";\nimport lightFormatters from \"../lightFormatters/index.js\";\nvar dayPeriodEnum = {\n am: 'am',\n pm: 'pm',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n};\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O | Timezone (GMT) |\n * | p! | Long localized time | P! | Long localized date |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\nvar formatters = {\n // Era\n G: function G(date, token, localize) {\n var era = date.getUTCFullYear() > 0 ? 1 : 0;\n\n switch (token) {\n // AD, BC\n case 'G':\n case 'GG':\n case 'GGG':\n return localize.era(era, {\n width: 'abbreviated'\n });\n // A, B\n\n case 'GGGGG':\n return localize.era(era, {\n width: 'narrow'\n });\n // Anno Domini, Before Christ\n\n case 'GGGG':\n default:\n return localize.era(era, {\n width: 'wide'\n });\n }\n },\n // Year\n y: function y(date, token, localize) {\n // Ordinal number\n if (token === 'yo') {\n var signedYear = date.getUTCFullYear(); // Returns 1 for 1 BC (which is year 0 in JavaScript)\n\n var year = signedYear > 0 ? signedYear : 1 - signedYear;\n return localize.ordinalNumber(year, {\n unit: 'year'\n });\n }\n\n return lightFormatters.y(date, token);\n },\n // Local week-numbering year\n Y: function Y(date, token, localize, options) {\n var signedWeekYear = getUTCWeekYear(date, options); // Returns 1 for 1 BC (which is year 0 in JavaScript)\n\n var weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear; // Two digit year\n\n if (token === 'YY') {\n var twoDigitYear = weekYear % 100;\n return addLeadingZeros(twoDigitYear, 2);\n } // Ordinal number\n\n\n if (token === 'Yo') {\n return localize.ordinalNumber(weekYear, {\n unit: 'year'\n });\n } // Padding\n\n\n return addLeadingZeros(weekYear, token.length);\n },\n // ISO week-numbering year\n R: function R(date, token) {\n var isoWeekYear = getUTCISOWeekYear(date); // Padding\n\n return addLeadingZeros(isoWeekYear, token.length);\n },\n // Extended year. This is a single number designating the year of this calendar system.\n // The main difference between `y` and `u` localizers are B.C. years:\n // | Year | `y` | `u` |\n // |------|-----|-----|\n // | AC 1 | 1 | 1 |\n // | BC 1 | 1 | 0 |\n // | BC 2 | 2 | -1 |\n // Also `yy` always returns the last two digits of a year,\n // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n u: function u(date, token) {\n var year = date.getUTCFullYear();\n return addLeadingZeros(year, token.length);\n },\n // Quarter\n Q: function Q(date, token, localize) {\n var quarter = Math.ceil((date.getUTCMonth() + 1) / 3);\n\n switch (token) {\n // 1, 2, 3, 4\n case 'Q':\n return String(quarter);\n // 01, 02, 03, 04\n\n case 'QQ':\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n\n case 'Qo':\n return localize.ordinalNumber(quarter, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'QQQ':\n return localize.quarter(quarter, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'QQQQQ':\n return localize.quarter(quarter, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'QQQQ':\n default:\n return localize.quarter(quarter, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Stand-alone quarter\n q: function q(date, token, localize) {\n var quarter = Math.ceil((date.getUTCMonth() + 1) / 3);\n\n switch (token) {\n // 1, 2, 3, 4\n case 'q':\n return String(quarter);\n // 01, 02, 03, 04\n\n case 'qq':\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n\n case 'qo':\n return localize.ordinalNumber(quarter, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'qqq':\n return localize.quarter(quarter, {\n width: 'abbreviated',\n context: 'standalone'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'qqqqq':\n return localize.quarter(quarter, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'qqqq':\n default:\n return localize.quarter(quarter, {\n width: 'wide',\n context: 'standalone'\n });\n }\n },\n // Month\n M: function M(date, token, localize) {\n var month = date.getUTCMonth();\n\n switch (token) {\n case 'M':\n case 'MM':\n return lightFormatters.M(date, token);\n // 1st, 2nd, ..., 12th\n\n case 'Mo':\n return localize.ordinalNumber(month + 1, {\n unit: 'month'\n });\n // Jan, Feb, ..., Dec\n\n case 'MMM':\n return localize.month(month, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // J, F, ..., D\n\n case 'MMMMM':\n return localize.month(month, {\n width: 'narrow',\n context: 'formatting'\n });\n // January, February, ..., December\n\n case 'MMMM':\n default:\n return localize.month(month, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Stand-alone month\n L: function L(date, token, localize) {\n var month = date.getUTCMonth();\n\n switch (token) {\n // 1, 2, ..., 12\n case 'L':\n return String(month + 1);\n // 01, 02, ..., 12\n\n case 'LL':\n return addLeadingZeros(month + 1, 2);\n // 1st, 2nd, ..., 12th\n\n case 'Lo':\n return localize.ordinalNumber(month + 1, {\n unit: 'month'\n });\n // Jan, Feb, ..., Dec\n\n case 'LLL':\n return localize.month(month, {\n width: 'abbreviated',\n context: 'standalone'\n });\n // J, F, ..., D\n\n case 'LLLLL':\n return localize.month(month, {\n width: 'narrow',\n context: 'standalone'\n });\n // January, February, ..., December\n\n case 'LLLL':\n default:\n return localize.month(month, {\n width: 'wide',\n context: 'standalone'\n });\n }\n },\n // Local week of year\n w: function w(date, token, localize, options) {\n var week = getUTCWeek(date, options);\n\n if (token === 'wo') {\n return localize.ordinalNumber(week, {\n unit: 'week'\n });\n }\n\n return addLeadingZeros(week, token.length);\n },\n // ISO week of year\n I: function I(date, token, localize) {\n var isoWeek = getUTCISOWeek(date);\n\n if (token === 'Io') {\n return localize.ordinalNumber(isoWeek, {\n unit: 'week'\n });\n }\n\n return addLeadingZeros(isoWeek, token.length);\n },\n // Day of the month\n d: function d(date, token, localize) {\n if (token === 'do') {\n return localize.ordinalNumber(date.getUTCDate(), {\n unit: 'date'\n });\n }\n\n return lightFormatters.d(date, token);\n },\n // Day of year\n D: function D(date, token, localize) {\n var dayOfYear = getUTCDayOfYear(date);\n\n if (token === 'Do') {\n return localize.ordinalNumber(dayOfYear, {\n unit: 'dayOfYear'\n });\n }\n\n return addLeadingZeros(dayOfYear, token.length);\n },\n // Day of week\n E: function E(date, token, localize) {\n var dayOfWeek = date.getUTCDay();\n\n switch (token) {\n // Tue\n case 'E':\n case 'EE':\n case 'EEE':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // T\n\n case 'EEEEE':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'EEEEEE':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n });\n // Tuesday\n\n case 'EEEE':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Local day of week\n e: function e(date, token, localize, options) {\n var dayOfWeek = date.getUTCDay();\n var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n\n switch (token) {\n // Numerical value (Nth day of week with current locale or weekStartsOn)\n case 'e':\n return String(localDayOfWeek);\n // Padded numerical value\n\n case 'ee':\n return addLeadingZeros(localDayOfWeek, 2);\n // 1st, 2nd, ..., 7th\n\n case 'eo':\n return localize.ordinalNumber(localDayOfWeek, {\n unit: 'day'\n });\n\n case 'eee':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // T\n\n case 'eeeee':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'eeeeee':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n });\n // Tuesday\n\n case 'eeee':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Stand-alone local day of week\n c: function c(date, token, localize, options) {\n var dayOfWeek = date.getUTCDay();\n var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n\n switch (token) {\n // Numerical value (same as in `e`)\n case 'c':\n return String(localDayOfWeek);\n // Padded numerical value\n\n case 'cc':\n return addLeadingZeros(localDayOfWeek, token.length);\n // 1st, 2nd, ..., 7th\n\n case 'co':\n return localize.ordinalNumber(localDayOfWeek, {\n unit: 'day'\n });\n\n case 'ccc':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'standalone'\n });\n // T\n\n case 'ccccc':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tu\n\n case 'cccccc':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'standalone'\n });\n // Tuesday\n\n case 'cccc':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'standalone'\n });\n }\n },\n // ISO day of week\n i: function i(date, token, localize) {\n var dayOfWeek = date.getUTCDay();\n var isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;\n\n switch (token) {\n // 2\n case 'i':\n return String(isoDayOfWeek);\n // 02\n\n case 'ii':\n return addLeadingZeros(isoDayOfWeek, token.length);\n // 2nd\n\n case 'io':\n return localize.ordinalNumber(isoDayOfWeek, {\n unit: 'day'\n });\n // Tue\n\n case 'iii':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // T\n\n case 'iiiii':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'iiiiii':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n });\n // Tuesday\n\n case 'iiii':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // AM or PM\n a: function a(date, token, localize) {\n var hours = date.getUTCHours();\n var dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am';\n\n switch (token) {\n case 'a':\n case 'aa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n });\n\n case 'aaa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n }).toLowerCase();\n\n case 'aaaaa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'aaaa':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // AM, PM, midnight, noon\n b: function b(date, token, localize) {\n var hours = date.getUTCHours();\n var dayPeriodEnumValue;\n\n if (hours === 12) {\n dayPeriodEnumValue = dayPeriodEnum.noon;\n } else if (hours === 0) {\n dayPeriodEnumValue = dayPeriodEnum.midnight;\n } else {\n dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am';\n }\n\n switch (token) {\n case 'b':\n case 'bb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n });\n\n case 'bbb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n }).toLowerCase();\n\n case 'bbbbb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'bbbb':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // in the morning, in the afternoon, in the evening, at night\n B: function B(date, token, localize) {\n var hours = date.getUTCHours();\n var dayPeriodEnumValue;\n\n if (hours >= 17) {\n dayPeriodEnumValue = dayPeriodEnum.evening;\n } else if (hours >= 12) {\n dayPeriodEnumValue = dayPeriodEnum.afternoon;\n } else if (hours >= 4) {\n dayPeriodEnumValue = dayPeriodEnum.morning;\n } else {\n dayPeriodEnumValue = dayPeriodEnum.night;\n }\n\n switch (token) {\n case 'B':\n case 'BB':\n case 'BBB':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n });\n\n case 'BBBBB':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'BBBB':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Hour [1-12]\n h: function h(date, token, localize) {\n if (token === 'ho') {\n var hours = date.getUTCHours() % 12;\n if (hours === 0) hours = 12;\n return localize.ordinalNumber(hours, {\n unit: 'hour'\n });\n }\n\n return lightFormatters.h(date, token);\n },\n // Hour [0-23]\n H: function H(date, token, localize) {\n if (token === 'Ho') {\n return localize.ordinalNumber(date.getUTCHours(), {\n unit: 'hour'\n });\n }\n\n return lightFormatters.H(date, token);\n },\n // Hour [0-11]\n K: function K(date, token, localize) {\n var hours = date.getUTCHours() % 12;\n\n if (token === 'Ko') {\n return localize.ordinalNumber(hours, {\n unit: 'hour'\n });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n // Hour [1-24]\n k: function k(date, token, localize) {\n var hours = date.getUTCHours();\n if (hours === 0) hours = 24;\n\n if (token === 'ko') {\n return localize.ordinalNumber(hours, {\n unit: 'hour'\n });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n // Minute\n m: function m(date, token, localize) {\n if (token === 'mo') {\n return localize.ordinalNumber(date.getUTCMinutes(), {\n unit: 'minute'\n });\n }\n\n return lightFormatters.m(date, token);\n },\n // Second\n s: function s(date, token, localize) {\n if (token === 'so') {\n return localize.ordinalNumber(date.getUTCSeconds(), {\n unit: 'second'\n });\n }\n\n return lightFormatters.s(date, token);\n },\n // Fraction of second\n S: function S(date, token) {\n return lightFormatters.S(date, token);\n },\n // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n X: function X(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n if (timezoneOffset === 0) {\n return 'Z';\n }\n\n switch (token) {\n // Hours and optional minutes\n case 'X':\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XX`\n\n case 'XXXX':\n case 'XX':\n // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XXX`\n\n case 'XXXXX':\n case 'XXX': // Hours and minutes with `:` delimiter\n\n default:\n return formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n x: function x(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n switch (token) {\n // Hours and optional minutes\n case 'x':\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xx`\n\n case 'xxxx':\n case 'xx':\n // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xxx`\n\n case 'xxxxx':\n case 'xxx': // Hours and minutes with `:` delimiter\n\n default:\n return formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (GMT)\n O: function O(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n switch (token) {\n // Short\n case 'O':\n case 'OO':\n case 'OOO':\n return 'GMT' + formatTimezoneShort(timezoneOffset, ':');\n // Long\n\n case 'OOOO':\n default:\n return 'GMT' + formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (specific non-location)\n z: function z(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n switch (token) {\n // Short\n case 'z':\n case 'zz':\n case 'zzz':\n return 'GMT' + formatTimezoneShort(timezoneOffset, ':');\n // Long\n\n case 'zzzz':\n default:\n return 'GMT' + formatTimezone(timezoneOffset, ':');\n }\n },\n // Seconds timestamp\n t: function t(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timestamp = Math.floor(originalDate.getTime() / 1000);\n return addLeadingZeros(timestamp, token.length);\n },\n // Milliseconds timestamp\n T: function T(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timestamp = originalDate.getTime();\n return addLeadingZeros(timestamp, token.length);\n }\n};\n\nfunction formatTimezoneShort(offset, dirtyDelimiter) {\n var sign = offset > 0 ? '-' : '+';\n var absOffset = Math.abs(offset);\n var hours = Math.floor(absOffset / 60);\n var minutes = absOffset % 60;\n\n if (minutes === 0) {\n return sign + String(hours);\n }\n\n var delimiter = dirtyDelimiter || '';\n return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);\n}\n\nfunction formatTimezoneWithOptionalMinutes(offset, dirtyDelimiter) {\n if (offset % 60 === 0) {\n var sign = offset > 0 ? '-' : '+';\n return sign + addLeadingZeros(Math.abs(offset) / 60, 2);\n }\n\n return formatTimezone(offset, dirtyDelimiter);\n}\n\nfunction formatTimezone(offset, dirtyDelimiter) {\n var delimiter = dirtyDelimiter || '';\n var sign = offset > 0 ? '-' : '+';\n var absOffset = Math.abs(offset);\n var hours = addLeadingZeros(Math.floor(absOffset / 60), 2);\n var minutes = addLeadingZeros(absOffset % 60, 2);\n return sign + hours + delimiter + minutes;\n}\n\nexport default formatters;", "var dateLongFormatter = function dateLongFormatter(pattern, formatLong) {\n switch (pattern) {\n case 'P':\n return formatLong.date({\n width: 'short'\n });\n\n case 'PP':\n return formatLong.date({\n width: 'medium'\n });\n\n case 'PPP':\n return formatLong.date({\n width: 'long'\n });\n\n case 'PPPP':\n default:\n return formatLong.date({\n width: 'full'\n });\n }\n};\n\nvar timeLongFormatter = function timeLongFormatter(pattern, formatLong) {\n switch (pattern) {\n case 'p':\n return formatLong.time({\n width: 'short'\n });\n\n case 'pp':\n return formatLong.time({\n width: 'medium'\n });\n\n case 'ppp':\n return formatLong.time({\n width: 'long'\n });\n\n case 'pppp':\n default:\n return formatLong.time({\n width: 'full'\n });\n }\n};\n\nvar dateTimeLongFormatter = function dateTimeLongFormatter(pattern, formatLong) {\n var matchResult = pattern.match(/(P+)(p+)?/) || [];\n var datePattern = matchResult[1];\n var timePattern = matchResult[2];\n\n if (!timePattern) {\n return dateLongFormatter(pattern, formatLong);\n }\n\n var dateTimeFormat;\n\n switch (datePattern) {\n case 'P':\n dateTimeFormat = formatLong.dateTime({\n width: 'short'\n });\n break;\n\n case 'PP':\n dateTimeFormat = formatLong.dateTime({\n width: 'medium'\n });\n break;\n\n case 'PPP':\n dateTimeFormat = formatLong.dateTime({\n width: 'long'\n });\n break;\n\n case 'PPPP':\n default:\n dateTimeFormat = formatLong.dateTime({\n width: 'full'\n });\n break;\n }\n\n return dateTimeFormat.replace('{{date}}', dateLongFormatter(datePattern, formatLong)).replace('{{time}}', timeLongFormatter(timePattern, formatLong));\n};\n\nvar longFormatters = {\n p: timeLongFormatter,\n P: dateTimeLongFormatter\n};\nexport default longFormatters;", "var protectedDayOfYearTokens = ['D', 'DD'];\nvar protectedWeekYearTokens = ['YY', 'YYYY'];\nexport function isProtectedDayOfYearToken(token) {\n return protectedDayOfYearTokens.indexOf(token) !== -1;\n}\nexport function isProtectedWeekYearToken(token) {\n return protectedWeekYearTokens.indexOf(token) !== -1;\n}\nexport function throwProtectedError(token, format, input) {\n if (token === 'YYYY') {\n throw new RangeError(\"Use `yyyy` instead of `YYYY` (in `\".concat(format, \"`) for formatting years to the input `\").concat(input, \"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\"));\n } else if (token === 'YY') {\n throw new RangeError(\"Use `yy` instead of `YY` (in `\".concat(format, \"`) for formatting years to the input `\").concat(input, \"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\"));\n } else if (token === 'D') {\n throw new RangeError(\"Use `d` instead of `D` (in `\".concat(format, \"`) for formatting days of the month to the input `\").concat(input, \"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\"));\n } else if (token === 'DD') {\n throw new RangeError(\"Use `dd` instead of `DD` (in `\".concat(format, \"`) for formatting days of the month to the input `\").concat(input, \"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\"));\n }\n}", "var formatDistanceLocale = {\n lessThanXSeconds: {\n one: 'less than a second',\n other: 'less than {{count}} seconds'\n },\n xSeconds: {\n one: '1 second',\n other: '{{count}} seconds'\n },\n halfAMinute: 'half a minute',\n lessThanXMinutes: {\n one: 'less than a minute',\n other: 'less than {{count}} minutes'\n },\n xMinutes: {\n one: '1 minute',\n other: '{{count}} minutes'\n },\n aboutXHours: {\n one: 'about 1 hour',\n other: 'about {{count}} hours'\n },\n xHours: {\n one: '1 hour',\n other: '{{count}} hours'\n },\n xDays: {\n one: '1 day',\n other: '{{count}} days'\n },\n aboutXWeeks: {\n one: 'about 1 week',\n other: 'about {{count}} weeks'\n },\n xWeeks: {\n one: '1 week',\n other: '{{count}} weeks'\n },\n aboutXMonths: {\n one: 'about 1 month',\n other: 'about {{count}} months'\n },\n xMonths: {\n one: '1 month',\n other: '{{count}} months'\n },\n aboutXYears: {\n one: 'about 1 year',\n other: 'about {{count}} years'\n },\n xYears: {\n one: '1 year',\n other: '{{count}} years'\n },\n overXYears: {\n one: 'over 1 year',\n other: 'over {{count}} years'\n },\n almostXYears: {\n one: 'almost 1 year',\n other: 'almost {{count}} years'\n }\n};\n\nvar formatDistance = function formatDistance(token, count, options) {\n var result;\n var tokenValue = formatDistanceLocale[token];\n\n if (typeof tokenValue === 'string') {\n result = tokenValue;\n } else if (count === 1) {\n result = tokenValue.one;\n } else {\n result = tokenValue.other.replace('{{count}}', count.toString());\n }\n\n if (options !== null && options !== void 0 && options.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return 'in ' + result;\n } else {\n return result + ' ago';\n }\n }\n\n return result;\n};\n\nexport default formatDistance;", "export default function buildFormatLongFn(args) {\n return function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // TODO: Remove String()\n var width = options.width ? String(options.width) : args.defaultWidth;\n var format = args.formats[width] || args.formats[args.defaultWidth];\n return format;\n };\n}", "import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n full: 'EEEE, MMMM do, y',\n long: 'MMMM do, y',\n medium: 'MMM d, y',\n short: 'MM/dd/yyyy'\n};\nvar timeFormats = {\n full: 'h:mm:ss a zzzz',\n long: 'h:mm:ss a z',\n medium: 'h:mm:ss a',\n short: 'h:mm a'\n};\nvar dateTimeFormats = {\n full: \"{{date}} 'at' {{time}}\",\n long: \"{{date}} 'at' {{time}}\",\n medium: '{{date}}, {{time}}',\n short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: 'full'\n }),\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: 'full'\n }),\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: 'full'\n })\n};\nexport default formatLong;", "var formatRelativeLocale = {\n lastWeek: \"'last' eeee 'at' p\",\n yesterday: \"'yesterday at' p\",\n today: \"'today at' p\",\n tomorrow: \"'tomorrow at' p\",\n nextWeek: \"eeee 'at' p\",\n other: 'P'\n};\n\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n return formatRelativeLocale[token];\n};\n\nexport default formatRelative;", "export default function buildLocalizeFn(args) {\n return function (dirtyIndex, options) {\n var context = options !== null && options !== void 0 && options.context ? String(options.context) : 'standalone';\n var valuesArray;\n\n if (context === 'formatting' && args.formattingValues) {\n var defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n var width = options !== null && options !== void 0 && options.width ? String(options.width) : defaultWidth;\n valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth];\n } else {\n var _defaultWidth = args.defaultWidth;\n\n var _width = options !== null && options !== void 0 && options.width ? String(options.width) : args.defaultWidth;\n\n valuesArray = args.values[_width] || args.values[_defaultWidth];\n }\n\n var index = args.argumentCallback ? args.argumentCallback(dirtyIndex) : dirtyIndex; // @ts-ignore: For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n\n return valuesArray[index];\n };\n}", "import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n narrow: ['B', 'A'],\n abbreviated: ['BC', 'AD'],\n wide: ['Before Christ', 'Anno Domini']\n};\nvar quarterValues = {\n narrow: ['1', '2', '3', '4'],\n abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n wide: ['1st quarter', '2nd quarter', '3rd quarter', '4th quarter']\n}; // Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\n\nvar monthValues = {\n narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n abbreviated: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n wide: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\n};\nvar dayValues = {\n narrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],\n short: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n abbreviated: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n wide: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\n};\nvar dayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mi',\n noon: 'n',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n }\n};\nvar formattingDayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mi',\n noon: 'n',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n }\n};\n\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n var number = Number(dirtyNumber); // If ordinal numbers depend on context, for example,\n // if they are different for different grammatical genders,\n // use `options.unit`.\n //\n // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n // 'day', 'hour', 'minute', 'second'.\n\n var rem100 = number % 100;\n\n if (rem100 > 20 || rem100 < 10) {\n switch (rem100 % 10) {\n case 1:\n return number + 'st';\n\n case 2:\n return number + 'nd';\n\n case 3:\n return number + 'rd';\n }\n }\n\n return number + 'th';\n};\n\nvar localize = {\n ordinalNumber: ordinalNumber,\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: 'wide'\n }),\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: 'wide',\n argumentCallback: function argumentCallback(quarter) {\n return quarter - 1;\n }\n }),\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: 'wide'\n }),\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: 'wide'\n }),\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: 'wide',\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: 'wide'\n })\n};\nexport default localize;", "export default function buildMatchFn(args) {\n return function (string) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var width = options.width;\n var matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth];\n var matchResult = string.match(matchPattern);\n\n if (!matchResult) {\n return null;\n }\n\n var matchedString = matchResult[0];\n var parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth];\n var key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, function (pattern) {\n return pattern.test(matchedString);\n }) : findKey(parsePatterns, function (pattern) {\n return pattern.test(matchedString);\n });\n var value;\n value = args.valueCallback ? args.valueCallback(key) : key;\n value = options.valueCallback ? options.valueCallback(value) : value;\n var rest = string.slice(matchedString.length);\n return {\n value: value,\n rest: rest\n };\n };\n}\n\nfunction findKey(object, predicate) {\n for (var key in object) {\n if (object.hasOwnProperty(key) && predicate(object[key])) {\n return key;\n }\n }\n\n return undefined;\n}\n\nfunction findIndex(array, predicate) {\n for (var key = 0; key < array.length; key++) {\n if (predicate(array[key])) {\n return key;\n }\n }\n\n return undefined;\n}", "export default function buildMatchPatternFn(args) {\n return function (string) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var matchResult = string.match(args.matchPattern);\n if (!matchResult) return null;\n var matchedString = matchResult[0];\n var parseResult = string.match(args.parsePattern);\n if (!parseResult) return null;\n var value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0];\n value = options.valueCallback ? options.valueCallback(value) : value;\n var rest = string.slice(matchedString.length);\n return {\n value: value,\n rest: rest\n };\n };\n}", "import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n narrow: /^(b|a)/i,\n abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n wide: /^(before christ|before common era|anno domini|common era)/i\n};\nvar parseEraPatterns = {\n any: [/^b/i, /^(a|c)/i]\n};\nvar matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](th|st|nd|rd)? quarter/i\n};\nvar parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i\n};\nvar parseMonthPatterns = {\n narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n narrow: /^[smtwf]/i,\n short: /^(su|mo|tu|we|th|fr|sa)/i,\n abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i\n};\nvar parseDayPatterns = {\n narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i\n};\nvar parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mi/i,\n noon: /^no/i,\n morning: /morning/i,\n afternoon: /afternoon/i,\n evening: /evening/i,\n night: /night/i\n }\n};\nvar match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: function valueCallback(value) {\n return parseInt(value, 10);\n }\n }),\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseEraPatterns,\n defaultParseWidth: 'any'\n }),\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: 'any',\n valueCallback: function valueCallback(index) {\n return index + 1;\n }\n }),\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: 'any'\n }),\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseDayPatterns,\n defaultParseWidth: 'any'\n }),\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: 'any',\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: 'any'\n })\n};\nexport default match;", "import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n\n/**\n * @type {Locale}\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp]{@link https://github.com/kossnocorp}\n * @author Lesha Koss [@leshakoss]{@link https://github.com/leshakoss}\n */\nvar locale = {\n code: 'en-US',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 0\n /* Sunday */\n ,\n firstWeekContainsDate: 1\n }\n};\nexport default locale;", "import defaultLocale from \"../../locale/en-US/index.js\";\nexport default defaultLocale;", "import isValid from \"../isValid/index.js\";\nimport subMilliseconds from \"../subMilliseconds/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport formatters from \"../_lib/format/formatters/index.js\";\nimport longFormatters from \"../_lib/format/longFormatters/index.js\";\nimport getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport { isProtectedDayOfYearToken, isProtectedWeekYearToken, throwProtectedError } from \"../_lib/protectedTokens/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\nimport defaultLocale from \"../_lib/defaultLocale/index.js\"; // This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\n\nvar formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g; // This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\n\nvar longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\nvar escapedStringRegExp = /^'([^]*?)'?$/;\nvar doubleQuoteRegExp = /''/g;\nvar unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n/**\n * @name format\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > \u26A0\uFE0F Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit | Pattern | Result examples | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era | G..GGG | AD, BC | |\n * | | GGGG | Anno Domini, Before Christ | 2 |\n * | | GGGGG | A, B | |\n * | Calendar year | y | 44, 1, 1900, 2017 | 5 |\n * | | yo | 44th, 1st, 0th, 17th | 5,7 |\n * | | yy | 44, 01, 00, 17 | 5 |\n * | | yyy | 044, 001, 1900, 2017 | 5 |\n * | | yyyy | 0044, 0001, 1900, 2017 | 5 |\n * | | yyyyy | ... | 3,5 |\n * | Local week-numbering year | Y | 44, 1, 1900, 2017 | 5 |\n * | | Yo | 44th, 1st, 1900th, 2017th | 5,7 |\n * | | YY | 44, 01, 00, 17 | 5,8 |\n * | | YYY | 044, 001, 1900, 2017 | 5 |\n * | | YYYY | 0044, 0001, 1900, 2017 | 5,8 |\n * | | YYYYY | ... | 3,5 |\n * | ISO week-numbering year | R | -43, 0, 1, 1900, 2017 | 5,7 |\n * | | RR | -43, 00, 01, 1900, 2017 | 5,7 |\n * | | RRR | -043, 000, 001, 1900, 2017 | 5,7 |\n * | | RRRR | -0043, 0000, 0001, 1900, 2017 | 5,7 |\n * | | RRRRR | ... | 3,5,7 |\n * | Extended year | u | -43, 0, 1, 1900, 2017 | 5 |\n * | | uu | -43, 01, 1900, 2017 | 5 |\n * | | uuu | -043, 001, 1900, 2017 | 5 |\n * | | uuuu | -0043, 0001, 1900, 2017 | 5 |\n * | | uuuuu | ... | 3,5 |\n * | Quarter (formatting) | Q | 1, 2, 3, 4 | |\n * | | Qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | QQ | 01, 02, 03, 04 | |\n * | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | q | 1, 2, 3, 4 | |\n * | | qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | qq | 01, 02, 03, 04 | |\n * | | qqq | Q1, Q2, Q3, Q4 | |\n * | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | qqqqq | 1, 2, 3, 4 | 4 |\n * | Month (formatting) | M | 1, 2, ..., 12 | |\n * | | Mo | 1st, 2nd, ..., 12th | 7 |\n * | | MM | 01, 02, ..., 12 | |\n * | | MMM | Jan, Feb, ..., Dec | |\n * | | MMMM | January, February, ..., December | 2 |\n * | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | L | 1, 2, ..., 12 | |\n * | | Lo | 1st, 2nd, ..., 12th | 7 |\n * | | LL | 01, 02, ..., 12 | |\n * | | LLL | Jan, Feb, ..., Dec | |\n * | | LLLL | January, February, ..., December | 2 |\n * | | LLLLL | J, F, ..., D | |\n * | Local week of year | w | 1, 2, ..., 53 | |\n * | | wo | 1st, 2nd, ..., 53th | 7 |\n * | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | I | 1, 2, ..., 53 | 7 |\n * | | Io | 1st, 2nd, ..., 53th | 7 |\n * | | II | 01, 02, ..., 53 | 7 |\n * | Day of month | d | 1, 2, ..., 31 | |\n * | | do | 1st, 2nd, ..., 31st | 7 |\n * | | dd | 01, 02, ..., 31 | |\n * | Day of year | D | 1, 2, ..., 365, 366 | 9 |\n * | | Do | 1st, 2nd, ..., 365th, 366th | 7 |\n * | | DD | 01, 02, ..., 365, 366 | 9 |\n * | | DDD | 001, 002, ..., 365, 366 | |\n * | | DDDD | ... | 3 |\n * | Day of week (formatting) | E..EEE | Mon, Tue, Wed, ..., Sun | |\n * | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | EEEEE | M, T, W, T, F, S, S | |\n * | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | ISO day of week (formatting) | i | 1, 2, 3, ..., 7 | 7 |\n * | | io | 1st, 2nd, ..., 7th | 7 |\n * | | ii | 01, 02, ..., 07 | 7 |\n * | | iii | Mon, Tue, Wed, ..., Sun | 7 |\n * | | iiii | Monday, Tuesday, ..., Sunday | 2,7 |\n * | | iiiii | M, T, W, T, F, S, S | 7 |\n * | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 7 |\n * | Local day of week (formatting) | e | 2, 3, 4, ..., 1 | |\n * | | eo | 2nd, 3rd, ..., 1st | 7 |\n * | | ee | 02, 03, ..., 01 | |\n * | | eee | Mon, Tue, Wed, ..., Sun | |\n * | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | eeeee | M, T, W, T, F, S, S | |\n * | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | Local day of week (stand-alone) | c | 2, 3, 4, ..., 1 | |\n * | | co | 2nd, 3rd, ..., 1st | 7 |\n * | | cc | 02, 03, ..., 01 | |\n * | | ccc | Mon, Tue, Wed, ..., Sun | |\n * | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | ccccc | M, T, W, T, F, S, S | |\n * | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | AM, PM | a..aa | AM, PM | |\n * | | aaa | am, pm | |\n * | | aaaa | a.m., p.m. | 2 |\n * | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | b..bb | AM, PM, noon, midnight | |\n * | | bbb | am, pm, noon, midnight | |\n * | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | bbbbb | a, p, n, mi | |\n * | Flexible day period | B..BBB | at night, in the morning, ... | |\n * | | BBBB | at night, in the morning, ... | 2 |\n * | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | h | 1, 2, ..., 11, 12 | |\n * | | ho | 1st, 2nd, ..., 11th, 12th | 7 |\n * | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | H | 0, 1, 2, ..., 23 | |\n * | | Ho | 0th, 1st, 2nd, ..., 23rd | 7 |\n * | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | K | 1, 2, ..., 11, 0 | |\n * | | Ko | 1st, 2nd, ..., 11th, 0th | 7 |\n * | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | k | 24, 1, 2, ..., 23 | |\n * | | ko | 24th, 1st, 2nd, ..., 23rd | 7 |\n * | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | m | 0, 1, ..., 59 | |\n * | | mo | 0th, 1st, ..., 59th | 7 |\n * | | mm | 00, 01, ..., 59 | |\n * | Second | s | 0, 1, ..., 59 | |\n * | | so | 0th, 1st, ..., 59th | 7 |\n * | | ss | 00, 01, ..., 59 | |\n * | Fraction of second | S | 0, 1, ..., 9 | |\n * | | SS | 00, 01, ..., 99 | |\n * | | SSS | 000, 001, ..., 999 | |\n * | | SSSS | ... | 3 |\n * | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z | |\n * | | XX | -0800, +0530, Z | |\n * | | XXX | -08:00, +05:30, Z | |\n * | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | x | -08, +0530, +00 | |\n * | | xx | -0800, +0530, +0000 | |\n * | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Timezone (GMT) | O...OOO | GMT-8, GMT+5:30, GMT+0 | |\n * | | OOOO | GMT-08:00, GMT+05:30, GMT+00:00 | 2 |\n * | Timezone (specific non-locat.) | z...zzz | GMT-8, GMT+5:30, GMT+0 | 6 |\n * | | zzzz | GMT-08:00, GMT+05:30, GMT+00:00 | 2,6 |\n * | Seconds timestamp | t | 512969520 | 7 |\n * | | tt | ... | 3,7 |\n * | Milliseconds timestamp | T | 512969520900 | 7 |\n * | | TT | ... | 3,7 |\n * | Long localized date | P | 04/29/1453 | 7 |\n * | | PP | Apr 29, 1453 | 7 |\n * | | PPP | April 29th, 1453 | 7 |\n * | | PPPP | Friday, April 29th, 1453 | 2,7 |\n * | Long localized time | p | 12:00 AM | 7 |\n * | | pp | 12:00:00 AM | 7 |\n * | | ppp | 12:00:00 AM GMT+2 | 7 |\n * | | pppp | 12:00:00 AM GMT+02:00 | 2,7 |\n * | Combination of date and time | Pp | 04/29/1453, 12:00 AM | 7 |\n * | | PPpp | Apr 29, 1453, 12:00:00 AM | 7 |\n * | | PPPppp | April 29th, 1453 at ... | 7 |\n * | | PPPPpppp| Friday, April 29th, 1453 at ... | 2,7 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n * the output will be the same as default pattern for this unit, usually\n * the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n * are marked with \"2\" in the last column of the table.\n *\n * `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n * `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n * The output will be padded with zeros to match the length of the pattern.\n *\n * `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` always returns the last two digits of a year,\n * while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n * | Year | `yy` | `uu` |\n * |------|------|------|\n * | 1 | 01 | 01 |\n * | 14 | 14 | 14 |\n * | 376 | 76 | 376 |\n * | 1453 | 53 | 1453 |\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [getISOWeekYear]{@link https://date-fns.org/docs/getISOWeekYear}\n * and [getWeekYear]{@link https://date-fns.org/docs/getWeekYear}).\n *\n * 6. Specific non-location timezones are currently unavailable in `date-fns`,\n * so right now these tokens fall back to GMT timezones.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `t`: seconds timestamp\n * - `T`: milliseconds timestamp\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 9. `D` and `DD` tokens represent days of the year but they are often confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @param {Date|Number} date - the original date\n * @param {String} format - the string of tokens\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Number} [options.firstWeekContainsDate=1] - the day of January, which is\n * @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`;\n * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`;\n * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @returns {String} the formatted date string\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `options.locale` must contain `localize` property\n * @throws {RangeError} `options.locale` must contain `formatLong` property\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws {RangeError} format string contains an unescaped latin alphabet character\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * const result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * const result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n * locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * const result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\n\nexport default function format(dirtyDate, dirtyFormatStr, options) {\n var _ref, _options$locale, _ref2, _ref3, _ref4, _options$firstWeekCon, _options$locale2, _options$locale2$opti, _defaultOptions$local, _defaultOptions$local2, _ref5, _ref6, _ref7, _options$weekStartsOn, _options$locale3, _options$locale3$opti, _defaultOptions$local3, _defaultOptions$local4;\n\n requiredArgs(2, arguments);\n var formatStr = String(dirtyFormatStr);\n var defaultOptions = getDefaultOptions();\n var locale = (_ref = (_options$locale = options === null || options === void 0 ? void 0 : options.locale) !== null && _options$locale !== void 0 ? _options$locale : defaultOptions.locale) !== null && _ref !== void 0 ? _ref : defaultLocale;\n var firstWeekContainsDate = toInteger((_ref2 = (_ref3 = (_ref4 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale2 = options.locale) === null || _options$locale2 === void 0 ? void 0 : (_options$locale2$opti = _options$locale2.options) === null || _options$locale2$opti === void 0 ? void 0 : _options$locale2$opti.firstWeekContainsDate) !== null && _ref4 !== void 0 ? _ref4 : defaultOptions.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : 1); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n }\n\n var weekStartsOn = toInteger((_ref5 = (_ref6 = (_ref7 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale3 = options.locale) === null || _options$locale3 === void 0 ? void 0 : (_options$locale3$opti = _options$locale3.options) === null || _options$locale3$opti === void 0 ? void 0 : _options$locale3$opti.weekStartsOn) !== null && _ref7 !== void 0 ? _ref7 : defaultOptions.weekStartsOn) !== null && _ref6 !== void 0 ? _ref6 : (_defaultOptions$local3 = defaultOptions.locale) === null || _defaultOptions$local3 === void 0 ? void 0 : (_defaultOptions$local4 = _defaultOptions$local3.options) === null || _defaultOptions$local4 === void 0 ? void 0 : _defaultOptions$local4.weekStartsOn) !== null && _ref5 !== void 0 ? _ref5 : 0); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n\n if (!locale.localize) {\n throw new RangeError('locale must contain localize property');\n }\n\n if (!locale.formatLong) {\n throw new RangeError('locale must contain formatLong property');\n }\n\n var originalDate = toDate(dirtyDate);\n\n if (!isValid(originalDate)) {\n throw new RangeError('Invalid time value');\n } // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n // This ensures that when UTC functions will be implemented, locales will be compatible with them.\n // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/376\n\n\n var timezoneOffset = getTimezoneOffsetInMilliseconds(originalDate);\n var utcDate = subMilliseconds(originalDate, timezoneOffset);\n var formatterOptions = {\n firstWeekContainsDate: firstWeekContainsDate,\n weekStartsOn: weekStartsOn,\n locale: locale,\n _originalDate: originalDate\n };\n var result = formatStr.match(longFormattingTokensRegExp).map(function (substring) {\n var firstCharacter = substring[0];\n\n if (firstCharacter === 'p' || firstCharacter === 'P') {\n var longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong);\n }\n\n return substring;\n }).join('').match(formattingTokensRegExp).map(function (substring) {\n // Replace two single quote characters with one single quote character\n if (substring === \"''\") {\n return \"'\";\n }\n\n var firstCharacter = substring[0];\n\n if (firstCharacter === \"'\") {\n return cleanEscapedString(substring);\n }\n\n var formatter = formatters[firstCharacter];\n\n if (formatter) {\n if (!(options !== null && options !== void 0 && options.useAdditionalWeekYearTokens) && isProtectedWeekYearToken(substring)) {\n throwProtectedError(substring, dirtyFormatStr, String(dirtyDate));\n }\n\n if (!(options !== null && options !== void 0 && options.useAdditionalDayOfYearTokens) && isProtectedDayOfYearToken(substring)) {\n throwProtectedError(substring, dirtyFormatStr, String(dirtyDate));\n }\n\n return formatter(utcDate, substring, locale.localize, formatterOptions);\n }\n\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`');\n }\n\n return substring;\n }).join('');\n return result;\n}\n\nfunction cleanEscapedString(input) {\n var matched = input.match(escapedStringRegExp);\n\n if (!matched) {\n return input;\n }\n\n return matched[1].replace(doubleQuoteRegExp, \"'\");\n}", "import { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\nimport defaultLocale from \"../_lib/defaultLocale/index.js\";\nvar defaultFormat = ['years', 'months', 'weeks', 'days', 'hours', 'minutes', 'seconds'];\n/**\n * @name formatDuration\n * @category Common Helpers\n * @summary Formats a duration in human-readable format\n *\n * @description\n * Return human-readable duration string i.e. \"9 months 2 days\"\n *\n * @param {Duration} duration - the duration to format\n * @param {Object} [options] - an object with options.\n * @param {string[]} [options.format=['years', 'months', 'weeks', 'days', 'hours', 'minutes', 'seconds']] - the array of units to format\n * @param {boolean} [options.zero=false] - should zeros be included in the output?\n * @param {string} [options.delimiter=' '] - delimiter string\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {string} the formatted date string\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Format full duration\n * formatDuration({\n * years: 2,\n * months: 9,\n * weeks: 1,\n * days: 7,\n * hours: 5,\n * minutes: 9,\n * seconds: 30\n * })\n * //=> '2 years 9 months 1 week 7 days 5 hours 9 minutes 30 seconds'\n *\n * @example\n * // Format partial duration\n * formatDuration({ months: 9, days: 2 })\n * //=> '9 months 2 days'\n *\n * @example\n * // Customize the format\n * formatDuration(\n * {\n * years: 2,\n * months: 9,\n * weeks: 1,\n * days: 7,\n * hours: 5,\n * minutes: 9,\n * seconds: 30\n * },\n * { format: ['months', 'weeks'] }\n * ) === '9 months 1 week'\n *\n * @example\n * // Customize the zeros presence\n * formatDuration({ years: 0, months: 9 })\n * //=> '9 months'\n * formatDuration({ years: 0, months: 9 }, { zero: true })\n * //=> '0 years 9 months'\n *\n * @example\n * // Customize the delimiter\n * formatDuration({ years: 2, months: 9, weeks: 3 }, { delimiter: ', ' })\n * //=> '2 years, 9 months, 3 weeks'\n */\n\nexport default function formatDuration(duration, options) {\n var _ref, _options$locale, _options$format, _options$zero, _options$delimiter;\n\n if (arguments.length < 1) {\n throw new TypeError(\"1 argument required, but only \".concat(arguments.length, \" present\"));\n }\n\n var defaultOptions = getDefaultOptions();\n var locale = (_ref = (_options$locale = options === null || options === void 0 ? void 0 : options.locale) !== null && _options$locale !== void 0 ? _options$locale : defaultOptions.locale) !== null && _ref !== void 0 ? _ref : defaultLocale;\n var format = (_options$format = options === null || options === void 0 ? void 0 : options.format) !== null && _options$format !== void 0 ? _options$format : defaultFormat;\n var zero = (_options$zero = options === null || options === void 0 ? void 0 : options.zero) !== null && _options$zero !== void 0 ? _options$zero : false;\n var delimiter = (_options$delimiter = options === null || options === void 0 ? void 0 : options.delimiter) !== null && _options$delimiter !== void 0 ? _options$delimiter : ' ';\n\n if (!locale.formatDistance) {\n return '';\n }\n\n var result = format.reduce(function (acc, unit) {\n var token = \"x\".concat(unit.replace(/(^.)/, function (m) {\n return m.toUpperCase();\n }));\n var value = duration[unit];\n\n if (typeof value === 'number' && (zero || duration[unit])) {\n return acc.concat(locale.formatDistance(token, value));\n }\n\n return acc;\n }, []).join(delimiter);\n return result;\n}", "import compareAsc from \"../compareAsc/index.js\";\nimport add from \"../add/index.js\";\nimport differenceInDays from \"../differenceInDays/index.js\";\nimport differenceInHours from \"../differenceInHours/index.js\";\nimport differenceInMinutes from \"../differenceInMinutes/index.js\";\nimport differenceInMonths from \"../differenceInMonths/index.js\";\nimport differenceInSeconds from \"../differenceInSeconds/index.js\";\nimport differenceInYears from \"../differenceInYears/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name intervalToDuration\n * @category Common Helpers\n * @summary Convert interval to duration\n *\n * @description\n * Convert a interval object to a duration object.\n *\n * @param {Interval} interval - the interval to convert to duration\n *\n * @returns {Duration} The duration Object\n * @throws {TypeError} Requires 2 arguments\n * @throws {RangeError} `start` must not be Invalid Date\n * @throws {RangeError} `end` must not be Invalid Date\n *\n * @example\n * // Get the duration between January 15, 1929 and April 4, 1968.\n * intervalToDuration({\n * start: new Date(1929, 0, 15, 12, 0, 0),\n * end: new Date(1968, 3, 4, 19, 5, 0)\n * })\n * // => { years: 39, months: 2, days: 20, hours: 7, minutes: 5, seconds: 0 }\n */\n\nexport default function intervalToDuration(interval) {\n requiredArgs(1, arguments);\n var start = toDate(interval.start);\n var end = toDate(interval.end);\n if (isNaN(start.getTime())) throw new RangeError('Start Date is invalid');\n if (isNaN(end.getTime())) throw new RangeError('End Date is invalid');\n var duration = {};\n duration.years = Math.abs(differenceInYears(end, start));\n var sign = compareAsc(end, start);\n var remainingMonths = add(start, {\n years: sign * duration.years\n });\n duration.months = Math.abs(differenceInMonths(end, remainingMonths));\n var remainingDays = add(remainingMonths, {\n months: sign * duration.months\n });\n duration.days = Math.abs(differenceInDays(end, remainingDays));\n var remainingHours = add(remainingDays, {\n days: sign * duration.days\n });\n duration.hours = Math.abs(differenceInHours(end, remainingHours));\n var remainingMinutes = add(remainingHours, {\n hours: sign * duration.hours\n });\n duration.minutes = Math.abs(differenceInMinutes(end, remainingMinutes));\n var remainingSeconds = add(remainingMinutes, {\n minutes: sign * duration.minutes\n });\n duration.seconds = Math.abs(differenceInSeconds(end, remainingSeconds));\n return duration;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isAfter\n * @category Common Helpers\n * @summary Is the first date after the second one?\n *\n * @description\n * Is the first date after the second one?\n *\n * @param {Date|Number} date - the date that should be after the other one to return true\n * @param {Date|Number} dateToCompare - the date to compare with\n * @returns {Boolean} the first date is after the second date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Is 10 July 1989 after 11 February 1987?\n * const result = isAfter(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> true\n */\n\nexport default function isAfter(dirtyDate, dirtyDateToCompare) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var dateToCompare = toDate(dirtyDateToCompare);\n return date.getTime() > dateToCompare.getTime();\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isBefore\n * @category Common Helpers\n * @summary Is the first date before the second one?\n *\n * @description\n * Is the first date before the second one?\n *\n * @param {Date|Number} date - the date that should be before the other one to return true\n * @param {Date|Number} dateToCompare - the date to compare with\n * @returns {Boolean} the first date is before the second date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Is 10 July 1989 before 11 February 1987?\n * const result = isBefore(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> false\n */\n\nexport default function isBefore(dirtyDate, dirtyDateToCompare) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var dateToCompare = toDate(dirtyDateToCompare);\n return date.getTime() < dateToCompare.getTime();\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isFuture\n * @category Common Helpers\n * @summary Is the given date in the future?\n * @pure false\n *\n * @description\n * Is the given date in the future?\n *\n * > \u26A0\uFE0F Please note that this function is not present in the FP submodule as\n * > it uses `Date.now()` internally hence impure and can't be safely curried.\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is in the future\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // If today is 6 October 2014, is 31 December 2014 in the future?\n * const result = isFuture(new Date(2014, 11, 31))\n * //=> true\n */\n\nexport default function isFuture(dirtyDate) {\n requiredArgs(1, arguments);\n return toDate(dirtyDate).getTime() > Date.now();\n}", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport \"../../scss/DurationPicker.scss\";\n\nexport interface Props {\n hours?: boolean;\n minutes?: boolean;\n seconds?: boolean;\n days?: boolean;\n onChange: (value: number) => void;\n value: number;\n}\n\n// inspiration taken from https://github.com/flurmbo/react-duration-picker\nexport function DurationPicker({\n days,\n hours,\n minutes,\n seconds,\n onChange,\n value,\n}: Props): VNode {\n const ss = 1000 * 1000;\n const ms = ss * 60;\n const hs = ms * 60;\n const ds = hs * 24;\n const { i18n } = useTranslationContext();\n\n return (\n <div class=\"rdp-picker\">\n {days && (\n <DurationColumn\n unit={i18n.str`days`}\n max={99}\n value={Math.floor(value / ds)}\n onDecrease={value >= ds ? () => onChange(value - ds) : undefined}\n onIncrease={value < 99 * ds ? () => onChange(value + ds) : undefined}\n onChange={(diff) => onChange(value + diff * ds)}\n />\n )}\n {hours && (\n <DurationColumn\n unit={i18n.str`hours`}\n max={23}\n min={1}\n value={Math.floor(value / hs) % 24}\n onDecrease={value >= hs ? () => onChange(value - hs) : undefined}\n onIncrease={value < 99 * ds ? () => onChange(value + hs) : undefined}\n onChange={(diff) => onChange(value + diff * hs)}\n />\n )}\n {minutes && (\n <DurationColumn\n unit={i18n.str`minutes`}\n max={59}\n min={1}\n value={Math.floor(value / ms) % 60}\n onDecrease={value >= ms ? () => onChange(value - ms) : undefined}\n onIncrease={value < 99 * ds ? () => onChange(value + ms) : undefined}\n onChange={(diff) => onChange(value + diff * ms)}\n />\n )}\n {seconds && (\n <DurationColumn\n unit={i18n.str`seconds`}\n max={59}\n value={Math.floor(value / ss) % 60}\n onDecrease={value >= ss ? () => onChange(value - ss) : undefined}\n onIncrease={value < 99 * ds ? () => onChange(value + ss) : undefined}\n onChange={(diff) => onChange(value + diff * ss)}\n />\n )}\n </div>\n );\n}\n\ninterface ColProps {\n unit: string;\n min?: number;\n max: number;\n value: number;\n onIncrease?: () => void;\n onDecrease?: () => void;\n onChange?: (diff: number) => void;\n}\n\nfunction InputNumber({\n initial,\n onChange,\n}: {\n initial: number;\n onChange: (n: number) => void;\n}) {\n const [value, handler] = useState<{ v: string }>({\n v: toTwoDigitString(initial),\n });\n\n return (\n <input\n value={value.v}\n onBlur={(e) => onChange(parseInt(value.v, 10))}\n onInput={(e) => {\n e.preventDefault();\n const n = Number.parseInt(e.currentTarget.value, 10);\n if (isNaN(n)) return handler({ v: toTwoDigitString(initial) });\n return handler({ v: toTwoDigitString(n) });\n }}\n style={{\n width: 50,\n border: \"none\",\n fontSize: \"inherit\",\n background: \"inherit\",\n }}\n />\n );\n}\n\nfunction DurationColumn({\n unit,\n min = 0,\n max,\n value,\n onIncrease,\n onDecrease,\n onChange,\n}: ColProps): VNode {\n const cellHeight = 35;\n return (\n <div class=\"rdp-column-container\">\n <div class=\"rdp-masked-div\">\n <hr class=\"rdp-reticule\" style={{ top: cellHeight * 2 - 1 }} />\n <hr class=\"rdp-reticule\" style={{ top: cellHeight * 3 - 1 }} />\n\n <div class=\"rdp-column\" style={{ top: 0 }}>\n <div class=\"rdp-cell\" key={value - 2}>\n {onDecrease && (\n <button\n style={{ width: \"100%\", textAlign: \"center\", margin: 5 }}\n onClick={onDecrease}\n >\n <span class=\"icon\">\n <i class=\"mdi mdi-chevron-up\" />\n </span>\n </button>\n )}\n </div>\n <div class=\"rdp-cell\" key={value - 1}>\n {value > min ? toTwoDigitString(value - 1) : \"\"}\n </div>\n <div class=\"rdp-cell rdp-center\" key={value}>\n {onChange ? (\n <InputNumber\n initial={value}\n onChange={(n) => onChange(n - value)}\n />\n ) : (\n toTwoDigitString(value)\n )}\n <div>{unit}</div>\n </div>\n\n <div class=\"rdp-cell\" key={value + 1}>\n {value < max ? toTwoDigitString(value + 1) : \"\"}\n </div>\n\n <div class=\"rdp-cell\" key={value + 2}>\n {onIncrease && (\n <button\n style={{ width: \"100%\", textAlign: \"center\", margin: 5 }}\n onClick={onIncrease}\n >\n <span class=\"icon\">\n <i class=\"mdi mdi-chevron-down\" />\n </span>\n </button>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction toTwoDigitString(n: number) {\n if (n < 10) {\n return `0${n}`;\n }\n return `${n}`;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { formatDuration, intervalToDuration } from \"date-fns\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { SimpleModal } from \"../modal/index.js\";\nimport { DurationPicker } from \"../picker/DurationPicker.js\";\nimport { InputProps, useField } from \"./useField.js\";\n\nexport interface Props<T> extends InputProps<T> {\n expand?: boolean;\n readonly?: boolean;\n withForever?: boolean;\n}\n\nexport function InputDuration<T>({\n name,\n expand,\n placeholder,\n tooltip,\n label,\n help,\n readonly,\n withForever,\n}: Props<keyof T>): VNode {\n const [opened, setOpened] = useState(false);\n const { i18n } = useTranslationContext();\n\n const { error, required, value, onChange } = useField<T>(name);\n let strValue = \"\";\n if (!value) {\n strValue = \"\";\n } else if (value.d_us === \"forever\") {\n strValue = i18n.str`forever`;\n } else {\n strValue = formatDuration(\n intervalToDuration({ start: 0, end: value.d_us / 1000 }),\n {\n locale: {\n formatDistance: (name, value) => {\n switch (name) {\n case \"xMonths\":\n return i18n.str`${value}M`;\n case \"xYears\":\n return i18n.str`${value}Y`;\n case \"xDays\":\n return i18n.str`${value}d`;\n case \"xHours\":\n return i18n.str`${value}h`;\n case \"xMinutes\":\n return i18n.str`${value}min`;\n case \"xSeconds\":\n return i18n.str`${value}sec`;\n }\n },\n localize: {\n day: () => \"s\",\n month: () => \"m\",\n ordinalNumber: () => \"th\",\n dayPeriod: () => \"p\",\n quarter: () => \"w\",\n era: () => \"e\",\n },\n },\n },\n );\n }\n\n return (\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">\n {label}\n {tooltip && (\n <span class=\"icon\" data-tooltip={tooltip}>\n <i class=\"mdi mdi-information\" />\n </span>\n )}\n </label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n <div class=\"field has-addons\">\n <p class={expand ? \"control is-expanded \" : \"control \"}>\n <input\n class=\"input\"\n type=\"text\"\n readonly\n value={strValue}\n placeholder={placeholder}\n onClick={() => {\n if (!readonly) setOpened(true);\n }}\n />\n {required && (\n <span class=\"icon has-text-danger is-right\">\n <i class=\"mdi mdi-alert\" />\n </span>\n )}\n {help}\n </p>\n <div\n class=\"control\"\n onClick={() => {\n if (!readonly) setOpened(true);\n }}\n >\n <a class=\"button is-static\">\n <span class=\"icon\">\n <i class=\"mdi mdi-clock\" />\n </span>\n </a>\n </div>\n </div>\n {error && <p class=\"help is-danger\">{error}</p>}\n </div>\n {withForever && (\n <span data-tooltip={i18n.str`change value to never`}>\n <button\n class=\"button is-info mr-3\"\n onClick={() => onChange({ d_us: \"forever\" } as any)}\n >\n <i18n.Translate>forever</i18n.Translate>\n </button>\n </span>\n )}\n {!readonly && (\n <span data-tooltip={i18n.str`change value to empty`}>\n <button\n class=\"button is-info \"\n onClick={() => onChange(undefined as any)}\n >\n <i18n.Translate>clear</i18n.Translate>\n </button>\n </span>\n )}\n </div>\n {opened && (\n <SimpleModal onCancel={() => setOpened(false)}>\n <DurationPicker\n days\n hours\n minutes\n value={!value || value.d_us === \"forever\" ? 0 : value.d_us}\n onChange={(v) => {\n onChange({ d_us: v } as any);\n }}\n />\n </SimpleModal>\n )}\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useFormContext } from \"./FormProvider.js\";\n\ninterface Use {\n hasError?: boolean;\n}\n\nexport function useGroupField<T>(name: keyof T): Use {\n const f = useFormContext<T>();\n if (!f) return {};\n\n return {\n hasError: readField(f.errors, String(name)),\n };\n}\n\nconst readField = (object: any, name: string) => {\n return name\n .split(\".\")\n .reduce((prev, current) => prev && prev[current], object);\n};\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { ComponentChildren, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { useGroupField } from \"./useGroupField.js\";\n\nexport interface Props<T> {\n name: T;\n children: ComponentChildren;\n label: ComponentChildren;\n tooltip?: ComponentChildren;\n alternative?: ComponentChildren;\n fixed?: boolean;\n initialActive?: boolean;\n}\n\nexport function InputGroup<T>({\n name,\n label,\n children,\n tooltip,\n alternative,\n fixed,\n initialActive,\n}: Props<keyof T>): VNode {\n const [active, setActive] = useState(initialActive || fixed);\n const group = useGroupField<T>(name);\n\n return (\n <div class=\"card\">\n <header class=\"card-header\">\n <p class=\"card-header-title\">\n {label}\n {tooltip && (\n <span class=\"icon has-tooltip-right\" data-tooltip={tooltip}>\n <i class=\"mdi mdi-information\" />\n </span>\n )}\n {group?.hasError && (\n <span class=\"icon has-text-danger\" data-tooltip={tooltip}>\n <i class=\"mdi mdi-alert\" />\n </span>\n )}\n </p>\n {!fixed && (\n <button\n class=\"card-header-icon\"\n aria-label=\"more options\"\n onClick={(): void => setActive(!active)}\n >\n <span class=\"icon\">\n {active ? (\n <i class=\"mdi mdi-arrow-up\" />\n ) : (\n <i class=\"mdi mdi-arrow-down\" />\n )}\n </span>\n </button>\n )}\n </header>\n {active ? (\n <div class=\"card-content\">{children}</div>\n ) : alternative ? (\n <div class=\"card-content\">{alternative}</div>\n ) : undefined}\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { ComponentChildren, h, VNode } from \"preact\";\nimport { useRef, useState } from \"preact/hooks\";\nimport { MAX_IMAGE_SIZE as MAX_IMAGE_UPLOAD_SIZE } from \"../../utils/constants.js\";\nimport { InputProps, useField } from \"./useField.js\";\n\nexport interface Props<T> extends InputProps<T> {\n expand?: boolean;\n addonAfter?: ComponentChildren;\n children?: ComponentChildren;\n}\n\nexport function InputImage<T>({\n name,\n readonly,\n placeholder,\n tooltip,\n label,\n help,\n children,\n expand,\n}: Props<keyof T>): VNode {\n const { error, value, onChange } = useField<T>(name);\n\n const image = useRef<HTMLInputElement>(null);\n const { i18n } = useTranslationContext();\n const [sizeError, setSizeError] = useState(false);\n\n return (\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">\n {label}\n {tooltip && (\n <span class=\"icon has-tooltip-right\" data-tooltip={tooltip}>\n <i class=\"mdi mdi-information\" />\n </span>\n )}\n </label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n <p class={expand ? \"control is-expanded\" : \"control\"}>\n {value && (\n <img\n src={value}\n style={{ width: 200, height: 200 }}\n onClick={() => image.current?.click()}\n />\n )}\n <input\n ref={image}\n style={{ display: \"none\" }}\n type=\"file\"\n name={String(name)}\n placeholder={placeholder}\n readonly={readonly}\n onChange={(e) => {\n const f: FileList | null = e.currentTarget.files;\n if (!f || f.length != 1) {\n return onChange(undefined!);\n }\n if (f[0].size > MAX_IMAGE_UPLOAD_SIZE) {\n setSizeError(true);\n return onChange(undefined!);\n }\n setSizeError(false);\n return f[0].arrayBuffer().then((b) => {\n const b64 = window.btoa(\n new Uint8Array(b).reduce(\n (data, byte) => data + String.fromCharCode(byte),\n \"\",\n ),\n );\n return onChange(`data:${f[0].type};base64,${b64}` as any);\n });\n }}\n />\n {help}\n {children}\n </p>\n {error && <p class=\"help is-danger\">{error}</p>}\n {sizeError && (\n <p class=\"help is-danger\">\n <i18n.Translate>Image should be smaller than 1 MB</i18n.Translate>\n </p>\n )}\n {!value && (\n <button class=\"button\" onClick={() => image.current?.click()}>\n <i18n.Translate>Add</i18n.Translate>\n </button>\n )}\n {value && (\n <button class=\"button\" onClick={() => onChange(undefined!)}>\n <i18n.Translate>Remove</i18n.Translate>\n </button>\n )}\n </div>\n </div>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { Fragment, h } from \"preact\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Input } from \"./Input.js\";\n\nexport function InputLocation({ name }: { name: string }) {\n const { i18n } = useTranslationContext();\n return (\n <>\n <Input name={`${name}.country`} label={i18n.str`Country`} />\n <Input\n name={`${name}.address_lines`}\n inputType=\"multiline\"\n label={i18n.str`Address`}\n toStr={(v: string[] | undefined) => (!v ? \"\" : v.join(\"\\n\"))}\n fromStr={(v: string) => v.split(\"\\n\")}\n />\n <Input\n name={`${name}.building_number`}\n label={i18n.str`Building number`}\n />\n <Input name={`${name}.building_name`} label={i18n.str`Building name`} />\n <Input name={`${name}.street`} label={i18n.str`Street`} />\n <Input name={`${name}.post_code`} label={i18n.str`Post code`} />\n <Input name={`${name}.town_location`} label={i18n.str`Town location`} />\n <Input name={`${name}.town`} label={i18n.str`Town`} />\n <Input name={`${name}.district`} label={i18n.str`District`} />\n <Input\n name={`${name}.country_subdivision`}\n label={i18n.str`Country subdivision`}\n />\n </>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\nimport { WithId } from \"../declaration.js\";\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nexport interface Actions<T extends WithId> {\n element: T;\n type: \"DELETE\" | \"UPDATE\";\n}\n\nfunction notEmpty<TValue>(value: TValue | null | undefined): value is TValue {\n return value !== null && value !== undefined;\n}\n\nexport function buildActions<T extends WithId>(\n instances: T[],\n selected: string[],\n action: \"DELETE\",\n): Actions<T>[] {\n return selected\n .map((id) => instances.find((i) => i.id === id))\n .filter(notEmpty)\n .map((id) => ({ element: id, type: action }));\n}\n\n/**\n * For any object or array, return the same object if is not empty.\n * not empty:\n * - for arrays: at least one element not undefined\n * - for objects: at least one property not undefined\n * @param obj\n * @returns\n */\nexport function undefinedIfEmpty<\n T extends Record<string, unknown> | Array<unknown>,\n>(obj: T): T | undefined {\n if (obj === undefined) return undefined;\n return Object.values(obj).some((v) => v !== undefined) ? obj : undefined;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { h, VNode } from \"preact\";\nimport { InputProps, useField } from \"./useField.js\";\n\ninterface Props<T> extends InputProps<T> {\n readonly?: boolean;\n expand?: boolean;\n values: string[];\n convert?: (v: string) => any;\n toStr?: (v?: any) => string;\n fromStr?: (s: string) => any;\n}\n\nconst defaultToString = (f?: any): string => f || \"\";\nconst defaultFromString = (v: string): any => v as any;\n\nexport function InputSelector<T>({\n name,\n readonly,\n expand,\n placeholder,\n tooltip,\n label,\n help,\n values,\n convert,\n toStr = defaultToString,\n}: Props<keyof T>): VNode {\n const { error, value, onChange } = useField<T>(name);\n\n return (\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">\n {label}\n {tooltip && (\n <span class=\"icon has-tooltip-right\" data-tooltip={tooltip}>\n <i class=\"mdi mdi-information\" />\n </span>\n )}\n </label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n <p class={expand ? \"control is-expanded select\" : \"control select\"}>\n <select\n class={error ? \"select is-danger\" : \"select\"}\n name={String(name)}\n disabled={readonly}\n readonly={readonly}\n onChange={(e) => {\n const v = convert\n ? convert(e.currentTarget.value)\n : e.currentTarget.value;\n onChange(v);\n }}\n >\n {placeholder && <option>{placeholder}</option>}\n {values.map((v, i) => (\n <option key={i} value={v} selected={value === v}>\n {toStr(v)}\n </option>\n ))}\n </select>\n {help}\n </p>\n {error && <p class=\"help is-danger\">{error}</p>}\n </div>\n </div>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useCallback, useState } from \"preact/hooks\";\nimport { COUNTRY_TABLE } from \"../../utils/constants.js\";\nimport { undefinedIfEmpty } from \"../../utils/table.js\";\nimport { FormErrors, FormProvider } from \"./FormProvider.js\";\nimport { Input } from \"./Input.js\";\nimport { InputGroup } from \"./InputGroup.js\";\nimport { InputSelector } from \"./InputSelector.js\";\nimport { InputProps, useField } from \"./useField.js\";\n\nexport interface Props<T> extends InputProps<T> {\n isValid?: (e: any) => boolean;\n}\n\n// https://datatracker.ietf.org/doc/html/rfc8905\ntype Entity = {\n // iban, bitcoin, x-taler-bank. it defined the format\n target: string;\n // path1 if the first field to be used\n path1: string;\n // path2 if the second field to be used, optional\n path2?: string;\n // options of the payto uri\n options: {\n \"receiver-name\"?: string;\n sender?: string;\n message?: string;\n amount?: string;\n instruction?: string;\n [name: string]: string | undefined;\n };\n};\n\nfunction isEthereumAddress(address: string) {\n if (!/^(0x)?[0-9a-f]{40}$/i.test(address)) {\n return false;\n } else if (\n /^(0x|0X)?[0-9a-f]{40}$/.test(address) ||\n /^(0x|0X)?[0-9A-F]{40}$/.test(address)\n ) {\n return true;\n }\n return checkAddressChecksum(address);\n}\n\nfunction checkAddressChecksum(address: string) {\n //TODO implement ethereum checksum\n return true;\n}\n\nfunction validateBitcoin(\n addr: string,\n i18n: ReturnType<typeof useTranslationContext>[\"i18n\"],\n): string | undefined {\n try {\n const valid = /^(bc1|[13])[a-zA-HJ-NP-Z0-9]{25,39}$/.test(addr);\n if (valid) return undefined;\n } catch (e) {\n console.log(e);\n }\n return i18n.str`This is not a valid bitcoin address.`;\n}\n\nfunction validateEthereum(\n addr: string,\n i18n: ReturnType<typeof useTranslationContext>[\"i18n\"],\n): string | undefined {\n try {\n const valid = isEthereumAddress(addr);\n if (valid) return undefined;\n } catch (e) {\n console.log(e);\n }\n return i18n.str`This is not a valid Ethereum address.`;\n}\n\n/**\n * An IBAN is validated by converting it into an integer and performing a\n * basic mod-97 operation (as described in ISO 7064) on it.\n * If the IBAN is valid, the remainder equals 1.\n *\n * The algorithm of IBAN validation is as follows:\n * 1.- Check that the total IBAN length is correct as per the country. If not, the IBAN is invalid\n * 2.- Move the four initial characters to the end of the string\n * 3.- Replace each letter in the string with two digits, thereby expanding the string, where A = 10, B = 11, ..., Z = 35\n * 4.- Interpret the string as a decimal integer and compute the remainder of that number on division by 97\n *\n * If the remainder is 1, the check digit test is passed and the IBAN might be valid.\n *\n */\nfunction validateIBAN(\n iban: string,\n i18n: ReturnType<typeof useTranslationContext>[\"i18n\"],\n): string | undefined {\n // Check total length\n if (iban.length < 4)\n return i18n.str`IBAN numbers usually have more that 4 digits`;\n if (iban.length > 34)\n return i18n.str`IBAN numbers usually have less that 34 digits`;\n\n const A_code = \"A\".charCodeAt(0);\n const Z_code = \"Z\".charCodeAt(0);\n const IBAN = iban.toUpperCase();\n // check supported country\n const code = IBAN.substr(0, 2);\n const found = code in COUNTRY_TABLE;\n if (!found) return i18n.str`IBAN country code not found`;\n\n // 2.- Move the four initial characters to the end of the string\n const step2 = IBAN.substr(4) + iban.substr(0, 4);\n const step3 = Array.from(step2)\n .map((letter) => {\n const code = letter.charCodeAt(0);\n if (code < A_code || code > Z_code) return letter;\n return `${letter.charCodeAt(0) - \"A\".charCodeAt(0) + 10}`;\n })\n .join(\"\");\n\n function calculate_iban_checksum(str: string): number {\n const numberStr = str.substr(0, 5);\n const rest = str.substr(5);\n const number = parseInt(numberStr, 10);\n const result = number % 97;\n if (rest.length > 0) {\n return calculate_iban_checksum(`${result}${rest}`);\n }\n return result;\n }\n\n const checksum = calculate_iban_checksum(step3);\n if (checksum !== 1)\n return i18n.str`IBAN number is not valid, checksum is wrong`;\n return undefined;\n}\n\n// const targets = ['ach', 'bic', 'iban', 'upi', 'bitcoin', 'ilp', 'void', 'x-taler-bank']\nconst targets = [\n \"Choose one...\",\n \"iban\",\n \"x-taler-bank\",\n \"bitcoin\",\n \"ethereum\",\n];\nconst noTargetValue = targets[0];\nconst defaultTarget = { target: noTargetValue, options: {} };\n\nexport function InputPaytoForm<T>({\n name,\n readonly,\n label,\n tooltip,\n}: Props<keyof T>): VNode {\n const { value: paytos, onChange } = useField<T>(name);\n\n const [value, valueHandler] = useState<Partial<Entity>>(defaultTarget);\n\n let payToPath;\n if (value.target === \"iban\" && value.path1) {\n payToPath = `/${value.path1.toUpperCase()}`;\n } else if (value.path1) {\n if (value.path2) {\n payToPath = `/${value.path1}/${value.path2}`;\n } else {\n payToPath = `/${value.path1}`;\n }\n }\n const { i18n } = useTranslationContext();\n\n const ops = value.options!;\n const url = tryUrl(`payto://${value.target}${payToPath}`);\n if (url) {\n Object.keys(ops).forEach((opt_key) => {\n const opt_value = ops[opt_key];\n if (opt_value) url.searchParams.set(opt_key, opt_value);\n });\n }\n const paytoURL = !url ? \"\" : url.href;\n\n const errors: FormErrors<Entity> = {\n target: value.target === noTargetValue ? i18n.str`required` : undefined,\n path1: !value.path1\n ? i18n.str`required`\n : value.target === \"iban\"\n ? validateIBAN(value.path1, i18n)\n : value.target === \"bitcoin\"\n ? validateBitcoin(value.path1, i18n)\n : value.target === \"ethereum\"\n ? validateEthereum(value.path1, i18n)\n : undefined,\n path2:\n value.target === \"x-taler-bank\"\n ? !value.path2\n ? i18n.str`required`\n : undefined\n : undefined,\n options: undefinedIfEmpty({\n \"receiver-name\": !value.options?.[\"receiver-name\"]\n ? i18n.str`required`\n : undefined,\n }),\n };\n\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n\n const submit = useCallback((): void => {\n const alreadyExists =\n paytos.findIndex((x: string) => x === paytoURL) !== -1;\n if (!alreadyExists) {\n onChange([paytoURL, ...paytos] as any);\n }\n valueHandler(defaultTarget);\n }, [value]);\n\n //FIXME: translating plural singular\n return (\n <InputGroup name=\"payto\" label={label} fixed tooltip={tooltip}>\n <FormProvider<Entity>\n name=\"tax\"\n errors={errors}\n object={value}\n valueHandler={valueHandler}\n >\n <InputSelector<Entity>\n name=\"target\"\n label={i18n.str`Target type`}\n tooltip={i18n.str`Method to use for wire transfer`}\n values={targets}\n toStr={(v) => (v === noTargetValue ? i18n.str`Choose one...` : v)}\n />\n\n {value.target === \"ach\" && (\n <Fragment>\n <Input<Entity>\n name=\"path1\"\n label={i18n.str`Routing`}\n tooltip={i18n.str`Routing number.`}\n />\n <Input<Entity>\n name=\"path2\"\n label={i18n.str`Account`}\n tooltip={i18n.str`Account number.`}\n />\n </Fragment>\n )}\n {value.target === \"bic\" && (\n <Fragment>\n <Input<Entity>\n name=\"path1\"\n label={i18n.str`Code`}\n tooltip={i18n.str`Business Identifier Code.`}\n />\n </Fragment>\n )}\n {value.target === \"iban\" && (\n <Fragment>\n <Input<Entity>\n name=\"path1\"\n label={i18n.str`Account`}\n tooltip={i18n.str`Bank Account Number.`}\n inputExtra={{ style: { textTransform: \"uppercase\" } }}\n />\n </Fragment>\n )}\n {value.target === \"upi\" && (\n <Fragment>\n <Input<Entity>\n name=\"path1\"\n label={i18n.str`Account`}\n tooltip={i18n.str`Unified Payment Interface.`}\n />\n </Fragment>\n )}\n {value.target === \"bitcoin\" && (\n <Fragment>\n <Input<Entity>\n name=\"path1\"\n label={i18n.str`Address`}\n tooltip={i18n.str`Bitcoin protocol.`}\n />\n </Fragment>\n )}\n {value.target === \"ethereum\" && (\n <Fragment>\n <Input<Entity>\n name=\"path1\"\n label={i18n.str`Address`}\n tooltip={i18n.str`Ethereum protocol.`}\n />\n </Fragment>\n )}\n {value.target === \"ilp\" && (\n <Fragment>\n <Input<Entity>\n name=\"path1\"\n label={i18n.str`Address`}\n tooltip={i18n.str`Interledger protocol.`}\n />\n </Fragment>\n )}\n {value.target === \"void\" && <Fragment />}\n {value.target === \"x-taler-bank\" && (\n <Fragment>\n <Input<Entity>\n name=\"path1\"\n label={i18n.str`Host`}\n tooltip={i18n.str`Bank host.`}\n />\n <Input<Entity>\n name=\"path2\"\n label={i18n.str`Account`}\n tooltip={i18n.str`Bank account.`}\n />\n </Fragment>\n )}\n\n {value.target !== noTargetValue && (\n <Input\n name=\"options.receiver-name\"\n label={i18n.str`Name`}\n tooltip={i18n.str`Bank account owner's name.`}\n />\n )}\n\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\" />\n <div class=\"field-body\" style={{ display: \"block\" }}>\n {paytos.map((v: any, i: number) => (\n <div\n key={i}\n class=\"tags has-addons mt-3 mb-0 mr-3\"\n style={{ flexWrap: \"nowrap\" }}\n >\n <span\n class=\"tag is-medium is-info mb-0\"\n style={{ maxWidth: \"90%\" }}\n >\n {v}\n </span>\n <a\n class=\"tag is-medium is-danger is-delete mb-0\"\n onClick={() => {\n onChange(paytos.filter((f: any) => f !== v) as any);\n }}\n />\n </div>\n ))}\n {!paytos.length && i18n.str`No accounts yet.`}\n </div>\n </div>\n\n {value.target !== noTargetValue && (\n <div class=\"buttons is-right mt-5\">\n <button\n class=\"button is-info\"\n data-tooltip={i18n.str`add tax to the tax list`}\n disabled={hasErrors}\n onClick={submit}\n >\n <i18n.Translate>Add</i18n.Translate>\n </button>\n </div>\n )}\n </FormProvider>\n </InputGroup>\n );\n}\n\nfunction tryUrl(s: string): URL | undefined {\n try {\n return new URL(s);\n } catch (e) {\n return undefined;\n }\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useBackendContext } from \"../../context/backend.js\";\nimport { Entity } from \"../../paths/admin/create/CreatePage.js\";\nimport { Input } from \"../form/Input.js\";\nimport { InputCurrency } from \"../form/InputCurrency.js\";\nimport { InputDuration } from \"../form/InputDuration.js\";\nimport { InputGroup } from \"../form/InputGroup.js\";\nimport { InputImage } from \"../form/InputImage.js\";\nimport { InputLocation } from \"../form/InputLocation.js\";\nimport { InputPaytoForm } from \"../form/InputPaytoForm.js\";\nimport { InputWithAddon } from \"../form/InputWithAddon.js\";\n\nexport function DefaultInstanceFormFields({\n readonlyId,\n showId,\n}: {\n readonlyId?: boolean;\n showId: boolean;\n}): VNode {\n const { i18n } = useTranslationContext();\n const backend = useBackendContext();\n return (\n <Fragment>\n {showId && (\n <InputWithAddon<Entity>\n name=\"id\"\n addonBefore={`${backend.url}/instances/`}\n readonly={readonlyId}\n label={i18n.str`Identifier`}\n tooltip={i18n.str`Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.`}\n />\n )}\n\n <Input<Entity>\n name=\"name\"\n label={i18n.str`Business name`}\n tooltip={i18n.str`Legal name of the business represented by this instance.`}\n />\n\n <Input<Entity>\n name=\"email\"\n label={i18n.str`Email`}\n tooltip={i18n.str`Contact email`}\n />\n\n <Input<Entity>\n name=\"website\"\n label={i18n.str`Website URL`}\n tooltip={i18n.str`URL.`}\n />\n\n <InputImage<Entity>\n name=\"logo\"\n label={i18n.str`Logo`}\n tooltip={i18n.str`Logo image.`}\n />\n\n <InputPaytoForm<Entity>\n name=\"payto_uris\"\n label={i18n.str`Bank account`}\n tooltip={i18n.str`URI specifying bank account for crediting revenue.`}\n />\n\n <InputCurrency<Entity>\n name=\"default_max_deposit_fee\"\n label={i18n.str`Default max deposit fee`}\n tooltip={i18n.str`Maximum deposit fees this merchant is willing to pay per order by default.`}\n />\n\n <InputCurrency<Entity>\n name=\"default_max_wire_fee\"\n label={i18n.str`Default max wire fee`}\n tooltip={i18n.str`Maximum wire fees this merchant is willing to pay per wire transfer by default.`}\n />\n\n <Input<Entity>\n name=\"default_wire_fee_amortization\"\n label={i18n.str`Default wire fee amortization`}\n tooltip={i18n.str`Number of orders excess wire transfer fees will be divided by to compute per order surcharge.`}\n />\n\n <InputGroup\n name=\"address\"\n label={i18n.str`Address`}\n tooltip={i18n.str`Physical location of the merchant.`}\n >\n <InputLocation name=\"address\" />\n </InputGroup>\n\n <InputGroup\n name=\"jurisdiction\"\n label={i18n.str`Jurisdiction`}\n tooltip={i18n.str`Jurisdiction for legal disputes with the merchant.`}\n >\n <InputLocation name=\"jurisdiction\" />\n </InputGroup>\n\n <InputDuration<Entity>\n name=\"default_pay_delay\"\n label={i18n.str`Default payment delay`}\n withForever\n tooltip={i18n.str`Time customers have to pay an order before the offer expires by default.`}\n />\n\n <InputDuration<Entity>\n name=\"default_wire_transfer_delay\"\n label={i18n.str`Default wire transfer delay`}\n tooltip={i18n.str`Maximum time an exchange is allowed to delay wiring funds to the merchant, enabling it to aggregate smaller payments into larger wire transfers and reducing wire fees.`}\n withForever\n />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { Amounts } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { AsyncButton } from \"../../../components/exception/AsyncButton.js\";\nimport {\n FormErrors,\n FormProvider,\n} from \"../../../components/form/FormProvider.js\";\nimport { DefaultInstanceFormFields } from \"../../../components/instance/DefaultInstanceFormFields.js\";\nimport { SetTokenNewInstanceModal } from \"../../../components/modal/index.js\";\nimport { MerchantBackend } from \"../../../declaration.js\";\nimport { INSTANCE_ID_REGEX, PAYTO_REGEX } from \"../../../utils/constants.js\";\nimport { undefinedIfEmpty } from \"../../../utils/table.js\";\n\nexport type Entity = MerchantBackend.Instances.InstanceConfigurationMessage & {\n auth_token?: string;\n};\n\ninterface Props {\n onCreate: (d: Entity) => Promise<void>;\n onBack?: () => void;\n forceId?: string;\n}\n\nfunction with_defaults(id?: string): Partial<Entity> {\n return {\n id,\n payto_uris: [],\n default_pay_delay: { d_us: 2 * 1000 * 60 * 60 * 1000 }, // two hours\n default_wire_fee_amortization: 1,\n default_wire_transfer_delay: { d_us: 1000 * 2 * 60 * 60 * 24 * 1000 }, // two days\n };\n}\n\nexport function CreatePage({ onCreate, onBack, forceId }: Props): VNode {\n const [value, valueHandler] = useState(with_defaults(forceId));\n const [isTokenSet, updateIsTokenSet] = useState<boolean>(false);\n const [isTokenDialogActive, updateIsTokenDialogActive] =\n useState<boolean>(false);\n\n const { i18n } = useTranslationContext();\n\n const errors: FormErrors<Entity> = {\n id: !value.id\n ? i18n.str`required`\n : !INSTANCE_ID_REGEX.test(value.id)\n ? i18n.str`is not valid`\n : undefined,\n name: !value.name ? i18n.str`required` : undefined,\n payto_uris:\n !value.payto_uris || !value.payto_uris.length\n ? i18n.str`required`\n : undefinedIfEmpty(\n value.payto_uris.map((p) => {\n return !PAYTO_REGEX.test(p) ? i18n.str`is not valid` : undefined;\n }),\n ),\n default_max_deposit_fee: !value.default_max_deposit_fee\n ? i18n.str`required`\n : !Amounts.parse(value.default_max_deposit_fee)\n ? i18n.str`invalid format`\n : undefined,\n default_max_wire_fee: !value.default_max_wire_fee\n ? i18n.str`required`\n : !Amounts.parse(value.default_max_wire_fee)\n ? i18n.str`invalid format`\n : undefined,\n default_wire_fee_amortization:\n value.default_wire_fee_amortization === undefined\n ? i18n.str`required`\n : isNaN(value.default_wire_fee_amortization)\n ? i18n.str`is not a number`\n : value.default_wire_fee_amortization < 1\n ? i18n.str`must be 1 or greater`\n : undefined,\n default_pay_delay: !value.default_pay_delay\n ? i18n.str`required`\n : undefined,\n default_wire_transfer_delay: !value.default_wire_transfer_delay\n ? i18n.str`required`\n : undefined,\n address: undefinedIfEmpty({\n address_lines:\n value.address?.address_lines && value.address?.address_lines.length > 7\n ? i18n.str`max 7 lines`\n : undefined,\n }),\n jurisdiction: undefinedIfEmpty({\n address_lines:\n value.address?.address_lines && value.address?.address_lines.length > 7\n ? i18n.str`max 7 lines`\n : undefined,\n }),\n };\n\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n\n const submit = (): Promise<void> => {\n // use conversion instead of this\n const newToken = value.auth_token;\n value.auth_token = undefined;\n value.auth =\n newToken === null || newToken === undefined\n ? { method: \"external\" }\n : { method: \"token\", token: `secret-token:${newToken}` };\n if (!value.address) value.address = {};\n if (!value.jurisdiction) value.jurisdiction = {};\n // remove above use conversion\n // schema.validateSync(value, { abortEarly: false })\n return onCreate(value as Entity);\n };\n\n function updateToken(token: string | null) {\n valueHandler((old) => ({\n ...old,\n auth_token: token === null ? undefined : token,\n }));\n }\n\n return (\n <div>\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-four-fifths\">\n {isTokenDialogActive && (\n <SetTokenNewInstanceModal\n onCancel={() => {\n updateIsTokenDialogActive(false);\n updateIsTokenSet(false);\n }}\n onClear={() => {\n updateToken(null);\n updateIsTokenDialogActive(false);\n updateIsTokenSet(true);\n }}\n onConfirm={(newToken) => {\n updateToken(newToken);\n updateIsTokenDialogActive(false);\n updateIsTokenSet(true);\n }}\n />\n )}\n </div>\n <div class=\"column\" />\n </div>\n\n <section class=\"hero is-hero-bar\">\n <div class=\"hero-body\">\n <div class=\"level\">\n <div class=\"level-item has-text-centered\">\n <h1 class=\"title\">\n <button\n class=\"button is-danger has-tooltip-bottom\"\n data-tooltip={i18n.str`change authorization configuration`}\n onClick={() => updateIsTokenDialogActive(true)}\n >\n <div class=\"icon is-centered\">\n <i class=\"mdi mdi-lock-reset\" />\n </div>\n <span>\n <i18n.Translate>Set access token</i18n.Translate>\n </span>\n </button>\n </h1>\n </div>\n </div>\n </div>\n </section>\n\n <section class=\"section is-main-section\">\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-four-fifths\">\n <FormProvider<Entity>\n errors={errors}\n object={value}\n valueHandler={valueHandler}\n >\n <DefaultInstanceFormFields readonlyId={!!forceId} showId={true} />\n </FormProvider>\n\n <div class=\"buttons is-right mt-5\">\n {onBack && (\n <button class=\"button\" onClick={onBack}>\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n )}\n <AsyncButton\n onClick={submit}\n disabled={!isTokenSet || hasErrors}\n data-tooltip={\n hasErrors\n ? i18n.str`Need to complete marked fields and choose authorization method`\n : \"confirm operation\"\n }\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </AsyncButton>\n </div>\n </div>\n <div class=\"column\" />\n </div>\n </section>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { ComponentChildren, h, VNode } from \"preact\";\n\ninterface Props {\n onCreateAnother?: () => void;\n onConfirm: () => void;\n children: ComponentChildren;\n}\n\nexport function CreatedSuccessfully({\n children,\n onConfirm,\n onCreateAnother,\n}: Props): VNode {\n return (\n <div class=\"columns is-fullwidth is-vcentered mt-3\">\n <div class=\"column\" />\n <div class=\"column is-four-fifths\">\n <div class=\"card\">\n <header class=\"card-header has-background-success\">\n <p class=\"card-header-title has-text-white-ter\">Success.</p>\n </header>\n <div class=\"card-content\">{children}</div>\n </div>\n <div class=\"buttons is-right\">\n {onCreateAnother && (\n <button class=\"button is-info\" onClick={onCreateAnother}>\n Create another\n </button>\n )}\n <button class=\"button is-info\" onClick={onConfirm}>\n Continue\n </button>\n </div>\n </div>\n <div class=\"column\" />\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { h, VNode } from \"preact\";\nimport { CreatedSuccessfully } from \"../../../components/notifications/CreatedSuccessfully.js\";\nimport { Entity } from \"./index.js\";\n\nexport function InstanceCreatedSuccessfully({\n entity,\n onConfirm,\n}: {\n entity: Entity;\n onConfirm: () => void;\n}): VNode {\n return (\n <CreatedSuccessfully onConfirm={onConfirm}>\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">ID</label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n <p class=\"control\">\n <input class=\"input\" readonly value={entity.id} />\n </p>\n </div>\n </div>\n </div>\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">Business Name</label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n <p class=\"control\">\n <input class=\"input\" readonly value={entity.name} />\n </p>\n </div>\n </div>\n </div>\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">Access token</label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n <p class=\"control\">\n {entity.auth.method === \"external\" && \"external\"}\n {entity.auth.method === \"token\" && (\n <input class=\"input\" readonly value={entity.auth.token} />\n )}\n </p>\n </div>\n </div>\n </div>\n </CreatedSuccessfully>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { NotificationCard } from \"../../../components/menu/index.js\";\nimport { MerchantBackend } from \"../../../declaration.js\";\nimport { useAdminAPI } from \"../../../hooks/instance.js\";\nimport { Notification } from \"../../../utils/types.js\";\nimport { CreatePage } from \"./CreatePage.js\";\nimport { InstanceCreatedSuccessfully } from \"./InstanceCreatedSuccessfully.js\";\n\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n forceId?: string;\n}\nexport type Entity = MerchantBackend.Instances.InstanceConfigurationMessage;\n\nexport default function Create({ onBack, onConfirm, forceId }: Props): VNode {\n const { createInstance } = useAdminAPI();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const [createdOk, setCreatedOk] = useState<Entity | undefined>(undefined);\n const { i18n } = useTranslationContext();\n\n if (createdOk) {\n return (\n <InstanceCreatedSuccessfully entity={createdOk} onConfirm={onConfirm} />\n );\n }\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n\n <CreatePage\n onBack={onBack}\n forceId={forceId}\n onCreate={(\n d: MerchantBackend.Instances.InstanceConfigurationMessage,\n ) => {\n return createInstance(d)\n .then(() => {\n setCreatedOk(d);\n })\n .catch((error) => {\n setNotif({\n message: i18n.str`Failed to create instance`,\n type: \"ERROR\",\n description: error.message,\n });\n });\n }}\n />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { StateUpdater, useEffect, useState } from \"preact/hooks\";\nimport { MerchantBackend } from \"../../../declaration.js\";\n\ninterface Props {\n instances: MerchantBackend.Instances.Instance[];\n onUpdate: (id: string) => void;\n onDelete: (id: MerchantBackend.Instances.Instance) => void;\n onPurge: (id: MerchantBackend.Instances.Instance) => void;\n onCreate: () => void;\n selected?: boolean;\n setInstanceName: (s: string) => void;\n}\n\nexport function CardTable({\n instances,\n onCreate,\n onUpdate,\n onPurge,\n setInstanceName,\n onDelete,\n selected,\n}: Props): VNode {\n const [actionQueue, actionQueueHandler] = useState<Actions[]>([]);\n const [rowSelection, rowSelectionHandler] = useState<string[]>([]);\n\n useEffect(() => {\n if (\n actionQueue.length > 0 &&\n !selected &&\n actionQueue[0].type == \"DELETE\"\n ) {\n onDelete(actionQueue[0].element);\n actionQueueHandler(actionQueue.slice(1));\n }\n }, [actionQueue, selected, onDelete]);\n\n useEffect(() => {\n if (\n actionQueue.length > 0 &&\n !selected &&\n actionQueue[0].type == \"UPDATE\"\n ) {\n onUpdate(actionQueue[0].element.id);\n actionQueueHandler(actionQueue.slice(1));\n }\n }, [actionQueue, selected, onUpdate]);\n\n const { i18n } = useTranslationContext();\n\n return (\n <div class=\"card has-table\">\n <header class=\"card-header\">\n <p class=\"card-header-title\">\n <span class=\"icon\">\n <i class=\"mdi mdi-desktop-mac\" />\n </span>\n <i18n.Translate>Instances</i18n.Translate>\n </p>\n\n <div class=\"card-header-icon\" aria-label=\"more options\">\n <button\n class={rowSelection.length > 0 ? \"button is-danger\" : \"is-hidden\"}\n type=\"button\"\n onClick={(): void =>\n actionQueueHandler(\n buildActions(instances, rowSelection, \"DELETE\"),\n )\n }\n >\n <i18n.Translate>Delete</i18n.Translate>\n </button>\n </div>\n <div class=\"card-header-icon\" aria-label=\"more options\">\n <span\n class=\"has-tooltip-left\"\n data-tooltip={i18n.str`add new instance`}\n >\n <button class=\"button is-info\" type=\"button\" onClick={onCreate}>\n <span class=\"icon is-small\">\n <i class=\"mdi mdi-plus mdi-36px\" />\n </span>\n </button>\n </span>\n </div>\n </header>\n <div class=\"card-content\">\n <div class=\"b-table has-pagination\">\n <div class=\"table-wrapper has-mobile-cards\">\n {instances.length > 0 ? (\n <Table\n instances={instances}\n onPurge={onPurge}\n onUpdate={onUpdate}\n setInstanceName={setInstanceName}\n onDelete={onDelete}\n rowSelection={rowSelection}\n rowSelectionHandler={rowSelectionHandler}\n />\n ) : (\n <EmptyTable />\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\ninterface TableProps {\n rowSelection: string[];\n instances: MerchantBackend.Instances.Instance[];\n onUpdate: (id: string) => void;\n onDelete: (id: MerchantBackend.Instances.Instance) => void;\n onPurge: (id: MerchantBackend.Instances.Instance) => void;\n rowSelectionHandler: StateUpdater<string[]>;\n setInstanceName: (s: string) => void;\n}\n\nfunction toggleSelected<T>(id: T): (prev: T[]) => T[] {\n return (prev: T[]): T[] =>\n prev.indexOf(id) == -1 ? [...prev, id] : prev.filter((e) => e != id);\n}\n\nfunction Table({\n rowSelection,\n rowSelectionHandler,\n setInstanceName,\n instances,\n onUpdate,\n onDelete,\n onPurge,\n}: TableProps): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"table-container\">\n <table class=\"table is-fullwidth is-striped is-hoverable is-fullwidth\">\n <thead>\n <tr>\n <th class=\"is-checkbox-cell\">\n <label class=\"b-checkbox checkbox\">\n <input\n type=\"checkbox\"\n checked={rowSelection.length === instances.length}\n onClick={(): void =>\n rowSelectionHandler(\n rowSelection.length === instances.length\n ? []\n : instances.map((i) => i.id),\n )\n }\n />\n <span class=\"check\" />\n </label>\n </th>\n <th>\n <i18n.Translate>ID</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Name</i18n.Translate>\n </th>\n <th />\n </tr>\n </thead>\n <tbody>\n {instances.map((i) => {\n return (\n <tr key={i.id}>\n <td class=\"is-checkbox-cell\">\n <label class=\"b-checkbox checkbox\">\n <input\n type=\"checkbox\"\n checked={rowSelection.indexOf(i.id) != -1}\n onClick={(): void =>\n rowSelectionHandler(toggleSelected(i.id))\n }\n />\n <span class=\"check\" />\n </label>\n </td>\n <td>\n <a\n href={`#/orders?instance=${i.id}`}\n onClick={(e) => {\n setInstanceName(i.id);\n }}\n >\n {i.id}\n </a>\n </td>\n <td>{i.name}</td>\n <td class=\"is-actions-cell right-sticky\">\n <div class=\"buttons is-right\">\n <button\n class=\"button is-small is-success jb-modal\"\n type=\"button\"\n onClick={(): void => onUpdate(i.id)}\n >\n <i18n.Translate>Edit</i18n.Translate>\n </button>\n {!i.deleted && (\n <button\n class=\"button is-small is-danger jb-modal is-outlined\"\n type=\"button\"\n onClick={(): void => onDelete(i)}\n >\n <i18n.Translate>Delete</i18n.Translate>\n </button>\n )}\n {i.deleted && (\n <button\n class=\"button is-small is-danger jb-modal\"\n type=\"button\"\n onClick={(): void => onPurge(i)}\n >\n <i18n.Translate>Purge</i18n.Translate>\n </button>\n )}\n </div>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n}\n\nfunction EmptyTable(): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"content has-text-grey has-text-centered\">\n <p>\n <span class=\"icon is-large\">\n <i class=\"mdi mdi-emoticon-sad mdi-48px\" />\n </span>\n </p>\n <p>\n <i18n.Translate>\n There is no instances yet, add more pressing the + sign\n </i18n.Translate>\n </p>\n </div>\n );\n}\n\ninterface Actions {\n element: MerchantBackend.Instances.Instance;\n type: \"DELETE\" | \"UPDATE\";\n}\n\nfunction notEmpty<TValue>(value: TValue | null | undefined): value is TValue {\n return value !== null && value !== undefined;\n}\n\nfunction buildActions(\n instances: MerchantBackend.Instances.Instance[],\n selected: string[],\n action: \"DELETE\",\n): Actions[] {\n return selected\n .map((id) => instances.find((i) => i.id === id))\n .filter(notEmpty)\n .map((id) => ({ element: id, type: action }));\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { MerchantBackend } from \"../../../declaration.js\";\nimport { CardTable as CardTableActive } from \"./TableActive.js\";\n\ninterface Props {\n instances: MerchantBackend.Instances.Instance[];\n onCreate: () => void;\n onUpdate: (id: string) => void;\n onDelete: (id: MerchantBackend.Instances.Instance) => void;\n onPurge: (id: MerchantBackend.Instances.Instance) => void;\n selected?: boolean;\n setInstanceName: (s: string) => void;\n}\n\nexport function View({\n instances,\n onCreate,\n onDelete,\n onPurge,\n onUpdate,\n setInstanceName,\n selected,\n}: Props): VNode {\n const [show, setShow] = useState<\"active\" | \"deleted\" | null>(\"active\");\n const showIsActive = show === \"active\" ? \"is-active\" : \"\";\n const showIsDeleted = show === \"deleted\" ? \"is-active\" : \"\";\n const showAll = show === null ? \"is-active\" : \"\";\n const { i18n } = useTranslationContext();\n\n const showingInstances = showIsDeleted\n ? instances.filter((i) => i.deleted)\n : showIsActive\n ? instances.filter((i) => !i.deleted)\n : instances;\n\n return (\n <section class=\"section is-main-section\">\n <div class=\"columns\">\n <div class=\"column is-two-thirds\">\n <div class=\"tabs\" style={{ overflow: \"inherit\" }}>\n <ul>\n <li class={showIsActive}>\n <div\n class=\"has-tooltip-right\"\n data-tooltip={i18n.str`Only show active instances`}\n >\n <a onClick={() => setShow(\"active\")}>\n <i18n.Translate>Active</i18n.Translate>\n </a>\n </div>\n </li>\n <li class={showIsDeleted}>\n <div\n class=\"has-tooltip-right\"\n data-tooltip={i18n.str`Only show deleted instances`}\n >\n <a onClick={() => setShow(\"deleted\")}>\n <i18n.Translate>Deleted</i18n.Translate>\n </a>\n </div>\n </li>\n <li class={showAll}>\n <div\n class=\"has-tooltip-right\"\n data-tooltip={i18n.str`Show all instances`}\n >\n <a onClick={() => setShow(null)}>\n <i18n.Translate>All</i18n.Translate>\n </a>\n </div>\n </li>\n </ul>\n </div>\n </div>\n </div>\n <CardTableActive\n instances={showingInstances}\n onDelete={onDelete}\n onPurge={onPurge}\n setInstanceName={setInstanceName}\n onUpdate={onUpdate}\n selected={selected}\n onCreate={onCreate}\n />\n </section>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport {\n HttpError,\n useTranslationContext,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { Loading } from \"../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../components/menu/index.js\";\nimport { DeleteModal, PurgeModal } from \"../../../components/modal/index.js\";\nimport { MerchantBackend } from \"../../../declaration.js\";\nimport { useAdminAPI, useBackendInstances } from \"../../../hooks/instance.js\";\nimport { Notification } from \"../../../utils/types.js\";\nimport { View } from \"./View.js\";\n\ninterface Props {\n onCreate: () => void;\n onUpdate: (id: string) => void;\n instances: MerchantBackend.Instances.Instance[];\n onUnauthorized: () => VNode;\n onNotFound: () => VNode;\n onLoadError: (error: HttpError<MerchantBackend.ErrorDetail>) => VNode;\n setInstanceName: (s: string) => void;\n}\n\nexport default function Instances({\n onUnauthorized,\n onLoadError,\n onNotFound,\n onCreate,\n onUpdate,\n setInstanceName,\n}: Props): VNode {\n const result = useBackendInstances();\n const [deleting, setDeleting] =\n useState<MerchantBackend.Instances.Instance | null>(null);\n const [purging, setPurging] =\n useState<MerchantBackend.Instances.Instance | null>(null);\n const { deleteInstance, purgeInstance } = useAdminAPI();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { i18n } = useTranslationContext();\n\n if (result.clientError && result.isUnauthorized) return onUnauthorized();\n if (result.clientError && result.isNotfound) return onNotFound();\n if (result.loading) return <Loading />;\n if (!result.ok) return onLoadError(result);\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n <View\n instances={result.data.instances}\n onDelete={setDeleting}\n onCreate={onCreate}\n onPurge={setPurging}\n onUpdate={onUpdate}\n setInstanceName={setInstanceName}\n selected={!!deleting}\n />\n {deleting && (\n <DeleteModal\n element={deleting}\n onCancel={() => setDeleting(null)}\n onConfirm={async (): Promise<void> => {\n try {\n await deleteInstance(deleting.id);\n // pushNotification({ message: 'delete_success', type: 'SUCCESS' })\n setNotif({\n message: i18n.str`Instance '${deleting.name}' (ID: ${deleting.id}) has been deleted`,\n type: \"SUCCESS\",\n });\n } catch (error) {\n setNotif({\n message: i18n.str`Failed to delete instance`,\n type: \"ERROR\",\n description: error instanceof Error ? error.message : undefined,\n });\n // pushNotification({ message: 'delete_error', type: 'ERROR' })\n }\n setDeleting(null);\n }}\n />\n )}\n {purging && (\n <PurgeModal\n element={purging}\n onCancel={() => setPurging(null)}\n onConfirm={async (): Promise<void> => {\n try {\n await purgeInstance(purging.id);\n setNotif({\n message: i18n.str`Instance '${purging.name}' (ID: ${purging.id}) has been disabled`,\n type: \"SUCCESS\",\n });\n } catch (error) {\n setNotif({\n message: i18n.str`Failed to purge instance`,\n type: \"ERROR\",\n description: error instanceof Error ? error.message : undefined,\n });\n }\n setPurging(null);\n }}\n />\n )}\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\n\nexport interface Props {\n status: MerchantBackend.Instances.AccountKycRedirects;\n}\n\nexport function ListPage({ status }: Props): VNode {\n const { i18n } = useTranslationContext();\n\n return (\n <section class=\"section is-main-section\">\n <div class=\"card has-table\">\n <header class=\"card-header\">\n <p class=\"card-header-title\">\n <span class=\"icon\">\n <i class=\"mdi mdi-clock\" />\n </span>\n <i18n.Translate>Pending KYC verification</i18n.Translate>\n </p>\n\n <div class=\"card-header-icon\" aria-label=\"more options\" />\n </header>\n <div class=\"card-content\">\n <div class=\"b-table has-pagination\">\n <div class=\"table-wrapper has-mobile-cards\">\n {status.pending_kycs.length > 0 ? (\n <PendingTable entries={status.pending_kycs} />\n ) : (\n <EmptyTable />\n )}\n </div>\n </div>\n </div>\n </div>\n\n {status.timeout_kycs.length > 0 ? (\n <div class=\"card has-table\">\n <header class=\"card-header\">\n <p class=\"card-header-title\">\n <span class=\"icon\">\n <i class=\"mdi mdi-clock\" />\n </span>\n <i18n.Translate>Timed out</i18n.Translate>\n </p>\n\n <div class=\"card-header-icon\" aria-label=\"more options\" />\n </header>\n <div class=\"card-content\">\n <div class=\"b-table has-pagination\">\n <div class=\"table-wrapper has-mobile-cards\">\n {status.timeout_kycs.length > 0 ? (\n <TimedOutTable entries={status.timeout_kycs} />\n ) : (\n <EmptyTable />\n )}\n </div>\n </div>\n </div>\n </div>\n ) : undefined}\n </section>\n );\n}\ninterface PendingTableProps {\n entries: MerchantBackend.Instances.MerchantAccountKycRedirect[];\n}\n\ninterface TimedOutTableProps {\n entries: MerchantBackend.Instances.ExchangeKycTimeout[];\n}\n\nfunction PendingTable({ entries }: PendingTableProps): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"table-container\">\n <table class=\"table is-striped is-hoverable is-fullwidth\">\n <thead>\n <tr>\n <th>\n <i18n.Translate>Exchange</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Target account</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>KYC URL</i18n.Translate>\n </th>\n </tr>\n </thead>\n <tbody>\n {entries.map((e, i) => {\n return (\n <tr key={i}>\n <td>{e.exchange_url}</td>\n <td>{e.payto_uri}</td>\n <td>\n <a href={e.kyc_url} target=\"_black\" rel=\"noreferrer\">\n {e.kyc_url}\n </a>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n}\n\nfunction TimedOutTable({ entries }: TimedOutTableProps): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"table-container\">\n <table class=\"table is-striped is-hoverable is-fullwidth\">\n <thead>\n <tr>\n <th>\n <i18n.Translate>Exchange</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Code</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Http Status</i18n.Translate>\n </th>\n </tr>\n </thead>\n <tbody>\n {entries.map((e, i) => {\n return (\n <tr key={i}>\n <td>{e.exchange_url}</td>\n <td>{e.exchange_code}</td>\n <td>{e.exchange_http_status}</td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n}\n\nfunction EmptyTable(): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"content has-text-grey has-text-centered\">\n <p>\n <span class=\"icon is-large\">\n <i class=\"mdi mdi-emoticon-happy mdi-48px\" />\n </span>\n </p>\n <p>\n <i18n.Translate>No pending kyc verification!</i18n.Translate>\n </p>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { HttpError } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport { useInstanceKYCDetails } from \"../../../../hooks/instance.js\";\nimport { ListPage } from \"./ListPage.js\";\n\ninterface Props {\n onUnauthorized: () => VNode;\n onLoadError: (error: HttpError<MerchantBackend.ErrorDetail>) => VNode;\n onNotFound: () => VNode;\n}\n\nexport default function ListKYC({\n onUnauthorized,\n onLoadError,\n onNotFound,\n}: Props): VNode {\n const result = useInstanceKYCDetails();\n if (result.clientError && result.isUnauthorized) return onUnauthorized();\n if (result.clientError && result.isNotfound) return onNotFound();\n if (result.loading) return <Loading />;\n if (!result.ok) return onLoadError(result);\n\n const status = result.data.type === \"ok\" ? undefined : result.data.status;\n\n if (!status) {\n return <div>no kyc required</div>;\n }\n return <ListPage status={status} />;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\nimport {\n HttpResponse,\n HttpResponseOk,\n HttpResponsePaginated,\n RequestError,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { MerchantBackend } from \"../declaration.js\";\nimport { MAX_RESULT_SIZE, PAGE_SIZE } from \"../utils/constants.js\";\nimport { useBackendInstanceRequest, useMatchMutate } from \"./backend.js\";\n\n// FIX default import https://github.com/microsoft/TypeScript/issues/49189\nimport _useSWR, { SWRHook } from \"swr\";\nconst useSWR = _useSWR as unknown as SWRHook;\n\nexport interface OrderAPI {\n //FIXME: add OutOfStockResponse on 410\n createOrder: (\n data: MerchantBackend.Orders.PostOrderRequest,\n ) => Promise<HttpResponseOk<MerchantBackend.Orders.PostOrderResponse>>;\n forgetOrder: (\n id: string,\n data: MerchantBackend.Orders.ForgetRequest,\n ) => Promise<HttpResponseOk<void>>;\n refundOrder: (\n id: string,\n data: MerchantBackend.Orders.RefundRequest,\n ) => Promise<HttpResponseOk<MerchantBackend.Orders.MerchantRefundResponse>>;\n deleteOrder: (id: string) => Promise<HttpResponseOk<void>>;\n getPaymentURL: (id: string) => Promise<HttpResponseOk<string>>;\n}\n\ntype YesOrNo = \"yes\" | \"no\";\n\nexport function useOrderAPI(): OrderAPI {\n const mutateAll = useMatchMutate();\n const { request } = useBackendInstanceRequest();\n\n const createOrder = async (\n data: MerchantBackend.Orders.PostOrderRequest,\n ): Promise<HttpResponseOk<MerchantBackend.Orders.PostOrderResponse>> => {\n const res = await request<MerchantBackend.Orders.PostOrderResponse>(\n `/private/orders`,\n {\n method: \"POST\",\n data,\n },\n );\n await mutateAll(/.*private\\/orders.*/);\n // mutate('')\n return res;\n };\n const refundOrder = async (\n orderId: string,\n data: MerchantBackend.Orders.RefundRequest,\n ): Promise<HttpResponseOk<MerchantBackend.Orders.MerchantRefundResponse>> => {\n mutateAll(/@\"\\/private\\/orders\"@/);\n const res = request<MerchantBackend.Orders.MerchantRefundResponse>(\n `/private/orders/${orderId}/refund`,\n {\n method: \"POST\",\n data,\n },\n );\n\n // order list returns refundable information, so we must evict everything\n await mutateAll(/.*private\\/orders.*/);\n return res;\n };\n\n const forgetOrder = async (\n orderId: string,\n data: MerchantBackend.Orders.ForgetRequest,\n ): Promise<HttpResponseOk<void>> => {\n mutateAll(/@\"\\/private\\/orders\"@/);\n const res = request<void>(`/private/orders/${orderId}/forget`, {\n method: \"PATCH\",\n data,\n });\n // we may be forgetting some fields that are pare of the listing, so we must evict everything\n await mutateAll(/.*private\\/orders.*/);\n return res;\n };\n const deleteOrder = async (\n orderId: string,\n ): Promise<HttpResponseOk<void>> => {\n mutateAll(/@\"\\/private\\/orders\"@/);\n const res = request<void>(`/private/orders/${orderId}`, {\n method: \"DELETE\",\n });\n await mutateAll(/.*private\\/orders.*/);\n return res;\n };\n\n const getPaymentURL = async (\n orderId: string,\n ): Promise<HttpResponseOk<string>> => {\n return request<MerchantBackend.Orders.MerchantOrderStatusResponse>(\n `/private/orders/${orderId}`,\n {\n method: \"GET\",\n },\n ).then((res) => {\n const url =\n res.data.order_status === \"unpaid\"\n ? res.data.taler_pay_uri\n : res.data.contract_terms.fulfillment_url;\n const response: HttpResponseOk<string> = res as any;\n response.data = url || \"\";\n return response;\n });\n };\n\n return { createOrder, forgetOrder, deleteOrder, refundOrder, getPaymentURL };\n}\n\nexport function useOrderDetails(\n oderId: string,\n): HttpResponse<\n MerchantBackend.Orders.MerchantOrderStatusResponse,\n MerchantBackend.ErrorDetail\n> {\n const { fetcher } = useBackendInstanceRequest();\n\n const { data, error, isValidating } = useSWR<\n HttpResponseOk<MerchantBackend.Orders.MerchantOrderStatusResponse>,\n RequestError<MerchantBackend.ErrorDetail>\n >([`/private/orders/${oderId}`], fetcher, {\n refreshInterval: 0,\n refreshWhenHidden: false,\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n refreshWhenOffline: false,\n });\n\n if (isValidating) return { loading: true, data: data?.data };\n if (data) return data;\n if (error) return error.info;\n return { loading: true };\n}\n\nexport interface InstanceOrderFilter {\n paid?: YesOrNo;\n refunded?: YesOrNo;\n wired?: YesOrNo;\n date?: Date;\n}\n\nexport function useInstanceOrders(\n args?: InstanceOrderFilter,\n updateFilter?: (d: Date) => void,\n): HttpResponsePaginated<\n MerchantBackend.Orders.OrderHistory,\n MerchantBackend.ErrorDetail\n> {\n const { orderFetcher } = useBackendInstanceRequest();\n\n const [pageBefore, setPageBefore] = useState(1);\n const [pageAfter, setPageAfter] = useState(1);\n\n const totalAfter = pageAfter * PAGE_SIZE;\n const totalBefore = args?.date ? pageBefore * PAGE_SIZE : 0;\n\n /**\n * FIXME: this can be cleaned up a little\n *\n * the logic of double query should be inside the orderFetch so from the hook perspective and cache\n * is just one query and one error status\n */\n const {\n data: beforeData,\n error: beforeError,\n isValidating: loadingBefore,\n } = useSWR<\n HttpResponseOk<MerchantBackend.Orders.OrderHistory>,\n RequestError<MerchantBackend.ErrorDetail>\n >(\n [\n `/private/orders`,\n args?.paid,\n args?.refunded,\n args?.wired,\n args?.date,\n totalBefore,\n ],\n orderFetcher,\n );\n const {\n data: afterData,\n error: afterError,\n isValidating: loadingAfter,\n } = useSWR<\n HttpResponseOk<MerchantBackend.Orders.OrderHistory>,\n RequestError<MerchantBackend.ErrorDetail>\n >(\n [\n `/private/orders`,\n args?.paid,\n args?.refunded,\n args?.wired,\n args?.date,\n -totalAfter,\n ],\n orderFetcher,\n );\n\n //this will save last result\n const [lastBefore, setLastBefore] = useState<\n HttpResponse<\n MerchantBackend.Orders.OrderHistory,\n MerchantBackend.ErrorDetail\n >\n >({ loading: true });\n const [lastAfter, setLastAfter] = useState<\n HttpResponse<\n MerchantBackend.Orders.OrderHistory,\n MerchantBackend.ErrorDetail\n >\n >({ loading: true });\n useEffect(() => {\n if (afterData) setLastAfter(afterData);\n if (beforeData) setLastBefore(beforeData);\n }, [afterData, beforeData]);\n\n if (beforeError) return beforeError.info;\n if (afterError) return afterError.info;\n\n // if the query returns less that we ask, then we have reach the end or beginning\n const isReachingEnd = afterData && afterData.data.orders.length < totalAfter;\n const isReachingStart =\n args?.date === undefined ||\n (beforeData && beforeData.data.orders.length < totalBefore);\n\n const pagination = {\n isReachingEnd,\n isReachingStart,\n loadMore: () => {\n if (!afterData || isReachingEnd) return;\n if (afterData.data.orders.length < MAX_RESULT_SIZE) {\n setPageAfter(pageAfter + 1);\n } else {\n const from =\n afterData.data.orders[afterData.data.orders.length - 1].timestamp.t_s;\n if (from && from !== \"never\" && updateFilter)\n updateFilter(new Date(from * 1000));\n }\n },\n loadMorePrev: () => {\n if (!beforeData || isReachingStart) return;\n if (beforeData.data.orders.length < MAX_RESULT_SIZE) {\n setPageBefore(pageBefore + 1);\n } else if (beforeData) {\n const from =\n beforeData.data.orders[beforeData.data.orders.length - 1].timestamp\n .t_s;\n if (from && from !== \"never\" && updateFilter)\n updateFilter(new Date(from * 1000));\n }\n },\n };\n\n const orders =\n !beforeData || !afterData\n ? []\n : (beforeData || lastBefore).data.orders\n .slice()\n .reverse()\n .concat((afterData || lastAfter).data.orders);\n if (loadingAfter || loadingBefore) return { loading: true, data: { orders } };\n if (beforeData && afterData) {\n return { ok: true, data: { orders }, ...pagination };\n }\n return { loading: true };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\nimport {\n HttpResponse,\n HttpResponseOk,\n RequestError,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { MerchantBackend, WithId } from \"../declaration.js\";\nimport { useBackendInstanceRequest, useMatchMutate } from \"./backend.js\";\n\n// FIX default import https://github.com/microsoft/TypeScript/issues/49189\nimport _useSWR, { SWRHook, useSWRConfig } from \"swr\";\nconst useSWR = _useSWR as unknown as SWRHook;\n\nexport interface ProductAPI {\n createProduct: (\n data: MerchantBackend.Products.ProductAddDetail,\n ) => Promise<void>;\n updateProduct: (\n id: string,\n data: MerchantBackend.Products.ProductPatchDetail,\n ) => Promise<void>;\n deleteProduct: (id: string) => Promise<void>;\n lockProduct: (\n id: string,\n data: MerchantBackend.Products.LockRequest,\n ) => Promise<void>;\n}\n\nexport function useProductAPI(): ProductAPI {\n const mutateAll = useMatchMutate();\n const { mutate } = useSWRConfig();\n\n const { request } = useBackendInstanceRequest();\n\n const createProduct = async (\n data: MerchantBackend.Products.ProductAddDetail,\n ): Promise<void> => {\n const res = await request(`/private/products`, {\n method: \"POST\",\n data,\n });\n\n return await mutateAll(/.*\"\\/private\\/products.*/);\n };\n\n const updateProduct = async (\n productId: string,\n data: MerchantBackend.Products.ProductPatchDetail,\n ): Promise<void> => {\n const r = await request(`/private/products/${productId}`, {\n method: \"PATCH\",\n data,\n });\n\n return await mutateAll(/.*\"\\/private\\/products.*/);\n };\n\n const deleteProduct = async (productId: string): Promise<void> => {\n await request(`/private/products/${productId}`, {\n method: \"DELETE\",\n });\n await mutate([`/private/products`]);\n };\n\n const lockProduct = async (\n productId: string,\n data: MerchantBackend.Products.LockRequest,\n ): Promise<void> => {\n await request(`/private/products/${productId}/lock`, {\n method: \"POST\",\n data,\n });\n\n return await mutateAll(/.*\"\\/private\\/products.*/);\n };\n\n return { createProduct, updateProduct, deleteProduct, lockProduct };\n}\n\nexport function useInstanceProducts(): HttpResponse<\n (MerchantBackend.Products.ProductDetail & WithId)[],\n MerchantBackend.ErrorDetail\n> {\n const { fetcher, multiFetcher } = useBackendInstanceRequest();\n\n const { data: list, error: listError } = useSWR<\n HttpResponseOk<MerchantBackend.Products.InventorySummaryResponse>,\n RequestError<MerchantBackend.ErrorDetail>\n >([`/private/products`], fetcher, {\n refreshInterval: 0,\n refreshWhenHidden: false,\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n refreshWhenOffline: false,\n });\n\n const paths = (list?.data.products || []).map(\n (p) => `/private/products/${p.product_id}`,\n );\n const { data: products, error: productError } = useSWR<\n HttpResponseOk<MerchantBackend.Products.ProductDetail>[],\n RequestError<MerchantBackend.ErrorDetail>\n >([paths], multiFetcher, {\n refreshInterval: 0,\n refreshWhenHidden: false,\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n refreshWhenOffline: false,\n });\n\n if (listError) return listError.info;\n if (productError) return productError.info;\n\n if (products) {\n const dataWithId = products.map((d) => {\n //take the id from the queried url\n return {\n ...d.data,\n id: d.info?.url.replace(/.*\\/private\\/products\\//, \"\") || \"\",\n };\n });\n return { ok: true, data: dataWithId };\n }\n return { loading: true };\n}\n\nexport function useProductDetails(\n productId: string,\n): HttpResponse<\n MerchantBackend.Products.ProductDetail,\n MerchantBackend.ErrorDetail\n> {\n const { fetcher } = useBackendInstanceRequest();\n\n const { data, error, isValidating } = useSWR<\n HttpResponseOk<MerchantBackend.Products.ProductDetail>,\n RequestError<MerchantBackend.ErrorDetail>\n >([`/private/products/${productId}`], fetcher, {\n refreshInterval: 0,\n refreshWhenHidden: false,\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n refreshWhenOffline: false,\n });\n\n if (isValidating) return { loading: true, data: data?.data };\n if (data) return data;\n if (error) return error.info;\n return { loading: true };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { h, VNode } from \"preact\";\nimport { InputProps, useField } from \"./useField.js\";\n\ninterface Props<T> extends InputProps<T> {\n name: T;\n readonly?: boolean;\n expand?: boolean;\n threeState?: boolean;\n toBoolean?: (v?: any) => boolean | undefined;\n fromBoolean?: (s: boolean | undefined) => any;\n}\n\nconst defaultToBoolean = (f?: any): boolean | undefined => f || \"\";\nconst defaultFromBoolean = (v: boolean | undefined): any => v as any;\n\nexport function InputBoolean<T>({\n name,\n readonly,\n placeholder,\n tooltip,\n label,\n help,\n threeState,\n expand,\n fromBoolean = defaultFromBoolean,\n toBoolean = defaultToBoolean,\n}: Props<keyof T>): VNode {\n const { error, value, onChange } = useField<T>(name);\n\n const onCheckboxClick = (): void => {\n const c = toBoolean(value);\n if (c === false && threeState) return onChange(undefined as any);\n return onChange(fromBoolean(!c));\n };\n\n return (\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">\n {label}\n {tooltip && (\n <span class=\"icon has-tooltip-right\" data-tooltip={tooltip}>\n <i class=\"mdi mdi-information\" />\n </span>\n )}\n </label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n <p class={expand ? \"control is-expanded\" : \"control\"}>\n <label class=\"b-checkbox checkbox\">\n <input\n type=\"checkbox\"\n class={toBoolean(value) === undefined ? \"is-indeterminate\" : \"\"}\n checked={toBoolean(value)}\n placeholder={placeholder}\n readonly={readonly}\n name={String(name)}\n disabled={readonly}\n onChange={onCheckboxClick}\n />\n <span class=\"check\" />\n </label>\n {help}\n </p>\n {error && <p class=\"help is-danger\">{error}</p>}\n </div>\n </div>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { h, Component } from \"preact\";\n\ninterface Props {\n closeFunction?: () => void;\n dateReceiver?: (d: Date) => void;\n opened?: boolean;\n}\ninterface State {\n displayedMonth: number;\n displayedYear: number;\n selectYearMode: boolean;\n currentDate: Date;\n}\n\n// inspired by https://codepen.io/m4r1vs/pen/MOOxyE\nexport class DatePicker extends Component<Props, State> {\n closeDatePicker() {\n this.props.closeFunction && this.props.closeFunction(); // Function gets passed by parent\n }\n\n /**\n * Gets fired when a day gets clicked.\n * @param {object} e The event thrown by the <span /> element clicked\n */\n dayClicked(e: any) {\n const element = e.target; // the actual element clicked\n\n if (element.innerHTML === \"\") return false; // don't continue if <span /> empty\n\n // get date from clicked element (gets attached when rendered)\n const date = new Date(element.getAttribute(\"data-value\"));\n\n // update the state\n this.setState({ currentDate: date });\n this.passDateToParent(date);\n }\n\n /**\n * returns days in month as array\n * @param {number} month the month to display\n * @param {number} year the year to display\n */\n getDaysByMonth(month: number, year: number) {\n const calendar = [];\n\n const date = new Date(year, month, 1); // month to display\n\n const firstDay = new Date(year, month, 1).getDay(); // first weekday of month\n const lastDate = new Date(year, month + 1, 0).getDate(); // last date of month\n\n let day: number | null = 0;\n\n // the calendar is 7*6 fields big, so 42 loops\n for (let i = 0; i < 42; i++) {\n if (i >= firstDay && day !== null) day = day + 1;\n if (day !== null && day > lastDate) day = null;\n\n // append the calendar Array\n calendar.push({\n day: day === 0 || day === null ? null : day, // null or number\n date: day === 0 || day === null ? null : new Date(year, month, day), // null or Date()\n today:\n day === now.getDate() &&\n month === now.getMonth() &&\n year === now.getFullYear(), // boolean\n });\n }\n\n return calendar;\n }\n\n /**\n * Display previous month by updating state\n */\n displayPrevMonth() {\n if (this.state.displayedMonth <= 0) {\n this.setState({\n displayedMonth: 11,\n displayedYear: this.state.displayedYear - 1,\n });\n } else {\n this.setState({\n displayedMonth: this.state.displayedMonth - 1,\n });\n }\n }\n\n /**\n * Display next month by updating state\n */\n displayNextMonth() {\n if (this.state.displayedMonth >= 11) {\n this.setState({\n displayedMonth: 0,\n displayedYear: this.state.displayedYear + 1,\n });\n } else {\n this.setState({\n displayedMonth: this.state.displayedMonth + 1,\n });\n }\n }\n\n /**\n * Display the selected month (gets fired when clicking on the date string)\n */\n displaySelectedMonth() {\n if (this.state.selectYearMode) {\n this.toggleYearSelector();\n } else {\n if (!this.state.currentDate) return false;\n this.setState({\n displayedMonth: this.state.currentDate.getMonth(),\n displayedYear: this.state.currentDate.getFullYear(),\n });\n }\n }\n\n toggleYearSelector() {\n this.setState({ selectYearMode: !this.state.selectYearMode });\n }\n\n changeDisplayedYear(e: any) {\n const element = e.target;\n this.toggleYearSelector();\n this.setState({\n displayedYear: parseInt(element.innerHTML, 10),\n displayedMonth: 0,\n });\n }\n\n /**\n * Pass the selected date to parent when 'OK' is clicked\n */\n passSavedDateDateToParent() {\n this.passDateToParent(this.state.currentDate);\n }\n passDateToParent(date: Date) {\n if (typeof this.props.dateReceiver === \"function\")\n this.props.dateReceiver(date);\n this.closeDatePicker();\n }\n\n componentDidUpdate() {\n if (this.state.selectYearMode) {\n document.getElementsByClassName(\"selected\")[0].scrollIntoView(); // works in every browser incl. IE, replace with scrollIntoViewIfNeeded when browsers support it\n }\n }\n\n constructor() {\n super();\n\n this.closeDatePicker = this.closeDatePicker.bind(this);\n this.dayClicked = this.dayClicked.bind(this);\n this.displayNextMonth = this.displayNextMonth.bind(this);\n this.displayPrevMonth = this.displayPrevMonth.bind(this);\n this.getDaysByMonth = this.getDaysByMonth.bind(this);\n this.changeDisplayedYear = this.changeDisplayedYear.bind(this);\n this.passDateToParent = this.passDateToParent.bind(this);\n this.toggleYearSelector = this.toggleYearSelector.bind(this);\n this.displaySelectedMonth = this.displaySelectedMonth.bind(this);\n\n this.state = {\n currentDate: now,\n displayedMonth: now.getMonth(),\n displayedYear: now.getFullYear(),\n selectYearMode: false,\n };\n }\n\n render() {\n const { currentDate, displayedMonth, displayedYear, selectYearMode } =\n this.state;\n\n return (\n <div>\n <div class={`datePicker ${this.props.opened && \"datePicker--opened\"}`}>\n <div class=\"datePicker--titles\">\n <h3\n style={{\n color: selectYearMode\n ? \"rgba(255,255,255,.87)\"\n : \"rgba(255,255,255,.57)\",\n }}\n onClick={this.toggleYearSelector}\n >\n {currentDate.getFullYear()}\n </h3>\n <h2\n style={{\n color: !selectYearMode\n ? \"rgba(255,255,255,.87)\"\n : \"rgba(255,255,255,.57)\",\n }}\n onClick={this.displaySelectedMonth}\n >\n {dayArr[currentDate.getDay()]},{\" \"}\n {monthArrShort[currentDate.getMonth()]} {currentDate.getDate()}\n </h2>\n </div>\n\n {!selectYearMode && (\n <nav>\n <span onClick={this.displayPrevMonth} class=\"icon\">\n <i\n style={{ transform: \"rotate(180deg)\" }}\n class=\"mdi mdi-forward\"\n />\n </span>\n <h4>\n {monthArrShortFull[displayedMonth]} {displayedYear}\n </h4>\n <span onClick={this.displayNextMonth} class=\"icon\">\n <i class=\"mdi mdi-forward\" />\n </span>\n </nav>\n )}\n\n <div class=\"datePicker--scroll\">\n {!selectYearMode && (\n <div class=\"datePicker--calendar\">\n <div class=\"datePicker--dayNames\">\n {[\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"].map((day, i) => (\n <span key={i}>{day}</span>\n ))}\n </div>\n\n <div onClick={this.dayClicked} class=\"datePicker--days\">\n {/*\n Loop through the calendar object returned by getDaysByMonth().\n */}\n\n {this.getDaysByMonth(\n this.state.displayedMonth,\n this.state.displayedYear,\n ).map((day) => {\n let selected = false;\n\n if (currentDate && day.date)\n selected =\n currentDate.toLocaleDateString() ===\n day.date.toLocaleDateString();\n\n return (\n <span\n key={day.day}\n class={\n (day.today ? \"datePicker--today \" : \"\") +\n (selected ? \"datePicker--selected\" : \"\")\n }\n disabled={!day.date}\n data-value={day.date}\n >\n {day.day}\n </span>\n );\n })}\n </div>\n </div>\n )}\n\n {selectYearMode && (\n <div class=\"datePicker--selectYear\">\n {yearArr.map((year) => (\n <span\n key={year}\n class={year === displayedYear ? \"selected\" : \"\"}\n onClick={this.changeDisplayedYear}\n >\n {year}\n </span>\n ))}\n </div>\n )}\n </div>\n </div>\n\n <div\n class=\"datePicker--background\"\n onClick={this.closeDatePicker}\n style={{\n display: this.props.opened ? \"block\" : \"none\",\n }}\n />\n </div>\n );\n }\n}\n\nconst monthArrShortFull = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n];\n\nconst monthArrShort = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n];\n\nconst dayArr = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\n\nconst now = new Date();\n\nconst yearArr: number[] = [];\n\nfor (let i = 2010; i <= now.getFullYear() + 10; i++) {\n yearArr.push(i);\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { format } from \"date-fns\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { DatePicker } from \"../picker/DatePicker.js\";\nimport { InputProps, useField } from \"./useField.js\";\n\nexport interface Props<T> extends InputProps<T> {\n readonly?: boolean;\n expand?: boolean;\n //FIXME: create separated components InputDate and InputTimestamp\n withTimestampSupport?: boolean;\n}\n\nexport function InputDate<T>({\n name,\n readonly,\n label,\n placeholder,\n help,\n tooltip,\n expand,\n withTimestampSupport,\n}: Props<keyof T>): VNode {\n const [opened, setOpened] = useState(false);\n const { i18n } = useTranslationContext();\n\n const { error, required, value, onChange } = useField<T>(name);\n\n let strValue = \"\";\n if (!value) {\n strValue = withTimestampSupport ? \"unknown\" : \"\";\n } else if (value instanceof Date) {\n strValue = format(value, \"yyyy/MM/dd\");\n } else if (value.t_s) {\n strValue =\n value.t_s === \"never\"\n ? withTimestampSupport\n ? \"never\"\n : \"\"\n : format(new Date(value.t_s * 1000), \"yyyy/MM/dd\");\n }\n\n return (\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">\n {label}\n {tooltip && (\n <span class=\"icon has-tooltip-right\" data-tooltip={tooltip}>\n <i class=\"mdi mdi-information\" />\n </span>\n )}\n </label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n <div class=\"field has-addons\">\n <p\n class={\n expand\n ? \"control is-expanded has-icons-right\"\n : \"control has-icons-right\"\n }\n >\n <input\n class=\"input\"\n type=\"text\"\n readonly\n value={strValue}\n placeholder={placeholder}\n onClick={() => {\n if (!readonly) setOpened(true);\n }}\n />\n {required && (\n <span class=\"icon has-text-danger is-right\">\n <i class=\"mdi mdi-alert\" />\n </span>\n )}\n {help}\n </p>\n <div\n class=\"control\"\n onClick={() => {\n if (!readonly) setOpened(true);\n }}\n >\n <a class=\"button is-static\">\n <span class=\"icon\">\n <i class=\"mdi mdi-calendar\" />\n </span>\n </a>\n </div>\n </div>\n {error && <p class=\"help is-danger\">{error}</p>}\n </div>\n\n {!readonly && (\n <span\n data-tooltip={\n withTimestampSupport\n ? i18n.str`change value to unknown date`\n : i18n.str`change value to empty`\n }\n >\n <button\n class=\"button is-info mr-3\"\n onClick={() => onChange(undefined as any)}\n >\n <i18n.Translate>clear</i18n.Translate>\n </button>\n </span>\n )}\n {withTimestampSupport && (\n <span data-tooltip={i18n.str`change value to never`}>\n <button\n class=\"button is-info\"\n onClick={() => onChange({ t_s: \"never\" } as any)}\n >\n <i18n.Translate>never</i18n.Translate>\n </button>\n </span>\n )}\n </div>\n <DatePicker\n opened={opened}\n closeFunction={() => setOpened(false)}\n dateReceiver={(d) => {\n if (withTimestampSupport) {\n onChange({ t_s: d.getTime() / 1000 } as any);\n } else {\n onChange(d as any);\n }\n }}\n />\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { ComponentChildren, h } from \"preact\";\nimport { InputWithAddon } from \"./InputWithAddon.js\";\nimport { InputProps } from \"./useField.js\";\n\nexport interface Props<T> extends InputProps<T> {\n readonly?: boolean;\n expand?: boolean;\n side?: ComponentChildren;\n children?: ComponentChildren;\n}\n\nexport function InputNumber<T>({\n name,\n readonly,\n placeholder,\n tooltip,\n label,\n help,\n expand,\n children,\n side,\n}: Props<keyof T>) {\n return (\n <InputWithAddon<T>\n name={name}\n readonly={readonly}\n fromStr={(v) => (!v ? undefined : parseInt(v, 10))}\n toStr={(v) => `${v}`}\n inputType=\"number\"\n expand={expand}\n label={label}\n placeholder={placeholder}\n help={help}\n tooltip={tooltip}\n inputExtra={{ min: 0 }}\n children={children}\n side={side}\n />\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport emptyImage from \"../../assets/empty.png\";\nimport { MerchantBackend, WithId } from \"../../declaration.js\";\nimport { FormErrors, FormProvider } from \"./FormProvider.js\";\nimport { InputWithAddon } from \"./InputWithAddon.js\";\n\ntype Entity = MerchantBackend.Products.ProductDetail & WithId;\n\nexport interface Props {\n selected?: Entity;\n onChange: (p?: Entity) => void;\n products: (MerchantBackend.Products.ProductDetail & WithId)[];\n}\n\ninterface ProductSearch {\n name: string;\n}\n\nexport function InputSearchProduct({\n selected,\n onChange,\n products,\n}: Props): VNode {\n const [prodForm, setProdName] = useState<Partial<ProductSearch>>({\n name: \"\",\n });\n\n const errors: FormErrors<ProductSearch> = {\n name: undefined,\n };\n const { i18n } = useTranslationContext();\n\n if (selected) {\n return (\n <article class=\"media\">\n <figure class=\"media-left\">\n <p class=\"image is-128x128\">\n <img src={selected.image ? selected.image : emptyImage} />\n </p>\n </figure>\n <div class=\"media-content\">\n <div class=\"content\">\n <p class=\"media-meta\">\n <i18n.Translate>Product id</i18n.Translate>: <b>{selected.id}</b>\n </p>\n <p>\n <i18n.Translate>Description</i18n.Translate>:{\" \"}\n {selected.description}\n </p>\n <div class=\"buttons is-right mt-5\">\n <button\n class=\"button is-info\"\n onClick={() => onChange(undefined)}\n >\n clear\n </button>\n </div>\n </div>\n </div>\n </article>\n );\n }\n\n return (\n <FormProvider<ProductSearch>\n errors={errors}\n object={prodForm}\n valueHandler={setProdName}\n >\n <InputWithAddon<ProductSearch>\n name=\"name\"\n label={i18n.str`Product`}\n tooltip={i18n.str`search products by it's description or id`}\n addonAfter={\n <span class=\"icon\">\n <i class=\"mdi mdi-magnify\" />\n </span>\n }\n >\n <div>\n <ProductList\n name={prodForm.name}\n list={products}\n onSelect={(p) => {\n setProdName({ name: \"\" });\n onChange(p);\n }}\n />\n </div>\n </InputWithAddon>\n </FormProvider>\n );\n}\n\ninterface ProductListProps {\n name?: string;\n onSelect: (p: MerchantBackend.Products.ProductDetail & WithId) => void;\n list: (MerchantBackend.Products.ProductDetail & WithId)[];\n}\n\nfunction ProductList({ name, onSelect, list }: ProductListProps) {\n const { i18n } = useTranslationContext();\n if (!name) {\n /* FIXME\n this BR is added to occupy the space that will be added when the \n dropdown appears\n */\n return (\n <div>\n <br />\n </div>\n );\n }\n const filtered = list.filter(\n (p) => p.id.includes(name) || p.description.includes(name),\n );\n\n return (\n <div class=\"dropdown is-active\">\n <div\n class=\"dropdown-menu\"\n id=\"dropdown-menu\"\n role=\"menu\"\n style={{ minWidth: \"20rem\" }}\n >\n <div class=\"dropdown-content\">\n {!filtered.length ? (\n <div class=\"dropdown-item\">\n <i18n.Translate>\n no products found with that description\n </i18n.Translate>\n </div>\n ) : (\n filtered.map((p) => (\n <div\n key={p.id}\n class=\"dropdown-item\"\n onClick={() => onSelect(p)}\n style={{ cursor: \"pointer\" }}\n >\n <article class=\"media\">\n <div class=\"media-left\">\n <div class=\"image\" style={{ minWidth: 64 }}>\n <img\n src={p.image ? p.image : emptyImage}\n style={{ width: 64, height: 64 }}\n />\n </div>\n </div>\n <div class=\"media-content\">\n <div class=\"content\">\n <p>\n <strong>{p.id}</strong> <small>{p.price}</small>\n <br />\n {p.description}\n </p>\n </div>\n </div>\n </article>\n </div>\n ))\n )}\n </div>\n </div>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { MerchantBackend, WithId } from \"../../declaration.js\";\nimport { ProductMap } from \"../../paths/instance/orders/create/CreatePage.js\";\nimport { FormErrors, FormProvider } from \"../form/FormProvider.js\";\nimport { InputNumber } from \"../form/InputNumber.js\";\nimport { InputSearchProduct } from \"../form/InputSearchProduct.js\";\n\ntype Form = {\n product: MerchantBackend.Products.ProductDetail & WithId;\n quantity: number;\n};\n\ninterface Props {\n currentProducts: ProductMap;\n onAddProduct: (\n product: MerchantBackend.Products.ProductDetail & WithId,\n quantity: number,\n ) => void;\n inventory: (MerchantBackend.Products.ProductDetail & WithId)[];\n}\n\nexport function InventoryProductForm({\n currentProducts,\n onAddProduct,\n inventory,\n}: Props): VNode {\n const initialState = { quantity: 1 };\n const [state, setState] = useState<Partial<Form>>(initialState);\n const [errors, setErrors] = useState<FormErrors<Form>>({});\n\n const { i18n } = useTranslationContext();\n\n const productWithInfiniteStock =\n state.product && state.product.total_stock === -1;\n\n const submit = (): void => {\n if (!state.product) {\n setErrors({\n product: i18n.str`You must enter a valid product identifier.`,\n });\n return;\n }\n if (productWithInfiniteStock) {\n onAddProduct(state.product, 1);\n } else {\n if (!state.quantity || state.quantity <= 0) {\n setErrors({ quantity: i18n.str`Quantity must be greater than 0!` });\n return;\n }\n const currentStock =\n state.product.total_stock -\n state.product.total_lost -\n state.product.total_sold;\n const p = currentProducts[state.product.id];\n if (p) {\n if (state.quantity + p.quantity > currentStock) {\n const left = currentStock - p.quantity;\n setErrors({\n quantity: i18n.str`This quantity exceeds remaining stock. Currently, only ${left} units remain unreserved in stock.`,\n });\n return;\n }\n onAddProduct(state.product, state.quantity + p.quantity);\n } else {\n if (state.quantity > currentStock) {\n const left = currentStock;\n setErrors({\n quantity: i18n.str`This quantity exceeds remaining stock. Currently, only ${left} units remain unreserved in stock.`,\n });\n return;\n }\n onAddProduct(state.product, state.quantity);\n }\n }\n\n setState(initialState);\n };\n\n return (\n <FormProvider<Form> errors={errors} object={state} valueHandler={setState}>\n <InputSearchProduct\n selected={state.product}\n onChange={(p) => setState((v) => ({ ...v, product: p }))}\n products={inventory}\n />\n {state.product && (\n <div class=\"columns mt-5\">\n <div class=\"column is-two-thirds\">\n {!productWithInfiniteStock && (\n <InputNumber<Form>\n name=\"quantity\"\n label={i18n.str`Quantity`}\n tooltip={i18n.str`how many products will be added`}\n />\n )}\n </div>\n <div class=\"column\">\n <div class=\"buttons is-right\">\n <button class=\"button is-success\" onClick={submit}>\n <i18n.Translate>Add from inventory</i18n.Translate>\n </button>\n </div>\n </div>\n </div>\n )}\n </FormProvider>\n );\n}\n", "// ES6 Map\nvar map\ntry {\n map = Map\n} catch (_) { }\nvar set\n\n// ES6 Set\ntry {\n set = Set\n} catch (_) { }\n\nfunction baseClone (src, circulars, clones) {\n // Null/undefined/functions/etc\n if (!src || typeof src !== 'object' || typeof src === 'function') {\n return src\n }\n\n // DOM Node\n if (src.nodeType && 'cloneNode' in src) {\n return src.cloneNode(true)\n }\n\n // Date\n if (src instanceof Date) {\n return new Date(src.getTime())\n }\n\n // RegExp\n if (src instanceof RegExp) {\n return new RegExp(src)\n }\n\n // Arrays\n if (Array.isArray(src)) {\n return src.map(clone)\n }\n\n // ES6 Maps\n if (map && src instanceof map) {\n return new Map(Array.from(src.entries()))\n }\n\n // ES6 Sets\n if (set && src instanceof set) {\n return new Set(Array.from(src.values()))\n }\n\n // Object\n if (src instanceof Object) {\n circulars.push(src)\n var obj = Object.create(src)\n clones.push(obj)\n for (var key in src) {\n var idx = circulars.findIndex(function (i) {\n return i === src[key]\n })\n obj[key] = idx > -1 ? clones[idx] : baseClone(src[key], circulars, clones)\n }\n return obj\n }\n\n // ???\n return src\n}\n\nexport default function clone (src) {\n return baseClone(src, [], [])\n}\n", "const toString = Object.prototype.toString;\nconst errorToString = Error.prototype.toString;\nconst regExpToString = RegExp.prototype.toString;\nconst symbolToString = typeof Symbol !== 'undefined' ? Symbol.prototype.toString : () => '';\nconst SYMBOL_REGEXP = /^Symbol\\((.*)\\)(.*)$/;\n\nfunction printNumber(val) {\n if (val != +val) return 'NaN';\n const isNegativeZero = val === 0 && 1 / val < 0;\n return isNegativeZero ? '-0' : '' + val;\n}\n\nfunction printSimpleValue(val, quoteStrings = false) {\n if (val == null || val === true || val === false) return '' + val;\n const typeOf = typeof val;\n if (typeOf === 'number') return printNumber(val);\n if (typeOf === 'string') return quoteStrings ? `\"${val}\"` : val;\n if (typeOf === 'function') return '[Function ' + (val.name || 'anonymous') + ']';\n if (typeOf === 'symbol') return symbolToString.call(val).replace(SYMBOL_REGEXP, 'Symbol($1)');\n const tag = toString.call(val).slice(8, -1);\n if (tag === 'Date') return isNaN(val.getTime()) ? '' + val : val.toISOString(val);\n if (tag === 'Error' || val instanceof Error) return '[' + errorToString.call(val) + ']';\n if (tag === 'RegExp') return regExpToString.call(val);\n return null;\n}\n\nexport default function printValue(value, quoteStrings) {\n let result = printSimpleValue(value, quoteStrings);\n if (result !== null) return result;\n return JSON.stringify(value, function (key, value) {\n let result = printSimpleValue(this[key], quoteStrings);\n if (result !== null) return result;\n return value;\n }, 2);\n}", "import printValue from './util/printValue';\nexport let mixed = {\n default: '${path} is invalid',\n required: '${path} is a required field',\n oneOf: '${path} must be one of the following values: ${values}',\n notOneOf: '${path} must not be one of the following values: ${values}',\n notType: ({\n path,\n type,\n value,\n originalValue\n }) => {\n let isCast = originalValue != null && originalValue !== value;\n let msg = `${path} must be a \\`${type}\\` type, ` + `but the final value was: \\`${printValue(value, true)}\\`` + (isCast ? ` (cast from the value \\`${printValue(originalValue, true)}\\`).` : '.');\n\n if (value === null) {\n msg += `\\n If \"null\" is intended as an empty value be sure to mark the schema as \\`.nullable()\\``;\n }\n\n return msg;\n },\n defined: '${path} must be defined'\n};\nexport let string = {\n length: '${path} must be exactly ${length} characters',\n min: '${path} must be at least ${min} characters',\n max: '${path} must be at most ${max} characters',\n matches: '${path} must match the following: \"${regex}\"',\n email: '${path} must be a valid email',\n url: '${path} must be a valid URL',\n uuid: '${path} must be a valid UUID',\n trim: '${path} must be a trimmed string',\n lowercase: '${path} must be a lowercase string',\n uppercase: '${path} must be a upper case string'\n};\nexport let number = {\n min: '${path} must be greater than or equal to ${min}',\n max: '${path} must be less than or equal to ${max}',\n lessThan: '${path} must be less than ${less}',\n moreThan: '${path} must be greater than ${more}',\n positive: '${path} must be a positive number',\n negative: '${path} must be a negative number',\n integer: '${path} must be an integer'\n};\nexport let date = {\n min: '${path} field must be later than ${min}',\n max: '${path} field must be at earlier than ${max}'\n};\nexport let boolean = {\n isValue: '${path} field must be ${value}'\n};\nexport let object = {\n noUnknown: '${path} field has unspecified keys: ${unknown}'\n};\nexport let array = {\n min: '${path} field must have at least ${min} items',\n max: '${path} field must have less than or equal to ${max} items',\n length: '${path} must have ${length} items'\n};\nexport default Object.assign(Object.create(null), {\n mixed,\n string,\n number,\n date,\n object,\n array,\n boolean\n});", "import has from 'lodash/has';\nimport isSchema from './util/isSchema';\n\nclass Condition {\n constructor(refs, options) {\n this.fn = void 0;\n this.refs = refs;\n this.refs = refs;\n\n if (typeof options === 'function') {\n this.fn = options;\n return;\n }\n\n if (!has(options, 'is')) throw new TypeError('`is:` is required for `when()` conditions');\n if (!options.then && !options.otherwise) throw new TypeError('either `then:` or `otherwise:` is required for `when()` conditions');\n let {\n is,\n then,\n otherwise\n } = options;\n let check = typeof is === 'function' ? is : (...values) => values.every(value => value === is);\n\n this.fn = function (...args) {\n let options = args.pop();\n let schema = args.pop();\n let branch = check(...args) ? then : otherwise;\n if (!branch) return undefined;\n if (typeof branch === 'function') return branch(schema);\n return schema.concat(branch.resolve(options));\n };\n }\n\n resolve(base, options) {\n let values = this.refs.map(ref => ref.getValue(options == null ? void 0 : options.value, options == null ? void 0 : options.parent, options == null ? void 0 : options.context));\n let schema = this.fn.apply(base, values.concat(base, options));\n if (schema === undefined || schema === base) return base;\n if (!isSchema(schema)) throw new TypeError('conditions must return a schema object');\n return schema.resolve(options);\n }\n\n}\n\nexport default Condition;", "const isSchema = obj => obj && obj.__isYupSchema__;\n\nexport default isSchema;", "export default function toArray(value) {\n return value == null ? [] : [].concat(value);\n}", "function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport printValue from './util/printValue';\nimport toArray from './util/toArray';\nlet strReg = /\\$\\{\\s*(\\w+)\\s*\\}/g;\nexport default class ValidationError extends Error {\n static formatError(message, params) {\n const path = params.label || params.path || 'this';\n if (path !== params.path) params = _extends({}, params, {\n path\n });\n if (typeof message === 'string') return message.replace(strReg, (_, key) => printValue(params[key]));\n if (typeof message === 'function') return message(params);\n return message;\n }\n\n static isError(err) {\n return err && err.name === 'ValidationError';\n }\n\n constructor(errorOrErrors, value, field, type) {\n super();\n this.value = void 0;\n this.path = void 0;\n this.type = void 0;\n this.errors = void 0;\n this.params = void 0;\n this.inner = void 0;\n this.name = 'ValidationError';\n this.value = value;\n this.path = field;\n this.type = type;\n this.errors = [];\n this.inner = [];\n toArray(errorOrErrors).forEach(err => {\n if (ValidationError.isError(err)) {\n this.errors.push(...err.errors);\n this.inner = this.inner.concat(err.inner.length ? err.inner : err);\n } else {\n this.errors.push(err);\n }\n });\n this.message = this.errors.length > 1 ? `${this.errors.length} errors occurred` : this.errors[0];\n if (Error.captureStackTrace) Error.captureStackTrace(this, ValidationError);\n }\n\n}", "import ValidationError from '../ValidationError';\n\nconst once = cb => {\n let fired = false;\n return (...args) => {\n if (fired) return;\n fired = true;\n cb(...args);\n };\n};\n\nexport default function runTests(options, cb) {\n let {\n endEarly,\n tests,\n args,\n value,\n errors,\n sort,\n path\n } = options;\n let callback = once(cb);\n let count = tests.length;\n const nestedErrors = [];\n errors = errors ? errors : [];\n if (!count) return errors.length ? callback(new ValidationError(errors, value, path)) : callback(null, value);\n\n for (let i = 0; i < tests.length; i++) {\n const test = tests[i];\n test(args, function finishTestRun(err) {\n if (err) {\n // always return early for non validation errors\n if (!ValidationError.isError(err)) {\n return callback(err, value);\n }\n\n if (endEarly) {\n err.value = value;\n return callback(err, value);\n }\n\n nestedErrors.push(err);\n }\n\n if (--count <= 0) {\n if (nestedErrors.length) {\n if (sort) nestedErrors.sort(sort); //show parent errors after the nested ones: name.first, name\n\n if (errors.length) nestedErrors.push(...errors);\n errors = nestedErrors;\n }\n\n if (errors.length) {\n callback(new ValidationError(errors, value, path), value);\n return;\n }\n\n callback(null, value);\n }\n });\n }\n}", "function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport mapValues from 'lodash/mapValues';\nimport ValidationError from '../ValidationError';\nimport Ref from '../Reference';\nexport default function createValidation(config) {\n function validate(_ref, cb) {\n let {\n value,\n path = '',\n label,\n options,\n originalValue,\n sync\n } = _ref,\n rest = _objectWithoutPropertiesLoose(_ref, [\"value\", \"path\", \"label\", \"options\", \"originalValue\", \"sync\"]);\n\n const {\n name,\n test,\n params,\n message\n } = config;\n let {\n parent,\n context\n } = options;\n\n function resolve(item) {\n return Ref.isRef(item) ? item.getValue(value, parent, context) : item;\n }\n\n function createError(overrides = {}) {\n const nextParams = mapValues(_extends({\n value,\n originalValue,\n label,\n path: overrides.path || path\n }, params, overrides.params), resolve);\n const error = new ValidationError(ValidationError.formatError(overrides.message || message, nextParams), value, nextParams.path, overrides.type || name);\n error.params = nextParams;\n return error;\n }\n\n let ctx = _extends({\n path,\n parent,\n type: name,\n createError,\n resolve,\n options,\n originalValue\n }, rest);\n\n if (!sync) {\n try {\n Promise.resolve(test.call(ctx, value, ctx)).then(validOrError => {\n if (ValidationError.isError(validOrError)) cb(validOrError);else if (!validOrError) cb(createError());else cb(null, validOrError);\n }).catch(cb);\n } catch (err) {\n cb(err);\n }\n\n return;\n }\n\n let result;\n\n try {\n var _ref2;\n\n result = test.call(ctx, value, ctx);\n\n if (typeof ((_ref2 = result) == null ? void 0 : _ref2.then) === 'function') {\n throw new Error(`Validation test of type: \"${ctx.type}\" returned a Promise during a synchronous validate. ` + `This test will finish after the validate call has returned`);\n }\n } catch (err) {\n cb(err);\n return;\n }\n\n if (ValidationError.isError(result)) cb(result);else if (!result) cb(createError());else cb(null, result);\n }\n\n validate.OPTIONS = config;\n return validate;\n}", "import { getter } from 'property-expr';\nconst prefixes = {\n context: '$',\n value: '.'\n};\nexport function create(key, options) {\n return new Reference(key, options);\n}\nexport default class Reference {\n constructor(key, options = {}) {\n this.key = void 0;\n this.isContext = void 0;\n this.isValue = void 0;\n this.isSibling = void 0;\n this.path = void 0;\n this.getter = void 0;\n this.map = void 0;\n if (typeof key !== 'string') throw new TypeError('ref must be a string, got: ' + key);\n this.key = key.trim();\n if (key === '') throw new TypeError('ref must be a non-empty string');\n this.isContext = this.key[0] === prefixes.context;\n this.isValue = this.key[0] === prefixes.value;\n this.isSibling = !this.isContext && !this.isValue;\n let prefix = this.isContext ? prefixes.context : this.isValue ? prefixes.value : '';\n this.path = this.key.slice(prefix.length);\n this.getter = this.path && getter(this.path, true);\n this.map = options.map;\n }\n\n getValue(value, parent, context) {\n let result = this.isContext ? context : this.isValue ? value : parent;\n if (this.getter) result = this.getter(result || {});\n if (this.map) result = this.map(result);\n return result;\n }\n /**\n *\n * @param {*} value\n * @param {Object} options\n * @param {Object=} options.context\n * @param {Object=} options.parent\n */\n\n\n cast(value, options) {\n return this.getValue(value, options == null ? void 0 : options.parent, options == null ? void 0 : options.context);\n }\n\n resolve() {\n return this;\n }\n\n describe() {\n return {\n type: 'ref',\n key: this.key\n };\n }\n\n toString() {\n return `Ref(${this.key})`;\n }\n\n static isRef(value) {\n return value && value.__isYupRef;\n }\n\n} // @ts-ignore\n\nReference.prototype.__isYupRef = true;", "import { forEach } from 'property-expr';\n\nlet trim = part => part.substr(0, part.length - 1).substr(1);\n\nexport function getIn(schema, path, value, context = value) {\n let parent, lastPart, lastPartDebug; // root path: ''\n\n if (!path) return {\n parent,\n parentPath: path,\n schema\n };\n forEach(path, (_part, isBracket, isArray) => {\n let part = isBracket ? trim(_part) : _part;\n schema = schema.resolve({\n context,\n parent,\n value\n });\n\n if (schema.innerType) {\n let idx = isArray ? parseInt(part, 10) : 0;\n\n if (value && idx >= value.length) {\n throw new Error(`Yup.reach cannot resolve an array item at index: ${_part}, in the path: ${path}. ` + `because there is no value at that index. `);\n }\n\n parent = value;\n value = value && value[idx];\n schema = schema.innerType;\n } // sometimes the array index part of a path doesn't exist: \"nested.arr.child\"\n // in these cases the current part is the next schema and should be processed\n // in this iteration. For cases where the index signature is included this\n // check will fail and we'll handle the `child` part on the next iteration like normal\n\n\n if (!isArray) {\n if (!schema.fields || !schema.fields[part]) throw new Error(`The schema does not contain the path: ${path}. ` + `(failed at: ${lastPartDebug} which is a type: \"${schema._type}\")`);\n parent = value;\n value = value && value[part];\n schema = schema.fields[part];\n }\n\n lastPart = part;\n lastPartDebug = isBracket ? '[' + _part + ']' : '.' + _part;\n });\n return {\n schema,\n parent,\n parentPath: lastPart\n };\n}\n\nconst reach = (obj, path, value, context) => getIn(obj, path, value, context).schema;\n\nexport default reach;", "import Reference from '../Reference';\nexport default class ReferenceSet {\n constructor() {\n this.list = void 0;\n this.refs = void 0;\n this.list = new Set();\n this.refs = new Map();\n }\n\n get size() {\n return this.list.size + this.refs.size;\n }\n\n describe() {\n const description = [];\n\n for (const item of this.list) description.push(item);\n\n for (const [, ref] of this.refs) description.push(ref.describe());\n\n return description;\n }\n\n toArray() {\n return Array.from(this.list).concat(Array.from(this.refs.values()));\n }\n\n resolveAll(resolve) {\n return this.toArray().reduce((acc, e) => acc.concat(Reference.isRef(e) ? resolve(e) : e), []);\n }\n\n add(value) {\n Reference.isRef(value) ? this.refs.set(value.key, value) : this.list.add(value);\n }\n\n delete(value) {\n Reference.isRef(value) ? this.refs.delete(value.key) : this.list.delete(value);\n }\n\n clone() {\n const next = new ReferenceSet();\n next.list = new Set(this.list);\n next.refs = new Map(this.refs);\n return next;\n }\n\n merge(newItems, removeItems) {\n const next = this.clone();\n newItems.list.forEach(value => next.add(value));\n newItems.refs.forEach(value => next.add(value));\n removeItems.list.forEach(value => next.delete(value));\n removeItems.refs.forEach(value => next.delete(value));\n return next;\n }\n\n}", "function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\n// @ts-ignore\nimport cloneDeep from 'nanoclone';\nimport { mixed as locale } from './locale';\nimport Condition from './Condition';\nimport runTests from './util/runTests';\nimport createValidation from './util/createValidation';\nimport printValue from './util/printValue';\nimport Ref from './Reference';\nimport { getIn } from './util/reach';\nimport ValidationError from './ValidationError';\nimport ReferenceSet from './util/ReferenceSet';\nimport toArray from './util/toArray'; // const UNSET = 'unset' as const;\n\nexport default class BaseSchema {\n constructor(options) {\n this.deps = [];\n this.tests = void 0;\n this.transforms = void 0;\n this.conditions = [];\n this._mutate = void 0;\n this._typeError = void 0;\n this._whitelist = new ReferenceSet();\n this._blacklist = new ReferenceSet();\n this.exclusiveTests = Object.create(null);\n this.spec = void 0;\n this.tests = [];\n this.transforms = [];\n this.withMutation(() => {\n this.typeError(locale.notType);\n });\n this.type = (options == null ? void 0 : options.type) || 'mixed';\n this.spec = _extends({\n strip: false,\n strict: false,\n abortEarly: true,\n recursive: true,\n nullable: false,\n presence: 'optional'\n }, options == null ? void 0 : options.spec);\n } // TODO: remove\n\n\n get _type() {\n return this.type;\n }\n\n _typeCheck(_value) {\n return true;\n }\n\n clone(spec) {\n if (this._mutate) {\n if (spec) Object.assign(this.spec, spec);\n return this;\n } // if the nested value is a schema we can skip cloning, since\n // they are already immutable\n\n\n const next = Object.create(Object.getPrototypeOf(this)); // @ts-expect-error this is readonly\n\n next.type = this.type;\n next._typeError = this._typeError;\n next._whitelistError = this._whitelistError;\n next._blacklistError = this._blacklistError;\n next._whitelist = this._whitelist.clone();\n next._blacklist = this._blacklist.clone();\n next.exclusiveTests = _extends({}, this.exclusiveTests); // @ts-expect-error this is readonly\n\n next.deps = [...this.deps];\n next.conditions = [...this.conditions];\n next.tests = [...this.tests];\n next.transforms = [...this.transforms];\n next.spec = cloneDeep(_extends({}, this.spec, spec));\n return next;\n }\n\n label(label) {\n let next = this.clone();\n next.spec.label = label;\n return next;\n }\n\n meta(...args) {\n if (args.length === 0) return this.spec.meta;\n let next = this.clone();\n next.spec.meta = Object.assign(next.spec.meta || {}, args[0]);\n return next;\n } // withContext<TContext extends AnyObject>(): BaseSchema<\n // TCast,\n // TContext,\n // TOutput\n // > {\n // return this as any;\n // }\n\n\n withMutation(fn) {\n let before = this._mutate;\n this._mutate = true;\n let result = fn(this);\n this._mutate = before;\n return result;\n }\n\n concat(schema) {\n if (!schema || schema === this) return this;\n if (schema.type !== this.type && this.type !== 'mixed') throw new TypeError(`You cannot \\`concat()\\` schema's of different types: ${this.type} and ${schema.type}`);\n let base = this;\n let combined = schema.clone();\n\n const mergedSpec = _extends({}, base.spec, combined.spec); // if (combined.spec.nullable === UNSET)\n // mergedSpec.nullable = base.spec.nullable;\n // if (combined.spec.presence === UNSET)\n // mergedSpec.presence = base.spec.presence;\n\n\n combined.spec = mergedSpec;\n combined._typeError || (combined._typeError = base._typeError);\n combined._whitelistError || (combined._whitelistError = base._whitelistError);\n combined._blacklistError || (combined._blacklistError = base._blacklistError); // manually merge the blacklist/whitelist (the other `schema` takes\n // precedence in case of conflicts)\n\n combined._whitelist = base._whitelist.merge(schema._whitelist, schema._blacklist);\n combined._blacklist = base._blacklist.merge(schema._blacklist, schema._whitelist); // start with the current tests\n\n combined.tests = base.tests;\n combined.exclusiveTests = base.exclusiveTests; // manually add the new tests to ensure\n // the deduping logic is consistent\n\n combined.withMutation(next => {\n schema.tests.forEach(fn => {\n next.test(fn.OPTIONS);\n });\n });\n combined.transforms = [...base.transforms, ...combined.transforms];\n return combined;\n }\n\n isType(v) {\n if (this.spec.nullable && v === null) return true;\n return this._typeCheck(v);\n }\n\n resolve(options) {\n let schema = this;\n\n if (schema.conditions.length) {\n let conditions = schema.conditions;\n schema = schema.clone();\n schema.conditions = [];\n schema = conditions.reduce((schema, condition) => condition.resolve(schema, options), schema);\n schema = schema.resolve(options);\n }\n\n return schema;\n }\n /**\n *\n * @param {*} value\n * @param {Object} options\n * @param {*=} options.parent\n * @param {*=} options.context\n */\n\n\n cast(value, options = {}) {\n let resolvedSchema = this.resolve(_extends({\n value\n }, options));\n\n let result = resolvedSchema._cast(value, options);\n\n if (value !== undefined && options.assert !== false && resolvedSchema.isType(result) !== true) {\n let formattedValue = printValue(value);\n let formattedResult = printValue(result);\n throw new TypeError(`The value of ${options.path || 'field'} could not be cast to a value ` + `that satisfies the schema type: \"${resolvedSchema._type}\". \\n\\n` + `attempted value: ${formattedValue} \\n` + (formattedResult !== formattedValue ? `result of cast: ${formattedResult}` : ''));\n }\n\n return result;\n }\n\n _cast(rawValue, _options) {\n let value = rawValue === undefined ? rawValue : this.transforms.reduce((value, fn) => fn.call(this, value, rawValue, this), rawValue);\n\n if (value === undefined) {\n value = this.getDefault();\n }\n\n return value;\n }\n\n _validate(_value, options = {}, cb) {\n let {\n sync,\n path,\n from = [],\n originalValue = _value,\n strict = this.spec.strict,\n abortEarly = this.spec.abortEarly\n } = options;\n let value = _value;\n\n if (!strict) {\n // this._validating = true;\n value = this._cast(value, _extends({\n assert: false\n }, options)); // this._validating = false;\n } // value is cast, we can check if it meets type requirements\n\n\n let args = {\n value,\n path,\n options,\n originalValue,\n schema: this,\n label: this.spec.label,\n sync,\n from\n };\n let initialTests = [];\n if (this._typeError) initialTests.push(this._typeError);\n let finalTests = [];\n if (this._whitelistError) finalTests.push(this._whitelistError);\n if (this._blacklistError) finalTests.push(this._blacklistError);\n runTests({\n args,\n value,\n path,\n sync,\n tests: initialTests,\n endEarly: abortEarly\n }, err => {\n if (err) return void cb(err, value);\n runTests({\n tests: this.tests.concat(finalTests),\n args,\n path,\n sync,\n value,\n endEarly: abortEarly\n }, cb);\n });\n }\n\n validate(value, options, maybeCb) {\n let schema = this.resolve(_extends({}, options, {\n value\n })); // callback case is for nested validations\n\n return typeof maybeCb === 'function' ? schema._validate(value, options, maybeCb) : new Promise((resolve, reject) => schema._validate(value, options, (err, value) => {\n if (err) reject(err);else resolve(value);\n }));\n }\n\n validateSync(value, options) {\n let schema = this.resolve(_extends({}, options, {\n value\n }));\n let result;\n\n schema._validate(value, _extends({}, options, {\n sync: true\n }), (err, value) => {\n if (err) throw err;\n result = value;\n });\n\n return result;\n }\n\n isValid(value, options) {\n return this.validate(value, options).then(() => true, err => {\n if (ValidationError.isError(err)) return false;\n throw err;\n });\n }\n\n isValidSync(value, options) {\n try {\n this.validateSync(value, options);\n return true;\n } catch (err) {\n if (ValidationError.isError(err)) return false;\n throw err;\n }\n }\n\n _getDefault() {\n let defaultValue = this.spec.default;\n\n if (defaultValue == null) {\n return defaultValue;\n }\n\n return typeof defaultValue === 'function' ? defaultValue.call(this) : cloneDeep(defaultValue);\n }\n\n getDefault(options) {\n let schema = this.resolve(options || {});\n return schema._getDefault();\n }\n\n default(def) {\n if (arguments.length === 0) {\n return this._getDefault();\n }\n\n let next = this.clone({\n default: def\n });\n return next;\n }\n\n strict(isStrict = true) {\n let next = this.clone();\n next.spec.strict = isStrict;\n return next;\n }\n\n _isPresent(value) {\n return value != null;\n }\n\n defined(message = locale.defined) {\n return this.test({\n message,\n name: 'defined',\n exclusive: true,\n\n test(value) {\n return value !== undefined;\n }\n\n });\n }\n\n required(message = locale.required) {\n return this.clone({\n presence: 'required'\n }).withMutation(s => s.test({\n message,\n name: 'required',\n exclusive: true,\n\n test(value) {\n return this.schema._isPresent(value);\n }\n\n }));\n }\n\n notRequired() {\n let next = this.clone({\n presence: 'optional'\n });\n next.tests = next.tests.filter(test => test.OPTIONS.name !== 'required');\n return next;\n }\n\n nullable(isNullable = true) {\n let next = this.clone({\n nullable: isNullable !== false\n });\n return next;\n }\n\n transform(fn) {\n let next = this.clone();\n next.transforms.push(fn);\n return next;\n }\n /**\n * Adds a test function to the schema's queue of tests.\n * tests can be exclusive or non-exclusive.\n *\n * - exclusive tests, will replace any existing tests of the same name.\n * - non-exclusive: can be stacked\n *\n * If a non-exclusive test is added to a schema with an exclusive test of the same name\n * the exclusive test is removed and further tests of the same name will be stacked.\n *\n * If an exclusive test is added to a schema with non-exclusive tests of the same name\n * the previous tests are removed and further tests of the same name will replace each other.\n */\n\n\n test(...args) {\n let opts;\n\n if (args.length === 1) {\n if (typeof args[0] === 'function') {\n opts = {\n test: args[0]\n };\n } else {\n opts = args[0];\n }\n } else if (args.length === 2) {\n opts = {\n name: args[0],\n test: args[1]\n };\n } else {\n opts = {\n name: args[0],\n message: args[1],\n test: args[2]\n };\n }\n\n if (opts.message === undefined) opts.message = locale.default;\n if (typeof opts.test !== 'function') throw new TypeError('`test` is a required parameters');\n let next = this.clone();\n let validate = createValidation(opts);\n let isExclusive = opts.exclusive || opts.name && next.exclusiveTests[opts.name] === true;\n\n if (opts.exclusive) {\n if (!opts.name) throw new TypeError('Exclusive tests must provide a unique `name` identifying the test');\n }\n\n if (opts.name) next.exclusiveTests[opts.name] = !!opts.exclusive;\n next.tests = next.tests.filter(fn => {\n if (fn.OPTIONS.name === opts.name) {\n if (isExclusive) return false;\n if (fn.OPTIONS.test === validate.OPTIONS.test) return false;\n }\n\n return true;\n });\n next.tests.push(validate);\n return next;\n }\n\n when(keys, options) {\n if (!Array.isArray(keys) && typeof keys !== 'string') {\n options = keys;\n keys = '.';\n }\n\n let next = this.clone();\n let deps = toArray(keys).map(key => new Ref(key));\n deps.forEach(dep => {\n // @ts-ignore\n if (dep.isSibling) next.deps.push(dep.key);\n });\n next.conditions.push(new Condition(deps, options));\n return next;\n }\n\n typeError(message) {\n let next = this.clone();\n next._typeError = createValidation({\n message,\n name: 'typeError',\n\n test(value) {\n if (value !== undefined && !this.schema.isType(value)) return this.createError({\n params: {\n type: this.schema._type\n }\n });\n return true;\n }\n\n });\n return next;\n }\n\n oneOf(enums, message = locale.oneOf) {\n let next = this.clone();\n enums.forEach(val => {\n next._whitelist.add(val);\n\n next._blacklist.delete(val);\n });\n next._whitelistError = createValidation({\n message,\n name: 'oneOf',\n\n test(value) {\n if (value === undefined) return true;\n let valids = this.schema._whitelist;\n let resolved = valids.resolveAll(this.resolve);\n return resolved.includes(value) ? true : this.createError({\n params: {\n values: valids.toArray().join(', '),\n resolved\n }\n });\n }\n\n });\n return next;\n }\n\n notOneOf(enums, message = locale.notOneOf) {\n let next = this.clone();\n enums.forEach(val => {\n next._blacklist.add(val);\n\n next._whitelist.delete(val);\n });\n next._blacklistError = createValidation({\n message,\n name: 'notOneOf',\n\n test(value) {\n let invalids = this.schema._blacklist;\n let resolved = invalids.resolveAll(this.resolve);\n if (resolved.includes(value)) return this.createError({\n params: {\n values: invalids.toArray().join(', '),\n resolved\n }\n });\n return true;\n }\n\n });\n return next;\n }\n\n strip(strip = true) {\n let next = this.clone();\n next.spec.strip = strip;\n return next;\n }\n\n describe() {\n const next = this.clone();\n const {\n label,\n meta\n } = next.spec;\n const description = {\n meta,\n label,\n type: next.type,\n oneOf: next._whitelist.describe(),\n notOneOf: next._blacklist.describe(),\n tests: next.tests.map(fn => ({\n name: fn.OPTIONS.name,\n params: fn.OPTIONS.params\n })).filter((n, idx, list) => list.findIndex(c => c.name === n.name) === idx)\n };\n return description;\n }\n\n} // eslint-disable-next-line @typescript-eslint/no-unused-vars\n\n// @ts-expect-error\nBaseSchema.prototype.__isYupSchema__ = true;\n\nfor (const method of ['validate', 'validateSync']) BaseSchema.prototype[`${method}At`] = function (path, value, options = {}) {\n const {\n parent,\n parentPath,\n schema\n } = getIn(this, path, value, options.context);\n return schema[method](parent && parent[parentPath], _extends({}, options, {\n parent,\n path\n }));\n};\n\nfor (const alias of ['equals', 'is']) BaseSchema.prototype[alias] = BaseSchema.prototype.oneOf;\n\nfor (const alias of ['not', 'nope']) BaseSchema.prototype[alias] = BaseSchema.prototype.notOneOf;\n\nBaseSchema.prototype.optional = BaseSchema.prototype.notRequired;", "import BaseSchema from './schema';\nconst Mixed = BaseSchema;\nexport default Mixed;\nexport function create() {\n return new Mixed();\n} // XXX: this is using the Base schema so that `addMethod(mixed)` works as a base class\n\ncreate.prototype = Mixed.prototype;", "const isAbsent = value => value == null;\n\nexport default isAbsent;", "import BaseSchema from './schema';\nimport { boolean as locale } from './locale';\nimport isAbsent from './util/isAbsent';\nexport function create() {\n return new BooleanSchema();\n}\nexport default class BooleanSchema extends BaseSchema {\n constructor() {\n super({\n type: 'boolean'\n });\n this.withMutation(() => {\n this.transform(function (value) {\n if (!this.isType(value)) {\n if (/^(true|1)$/i.test(String(value))) return true;\n if (/^(false|0)$/i.test(String(value))) return false;\n }\n\n return value;\n });\n });\n }\n\n _typeCheck(v) {\n if (v instanceof Boolean) v = v.valueOf();\n return typeof v === 'boolean';\n }\n\n isTrue(message = locale.isValue) {\n return this.test({\n message,\n name: 'is-value',\n exclusive: true,\n params: {\n value: 'true'\n },\n\n test(value) {\n return isAbsent(value) || value === true;\n }\n\n });\n }\n\n isFalse(message = locale.isValue) {\n return this.test({\n message,\n name: 'is-value',\n exclusive: true,\n params: {\n value: 'false'\n },\n\n test(value) {\n return isAbsent(value) || value === false;\n }\n\n });\n }\n\n}\ncreate.prototype = BooleanSchema.prototype;", "import { string as locale } from './locale';\nimport isAbsent from './util/isAbsent';\nimport BaseSchema from './schema'; // eslint-disable-next-line\n\nlet rEmail = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i; // eslint-disable-next-line\n\nlet rUrl = /^((https?|ftp):)?\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i; // eslint-disable-next-line\n\nlet rUUID = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;\n\nlet isTrimmed = value => isAbsent(value) || value === value.trim();\n\nlet objStringTag = {}.toString();\nexport function create() {\n return new StringSchema();\n}\nexport default class StringSchema extends BaseSchema {\n constructor() {\n super({\n type: 'string'\n });\n this.withMutation(() => {\n this.transform(function (value) {\n if (this.isType(value)) return value;\n if (Array.isArray(value)) return value;\n const strValue = value != null && value.toString ? value.toString() : value;\n if (strValue === objStringTag) return value;\n return strValue;\n });\n });\n }\n\n _typeCheck(value) {\n if (value instanceof String) value = value.valueOf();\n return typeof value === 'string';\n }\n\n _isPresent(value) {\n return super._isPresent(value) && !!value.length;\n }\n\n length(length, message = locale.length) {\n return this.test({\n message,\n name: 'length',\n exclusive: true,\n params: {\n length\n },\n\n test(value) {\n return isAbsent(value) || value.length === this.resolve(length);\n }\n\n });\n }\n\n min(min, message = locale.min) {\n return this.test({\n message,\n name: 'min',\n exclusive: true,\n params: {\n min\n },\n\n test(value) {\n return isAbsent(value) || value.length >= this.resolve(min);\n }\n\n });\n }\n\n max(max, message = locale.max) {\n return this.test({\n name: 'max',\n exclusive: true,\n message,\n params: {\n max\n },\n\n test(value) {\n return isAbsent(value) || value.length <= this.resolve(max);\n }\n\n });\n }\n\n matches(regex, options) {\n let excludeEmptyString = false;\n let message;\n let name;\n\n if (options) {\n if (typeof options === 'object') {\n ({\n excludeEmptyString = false,\n message,\n name\n } = options);\n } else {\n message = options;\n }\n }\n\n return this.test({\n name: name || 'matches',\n message: message || locale.matches,\n params: {\n regex\n },\n test: value => isAbsent(value) || value === '' && excludeEmptyString || value.search(regex) !== -1\n });\n }\n\n email(message = locale.email) {\n return this.matches(rEmail, {\n name: 'email',\n message,\n excludeEmptyString: true\n });\n }\n\n url(message = locale.url) {\n return this.matches(rUrl, {\n name: 'url',\n message,\n excludeEmptyString: true\n });\n }\n\n uuid(message = locale.uuid) {\n return this.matches(rUUID, {\n name: 'uuid',\n message,\n excludeEmptyString: false\n });\n } //-- transforms --\n\n\n ensure() {\n return this.default('').transform(val => val === null ? '' : val);\n }\n\n trim(message = locale.trim) {\n return this.transform(val => val != null ? val.trim() : val).test({\n message,\n name: 'trim',\n test: isTrimmed\n });\n }\n\n lowercase(message = locale.lowercase) {\n return this.transform(value => !isAbsent(value) ? value.toLowerCase() : value).test({\n message,\n name: 'string_case',\n exclusive: true,\n test: value => isAbsent(value) || value === value.toLowerCase()\n });\n }\n\n uppercase(message = locale.uppercase) {\n return this.transform(value => !isAbsent(value) ? value.toUpperCase() : value).test({\n message,\n name: 'string_case',\n exclusive: true,\n test: value => isAbsent(value) || value === value.toUpperCase()\n });\n }\n\n}\ncreate.prototype = StringSchema.prototype; //\n// String Interfaces\n//", "import { number as locale } from './locale';\nimport isAbsent from './util/isAbsent';\nimport BaseSchema from './schema';\n\nlet isNaN = value => value != +value;\n\nexport function create() {\n return new NumberSchema();\n}\nexport default class NumberSchema extends BaseSchema {\n constructor() {\n super({\n type: 'number'\n });\n this.withMutation(() => {\n this.transform(function (value) {\n let parsed = value;\n\n if (typeof parsed === 'string') {\n parsed = parsed.replace(/\\s/g, '');\n if (parsed === '') return NaN; // don't use parseFloat to avoid positives on alpha-numeric strings\n\n parsed = +parsed;\n }\n\n if (this.isType(parsed)) return parsed;\n return parseFloat(parsed);\n });\n });\n }\n\n _typeCheck(value) {\n if (value instanceof Number) value = value.valueOf();\n return typeof value === 'number' && !isNaN(value);\n }\n\n min(min, message = locale.min) {\n return this.test({\n message,\n name: 'min',\n exclusive: true,\n params: {\n min\n },\n\n test(value) {\n return isAbsent(value) || value >= this.resolve(min);\n }\n\n });\n }\n\n max(max, message = locale.max) {\n return this.test({\n message,\n name: 'max',\n exclusive: true,\n params: {\n max\n },\n\n test(value) {\n return isAbsent(value) || value <= this.resolve(max);\n }\n\n });\n }\n\n lessThan(less, message = locale.lessThan) {\n return this.test({\n message,\n name: 'max',\n exclusive: true,\n params: {\n less\n },\n\n test(value) {\n return isAbsent(value) || value < this.resolve(less);\n }\n\n });\n }\n\n moreThan(more, message = locale.moreThan) {\n return this.test({\n message,\n name: 'min',\n exclusive: true,\n params: {\n more\n },\n\n test(value) {\n return isAbsent(value) || value > this.resolve(more);\n }\n\n });\n }\n\n positive(msg = locale.positive) {\n return this.moreThan(0, msg);\n }\n\n negative(msg = locale.negative) {\n return this.lessThan(0, msg);\n }\n\n integer(message = locale.integer) {\n return this.test({\n name: 'integer',\n message,\n test: val => isAbsent(val) || Number.isInteger(val)\n });\n }\n\n truncate() {\n return this.transform(value => !isAbsent(value) ? value | 0 : value);\n }\n\n round(method) {\n var _method;\n\n let avail = ['ceil', 'floor', 'round', 'trunc'];\n method = ((_method = method) == null ? void 0 : _method.toLowerCase()) || 'round'; // this exists for symemtry with the new Math.trunc\n\n if (method === 'trunc') return this.truncate();\n if (avail.indexOf(method.toLowerCase()) === -1) throw new TypeError('Only valid options for round() are: ' + avail.join(', '));\n return this.transform(value => !isAbsent(value) ? Math[method](value) : value);\n }\n\n}\ncreate.prototype = NumberSchema.prototype; //\n// Number Interfaces\n//", "/* eslint-disable */\n\n/**\n *\n * Date.parse with progressive enhancement for ISO 8601 <https://github.com/csnover/js-iso8601>\n * NON-CONFORMANT EDITION.\n * \u00A9 2011 Colin Snover <http://zetafleet.com>\n * Released under MIT license.\n */\n// 1 YYYY 2 MM 3 DD 4 HH 5 mm 6 ss 7 msec 8 Z 9 \u00B1 10 tzHH 11 tzmm\nvar isoReg = /^(\\d{4}|[+\\-]\\d{6})(?:-?(\\d{2})(?:-?(\\d{2}))?)?(?:[ T]?(\\d{2}):?(\\d{2})(?::?(\\d{2})(?:[,\\.](\\d{1,}))?)?(?:(Z)|([+\\-])(\\d{2})(?::?(\\d{2}))?)?)?$/;\nexport default function parseIsoDate(date) {\n var numericKeys = [1, 4, 5, 6, 7, 10, 11],\n minutesOffset = 0,\n timestamp,\n struct;\n\n if (struct = isoReg.exec(date)) {\n // avoid NaN timestamps caused by \u201Cundefined\u201D values being passed to Date.UTC\n for (var i = 0, k; k = numericKeys[i]; ++i) struct[k] = +struct[k] || 0; // allow undefined days and months\n\n\n struct[2] = (+struct[2] || 1) - 1;\n struct[3] = +struct[3] || 1; // allow arbitrary sub-second precision beyond milliseconds\n\n struct[7] = struct[7] ? String(struct[7]).substr(0, 3) : 0; // timestamps without timezone identifiers should be considered local time\n\n if ((struct[8] === undefined || struct[8] === '') && (struct[9] === undefined || struct[9] === '')) timestamp = +new Date(struct[1], struct[2], struct[3], struct[4], struct[5], struct[6], struct[7]);else {\n if (struct[8] !== 'Z' && struct[9] !== undefined) {\n minutesOffset = struct[10] * 60 + struct[11];\n if (struct[9] === '+') minutesOffset = 0 - minutesOffset;\n }\n\n timestamp = Date.UTC(struct[1], struct[2], struct[3], struct[4], struct[5] + minutesOffset, struct[6], struct[7]);\n }\n } else timestamp = Date.parse ? Date.parse(date) : NaN;\n\n return timestamp;\n}", "// @ts-ignore\nimport isoParse from './util/isodate';\nimport { date as locale } from './locale';\nimport isAbsent from './util/isAbsent';\nimport Ref from './Reference';\nimport BaseSchema from './schema';\nlet invalidDate = new Date('');\n\nlet isDate = obj => Object.prototype.toString.call(obj) === '[object Date]';\n\nexport function create() {\n return new DateSchema();\n}\nexport default class DateSchema extends BaseSchema {\n constructor() {\n super({\n type: 'date'\n });\n this.withMutation(() => {\n this.transform(function (value) {\n if (this.isType(value)) return value;\n value = isoParse(value); // 0 is a valid timestamp equivalent to 1970-01-01T00:00:00Z(unix epoch) or before.\n\n return !isNaN(value) ? new Date(value) : invalidDate;\n });\n });\n }\n\n _typeCheck(v) {\n return isDate(v) && !isNaN(v.getTime());\n }\n\n prepareParam(ref, name) {\n let param;\n\n if (!Ref.isRef(ref)) {\n let cast = this.cast(ref);\n if (!this._typeCheck(cast)) throw new TypeError(`\\`${name}\\` must be a Date or a value that can be \\`cast()\\` to a Date`);\n param = cast;\n } else {\n param = ref;\n }\n\n return param;\n }\n\n min(min, message = locale.min) {\n let limit = this.prepareParam(min, 'min');\n return this.test({\n message,\n name: 'min',\n exclusive: true,\n params: {\n min\n },\n\n test(value) {\n return isAbsent(value) || value >= this.resolve(limit);\n }\n\n });\n }\n\n max(max, message = locale.max) {\n let limit = this.prepareParam(max, 'max');\n return this.test({\n message,\n name: 'max',\n exclusive: true,\n params: {\n max\n },\n\n test(value) {\n return isAbsent(value) || value <= this.resolve(limit);\n }\n\n });\n }\n\n}\nDateSchema.INVALID_DATE = invalidDate;\ncreate.prototype = DateSchema.prototype;\ncreate.INVALID_DATE = invalidDate;", "function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport has from 'lodash/has';\nimport snakeCase from 'lodash/snakeCase';\nimport camelCase from 'lodash/camelCase';\nimport mapKeys from 'lodash/mapKeys';\nimport mapValues from 'lodash/mapValues';\nimport { getter } from 'property-expr';\nimport { object as locale } from './locale';\nimport sortFields from './util/sortFields';\nimport sortByKeyOrder from './util/sortByKeyOrder';\nimport runTests from './util/runTests';\nimport ValidationError from './ValidationError';\nimport BaseSchema from './schema';\n\nlet isObject = obj => Object.prototype.toString.call(obj) === '[object Object]';\n\nfunction unknown(ctx, value) {\n let known = Object.keys(ctx.fields);\n return Object.keys(value).filter(key => known.indexOf(key) === -1);\n}\n\nconst defaultSort = sortByKeyOrder([]);\nexport default class ObjectSchema extends BaseSchema {\n constructor(spec) {\n super({\n type: 'object'\n });\n this.fields = Object.create(null);\n this._sortErrors = defaultSort;\n this._nodes = [];\n this._excludedEdges = [];\n this.withMutation(() => {\n this.transform(function coerce(value) {\n if (typeof value === 'string') {\n try {\n value = JSON.parse(value);\n } catch (err) {\n value = null;\n }\n }\n\n if (this.isType(value)) return value;\n return null;\n });\n\n if (spec) {\n this.shape(spec);\n }\n });\n }\n\n _typeCheck(value) {\n return isObject(value) || typeof value === 'function';\n }\n\n _cast(_value, options = {}) {\n var _options$stripUnknown;\n\n let value = super._cast(_value, options); //should ignore nulls here\n\n\n if (value === undefined) return this.getDefault();\n if (!this._typeCheck(value)) return value;\n let fields = this.fields;\n let strip = (_options$stripUnknown = options.stripUnknown) != null ? _options$stripUnknown : this.spec.noUnknown;\n\n let props = this._nodes.concat(Object.keys(value).filter(v => this._nodes.indexOf(v) === -1));\n\n let intermediateValue = {}; // is filled during the transform below\n\n let innerOptions = _extends({}, options, {\n parent: intermediateValue,\n __validating: options.__validating || false\n });\n\n let isChanged = false;\n\n for (const prop of props) {\n let field = fields[prop];\n let exists = has(value, prop);\n\n if (field) {\n let fieldValue;\n let inputValue = value[prop]; // safe to mutate since this is fired in sequence\n\n innerOptions.path = (options.path ? `${options.path}.` : '') + prop; // innerOptions.value = value[prop];\n\n field = field.resolve({\n value: inputValue,\n context: options.context,\n parent: intermediateValue\n });\n let fieldSpec = 'spec' in field ? field.spec : undefined;\n let strict = fieldSpec == null ? void 0 : fieldSpec.strict;\n\n if (fieldSpec == null ? void 0 : fieldSpec.strip) {\n isChanged = isChanged || prop in value;\n continue;\n }\n\n fieldValue = !options.__validating || !strict ? // TODO: use _cast, this is double resolving\n field.cast(value[prop], innerOptions) : value[prop];\n\n if (fieldValue !== undefined) {\n intermediateValue[prop] = fieldValue;\n }\n } else if (exists && !strip) {\n intermediateValue[prop] = value[prop];\n }\n\n if (intermediateValue[prop] !== value[prop]) {\n isChanged = true;\n }\n }\n\n return isChanged ? intermediateValue : value;\n }\n\n _validate(_value, opts = {}, callback) {\n let errors = [];\n let {\n sync,\n from = [],\n originalValue = _value,\n abortEarly = this.spec.abortEarly,\n recursive = this.spec.recursive\n } = opts;\n from = [{\n schema: this,\n value: originalValue\n }, ...from]; // this flag is needed for handling `strict` correctly in the context of\n // validation vs just casting. e.g strict() on a field is only used when validating\n\n opts.__validating = true;\n opts.originalValue = originalValue;\n opts.from = from;\n\n super._validate(_value, opts, (err, value) => {\n if (err) {\n if (!ValidationError.isError(err) || abortEarly) {\n return void callback(err, value);\n }\n\n errors.push(err);\n }\n\n if (!recursive || !isObject(value)) {\n callback(errors[0] || null, value);\n return;\n }\n\n originalValue = originalValue || value;\n\n let tests = this._nodes.map(key => (_, cb) => {\n let path = key.indexOf('.') === -1 ? (opts.path ? `${opts.path}.` : '') + key : `${opts.path || ''}[\"${key}\"]`;\n let field = this.fields[key];\n\n if (field && 'validate' in field) {\n field.validate(value[key], _extends({}, opts, {\n // @ts-ignore\n path,\n from,\n // inner fields are always strict:\n // 1. this isn't strict so the casting will also have cast inner values\n // 2. this is strict in which case the nested values weren't cast either\n strict: true,\n parent: value,\n originalValue: originalValue[key]\n }), cb);\n return;\n }\n\n cb(null);\n });\n\n runTests({\n sync,\n tests,\n value,\n errors,\n endEarly: abortEarly,\n sort: this._sortErrors,\n path: opts.path\n }, callback);\n });\n }\n\n clone(spec) {\n const next = super.clone(spec);\n next.fields = _extends({}, this.fields);\n next._nodes = this._nodes;\n next._excludedEdges = this._excludedEdges;\n next._sortErrors = this._sortErrors;\n return next;\n }\n\n concat(schema) {\n let next = super.concat(schema);\n let nextFields = next.fields;\n\n for (let [field, schemaOrRef] of Object.entries(this.fields)) {\n const target = nextFields[field];\n\n if (target === undefined) {\n nextFields[field] = schemaOrRef;\n } else if (target instanceof BaseSchema && schemaOrRef instanceof BaseSchema) {\n nextFields[field] = schemaOrRef.concat(target);\n }\n }\n\n return next.withMutation(() => next.shape(nextFields, this._excludedEdges));\n }\n\n getDefaultFromShape() {\n let dft = {};\n\n this._nodes.forEach(key => {\n const field = this.fields[key];\n dft[key] = 'default' in field ? field.getDefault() : undefined;\n });\n\n return dft;\n }\n\n _getDefault() {\n if ('default' in this.spec) {\n return super._getDefault();\n } // if there is no default set invent one\n\n\n if (!this._nodes.length) {\n return undefined;\n }\n\n return this.getDefaultFromShape();\n }\n\n shape(additions, excludes = []) {\n let next = this.clone();\n let fields = Object.assign(next.fields, additions);\n next.fields = fields;\n next._sortErrors = sortByKeyOrder(Object.keys(fields));\n\n if (excludes.length) {\n // this is a convenience for when users only supply a single pair\n if (!Array.isArray(excludes[0])) excludes = [excludes];\n next._excludedEdges = [...next._excludedEdges, ...excludes];\n }\n\n next._nodes = sortFields(fields, next._excludedEdges);\n return next;\n }\n\n pick(keys) {\n const picked = {};\n\n for (const key of keys) {\n if (this.fields[key]) picked[key] = this.fields[key];\n }\n\n return this.clone().withMutation(next => {\n next.fields = {};\n return next.shape(picked);\n });\n }\n\n omit(keys) {\n const next = this.clone();\n const fields = next.fields;\n next.fields = {};\n\n for (const key of keys) {\n delete fields[key];\n }\n\n return next.withMutation(() => next.shape(fields));\n }\n\n from(from, to, alias) {\n let fromGetter = getter(from, true);\n return this.transform(obj => {\n if (obj == null) return obj;\n let newObj = obj;\n\n if (has(obj, from)) {\n newObj = _extends({}, obj);\n if (!alias) delete newObj[from];\n newObj[to] = fromGetter(obj);\n }\n\n return newObj;\n });\n }\n\n noUnknown(noAllow = true, message = locale.noUnknown) {\n if (typeof noAllow === 'string') {\n message = noAllow;\n noAllow = true;\n }\n\n let next = this.test({\n name: 'noUnknown',\n exclusive: true,\n message: message,\n\n test(value) {\n if (value == null) return true;\n const unknownKeys = unknown(this.schema, value);\n return !noAllow || unknownKeys.length === 0 || this.createError({\n params: {\n unknown: unknownKeys.join(', ')\n }\n });\n }\n\n });\n next.spec.noUnknown = noAllow;\n return next;\n }\n\n unknown(allow = true, message = locale.noUnknown) {\n return this.noUnknown(!allow, message);\n }\n\n transformKeys(fn) {\n return this.transform(obj => obj && mapKeys(obj, (_, key) => fn(key)));\n }\n\n camelCase() {\n return this.transformKeys(camelCase);\n }\n\n snakeCase() {\n return this.transformKeys(snakeCase);\n }\n\n constantCase() {\n return this.transformKeys(key => snakeCase(key).toUpperCase());\n }\n\n describe() {\n let base = super.describe();\n base.fields = mapValues(this.fields, value => value.describe());\n return base;\n }\n\n}\nexport function create(spec) {\n return new ObjectSchema(spec);\n}\ncreate.prototype = ObjectSchema.prototype;", "import has from 'lodash/has'; // @ts-expect-error\n\nimport toposort from 'toposort';\nimport { split } from 'property-expr';\nimport Ref from '../Reference';\nimport isSchema from './isSchema';\nexport default function sortFields(fields, excludedEdges = []) {\n let edges = [];\n let nodes = new Set();\n let excludes = new Set(excludedEdges.map(([a, b]) => `${a}-${b}`));\n\n function addNode(depPath, key) {\n let node = split(depPath)[0];\n nodes.add(node);\n if (!excludes.has(`${key}-${node}`)) edges.push([key, node]);\n }\n\n for (const key in fields) if (has(fields, key)) {\n let value = fields[key];\n nodes.add(key);\n if (Ref.isRef(value) && value.isSibling) addNode(value.path, key);else if (isSchema(value) && 'deps' in value) value.deps.forEach(path => addNode(path, key));\n }\n\n return toposort.array(Array.from(nodes), edges).reverse();\n}", "function findIndex(arr, err) {\n let idx = Infinity;\n arr.some((key, ii) => {\n var _err$path;\n\n if (((_err$path = err.path) == null ? void 0 : _err$path.indexOf(key)) !== -1) {\n idx = ii;\n return true;\n }\n });\n return idx;\n}\n\nexport default function sortByKeyOrder(keys) {\n return (a, b) => {\n return findIndex(keys, a) - findIndex(keys, b);\n };\n}", "function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport isAbsent from './util/isAbsent';\nimport isSchema from './util/isSchema';\nimport printValue from './util/printValue';\nimport { array as locale } from './locale';\nimport runTests from './util/runTests';\nimport ValidationError from './ValidationError';\nimport BaseSchema from './schema';\nexport function create(type) {\n return new ArraySchema(type);\n}\nexport default class ArraySchema extends BaseSchema {\n constructor(type) {\n super({\n type: 'array'\n }); // `undefined` specifically means uninitialized, as opposed to\n // \"no subtype\"\n\n this.innerType = void 0;\n this.innerType = type;\n this.withMutation(() => {\n this.transform(function (values) {\n if (typeof values === 'string') try {\n values = JSON.parse(values);\n } catch (err) {\n values = null;\n }\n return this.isType(values) ? values : null;\n });\n });\n }\n\n _typeCheck(v) {\n return Array.isArray(v);\n }\n\n get _subType() {\n return this.innerType;\n }\n\n _cast(_value, _opts) {\n const value = super._cast(_value, _opts); //should ignore nulls here\n\n\n if (!this._typeCheck(value) || !this.innerType) return value;\n let isChanged = false;\n const castArray = value.map((v, idx) => {\n const castElement = this.innerType.cast(v, _extends({}, _opts, {\n path: `${_opts.path || ''}[${idx}]`\n }));\n\n if (castElement !== v) {\n isChanged = true;\n }\n\n return castElement;\n });\n return isChanged ? castArray : value;\n }\n\n _validate(_value, options = {}, callback) {\n var _options$abortEarly, _options$recursive;\n\n let errors = [];\n let sync = options.sync;\n let path = options.path;\n let innerType = this.innerType;\n let endEarly = (_options$abortEarly = options.abortEarly) != null ? _options$abortEarly : this.spec.abortEarly;\n let recursive = (_options$recursive = options.recursive) != null ? _options$recursive : this.spec.recursive;\n let originalValue = options.originalValue != null ? options.originalValue : _value;\n\n super._validate(_value, options, (err, value) => {\n if (err) {\n if (!ValidationError.isError(err) || endEarly) {\n return void callback(err, value);\n }\n\n errors.push(err);\n }\n\n if (!recursive || !innerType || !this._typeCheck(value)) {\n callback(errors[0] || null, value);\n return;\n }\n\n originalValue = originalValue || value; // #950 Ensure that sparse array empty slots are validated\n\n let tests = new Array(value.length);\n\n for (let idx = 0; idx < value.length; idx++) {\n let item = value[idx];\n let path = `${options.path || ''}[${idx}]`; // object._validate note for isStrict explanation\n\n let innerOptions = _extends({}, options, {\n path,\n strict: true,\n parent: value,\n index: idx,\n originalValue: originalValue[idx]\n });\n\n tests[idx] = (_, cb) => innerType.validate(item, innerOptions, cb);\n }\n\n runTests({\n sync,\n path,\n value,\n errors,\n endEarly,\n tests\n }, callback);\n });\n }\n\n clone(spec) {\n const next = super.clone(spec);\n next.innerType = this.innerType;\n return next;\n }\n\n concat(schema) {\n let next = super.concat(schema);\n next.innerType = this.innerType;\n if (schema.innerType) next.innerType = next.innerType ? // @ts-expect-error Lazy doesn't have concat()\n next.innerType.concat(schema.innerType) : schema.innerType;\n return next;\n }\n\n of(schema) {\n // FIXME: this should return a new instance of array without the default to be\n let next = this.clone();\n if (!isSchema(schema)) throw new TypeError('`array.of()` sub-schema must be a valid yup schema not: ' + printValue(schema)); // FIXME(ts):\n\n next.innerType = schema;\n return next;\n }\n\n length(length, message = locale.length) {\n return this.test({\n message,\n name: 'length',\n exclusive: true,\n params: {\n length\n },\n\n test(value) {\n return isAbsent(value) || value.length === this.resolve(length);\n }\n\n });\n }\n\n min(min, message) {\n message = message || locale.min;\n return this.test({\n message,\n name: 'min',\n exclusive: true,\n params: {\n min\n },\n\n // FIXME(ts): Array<typeof T>\n test(value) {\n return isAbsent(value) || value.length >= this.resolve(min);\n }\n\n });\n }\n\n max(max, message) {\n message = message || locale.max;\n return this.test({\n message,\n name: 'max',\n exclusive: true,\n params: {\n max\n },\n\n test(value) {\n return isAbsent(value) || value.length <= this.resolve(max);\n }\n\n });\n }\n\n ensure() {\n return this.default(() => []).transform((val, original) => {\n // We don't want to return `null` for nullable schema\n if (this._typeCheck(val)) return val;\n return original == null ? [] : [].concat(original);\n });\n }\n\n compact(rejector) {\n let reject = !rejector ? v => !!v : (v, i, a) => !rejector(v, i, a);\n return this.transform(values => values != null ? values.filter(reject) : values);\n }\n\n describe() {\n let base = super.describe();\n if (this.innerType) base.innerType = this.innerType.describe();\n return base;\n }\n\n nullable(isNullable = true) {\n return super.nullable(isNullable);\n }\n\n defined() {\n return super.defined();\n }\n\n required(msg) {\n return super.required(msg);\n }\n\n}\ncreate.prototype = ArraySchema.prototype; //\n// Interfaces\n//", "import locale from './locale';\nexport default function setLocale(custom) {\n Object.keys(custom).forEach(type => {\n // @ts-ignore\n Object.keys(custom[type]).forEach(method => {\n // @ts-ignore\n locale[type][method] = custom[type][method];\n });\n });\n}", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useState } from \"preact/hooks\";\n\n/**\n * This component is used when a component wants one child to have a trigger for\n * an action (a button) and other child have the action implemented (like\n * gathering information with a form). The difference with other approaches is\n * that in this case the parent component is not holding the state.\n *\n * It will return a subscriber and activator.\n *\n * The activator may be undefined, if it is undefined it is indicating that the\n * subscriber is not ready to be called.\n *\n * The subscriber will receive a function (the listener) that will be call when the\n * activator runs. The listener must return the collected information.\n *\n * As a result, when the activator is triggered by a child component, the\n * @action function is called receives the information from the listener defined by other\n * child component\n *\n * @param action from <T> to <R>\n * @returns activator and subscriber, undefined activator means that there is not subscriber\n */\n\nexport function useListener<T, R = any>(\n action: (r: T) => Promise<R>,\n): [undefined | (() => Promise<R>), (listener?: () => T) => void] {\n type RunnerHandler = { toBeRan?: () => Promise<R> };\n const [state, setState] = useState<RunnerHandler>({});\n\n /**\n * subscriber will receive a method that will be call when the activator runs\n *\n * @param listener function to be run when the activator runs\n */\n const subscriber = (listener?: () => T) => {\n if (listener) {\n setState({\n toBeRan: () => {\n const whatWeGetFromTheListener = listener();\n return action(whatWeGetFromTheListener);\n },\n });\n } else {\n setState({\n toBeRan: undefined,\n });\n }\n };\n\n /**\n * activator will call runner if there is someone subscribed\n */\n const activator = state.toBeRan\n ? async () => {\n if (state.toBeRan) {\n return state.toBeRan();\n }\n return Promise.reject();\n }\n : undefined;\n\n return [activator, subscriber];\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { isAfter, isFuture } from \"date-fns\";\nimport * as yup from \"yup\";\nimport { AMOUNT_REGEX, PAYTO_REGEX } from \"../utils/constants.js\";\n\nyup.setLocale({\n mixed: {\n default: \"field_invalid\",\n },\n number: {\n min: ({ min }: any) => ({ key: \"field_too_short\", values: { min } }),\n max: ({ max }: any) => ({ key: \"field_too_big\", values: { max } }),\n },\n});\n\nfunction listOfPayToUrisAreValid(values?: (string | undefined)[]): boolean {\n return !!values && values.every((v) => v && PAYTO_REGEX.test(v));\n}\n\nfunction currencyWithAmountIsValid(value?: string): boolean {\n return !!value && AMOUNT_REGEX.test(value);\n}\nfunction currencyGreaterThan0(value?: string) {\n if (value) {\n try {\n const [, amount] = value.split(\":\");\n const intAmount = parseInt(amount, 10);\n return intAmount > 0;\n } catch {\n return false;\n }\n }\n return true;\n}\n\nexport const InstanceSchema = yup.object().shape({\n id: yup.string().required().meta({ type: \"url\" }),\n name: yup.string().required(),\n auth: yup.object().shape({\n method: yup.string().matches(/^(external|token)$/),\n token: yup.string().optional().nullable(),\n }),\n payto_uris: yup\n .array()\n .of(yup.string())\n .min(1)\n .meta({ type: \"array\" })\n .test(\"payto\", \"{path} is not valid\", listOfPayToUrisAreValid),\n default_max_deposit_fee: yup\n .string()\n .required()\n .test(\"amount\", \"the amount is not valid\", currencyWithAmountIsValid)\n .meta({ type: \"amount\" }),\n default_max_wire_fee: yup\n .string()\n .required()\n .test(\"amount\", \"{path} is not valid\", currencyWithAmountIsValid)\n .meta({ type: \"amount\" }),\n default_wire_fee_amortization: yup.number().required(),\n address: yup\n .object()\n .shape({\n country: yup.string().optional(),\n address_lines: yup.array().of(yup.string()).max(7).optional(),\n building_number: yup.string().optional(),\n building_name: yup.string().optional(),\n street: yup.string().optional(),\n post_code: yup.string().optional(),\n town_location: yup.string().optional(),\n town: yup.string(),\n district: yup.string().optional(),\n country_subdivision: yup.string().optional(),\n })\n .meta({ type: \"group\" }),\n jurisdiction: yup\n .object()\n .shape({\n country: yup.string().optional(),\n address_lines: yup.array().of(yup.string()).max(7).optional(),\n building_number: yup.string().optional(),\n building_name: yup.string().optional(),\n street: yup.string().optional(),\n post_code: yup.string().optional(),\n town_location: yup.string().optional(),\n town: yup.string(),\n district: yup.string().optional(),\n country_subdivision: yup.string().optional(),\n })\n .meta({ type: \"group\" }),\n // default_pay_delay: yup.object()\n // .shape({ d_us: yup.number() })\n // .required()\n // .meta({ type: 'duration' }),\n // .transform(numberToDuration),\n default_wire_transfer_delay: yup\n .object()\n .shape({ d_us: yup.number() })\n .required()\n .meta({ type: \"duration\" }),\n // .transform(numberToDuration),\n});\n\nexport const InstanceUpdateSchema = InstanceSchema.clone().omit([\"id\"]);\nexport const InstanceCreateSchema = InstanceSchema.clone();\n\nexport const AuthorizeTipSchema = yup.object().shape({\n justification: yup.string().required(),\n amount: yup\n .string()\n .required()\n .test(\"amount\", \"the amount is not valid\", currencyWithAmountIsValid)\n .test(\"amount_positive\", \"the amount is not valid\", currencyGreaterThan0),\n next_url: yup.string().required(),\n});\n\nconst stringIsValidJSON = (value?: string) => {\n const p = value?.trim();\n if (!p) return true;\n try {\n JSON.parse(p);\n return true;\n } catch {\n return false;\n }\n};\n\nexport const OrderCreateSchema = yup.object().shape({\n pricing: yup\n .object()\n .required()\n .shape({\n summary: yup.string().ensure().required(),\n order_price: yup\n .string()\n .ensure()\n .required()\n .test(\"amount\", \"the amount is not valid\", currencyWithAmountIsValid)\n .test(\n \"amount_positive\",\n \"the amount should be greater than 0\",\n currencyGreaterThan0,\n ),\n }),\n extra: yup.string().test(\"extra\", \"is not a JSON format\", stringIsValidJSON),\n payments: yup\n .object()\n .required()\n .shape({\n refund_deadline: yup\n .date()\n .test(\"future\", \"should be in the future\", (d) =>\n d ? isFuture(d) : true,\n ),\n pay_deadline: yup\n .date()\n .test(\"future\", \"should be in the future\", (d) =>\n d ? isFuture(d) : true,\n ),\n auto_refund_deadline: yup\n .date()\n .test(\"future\", \"should be in the future\", (d) =>\n d ? isFuture(d) : true,\n ),\n delivery_date: yup\n .date()\n .test(\"future\", \"should be in the future\", (d) =>\n d ? isFuture(d) : true,\n ),\n })\n .test(\"payment\", \"dates\", (d) => {\n if (\n d.pay_deadline &&\n d.refund_deadline &&\n isAfter(d.refund_deadline, d.pay_deadline)\n ) {\n return new yup.ValidationError(\n \"pay deadline should be greater than refund\",\n \"asd\",\n \"payments.pay_deadline\",\n );\n }\n return true;\n }),\n});\n\nexport const ProductCreateSchema = yup.object().shape({\n product_id: yup.string().ensure().required(),\n description: yup.string().required(),\n unit: yup.string().ensure().required(),\n price: yup\n .string()\n .required()\n .test(\"amount\", \"the amount is not valid\", currencyWithAmountIsValid),\n stock: yup.object({}).optional(),\n minimum_age: yup.number().optional().min(0),\n});\n\nexport const ProductUpdateSchema = yup.object().shape({\n description: yup.string().required(),\n price: yup\n .string()\n .required()\n .test(\"amount\", \"the amount is not valid\", currencyWithAmountIsValid),\n stock: yup.object({}).optional(),\n minimum_age: yup.number().optional().min(0),\n});\n\nexport const TaxSchema = yup.object().shape({\n name: yup.string().required().ensure(),\n tax: yup\n .string()\n .required()\n .test(\"amount\", \"the amount is not valid\", currencyWithAmountIsValid),\n});\n\nexport const NonInventoryProductSchema = yup.object().shape({\n quantity: yup.number().required().positive(),\n description: yup.string().required(),\n unit: yup.string().ensure().required(),\n price: yup\n .string()\n .required()\n .test(\"amount\", \"the amount is not valid\", currencyWithAmountIsValid),\n});\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { useCallback, useState } from \"preact/hooks\";\nimport * as yup from \"yup\";\nimport { MerchantBackend } from \"../../declaration.js\";\nimport { TaxSchema as schema } from \"../../schemas/index.js\";\nimport { FormErrors, FormProvider } from \"./FormProvider.js\";\nimport { Input } from \"./Input.js\";\nimport { InputGroup } from \"./InputGroup.js\";\nimport { InputProps, useField } from \"./useField.js\";\n\nexport interface Props<T> extends InputProps<T> {\n isValid?: (e: any) => boolean;\n}\n\ntype Entity = MerchantBackend.Tax;\nexport function InputTaxes<T>({\n name,\n readonly,\n label,\n}: Props<keyof T>): VNode {\n const { value: taxes, onChange } = useField<T>(name);\n\n const [value, valueHandler] = useState<Partial<Entity>>({});\n // const [errors, setErrors] = useState<FormErrors<Entity>>({})\n\n let errors: FormErrors<Entity> = {};\n\n try {\n schema.validateSync(value, { abortEarly: false });\n } catch (err) {\n if (err instanceof yup.ValidationError) {\n const yupErrors = err.inner as yup.ValidationError[];\n errors = yupErrors.reduce(\n (prev, cur) =>\n !cur.path ? prev : { ...prev, [cur.path]: cur.message },\n {},\n );\n }\n }\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n\n const submit = useCallback((): void => {\n onChange([value as any, ...taxes] as any);\n valueHandler({});\n }, [value]);\n\n const { i18n } = useTranslationContext();\n\n //FIXME: translating plural singular\n return (\n <InputGroup\n name=\"tax\"\n label={label}\n alternative={\n taxes.length > 0 && (\n <p>This product has {taxes.length} applicable taxes configured.</p>\n )\n }\n >\n <FormProvider<Entity>\n name=\"tax\"\n errors={errors}\n object={value}\n valueHandler={valueHandler}\n >\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\" />\n <div class=\"field-body\" style={{ display: \"block\" }}>\n {taxes.map((v: any, i: number) => (\n <div\n key={i}\n class=\"tags has-addons mt-3 mb-0 mr-3\"\n style={{ flexWrap: \"nowrap\" }}\n >\n <span\n class=\"tag is-medium is-info mb-0\"\n style={{ maxWidth: \"90%\" }}\n >\n <b>{v.tax}</b>: {v.name}\n </span>\n <a\n class=\"tag is-medium is-danger is-delete mb-0\"\n onClick={() => {\n onChange(taxes.filter((f: any) => f !== v) as any);\n valueHandler(v);\n }}\n />\n </div>\n ))}\n {!taxes.length && i18n.str`No taxes configured for this product.`}\n </div>\n </div>\n\n <Input<Entity>\n name=\"tax\"\n label={i18n.str`Amount`}\n tooltip={i18n.str`Taxes can be in currencies that differ from the main currency used by the merchant.`}\n >\n <i18n.Translate>\n Enter currency and value separated with a colon, e.g.\n &quot;USD:2.3&quot;.\n </i18n.Translate>\n </Input>\n\n <Input<Entity>\n name=\"name\"\n label={i18n.str`Description`}\n tooltip={i18n.str`Legal name of the tax, e.g. VAT or import duties.`}\n />\n\n <div class=\"buttons is-right mt-5\">\n <button\n class=\"button is-info\"\n data-tooltip={i18n.str`add tax to the tax list`}\n disabled={hasErrors}\n onClick={submit}\n >\n <i18n.Translate>Add</i18n.Translate>\n </button>\n </div>\n </FormProvider>\n </InputGroup>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useCallback, useEffect, useState } from \"preact/hooks\";\nimport * as yup from \"yup\";\nimport { MerchantBackend } from \"../../declaration.js\";\nimport { useListener } from \"../../hooks/listener.js\";\nimport { NonInventoryProductSchema as schema } from \"../../schemas/index.js\";\nimport { FormErrors, FormProvider } from \"../form/FormProvider.js\";\nimport { Input } from \"../form/Input.js\";\nimport { InputCurrency } from \"../form/InputCurrency.js\";\nimport { InputImage } from \"../form/InputImage.js\";\nimport { InputNumber } from \"../form/InputNumber.js\";\nimport { InputTaxes } from \"../form/InputTaxes.js\";\n\ntype Entity = MerchantBackend.Product;\n\ninterface Props {\n onAddProduct: (p: Entity) => Promise<void>;\n productToEdit?: Entity;\n}\nexport function NonInventoryProductFrom({\n productToEdit,\n onAddProduct,\n}: Props): VNode {\n const [showCreateProduct, setShowCreateProduct] = useState(false);\n\n const isEditing = !!productToEdit;\n\n useEffect(() => {\n setShowCreateProduct(isEditing);\n }, [isEditing]);\n\n const [submitForm, addFormSubmitter] = useListener<\n Partial<MerchantBackend.Product> | undefined\n >((result) => {\n if (result) {\n setShowCreateProduct(false);\n return onAddProduct({\n quantity: result.quantity || 0,\n taxes: result.taxes || [],\n description: result.description || \"\",\n image: result.image || \"\",\n price: result.price || \"\",\n unit: result.unit || \"\",\n });\n }\n return Promise.resolve();\n });\n\n const { i18n } = useTranslationContext();\n\n return (\n <Fragment>\n <div class=\"buttons\">\n <button\n class=\"button is-success\"\n data-tooltip={i18n.str`describe and add a product that is not in the inventory list`}\n onClick={() => setShowCreateProduct(true)}\n >\n <i18n.Translate>Add custom product</i18n.Translate>\n </button>\n </div>\n {showCreateProduct && (\n <div class=\"modal is-active\">\n <div\n class=\"modal-background \"\n onClick={() => setShowCreateProduct(false)}\n />\n <div class=\"modal-card\">\n <header class=\"modal-card-head\">\n <p class=\"modal-card-title\">{i18n.str`Complete information of the product`}</p>\n <button\n class=\"delete \"\n aria-label=\"close\"\n onClick={() => setShowCreateProduct(false)}\n />\n </header>\n <section class=\"modal-card-body\">\n <ProductForm\n initial={productToEdit}\n onSubscribe={addFormSubmitter}\n />\n </section>\n <footer class=\"modal-card-foot\">\n <div class=\"buttons is-right\" style={{ width: \"100%\" }}>\n <button\n class=\"button \"\n onClick={() => setShowCreateProduct(false)}\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n <button\n class=\"button is-info \"\n disabled={!submitForm}\n onClick={submitForm}\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </button>\n </div>\n </footer>\n </div>\n <button\n class=\"modal-close is-large \"\n aria-label=\"close\"\n onClick={() => setShowCreateProduct(false)}\n />\n </div>\n )}\n </Fragment>\n );\n}\n\ninterface ProductProps {\n onSubscribe: (c?: () => Entity | undefined) => void;\n initial?: Partial<Entity>;\n}\n\ninterface NonInventoryProduct {\n quantity: number;\n description: string;\n unit: string;\n price: string;\n image: string;\n taxes: MerchantBackend.Tax[];\n}\n\nexport function ProductForm({ onSubscribe, initial }: ProductProps): VNode {\n const [value, valueHandler] = useState<Partial<NonInventoryProduct>>({\n taxes: [],\n ...initial,\n });\n let errors: FormErrors<Entity> = {};\n try {\n schema.validateSync(value, { abortEarly: false });\n } catch (err) {\n if (err instanceof yup.ValidationError) {\n const yupErrors = err.inner as yup.ValidationError[];\n errors = yupErrors.reduce(\n (prev, cur) =>\n !cur.path ? prev : { ...prev, [cur.path]: cur.message },\n {},\n );\n }\n }\n\n const submit = useCallback((): Entity | undefined => {\n return value as MerchantBackend.Product;\n }, [value]);\n\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n\n useEffect(() => {\n onSubscribe(hasErrors ? undefined : submit);\n }, [submit, hasErrors]);\n\n const { i18n } = useTranslationContext();\n\n return (\n <div>\n <FormProvider<NonInventoryProduct>\n name=\"product\"\n errors={errors}\n object={value}\n valueHandler={valueHandler}\n >\n <InputImage<NonInventoryProduct>\n name=\"image\"\n label={i18n.str`Image`}\n tooltip={i18n.str`photo of the product`}\n />\n <Input<NonInventoryProduct>\n name=\"description\"\n inputType=\"multiline\"\n label={i18n.str`Description`}\n tooltip={i18n.str`full product description`}\n />\n <Input<NonInventoryProduct>\n name=\"unit\"\n label={i18n.str`Unit`}\n tooltip={i18n.str`name of the product unit`}\n />\n <InputCurrency<NonInventoryProduct>\n name=\"price\"\n label={i18n.str`Price`}\n tooltip={i18n.str`amount in the current currency`}\n />\n\n <InputNumber<NonInventoryProduct>\n name=\"quantity\"\n label={i18n.str`Quantity`}\n tooltip={i18n.str`how many products will be added`}\n />\n\n <InputTaxes<NonInventoryProduct> name=\"taxes\" label={i18n.str`Taxes`} />\n </FormProvider>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\nimport { Amounts } from \"@gnu-taler/taler-util\";\nimport { h, VNode } from \"preact\";\nimport emptyImage from \"../../assets/empty.png\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { MerchantBackend } from \"../../declaration.js\";\n\ninterface Props {\n list: MerchantBackend.Product[];\n actions?: {\n name: string;\n tooltip: string;\n handler: (d: MerchantBackend.Product, index: number) => void;\n }[];\n}\nexport function ProductList({ list, actions = [] }: Props): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"table-container\">\n <table class=\"table is-fullwidth is-striped is-hoverable is-fullwidth\">\n <thead>\n <tr>\n <th>\n <i18n.Translate>image</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>description</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>quantity</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>unit price</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>total price</i18n.Translate>\n </th>\n <th />\n </tr>\n </thead>\n <tbody>\n {list.map((entry, index) => {\n const unitPrice = !entry.price ? \"0\" : entry.price;\n const totalPrice = !entry.price\n ? \"0\"\n : Amounts.stringify(\n Amounts.mult(\n Amounts.parseOrThrow(entry.price),\n entry.quantity,\n ).amount,\n );\n\n return (\n <tr key={index}>\n <td>\n <img\n style={{ height: 32, width: 32 }}\n src={entry.image ? entry.image : emptyImage}\n />\n </td>\n <td>{entry.description}</td>\n <td>\n {entry.quantity === 0\n ? \"--\"\n : `${entry.quantity} ${entry.unit}`}\n </td>\n <td>{unitPrice}</td>\n <td>{totalPrice}</td>\n <td class=\"is-actions-cell right-sticky\">\n {actions.map((a, i) => {\n return (\n <div key={i} class=\"buttons is-right\">\n <button\n class=\"button is-small is-danger has-tooltip-left\"\n data-tooltip={a.tooltip}\n type=\"button\"\n onClick={() => a.handler(entry, index)}\n >\n {a.name}\n </button>\n </div>\n );\n })}\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\nimport {\n amountFractionalBase,\n AmountJson,\n Amounts,\n} from \"@gnu-taler/taler-util\";\nimport { MerchantBackend } from \"../declaration.js\";\n\n/**\n * merge refund with the same description and a difference less than one minute\n * @param prev list of refunds that will hold the merged refunds\n * @param cur new refund to add to the list\n * @returns list with the new refund, may be merged with the last\n */\nexport function mergeRefunds(\n prev: MerchantBackend.Orders.RefundDetails[],\n cur: MerchantBackend.Orders.RefundDetails,\n): MerchantBackend.Orders.RefundDetails[] {\n let tail;\n\n if (\n prev.length === 0 || //empty list\n cur.timestamp.t_s === \"never\" || //current does not have timestamp\n (tail = prev[prev.length - 1]).timestamp.t_s === \"never\" || // last does not have timestamp\n cur.reason !== tail.reason || //different reason\n cur.pending !== tail.pending || //different pending state\n Math.abs(cur.timestamp.t_s - tail.timestamp.t_s) > 1000 * 60\n ) {\n //more than 1 minute difference\n\n //can't merge refunds, they are different or to distant in time\n prev.push(cur);\n return prev;\n }\n\n const a = Amounts.parseOrThrow(tail.amount);\n const b = Amounts.parseOrThrow(cur.amount);\n const r = Amounts.add(a, b).amount;\n\n prev[prev.length - 1] = {\n ...tail,\n amount: Amounts.stringify(r),\n };\n\n return prev;\n}\n\nexport const rate = (one: string, two: string): number => {\n const a = Amounts.parseOrThrow(one);\n const b = Amounts.parseOrThrow(two);\n const af = toFloat(a);\n const bf = toFloat(b);\n if (bf === 0) return 0;\n return af / bf;\n};\n\nfunction toFloat(amount: AmountJson): number {\n return amount.value + amount.fraction / amountFractionalBase;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { Amounts } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { add, isAfter, isBefore, isFuture } from \"date-fns\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport {\n FormErrors,\n FormProvider,\n} from \"../../../../components/form/FormProvider.js\";\nimport { Input } from \"../../../../components/form/Input.js\";\nimport { InputBoolean } from \"../../../../components/form/InputBoolean.js\";\nimport { InputCurrency } from \"../../../../components/form/InputCurrency.js\";\nimport { InputDate } from \"../../../../components/form/InputDate.js\";\nimport { InputGroup } from \"../../../../components/form/InputGroup.js\";\nimport { InputLocation } from \"../../../../components/form/InputLocation.js\";\nimport { InputNumber } from \"../../../../components/form/InputNumber.js\";\nimport { InventoryProductForm } from \"../../../../components/product/InventoryProductForm.js\";\nimport { NonInventoryProductFrom } from \"../../../../components/product/NonInventoryProductForm.js\";\nimport { ProductList } from \"../../../../components/product/ProductList.js\";\nimport { useConfigContext } from \"../../../../context/config.js\";\nimport { Duration, MerchantBackend, WithId } from \"../../../../declaration.js\";\nimport { OrderCreateSchema as schema } from \"../../../../schemas/index.js\";\nimport { rate } from \"../../../../utils/amount.js\";\nimport { undefinedIfEmpty } from \"../../../../utils/table.js\";\n\ninterface Props {\n onCreate: (d: MerchantBackend.Orders.PostOrderRequest) => void;\n onBack?: () => void;\n instanceConfig: InstanceConfig;\n instanceInventory: (MerchantBackend.Products.ProductDetail & WithId)[];\n}\ninterface InstanceConfig {\n default_max_wire_fee: string;\n default_max_deposit_fee: string;\n default_wire_fee_amortization: number;\n default_pay_delay: Duration;\n}\n\nfunction with_defaults(config: InstanceConfig): Partial<Entity> {\n const defaultPayDeadline =\n !config.default_pay_delay || config.default_pay_delay.d_us === \"forever\"\n ? undefined\n : add(new Date(), {\n seconds: config.default_pay_delay.d_us / (1000 * 1000),\n });\n\n return {\n inventoryProducts: {},\n products: [],\n pricing: {},\n payments: {\n max_wire_fee: config.default_max_wire_fee,\n max_fee: config.default_max_deposit_fee,\n wire_fee_amortization: config.default_wire_fee_amortization,\n pay_deadline: defaultPayDeadline,\n refund_deadline: defaultPayDeadline,\n createToken: true,\n },\n shipping: {},\n extra: \"\",\n };\n}\n\ninterface ProductAndQuantity {\n product: MerchantBackend.Products.ProductDetail & WithId;\n quantity: number;\n}\nexport interface ProductMap {\n [id: string]: ProductAndQuantity;\n}\n\ninterface Pricing {\n products_price: string;\n order_price: string;\n summary: string;\n}\ninterface Shipping {\n delivery_date?: Date;\n delivery_location?: MerchantBackend.Location;\n fullfilment_url?: string;\n}\ninterface Payments {\n refund_deadline?: Date;\n pay_deadline?: Date;\n wire_transfer_deadline?: Date;\n auto_refund_deadline?: Date;\n max_fee?: string;\n max_wire_fee?: string;\n wire_fee_amortization?: number;\n createToken: boolean;\n minimum_age?: number;\n}\ninterface Entity {\n inventoryProducts: ProductMap;\n products: MerchantBackend.Product[];\n pricing: Partial<Pricing>;\n payments: Partial<Payments>;\n shipping: Partial<Shipping>;\n extra: string;\n}\n\nconst stringIsValidJSON = (value: string) => {\n try {\n JSON.parse(value.trim());\n return true;\n } catch {\n return false;\n }\n};\n\nexport function CreatePage({\n onCreate,\n onBack,\n instanceConfig,\n instanceInventory,\n}: Props): VNode {\n const [value, valueHandler] = useState(with_defaults(instanceConfig));\n const config = useConfigContext();\n const zero = Amounts.zeroOfCurrency(config.currency);\n\n const inventoryList = Object.values(value.inventoryProducts || {});\n const productList = Object.values(value.products || {});\n\n const { i18n } = useTranslationContext();\n\n const errors: FormErrors<Entity> = {\n pricing: undefinedIfEmpty({\n summary: !value.pricing?.summary ? i18n.str`required` : undefined,\n order_price: !value.pricing?.order_price\n ? i18n.str`required`\n : Amounts.isZero(value.pricing.order_price)\n ? i18n.str`must be greater than 0`\n : undefined,\n }),\n extra:\n value.extra && !stringIsValidJSON(value.extra)\n ? i18n.str`not a valid json`\n : undefined,\n payments: undefinedIfEmpty({\n refund_deadline: !value.payments?.refund_deadline\n ? undefined\n : !isFuture(value.payments.refund_deadline)\n ? i18n.str`should be in the future`\n : value.payments.pay_deadline &&\n isBefore(value.payments.refund_deadline, value.payments.pay_deadline)\n ? i18n.str`refund deadline cannot be before pay deadline`\n : value.payments.wire_transfer_deadline &&\n isBefore(\n value.payments.wire_transfer_deadline,\n value.payments.refund_deadline,\n )\n ? i18n.str`wire transfer deadline cannot be before refund deadline`\n : undefined,\n pay_deadline: !value.payments?.pay_deadline\n ? undefined\n : !isFuture(value.payments.pay_deadline)\n ? i18n.str`should be in the future`\n : value.payments.wire_transfer_deadline &&\n isBefore(\n value.payments.wire_transfer_deadline,\n value.payments.pay_deadline,\n )\n ? i18n.str`wire transfer deadline cannot be before pay deadline`\n : undefined,\n auto_refund_deadline: !value.payments?.auto_refund_deadline\n ? undefined\n : !isFuture(value.payments.auto_refund_deadline)\n ? i18n.str`should be in the future`\n : !value.payments?.refund_deadline\n ? i18n.str`should have a refund deadline`\n : !isAfter(\n value.payments.refund_deadline,\n value.payments.auto_refund_deadline,\n )\n ? i18n.str`auto refund cannot be after refund deadline`\n : undefined,\n }),\n shipping: undefinedIfEmpty({\n delivery_date: !value.shipping?.delivery_date\n ? undefined\n : !isFuture(value.shipping.delivery_date)\n ? i18n.str`should be in the future`\n : undefined,\n }),\n };\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n\n const submit = (): void => {\n const order = schema.cast(value);\n if (!value.payments) return;\n if (!value.shipping) return;\n\n const request: MerchantBackend.Orders.PostOrderRequest = {\n order: {\n amount: order.pricing.order_price,\n summary: order.pricing.summary,\n products: productList,\n extra: value.extra,\n pay_deadline: value.payments.pay_deadline\n ? {\n t_s: Math.floor(value.payments.pay_deadline.getTime() / 1000),\n }\n : undefined,\n wire_transfer_deadline: value.payments.wire_transfer_deadline\n ? {\n t_s: Math.floor(\n value.payments.wire_transfer_deadline.getTime() / 1000,\n ),\n }\n : undefined,\n refund_deadline: value.payments.refund_deadline\n ? {\n t_s: Math.floor(value.payments.refund_deadline.getTime() / 1000),\n }\n : undefined,\n auto_refund: value.payments.auto_refund_deadline\n ? {\n d_us: Math.floor(\n value.payments.auto_refund_deadline.getTime() * 1000,\n ),\n }\n : undefined,\n wire_fee_amortization: value.payments.wire_fee_amortization as number,\n max_fee: value.payments.max_fee as string,\n max_wire_fee: value.payments.max_wire_fee as string,\n\n delivery_date: value.shipping.delivery_date\n ? { t_s: value.shipping.delivery_date.getTime() / 1000 }\n : undefined,\n delivery_location: value.shipping.delivery_location,\n fulfillment_url: value.shipping.fullfilment_url,\n minimum_age: value.payments.minimum_age,\n },\n inventory_products: inventoryList.map((p) => ({\n product_id: p.product.id,\n quantity: p.quantity,\n })),\n create_token: value.payments.createToken,\n };\n\n onCreate(request);\n };\n\n const addProductToTheInventoryList = (\n product: MerchantBackend.Products.ProductDetail & WithId,\n quantity: number,\n ) => {\n valueHandler((v) => {\n const inventoryProducts = { ...v.inventoryProducts };\n inventoryProducts[product.id] = { product, quantity };\n return { ...v, inventoryProducts };\n });\n };\n\n const removeProductFromTheInventoryList = (id: string) => {\n valueHandler((v) => {\n const inventoryProducts = { ...v.inventoryProducts };\n delete inventoryProducts[id];\n return { ...v, inventoryProducts };\n });\n };\n\n const addNewProduct = async (product: MerchantBackend.Product) => {\n return valueHandler((v) => {\n const products = v.products ? [...v.products, product] : [];\n return { ...v, products };\n });\n };\n\n const removeFromNewProduct = (index: number) => {\n valueHandler((v) => {\n const products = v.products ? [...v.products] : [];\n products.splice(index, 1);\n return { ...v, products };\n });\n };\n\n const [editingProduct, setEditingProduct] = useState<\n MerchantBackend.Product | undefined\n >(undefined);\n\n const totalPriceInventory = inventoryList.reduce((prev, cur) => {\n const p = Amounts.parseOrThrow(cur.product.price);\n return Amounts.add(prev, Amounts.mult(p, cur.quantity).amount).amount;\n }, zero);\n\n const totalPriceProducts = productList.reduce((prev, cur) => {\n if (!cur.price) return zero;\n const p = Amounts.parseOrThrow(cur.price);\n return Amounts.add(prev, Amounts.mult(p, cur.quantity).amount).amount;\n }, zero);\n\n const hasProducts = inventoryList.length > 0 || productList.length > 0;\n const totalPrice = Amounts.add(totalPriceInventory, totalPriceProducts);\n\n const totalAsString = Amounts.stringify(totalPrice.amount);\n const allProducts = productList.concat(inventoryList.map(asProduct));\n\n useEffect(() => {\n valueHandler((v) => {\n return {\n ...v,\n pricing: {\n ...v.pricing,\n products_price: hasProducts ? totalAsString : undefined,\n order_price: hasProducts ? totalAsString : undefined,\n },\n };\n });\n }, [hasProducts, totalAsString]);\n\n const discountOrRise = rate(\n value.pricing?.order_price || `${config.currency}:0`,\n totalAsString,\n );\n\n const minAgeByProducts = allProducts.reduce(\n (cur, prev) =>\n !prev.minimum_age || cur > prev.minimum_age ? cur : prev.minimum_age,\n 0,\n );\n return (\n <div>\n <section class=\"section is-main-section\">\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-four-fifths\">\n {/* // FIXME: translating plural singular */}\n <InputGroup\n name=\"inventory_products\"\n label={i18n.str`Manage products in order`}\n alternative={\n allProducts.length > 0 && (\n <p>\n {allProducts.length} products with a total price of{\" \"}\n {totalAsString}.\n </p>\n )\n }\n tooltip={i18n.str`Manage list of products in the order.`}\n >\n <InventoryProductForm\n currentProducts={value.inventoryProducts || {}}\n onAddProduct={addProductToTheInventoryList}\n inventory={instanceInventory}\n />\n\n <NonInventoryProductFrom\n productToEdit={editingProduct}\n onAddProduct={(p) => {\n setEditingProduct(undefined);\n return addNewProduct(p);\n }}\n />\n\n {allProducts.length > 0 && (\n <ProductList\n list={allProducts}\n actions={[\n {\n name: i18n.str`Remove`,\n tooltip: i18n.str`Remove this product from the order.`,\n handler: (e, index) => {\n if (e.product_id) {\n removeProductFromTheInventoryList(e.product_id);\n } else {\n removeFromNewProduct(index);\n setEditingProduct(e);\n }\n },\n },\n ]}\n />\n )}\n </InputGroup>\n\n <FormProvider<Entity>\n errors={errors}\n object={value}\n valueHandler={valueHandler as any}\n >\n {hasProducts ? (\n <Fragment>\n <InputCurrency\n name=\"pricing.products_price\"\n label={i18n.str`Total price`}\n readonly\n tooltip={i18n.str`total product price added up`}\n />\n <InputCurrency\n name=\"pricing.order_price\"\n label={i18n.str`Total price`}\n addonAfter={\n discountOrRise > 0 &&\n (discountOrRise < 1\n ? `discount of %${Math.round(\n (1 - discountOrRise) * 100,\n )}`\n : `rise of %${Math.round((discountOrRise - 1) * 100)}`)\n }\n tooltip={i18n.str`Amount to be paid by the customer`}\n />\n </Fragment>\n ) : (\n <InputCurrency\n name=\"pricing.order_price\"\n label={i18n.str`Order price`}\n tooltip={i18n.str`final order price`}\n />\n )}\n\n <Input\n name=\"pricing.summary\"\n inputType=\"multiline\"\n label={i18n.str`Summary`}\n tooltip={i18n.str`Title of the order to be shown to the customer`}\n />\n\n <InputGroup\n name=\"shipping\"\n label={i18n.str`Shipping and Fulfillment`}\n initialActive\n >\n <InputDate\n name=\"shipping.delivery_date\"\n label={i18n.str`Delivery date`}\n tooltip={i18n.str`Deadline for physical delivery assured by the merchant.`}\n />\n {value.shipping?.delivery_date && (\n <InputGroup\n name=\"shipping.delivery_location\"\n label={i18n.str`Location`}\n tooltip={i18n.str`address where the products will be delivered`}\n >\n <InputLocation name=\"shipping.delivery_location\" />\n </InputGroup>\n )}\n <Input\n name=\"shipping.fullfilment_url\"\n label={i18n.str`Fulfillment URL`}\n tooltip={i18n.str`URL to which the user will be redirected after successful payment.`}\n />\n </InputGroup>\n\n <InputGroup\n name=\"payments\"\n label={i18n.str`Taler payment options`}\n tooltip={i18n.str`Override default Taler payment settings for this order`}\n >\n <InputDate\n name=\"payments.pay_deadline\"\n label={i18n.str`Payment deadline`}\n tooltip={i18n.str`Deadline for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline.`}\n />\n <InputDate\n name=\"payments.refund_deadline\"\n label={i18n.str`Refund deadline`}\n tooltip={i18n.str`Time until which the order can be refunded by the merchant.`}\n />\n <InputDate\n name=\"payments.wire_transfer_deadline\"\n label={i18n.str`Wire transfer deadline`}\n tooltip={i18n.str`Deadline for the exchange to make the wire transfer.`}\n />\n <InputDate\n name=\"payments.auto_refund_deadline\"\n label={i18n.str`Auto-refund deadline`}\n tooltip={i18n.str`Time until which the wallet will automatically check for refunds without user interaction.`}\n />\n\n <InputCurrency\n name=\"payments.max_fee\"\n label={i18n.str`Maximum deposit fee`}\n tooltip={i18n.str`Maximum deposit fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.`}\n />\n <InputCurrency\n name=\"payments.max_wire_fee\"\n label={i18n.str`Maximum wire fee`}\n tooltip={i18n.str`Maximum aggregate wire fees the merchant is willing to cover for this order. Wire fees exceeding this amount are to be covered by the customers.`}\n />\n <InputNumber\n name=\"payments.wire_fee_amortization\"\n label={i18n.str`Wire fee amortization`}\n tooltip={i18n.str`Factor by which wire fees exceeding the above threshold are divided to determine the share of excess wire fees to be paid explicitly by the consumer.`}\n />\n <InputBoolean\n name=\"payments.createToken\"\n label={i18n.str`Create token`}\n tooltip={i18n.str`Uncheck this option if the merchant backend generated an order ID with enough entropy to prevent adversarial claims.`}\n />\n <InputNumber\n name=\"payments.minimum_age\"\n label={i18n.str`Minimum age required`}\n tooltip={i18n.str`Any value greater than 0 will limit the coins able be used to pay this contract. If empty the age restriction will be defined by the products`}\n help={\n minAgeByProducts > 0\n ? i18n.str`Min age defined by the producs is ${minAgeByProducts}`\n : undefined\n }\n />\n </InputGroup>\n\n <InputGroup\n name=\"extra\"\n label={i18n.str`Additional information`}\n tooltip={i18n.str`Custom information to be included in the contract for this order.`}\n >\n <Input\n name=\"extra\"\n inputType=\"multiline\"\n label={`Value`}\n tooltip={i18n.str`You must enter a value in JavaScript Object Notation (JSON).`}\n />\n </InputGroup>\n </FormProvider>\n\n <div class=\"buttons is-right mt-5\">\n {onBack && (\n <button class=\"button\" onClick={onBack}>\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n )}\n <button\n class=\"button is-success\"\n onClick={submit}\n disabled={hasErrors}\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </button>\n </div>\n </div>\n <div class=\"column\" />\n </div>\n </section>\n </div>\n );\n}\n\nfunction asProduct(p: ProductAndQuantity): MerchantBackend.Product {\n return {\n product_id: p.product.id,\n image: p.product.image,\n price: p.product.price,\n unit: p.product.unit,\n quantity: p.quantity,\n description: p.product.description,\n taxes: p.product.taxes,\n minimum_age: p.product.minimum_age,\n };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { HttpError } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport { useInstanceDetails } from \"../../../../hooks/instance.js\";\nimport { useOrderAPI } from \"../../../../hooks/order.js\";\nimport { useInstanceProducts } from \"../../../../hooks/product.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { CreatePage } from \"./CreatePage.js\";\n\nexport type Entity = {\n request: MerchantBackend.Orders.PostOrderRequest;\n response: MerchantBackend.Orders.PostOrderResponse;\n};\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n onUnauthorized: () => VNode;\n onNotFound: () => VNode;\n onLoadError: (error: HttpError<MerchantBackend.ErrorDetail>) => VNode;\n}\nexport default function OrderCreate({\n onConfirm,\n onBack,\n onLoadError,\n onNotFound,\n onUnauthorized,\n}: Props): VNode {\n const { createOrder } = useOrderAPI();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n\n const detailsResult = useInstanceDetails();\n const inventoryResult = useInstanceProducts();\n\n if (detailsResult.clientError && detailsResult.isUnauthorized)\n return onUnauthorized();\n if (detailsResult.clientError && detailsResult.isNotfound)\n return onNotFound();\n if (detailsResult.loading) return <Loading />;\n if (!detailsResult.ok) return onLoadError(detailsResult);\n\n if (inventoryResult.clientError && inventoryResult.isUnauthorized)\n return onUnauthorized();\n if (inventoryResult.clientError && inventoryResult.isNotfound)\n return onNotFound();\n if (inventoryResult.loading) return <Loading />;\n if (!inventoryResult.ok) return onLoadError(inventoryResult);\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n\n <CreatePage\n onBack={onBack}\n onCreate={(request: MerchantBackend.Orders.PostOrderRequest) => {\n createOrder(request)\n .then(onConfirm)\n .catch((error) => {\n setNotif({\n message: \"could not create order\",\n type: \"ERROR\",\n description: error.message,\n });\n });\n }}\n instanceConfig={detailsResult.data}\n instanceInventory={inventoryResult.data}\n />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { ComponentChildren, h, VNode } from \"preact\";\nimport { useField, InputProps } from \"./useField.js\";\n\ninterface Props<T> extends InputProps<T> {\n inputType?: \"text\" | \"number\" | \"multiline\" | \"password\";\n expand?: boolean;\n side?: ComponentChildren;\n children: ComponentChildren;\n}\n\nexport function TextField<T>({\n name,\n tooltip,\n label,\n expand,\n help,\n children,\n side,\n}: Props<keyof T>): VNode {\n const { error } = useField<T>(name);\n return (\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">\n {label}\n {tooltip && (\n <span class=\"icon has-tooltip-right\" data-tooltip={tooltip}>\n <i class=\"mdi mdi-information\" />\n </span>\n )}\n </label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n <p\n class={\n expand\n ? \"control is-expanded has-icons-right\"\n : \"control has-icons-right\"\n }\n >\n {children}\n {help}\n </p>\n {error && <p class=\"help is-danger\">{error}</p>}\n </div>\n {side}\n </div>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { Amounts } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { format } from \"date-fns\";\nimport { h, VNode } from \"preact\";\nimport { StateUpdater, useState } from \"preact/hooks\";\nimport {\n FormErrors,\n FormProvider,\n} from \"../../../../components/form/FormProvider.js\";\nimport { Input } from \"../../../../components/form/Input.js\";\nimport { InputCurrency } from \"../../../../components/form/InputCurrency.js\";\nimport { InputGroup } from \"../../../../components/form/InputGroup.js\";\nimport { InputSelector } from \"../../../../components/form/InputSelector.js\";\nimport { ConfirmModal } from \"../../../../components/modal/index.js\";\nimport { useConfigContext } from \"../../../../context/config.js\";\nimport { MerchantBackend, WithId } from \"../../../../declaration.js\";\nimport { mergeRefunds } from \"../../../../utils/amount.js\";\n\ntype Entity = MerchantBackend.Orders.OrderHistoryEntry & WithId;\ninterface Props {\n orders: Entity[];\n onRefund: (value: Entity) => void;\n onCopyURL: (id: string) => void;\n onCreate: () => void;\n onSelect: (order: Entity) => void;\n onLoadMoreBefore?: () => void;\n hasMoreBefore?: boolean;\n hasMoreAfter?: boolean;\n onLoadMoreAfter?: () => void;\n}\n\nexport function CardTable({\n orders,\n onCreate,\n onRefund,\n onCopyURL,\n onSelect,\n onLoadMoreAfter,\n onLoadMoreBefore,\n hasMoreAfter,\n hasMoreBefore,\n}: Props): VNode {\n const [rowSelection, rowSelectionHandler] = useState<string[]>([]);\n\n const { i18n } = useTranslationContext();\n\n return (\n <div class=\"card has-table\">\n <header class=\"card-header\">\n <p class=\"card-header-title\">\n <span class=\"icon\">\n <i class=\"mdi mdi-cash-register\" />\n </span>\n <i18n.Translate>Orders</i18n.Translate>\n </p>\n\n <div class=\"card-header-icon\" aria-label=\"more options\" />\n\n <div class=\"card-header-icon\" aria-label=\"more options\">\n <span class=\"has-tooltip-left\" data-tooltip={i18n.str`create order`}>\n <button class=\"button is-info\" type=\"button\" onClick={onCreate}>\n <span class=\"icon is-small\">\n <i class=\"mdi mdi-plus mdi-36px\" />\n </span>\n </button>\n </span>\n </div>\n </header>\n <div class=\"card-content\">\n <div class=\"b-table has-pagination\">\n <div class=\"table-wrapper has-mobile-cards\">\n {orders.length > 0 ? (\n <Table\n instances={orders}\n onSelect={onSelect}\n onRefund={onRefund}\n onCopyURL={(o) => onCopyURL(o.id)}\n rowSelection={rowSelection}\n rowSelectionHandler={rowSelectionHandler}\n onLoadMoreAfter={onLoadMoreAfter}\n onLoadMoreBefore={onLoadMoreBefore}\n hasMoreAfter={hasMoreAfter}\n hasMoreBefore={hasMoreBefore}\n />\n ) : (\n <EmptyTable />\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\ninterface TableProps {\n rowSelection: string[];\n instances: Entity[];\n onRefund: (id: Entity) => void;\n onCopyURL: (id: Entity) => void;\n onSelect: (id: Entity) => void;\n rowSelectionHandler: StateUpdater<string[]>;\n onLoadMoreBefore?: () => void;\n hasMoreBefore?: boolean;\n hasMoreAfter?: boolean;\n onLoadMoreAfter?: () => void;\n}\n\nfunction Table({\n instances,\n onSelect,\n onRefund,\n onCopyURL,\n onLoadMoreAfter,\n onLoadMoreBefore,\n hasMoreAfter,\n hasMoreBefore,\n}: TableProps): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"table-container\">\n {onLoadMoreBefore && (\n <button\n class=\"button is-fullwidth\"\n disabled={!hasMoreBefore}\n onClick={onLoadMoreBefore}\n >\n <i18n.Translate>load newer orders</i18n.Translate>\n </button>\n )}\n <table class=\"table is-striped is-hoverable is-fullwidth\">\n <thead>\n <tr>\n <th style={{ minWidth: 100 }}>\n <i18n.Translate>Date</i18n.Translate>\n </th>\n <th style={{ minWidth: 100 }}>\n <i18n.Translate>Amount</i18n.Translate>\n </th>\n <th style={{ minWidth: 400 }}>\n <i18n.Translate>Summary</i18n.Translate>\n </th>\n <th style={{ minWidth: 50 }} />\n </tr>\n </thead>\n <tbody>\n {instances.map((i) => {\n return (\n <tr key={i.id}>\n <td\n onClick={(): void => onSelect(i)}\n style={{ cursor: \"pointer\" }}\n >\n {i.timestamp.t_s === \"never\"\n ? \"never\"\n : format(\n new Date(i.timestamp.t_s * 1000),\n \"yyyy/MM/dd HH:mm:ss\",\n )}\n </td>\n <td\n onClick={(): void => onSelect(i)}\n style={{ cursor: \"pointer\" }}\n >\n {i.amount}\n </td>\n <td\n onClick={(): void => onSelect(i)}\n style={{ cursor: \"pointer\" }}\n >\n {i.summary}\n </td>\n <td class=\"is-actions-cell right-sticky\">\n <div class=\"buttons is-right\">\n {i.refundable && (\n <button\n class=\"button is-small is-danger jb-modal\"\n type=\"button\"\n onClick={(): void => onRefund(i)}\n >\n <i18n.Translate>Refund</i18n.Translate>\n </button>\n )}\n {!i.paid && (\n <button\n class=\"button is-small is-info jb-modal\"\n type=\"button\"\n onClick={(): void => onCopyURL(i)}\n >\n <i18n.Translate>copy url</i18n.Translate>\n </button>\n )}\n </div>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n {onLoadMoreAfter && (\n <button\n class=\"button is-fullwidth\"\n disabled={!hasMoreAfter}\n onClick={onLoadMoreAfter}\n >\n <i18n.Translate>load older orders</i18n.Translate>\n </button>\n )}\n </div>\n );\n}\n\nfunction EmptyTable(): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"content has-text-grey has-text-centered\">\n <p>\n <span class=\"icon is-large\">\n <i class=\"mdi mdi-emoticon-sad mdi-48px\" />\n </span>\n </p>\n <p>\n <i18n.Translate>\n No orders have been found matching your query!\n </i18n.Translate>\n </p>\n </div>\n );\n}\n\ninterface RefundModalProps {\n onCancel: () => void;\n onConfirm: (value: MerchantBackend.Orders.RefundRequest) => void;\n order: MerchantBackend.Orders.MerchantOrderStatusResponse;\n}\n\nexport function RefundModal({\n order,\n onCancel,\n onConfirm,\n}: RefundModalProps): VNode {\n type State = { mainReason?: string; description?: string; refund?: string };\n const [form, setValue] = useState<State>({});\n const { i18n } = useTranslationContext();\n // const [errors, setErrors] = useState<FormErrors<State>>({});\n\n const refunds = (\n order.order_status === \"paid\" ? order.refund_details : []\n ).reduce(mergeRefunds, []);\n\n const config = useConfigContext();\n const totalRefunded = refunds\n .map((r) => r.amount)\n .reduce(\n (p, c) => Amounts.add(p, Amounts.parseOrThrow(c)).amount,\n Amounts.zeroOfCurrency(config.currency),\n );\n const orderPrice =\n order.order_status === \"paid\"\n ? Amounts.parseOrThrow(order.contract_terms.amount)\n : undefined;\n const totalRefundable = !orderPrice\n ? Amounts.zeroOfCurrency(totalRefunded.currency)\n : refunds.length\n ? Amounts.sub(orderPrice, totalRefunded).amount\n : orderPrice;\n\n const isRefundable = Amounts.isNonZero(totalRefundable);\n const duplicatedText = i18n.str`duplicated`;\n\n const errors: FormErrors<State> = {\n mainReason: !form.mainReason ? i18n.str`required` : undefined,\n description:\n !form.description && form.mainReason !== duplicatedText\n ? i18n.str`required`\n : undefined,\n refund: !form.refund\n ? i18n.str`required`\n : !Amounts.parse(form.refund)\n ? i18n.str`invalid format`\n : Amounts.cmp(totalRefundable, Amounts.parse(form.refund)!) === -1\n ? i18n.str`this value exceed the refundable amount`\n : undefined,\n };\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n\n const validateAndConfirm = () => {\n try {\n if (!form.refund) return;\n onConfirm({\n refund: Amounts.stringify(\n Amounts.add(Amounts.parse(form.refund)!, totalRefunded).amount,\n ),\n reason:\n form.description === undefined\n ? form.mainReason || \"\"\n : `${form.mainReason}: ${form.description}`,\n });\n } catch (err) {\n console.log(err);\n }\n };\n\n //FIXME: parameters in the translation\n return (\n <ConfirmModal\n description=\"refund\"\n danger\n active\n disabled={!isRefundable || hasErrors}\n onCancel={onCancel}\n onConfirm={validateAndConfirm}\n >\n {refunds.length > 0 && (\n <div class=\"columns\">\n <div class=\"column is-12\">\n <InputGroup\n name=\"asd\"\n label={`${Amounts.stringify(totalRefunded)} was already refunded`}\n >\n <table class=\"table is-fullwidth\">\n <thead>\n <tr>\n <th>\n <i18n.Translate>date</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>amount</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>reason</i18n.Translate>\n </th>\n </tr>\n </thead>\n <tbody>\n {refunds.map((r) => {\n return (\n <tr key={r.timestamp.t_s}>\n <td>\n {r.timestamp.t_s === \"never\"\n ? \"never\"\n : format(\n new Date(r.timestamp.t_s * 1000),\n \"yyyy-MM-dd HH:mm:ss\",\n )}\n </td>\n <td>{r.amount}</td>\n <td>{r.reason}</td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </InputGroup>\n </div>\n </div>\n )}\n\n {isRefundable && (\n <FormProvider<State>\n errors={errors}\n object={form}\n valueHandler={(d) => setValue(d as any)}\n >\n <InputCurrency<State>\n name=\"refund\"\n label={i18n.str`Refund`}\n tooltip={i18n.str`amount to be refunded`}\n >\n <i18n.Translate>Max refundable:</i18n.Translate>{\" \"}\n {Amounts.stringify(totalRefundable)}\n </InputCurrency>\n <InputSelector\n name=\"mainReason\"\n label={i18n.str`Reason`}\n values={[\n i18n.str`Choose one...`,\n duplicatedText,\n i18n.str`requested by the customer`,\n i18n.str`other`,\n ]}\n tooltip={i18n.str`why this order is being refunded`}\n />\n {form.mainReason && form.mainReason !== duplicatedText ? (\n <Input<State>\n label={i18n.str`Description`}\n name=\"description\"\n tooltip={i18n.str`more information to give context`}\n />\n ) : undefined}\n </FormProvider>\n )}\n </ConfirmModal>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\nimport { format } from \"date-fns\";\nimport { h } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\n\ninterface Props {\n events: Event[];\n}\n\nexport function Timeline({ events: e }: Props) {\n const events = [...e];\n events.push({\n when: new Date(),\n description: \"now\",\n type: \"now\",\n });\n\n events.sort((a, b) => a.when.getTime() - b.when.getTime());\n\n const [state, setState] = useState(events);\n useEffect(() => {\n const handle = setTimeout(() => {\n const eventsWithoutNow = state.filter((e) => e.type !== \"now\");\n eventsWithoutNow.push({\n when: new Date(),\n description: \"now\",\n type: \"now\",\n });\n setState(eventsWithoutNow);\n }, 1000);\n return () => {\n clearTimeout(handle);\n };\n });\n return (\n <div class=\"timeline\">\n {events.map((e, i) => {\n return (\n <div key={i} class=\"timeline-item\">\n {(() => {\n switch (e.type) {\n case \"deadline\":\n return (\n <div class=\"timeline-marker is-icon \">\n <i class=\"mdi mdi-flag\" />\n </div>\n );\n case \"delivery\":\n return (\n <div class=\"timeline-marker is-icon \">\n <i class=\"mdi mdi-delivery\" />\n </div>\n );\n case \"start\":\n return (\n <div class=\"timeline-marker is-icon is-success\">\n <i class=\"mdi mdi-flag \" />\n </div>\n );\n case \"wired\":\n return (\n <div class=\"timeline-marker is-icon is-success\">\n <i class=\"mdi mdi-cash\" />\n </div>\n );\n case \"wired-range\":\n return (\n <div class=\"timeline-marker is-icon is-success\">\n <i class=\"mdi mdi-cash\" />\n </div>\n );\n case \"refund\":\n return (\n <div class=\"timeline-marker is-icon is-danger\">\n <i class=\"mdi mdi-cash\" />\n </div>\n );\n case \"refund-taken\":\n return (\n <div class=\"timeline-marker is-icon is-success\">\n <i class=\"mdi mdi-cash\" />\n </div>\n );\n case \"now\":\n return (\n <div class=\"timeline-marker is-icon is-info\">\n <i class=\"mdi mdi-clock\" />\n </div>\n );\n }\n })()}\n <div class=\"timeline-content\">\n <p class=\"heading\">{format(e.when, \"yyyy/MM/dd HH:mm:ss\")}</p>\n <p>{e.description}</p>\n </div>\n </div>\n );\n })}\n </div>\n );\n}\nexport interface Event {\n when: Date;\n description: string;\n type:\n | \"start\"\n | \"refund\"\n | \"refund-taken\"\n | \"wired\"\n | \"wired-range\"\n | \"deadline\"\n | \"delivery\"\n | \"now\";\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { AmountJson, Amounts } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { format } from \"date-fns\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { FormProvider } from \"../../../../components/form/FormProvider.js\";\nimport { Input } from \"../../../../components/form/Input.js\";\nimport { InputCurrency } from \"../../../../components/form/InputCurrency.js\";\nimport { InputDate } from \"../../../../components/form/InputDate.js\";\nimport { InputDuration } from \"../../../../components/form/InputDuration.js\";\nimport { InputGroup } from \"../../../../components/form/InputGroup.js\";\nimport { InputLocation } from \"../../../../components/form/InputLocation.js\";\nimport { TextField } from \"../../../../components/form/TextField.js\";\nimport { ProductList } from \"../../../../components/product/ProductList.js\";\nimport { useBackendContext } from \"../../../../context/backend.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport { mergeRefunds } from \"../../../../utils/amount.js\";\nimport { RefundModal } from \"../list/Table.js\";\nimport { Event, Timeline } from \"./Timeline.js\";\n\ntype Entity = MerchantBackend.Orders.MerchantOrderStatusResponse;\ntype CT = MerchantBackend.ContractTerms;\n\ninterface Props {\n onBack: () => void;\n selected: Entity;\n id: string;\n onRefund: (id: string, value: MerchantBackend.Orders.RefundRequest) => void;\n}\n\ntype Paid = MerchantBackend.Orders.CheckPaymentPaidResponse & {\n refund_taken: string;\n};\ntype Unpaid = MerchantBackend.Orders.CheckPaymentUnpaidResponse;\ntype Claimed = MerchantBackend.Orders.CheckPaymentClaimedResponse;\n\nfunction ContractTerms({ value }: { value: CT }) {\n const { i18n } = useTranslationContext();\n\n return (\n <InputGroup name=\"contract_terms\" label={i18n.str`Contract Terms`}>\n <FormProvider<CT> object={value} valueHandler={null}>\n <Input<CT>\n readonly\n name=\"summary\"\n label={i18n.str`Summary`}\n tooltip={i18n.str`human-readable description of the whole purchase`}\n />\n <InputCurrency<CT>\n readonly\n name=\"amount\"\n label={i18n.str`Amount`}\n tooltip={i18n.str`total price for the transaction`}\n />\n {value.fulfillment_url && (\n <Input<CT>\n readonly\n name=\"fulfillment_url\"\n label={i18n.str`Fulfillment URL`}\n tooltip={i18n.str`URL for this purchase`}\n />\n )}\n <Input<CT>\n readonly\n name=\"max_fee\"\n label={i18n.str`Max fee`}\n tooltip={i18n.str`maximum total deposit fee accepted by the merchant for this contract`}\n />\n <Input<CT>\n readonly\n name=\"max_wire_fee\"\n label={i18n.str`Max wire fee`}\n tooltip={i18n.str`maximum wire fee accepted by the merchant`}\n />\n <Input<CT>\n readonly\n name=\"wire_fee_amortization\"\n label={i18n.str`Wire fee amortization`}\n tooltip={i18n.str`over how many customer transactions does the merchant expect to amortize wire fees on average`}\n />\n <InputDate<CT>\n readonly\n name=\"timestamp\"\n label={i18n.str`Created at`}\n tooltip={i18n.str`time when this contract was generated`}\n />\n <InputDate<CT>\n readonly\n name=\"refund_deadline\"\n label={i18n.str`Refund deadline`}\n tooltip={i18n.str`after this deadline has passed no refunds will be accepted`}\n />\n <InputDate<CT>\n readonly\n name=\"pay_deadline\"\n label={i18n.str`Payment deadline`}\n tooltip={i18n.str`after this deadline, the merchant won't accept payments for the contract`}\n />\n <InputDate<CT>\n readonly\n name=\"wire_transfer_deadline\"\n label={i18n.str`Wire transfer deadline`}\n tooltip={i18n.str`transfer deadline for the exchange`}\n />\n <InputDate<CT>\n readonly\n name=\"delivery_date\"\n label={i18n.str`Delivery date`}\n tooltip={i18n.str`time indicating when the order should be delivered`}\n />\n {value.delivery_date && (\n <InputGroup\n name=\"delivery_location\"\n label={i18n.str`Location`}\n tooltip={i18n.str`where the order will be delivered`}\n >\n <InputLocation name=\"payments.delivery_location\" />\n </InputGroup>\n )}\n <InputDuration<CT>\n readonly\n name=\"auto_refund\"\n label={i18n.str`Auto-refund delay`}\n tooltip={i18n.str`how long the wallet should try to get an automatic refund for the purchase`}\n />\n <Input<CT>\n readonly\n name=\"extra\"\n label={i18n.str`Extra info`}\n tooltip={i18n.str`extra data that is only interpreted by the merchant frontend`}\n />\n </FormProvider>\n </InputGroup>\n );\n}\n\nfunction ClaimedPage({\n id,\n order,\n}: {\n id: string;\n order: MerchantBackend.Orders.CheckPaymentClaimedResponse;\n}) {\n const events: Event[] = [];\n if (order.contract_terms.timestamp.t_s !== \"never\") {\n events.push({\n when: new Date(order.contract_terms.timestamp.t_s * 1000),\n description: \"order created\",\n type: \"start\",\n });\n }\n if (order.contract_terms.pay_deadline.t_s !== \"never\") {\n events.push({\n when: new Date(order.contract_terms.pay_deadline.t_s * 1000),\n description: \"pay deadline\",\n type: \"deadline\",\n });\n }\n if (order.contract_terms.refund_deadline.t_s !== \"never\") {\n events.push({\n when: new Date(order.contract_terms.refund_deadline.t_s * 1000),\n description: \"refund deadline\",\n type: \"deadline\",\n });\n }\n if (order.contract_terms.wire_transfer_deadline.t_s !== \"never\") {\n events.push({\n when: new Date(order.contract_terms.wire_transfer_deadline.t_s * 1000),\n description: \"wire deadline\",\n type: \"deadline\",\n });\n }\n if (\n order.contract_terms.delivery_date &&\n order.contract_terms.delivery_date.t_s !== \"never\"\n ) {\n events.push({\n when: new Date(order.contract_terms.delivery_date?.t_s * 1000),\n description: \"delivery\",\n type: \"delivery\",\n });\n }\n\n const [value, valueHandler] = useState<Partial<Claimed>>(order);\n const { i18n } = useTranslationContext();\n\n return (\n <div>\n <section class=\"section\">\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-10\">\n <section class=\"hero is-hero-bar\">\n <div class=\"hero-body\">\n <div class=\"level\">\n <div class=\"level-left\">\n <div class=\"level-item\">\n <i18n.Translate>Order</i18n.Translate> #{id}\n <div class=\"tag is-info ml-4\">\n <i18n.Translate>claimed</i18n.Translate>\n </div>\n </div>\n </div>\n </div>\n <div class=\"level\">\n <div class=\"level-left\">\n <div class=\"level-item\">\n <h1 class=\"title\">{order.contract_terms.amount}</h1>\n </div>\n </div>\n </div>\n\n <div class=\"level\">\n <div class=\"level-left\" style={{ maxWidth: \"100%\" }}>\n <div class=\"level-item\" style={{ maxWidth: \"100%\" }}>\n <div\n class=\"content\"\n style={{\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n }}\n >\n <p>\n <b>\n <i18n.Translate>claimed at</i18n.Translate>:\n </b>{\" \"}\n {format(\n new Date(order.contract_terms.timestamp.t_s * 1000),\n \"yyyy-MM-dd HH:mm:ss\",\n )}\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </section>\n\n <section class=\"section\">\n <div class=\"columns\">\n <div class=\"column is-4\">\n <div class=\"title\">\n <i18n.Translate>Timeline</i18n.Translate>\n </div>\n <Timeline events={events} />\n </div>\n <div class=\"column is-8\">\n <div class=\"title\">\n <i18n.Translate>Payment details</i18n.Translate>\n </div>\n <FormProvider<Claimed>\n object={value}\n valueHandler={valueHandler}\n >\n <Input\n name=\"contract_terms.summary\"\n readonly\n inputType=\"multiline\"\n label={i18n.str`Summary`}\n />\n <InputCurrency\n name=\"contract_terms.amount\"\n readonly\n label={i18n.str`Amount`}\n />\n <Input<Claimed>\n name=\"order_status\"\n readonly\n label={i18n.str`Order status`}\n />\n </FormProvider>\n </div>\n </div>\n </section>\n\n {order.contract_terms.products.length ? (\n <Fragment>\n <div class=\"title\">\n <i18n.Translate>Product list</i18n.Translate>\n </div>\n <ProductList list={order.contract_terms.products} />\n </Fragment>\n ) : undefined}\n\n {value.contract_terms && (\n <ContractTerms value={value.contract_terms} />\n )}\n </div>\n <div class=\"column\" />\n </div>\n </section>\n </div>\n );\n}\nfunction PaidPage({\n id,\n order,\n onRefund,\n}: {\n id: string;\n order: MerchantBackend.Orders.CheckPaymentPaidResponse;\n onRefund: (id: string) => void;\n}) {\n const events: Event[] = [];\n if (order.contract_terms.timestamp.t_s !== \"never\") {\n events.push({\n when: new Date(order.contract_terms.timestamp.t_s * 1000),\n description: \"order created\",\n type: \"start\",\n });\n }\n if (order.contract_terms.pay_deadline.t_s !== \"never\") {\n events.push({\n when: new Date(order.contract_terms.pay_deadline.t_s * 1000),\n description: \"pay deadline\",\n type: \"deadline\",\n });\n }\n if (order.contract_terms.refund_deadline.t_s !== \"never\") {\n events.push({\n when: new Date(order.contract_terms.refund_deadline.t_s * 1000),\n description: \"refund deadline\",\n type: \"deadline\",\n });\n }\n if (order.contract_terms.wire_transfer_deadline.t_s !== \"never\") {\n events.push({\n when: new Date(order.contract_terms.wire_transfer_deadline.t_s * 1000),\n description: \"wire deadline\",\n type: \"deadline\",\n });\n }\n if (\n order.contract_terms.delivery_date &&\n order.contract_terms.delivery_date.t_s !== \"never\"\n ) {\n if (order.contract_terms.delivery_date)\n events.push({\n when: new Date(order.contract_terms.delivery_date?.t_s * 1000),\n description: \"delivery\",\n type: \"delivery\",\n });\n }\n order.refund_details.reduce(mergeRefunds, []).forEach((e) => {\n if (e.timestamp.t_s !== \"never\") {\n events.push({\n when: new Date(e.timestamp.t_s * 1000),\n description: `refund: ${e.amount}: ${e.reason}`,\n type: e.pending ? \"refund\" : \"refund-taken\",\n });\n }\n });\n if (order.wire_details && order.wire_details.length) {\n if (order.wire_details.length > 1) {\n let last: MerchantBackend.Orders.TransactionWireTransfer | null = null;\n let first: MerchantBackend.Orders.TransactionWireTransfer | null = null;\n let total: AmountJson | null = null;\n\n order.wire_details.forEach((w) => {\n if (last === null || last.execution_time.t_s < w.execution_time.t_s) {\n last = w;\n }\n if (first === null || first.execution_time.t_s > w.execution_time.t_s) {\n first = w;\n }\n total =\n total === null\n ? Amounts.parseOrThrow(w.amount)\n : Amounts.add(total, Amounts.parseOrThrow(w.amount)).amount;\n });\n const last_time = last!.execution_time.t_s;\n if (last_time !== \"never\") {\n events.push({\n when: new Date(last_time * 1000),\n description: `wired ${Amounts.stringify(total!)}`,\n type: \"wired-range\",\n });\n }\n const first_time = first!.execution_time.t_s;\n if (first_time !== \"never\") {\n events.push({\n when: new Date(first_time * 1000),\n description: `wire transfer started...`,\n type: \"wired-range\",\n });\n }\n } else {\n order.wire_details.forEach((e) => {\n if (e.execution_time.t_s !== \"never\") {\n events.push({\n when: new Date(e.execution_time.t_s * 1000),\n description: `wired ${e.amount}`,\n type: \"wired\",\n });\n }\n });\n }\n }\n\n const [value, valueHandler] = useState<Partial<Paid>>(order);\n const { url } = useBackendContext();\n const refundHost = url.replace(/.*:\\/\\//, \"\"); // remove protocol part\n const proto = url.startsWith(\"http://\") ? \"taler+http\" : \"taler\";\n const refundurl = `${proto}://refund/${refundHost}/${order.contract_terms.order_id}/`;\n const refundable =\n new Date().getTime() < order.contract_terms.refund_deadline.t_s * 1000;\n const { i18n } = useTranslationContext();\n\n const amount = Amounts.parseOrThrow(order.contract_terms.amount);\n const refund_taken = order.refund_details.reduce((prev, cur) => {\n if (cur.pending) return prev;\n return Amounts.add(prev, Amounts.parseOrThrow(cur.amount)).amount;\n }, Amounts.zeroOfCurrency(amount.currency));\n value.refund_taken = Amounts.stringify(refund_taken);\n\n return (\n <div>\n <section class=\"section\">\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-10\">\n <section class=\"hero is-hero-bar\">\n <div class=\"hero-body\">\n <div class=\"level\">\n <div class=\"level-left\">\n <div class=\"level-item\">\n <i18n.Translate>Order</i18n.Translate> #{id}\n <div class=\"tag is-success ml-4\">\n <i18n.Translate>paid</i18n.Translate>\n </div>\n {order.wired ? (\n <div class=\"tag is-success ml-4\">\n <i18n.Translate>wired</i18n.Translate>\n </div>\n ) : null}\n {order.refunded ? (\n <div class=\"tag is-danger ml-4\">\n <i18n.Translate>refunded</i18n.Translate>\n </div>\n ) : null}\n </div>\n </div>\n </div>\n <div class=\"level\">\n <div class=\"level-left\">\n <div class=\"level-item\">\n <h1 class=\"title\">{order.contract_terms.amount}</h1>\n </div>\n </div>\n <div class=\"level-right\">\n <div class=\"level-item\">\n <h1 class=\"title\">\n <div class=\"buttons\">\n <span\n class=\"has-tooltip-left\"\n data-tooltip={\n refundable\n ? i18n.str`refund order`\n : i18n.str`not refundable`\n }\n >\n <button\n class=\"button is-danger\"\n disabled={!refundable}\n onClick={() => onRefund(id)}\n >\n <i18n.Translate>refund</i18n.Translate>\n </button>\n </span>\n </div>\n </h1>\n </div>\n </div>\n </div>\n\n <div class=\"level\">\n <div class=\"level-left\" style={{ maxWidth: \"100%\" }}>\n <div class=\"level-item\" style={{ maxWidth: \"100%\" }}>\n <div\n class=\"content\"\n style={{\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n // maxWidth: '100%',\n }}\n >\n <p>\n <a\n href={order.contract_terms.fulfillment_url}\n rel=\"nofollow\"\n target=\"new\"\n >\n {order.contract_terms.fulfillment_url}\n </a>\n </p>\n <p>\n {format(\n new Date(order.contract_terms.timestamp.t_s * 1000),\n \"yyyy/MM/dd HH:mm:ss\",\n )}\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </section>\n\n <section class=\"section\">\n <div class=\"columns\">\n <div class=\"column is-4\">\n <div class=\"title\">\n <i18n.Translate>Timeline</i18n.Translate>\n </div>\n <Timeline events={events} />\n </div>\n <div class=\"column is-8\">\n <div class=\"title\">\n <i18n.Translate>Payment details</i18n.Translate>\n </div>\n <FormProvider<Paid>\n object={value}\n valueHandler={valueHandler}\n >\n {/* <InputCurrency<Paid> name=\"deposit_total\" readonly label={i18n.str`Deposit total`} /> */}\n {order.refunded && (\n <InputCurrency<Paid>\n name=\"refund_amount\"\n readonly\n label={i18n.str`Refunded amount`}\n />\n )}\n {order.refunded && (\n <InputCurrency<Paid>\n name=\"refund_taken\"\n readonly\n label={i18n.str`Refund taken`}\n />\n )}\n <Input<Paid>\n name=\"order_status\"\n readonly\n label={i18n.str`Order status`}\n />\n <TextField<Paid>\n name=\"order_status_url\"\n label={i18n.str`Status URL`}\n >\n <a\n target=\"_blank\"\n rel=\"noreferrer\"\n href={order.order_status_url}\n >\n {order.order_status_url}\n </a>\n </TextField>\n {order.refunded && (\n <TextField<Paid>\n name=\"order_status_url\"\n label={i18n.str`Refund URI`}\n >\n <a target=\"_blank\" rel=\"noreferrer\" href={refundurl}>\n {refundurl}\n </a>\n </TextField>\n )}\n </FormProvider>\n </div>\n </div>\n </section>\n\n {order.contract_terms.products.length ? (\n <Fragment>\n <div class=\"title\">\n <i18n.Translate>Product list</i18n.Translate>\n </div>\n <ProductList list={order.contract_terms.products} />\n </Fragment>\n ) : undefined}\n\n {value.contract_terms && (\n <ContractTerms value={value.contract_terms} />\n )}\n </div>\n <div class=\"column\" />\n </div>\n </section>\n </div>\n );\n}\n\nfunction UnpaidPage({\n id,\n order,\n}: {\n id: string;\n order: MerchantBackend.Orders.CheckPaymentUnpaidResponse;\n}) {\n const [value, valueHandler] = useState<Partial<Unpaid>>(order);\n const { i18n } = useTranslationContext();\n return (\n <div>\n <section class=\"hero is-hero-bar\">\n <div class=\"hero-body\">\n <div class=\"level\">\n <div class=\"level-left\">\n <div class=\"level-item\">\n <h1 class=\"title\">\n <i18n.Translate>Order</i18n.Translate> #{id}\n </h1>\n </div>\n <div class=\"tag is-dark\">\n <i18n.Translate>unpaid</i18n.Translate>\n </div>\n </div>\n </div>\n\n <div class=\"level\">\n <div class=\"level-left\" style={{ maxWidth: \"100%\" }}>\n <div class=\"level-item\" style={{ maxWidth: \"100%\" }}>\n <div\n class=\"content\"\n style={{\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n }}\n >\n <p>\n <b>\n <i18n.Translate>pay at</i18n.Translate>:\n </b>{\" \"}\n <a\n href={order.order_status_url}\n rel=\"nofollow\"\n target=\"new\"\n >\n {order.order_status_url}\n </a>\n </p>\n <p>\n <b>\n <i18n.Translate>created at</i18n.Translate>:\n </b>{\" \"}\n {order.creation_time.t_s === \"never\"\n ? \"never\"\n : format(\n new Date(order.creation_time.t_s * 1000),\n \"yyyy-MM-dd HH:mm:ss\",\n )}\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </section>\n\n <section class=\"section is-main-section\">\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-four-fifths\">\n <FormProvider<Unpaid> object={value} valueHandler={valueHandler}>\n <Input<Unpaid>\n readonly\n name=\"summary\"\n label={i18n.str`Summary`}\n tooltip={i18n.str`human-readable description of the whole purchase`}\n />\n <InputCurrency<Unpaid>\n readonly\n name=\"total_amount\"\n label={i18n.str`Amount`}\n tooltip={i18n.str`total price for the transaction`}\n />\n <Input<Unpaid>\n name=\"order_status\"\n readonly\n label={i18n.str`Order status`}\n />\n <Input<Unpaid>\n name=\"order_status_url\"\n readonly\n label={i18n.str`Order status URL`}\n />\n <TextField<Unpaid>\n name=\"taler_pay_uri\"\n label={i18n.str`Payment URI`}\n >\n <a target=\"_blank\" rel=\"noreferrer\" href={value.taler_pay_uri}>\n {value.taler_pay_uri}\n </a>\n </TextField>\n </FormProvider>\n </div>\n <div class=\"column\" />\n </div>\n </section>\n </div>\n );\n}\n\nexport function DetailPage({ id, selected, onRefund, onBack }: Props): VNode {\n const [showRefund, setShowRefund] = useState<string | undefined>(undefined);\n const { i18n } = useTranslationContext();\n const DetailByStatus = function () {\n switch (selected.order_status) {\n case \"claimed\":\n return <ClaimedPage id={id} order={selected} />;\n case \"paid\":\n return <PaidPage id={id} order={selected} onRefund={setShowRefund} />;\n case \"unpaid\":\n return <UnpaidPage id={id} order={selected} />;\n default:\n return (\n <div>\n <i18n.Translate>\n Unknown order status. This is an error, please contact the\n administrator.\n </i18n.Translate>\n </div>\n );\n }\n };\n\n return (\n <Fragment>\n {DetailByStatus()}\n {showRefund && (\n <RefundModal\n order={selected}\n onCancel={() => setShowRefund(undefined)}\n onConfirm={(value) => {\n onRefund(showRefund, value);\n setShowRefund(undefined);\n }}\n />\n )}\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-four-fifths\">\n <div class=\"buttons is-right mt-5\">\n <button class=\"button\" onClick={onBack}>\n <i18n.Translate>Back</i18n.Translate>\n </button>\n </div>\n </div>\n <div class=\"column\" />\n </div>\n </Fragment>\n );\n}\n\nasync function copyToClipboard(text: string) {\n return navigator.clipboard.writeText(text);\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\nimport {\n useTranslationContext,\n HttpError,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport { useOrderAPI, useOrderDetails } from \"../../../../hooks/order.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { DetailPage } from \"./DetailPage.js\";\n\nexport interface Props {\n oid: string;\n\n onBack: () => void;\n onUnauthorized: () => VNode;\n onNotFound: () => VNode;\n onLoadError: (error: HttpError<MerchantBackend.ErrorDetail>) => VNode;\n}\n\nexport default function Update({\n oid,\n onBack,\n onLoadError,\n onNotFound,\n onUnauthorized,\n}: Props): VNode {\n const { refundOrder } = useOrderAPI();\n const result = useOrderDetails(oid);\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n\n const { i18n } = useTranslationContext();\n\n if (result.clientError && result.isUnauthorized) return onUnauthorized();\n if (result.clientError && result.isNotfound) return onNotFound();\n if (result.loading) return <Loading />;\n if (!result.ok) return onLoadError(result);\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n\n <DetailPage\n onBack={onBack}\n id={oid}\n onRefund={(id, value) =>\n refundOrder(id, value)\n .then(() =>\n setNotif({\n message: i18n.str`refund created successfully`,\n type: \"SUCCESS\",\n }),\n )\n .catch((error) =>\n setNotif({\n message: i18n.str`could not create the refund`,\n type: \"ERROR\",\n description: error.message,\n }),\n )\n }\n selected={result.data}\n />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { format } from \"date-fns\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { DatePicker } from \"../../../../components/picker/DatePicker.js\";\nimport { MerchantBackend, WithId } from \"../../../../declaration.js\";\nimport { CardTable } from \"./Table.js\";\n\nexport interface ListPageProps {\n errorOrderId: string | undefined;\n\n onShowAll: () => void;\n onShowPaid: () => void;\n onShowRefunded: () => void;\n onShowNotWired: () => void;\n onCopyURL: (id: string) => void;\n isAllActive: string;\n isPaidActive: string;\n isRefundedActive: string;\n isNotWiredActive: string;\n\n jumpToDate?: Date;\n onSelectDate: (date?: Date) => void;\n\n orders: (MerchantBackend.Orders.OrderHistoryEntry & WithId)[];\n onLoadMoreBefore?: () => void;\n hasMoreBefore?: boolean;\n hasMoreAfter?: boolean;\n onLoadMoreAfter?: () => void;\n\n onSelectOrder: (o: MerchantBackend.Orders.OrderHistoryEntry & WithId) => void;\n onRefundOrder: (o: MerchantBackend.Orders.OrderHistoryEntry & WithId) => void;\n onSearchOrderById: (id: string) => void;\n onCreate: () => void;\n}\n\nexport function ListPage({\n orders,\n errorOrderId,\n isAllActive,\n onSelectOrder,\n onRefundOrder,\n onSearchOrderById,\n jumpToDate,\n onCopyURL,\n onShowAll,\n onShowPaid,\n onShowRefunded,\n onShowNotWired,\n onSelectDate,\n isPaidActive,\n isRefundedActive,\n isNotWiredActive,\n onCreate,\n}: ListPageProps): VNode {\n const { i18n } = useTranslationContext();\n const dateTooltip = i18n.str`select date to show nearby orders`;\n const [pickDate, setPickDate] = useState(false);\n const [orderId, setOrderId] = useState<string>(\"\");\n\n return (\n <section class=\"section is-main-section\">\n <div class=\"level\">\n <div class=\"level-left\">\n <div class=\"level-item\">\n <div class=\"field has-addons\">\n <div class=\"control\">\n <input\n class={errorOrderId ? \"input is-danger\" : \"input\"}\n type=\"text\"\n value={orderId}\n onChange={(e) => setOrderId(e.currentTarget.value)}\n placeholder={i18n.str`order id`}\n />\n {errorOrderId && <p class=\"help is-danger\">{errorOrderId}</p>}\n </div>\n <span\n class=\"has-tooltip-bottom\"\n data-tooltip={i18n.str`jump to order with the given order ID`}\n >\n <button\n class=\"button\"\n onClick={(e) => onSearchOrderById(orderId)}\n >\n <span class=\"icon\">\n <i class=\"mdi mdi-arrow-right\" />\n </span>\n </button>\n </span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"columns\">\n <div class=\"column is-two-thirds\">\n <div class=\"tabs\" style={{ overflow: \"inherit\" }}>\n <ul>\n <li class={isAllActive}>\n <div\n class=\"has-tooltip-right\"\n data-tooltip={i18n.str`remove all filters`}\n >\n <a onClick={onShowAll}>\n <i18n.Translate>All</i18n.Translate>\n </a>\n </div>\n </li>\n <li class={isPaidActive}>\n <div\n class=\"has-tooltip-right\"\n data-tooltip={i18n.str`only show paid orders`}\n >\n <a onClick={onShowPaid}>\n <i18n.Translate>Paid</i18n.Translate>\n </a>\n </div>\n </li>\n <li class={isRefundedActive}>\n <div\n class=\"has-tooltip-right\"\n data-tooltip={i18n.str`only show orders with refunds`}\n >\n <a onClick={onShowRefunded}>\n <i18n.Translate>Refunded</i18n.Translate>\n </a>\n </div>\n </li>\n <li class={isNotWiredActive}>\n <div\n class=\"has-tooltip-left\"\n data-tooltip={i18n.str`only show orders where customers paid, but wire payments from payment provider are still pending`}\n >\n <a onClick={onShowNotWired}>\n <i18n.Translate>Not wired</i18n.Translate>\n </a>\n </div>\n </li>\n </ul>\n </div>\n </div>\n <div class=\"column \">\n <div class=\"buttons is-right\">\n <div class=\"field has-addons\">\n {jumpToDate && (\n <div class=\"control\">\n <a class=\"button\" onClick={() => onSelectDate(undefined)}>\n <span\n class=\"icon\"\n data-tooltip={i18n.str`clear date filter`}\n >\n <i class=\"mdi mdi-close\" />\n </span>\n </a>\n </div>\n )}\n <div class=\"control\">\n <span class=\"has-tooltip-top\" data-tooltip={dateTooltip}>\n <input\n class=\"input\"\n type=\"text\"\n readonly\n value={!jumpToDate ? \"\" : format(jumpToDate, \"yyyy/MM/dd\")}\n placeholder={i18n.str`date (YYYY/MM/DD)`}\n onClick={() => {\n setPickDate(true);\n }}\n />\n </span>\n </div>\n <div class=\"control\">\n <span class=\"has-tooltip-left\" data-tooltip={dateTooltip}>\n <a\n class=\"button\"\n onClick={() => {\n setPickDate(true);\n }}\n >\n <span class=\"icon\">\n <i class=\"mdi mdi-calendar\" />\n </span>\n </a>\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <DatePicker\n opened={pickDate}\n closeFunction={() => setPickDate(false)}\n dateReceiver={onSelectDate}\n />\n\n <CardTable\n orders={orders}\n onCreate={onCreate}\n onCopyURL={onCopyURL}\n onSelect={onSelectOrder}\n onRefund={onRefundOrder}\n />\n </section>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport {\n HttpError,\n useTranslationContext,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport {\n InstanceOrderFilter,\n useInstanceOrders,\n useOrderAPI,\n useOrderDetails,\n} from \"../../../../hooks/order.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { ListPage } from \"./ListPage.js\";\nimport { RefundModal } from \"./Table.js\";\n\ninterface Props {\n onUnauthorized: () => VNode;\n onLoadError: (error: HttpError<MerchantBackend.ErrorDetail>) => VNode;\n onNotFound: () => VNode;\n onSelect: (id: string) => void;\n onCreate: () => void;\n}\n\nexport default function OrderList({\n onUnauthorized,\n onLoadError,\n onCreate,\n onSelect,\n onNotFound,\n}: Props): VNode {\n const [filter, setFilter] = useState<InstanceOrderFilter>({});\n const [orderToBeRefunded, setOrderToBeRefunded] = useState<\n MerchantBackend.Orders.OrderHistoryEntry | undefined\n >(undefined);\n\n const setNewDate = (date?: Date): void =>\n setFilter((prev) => ({ ...prev, date }));\n\n const result = useInstanceOrders(filter, setNewDate);\n const { refundOrder, getPaymentURL } = useOrderAPI();\n\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n\n const { i18n } = useTranslationContext();\n const [errorOrderId, setErrorOrderId] = useState<string | undefined>(\n undefined,\n );\n\n if (result.clientError && result.isUnauthorized) return onUnauthorized();\n if (result.clientError && result.isNotfound) return onNotFound();\n if (result.loading) return <Loading />;\n if (!result.ok) return onLoadError(result);\n\n const isPaidActive = filter.paid === \"yes\" ? \"is-active\" : \"\";\n const isRefundedActive = filter.refunded === \"yes\" ? \"is-active\" : \"\";\n const isNotWiredActive = filter.wired === \"no\" ? \"is-active\" : \"\";\n const isAllActive =\n filter.paid === undefined &&\n filter.refunded === undefined &&\n filter.wired === undefined\n ? \"is-active\"\n : \"\";\n\n async function testIfOrderExistAndSelect(orderId: string): Promise<void> {\n if (!orderId) {\n setErrorOrderId(i18n.str`Enter an order id`);\n return;\n }\n try {\n await getPaymentURL(orderId);\n onSelect(orderId);\n setErrorOrderId(undefined);\n } catch {\n setErrorOrderId(i18n.str`order not found`);\n }\n }\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n\n <ListPage\n orders={result.data.orders.map((o) => ({ ...o, id: o.order_id }))}\n onLoadMoreBefore={result.loadMorePrev}\n hasMoreBefore={!result.isReachingStart}\n onLoadMoreAfter={result.loadMore}\n hasMoreAfter={!result.isReachingEnd}\n onSelectOrder={(order) => onSelect(order.id)}\n onRefundOrder={(value) => setOrderToBeRefunded(value)}\n errorOrderId={errorOrderId}\n isAllActive={isAllActive}\n isNotWiredActive={isNotWiredActive}\n isPaidActive={isPaidActive}\n isRefundedActive={isRefundedActive}\n jumpToDate={filter.date}\n onCopyURL={(id) =>\n getPaymentURL(id).then((resp) => copyToClipboard(resp.data))\n }\n onCreate={onCreate}\n onSearchOrderById={testIfOrderExistAndSelect}\n onSelectDate={setNewDate}\n onShowAll={() => setFilter({})}\n onShowPaid={() => setFilter({ paid: \"yes\" })}\n onShowRefunded={() => setFilter({ refunded: \"yes\" })}\n onShowNotWired={() => setFilter({ wired: \"no\" })}\n />\n\n {orderToBeRefunded && (\n <RefundModalForTable\n id={orderToBeRefunded.order_id}\n onCancel={() => setOrderToBeRefunded(undefined)}\n onConfirm={(value) =>\n refundOrder(orderToBeRefunded.order_id, value)\n .then(() =>\n setNotif({\n message: i18n.str`refund created successfully`,\n type: \"SUCCESS\",\n }),\n )\n .catch((error) =>\n setNotif({\n message: i18n.str`could not create the refund`,\n type: \"ERROR\",\n description: error.message,\n }),\n )\n .then(() => setOrderToBeRefunded(undefined))\n }\n onLoadError={(error) => {\n setNotif({\n message: i18n.str`could not create the refund`,\n type: \"ERROR\",\n description: error.message,\n });\n setOrderToBeRefunded(undefined);\n return <div />;\n }}\n onUnauthorized={onUnauthorized}\n onNotFound={() => {\n setNotif({\n message: i18n.str`could not get the order to refund`,\n type: \"ERROR\",\n // description: error.message\n });\n setOrderToBeRefunded(undefined);\n return <div />;\n }}\n />\n )}\n </Fragment>\n );\n}\n\ninterface RefundProps {\n id: string;\n onUnauthorized: () => VNode;\n onLoadError: (error: HttpError<MerchantBackend.ErrorDetail>) => VNode;\n onNotFound: () => VNode;\n onCancel: () => void;\n onConfirm: (m: MerchantBackend.Orders.RefundRequest) => void;\n}\n\nfunction RefundModalForTable({\n id,\n onUnauthorized,\n onLoadError,\n onNotFound,\n onConfirm,\n onCancel,\n}: RefundProps): VNode {\n const result = useOrderDetails(id);\n\n if (result.clientError && result.isUnauthorized) return onUnauthorized();\n if (result.clientError && result.isNotfound) return onNotFound();\n if (result.loading) return <Loading />;\n if (!result.ok) return onLoadError(result);\n\n return (\n <RefundModal\n order={result.data}\n onCancel={onCancel}\n onConfirm={onConfirm}\n />\n );\n}\n\nasync function copyToClipboard(text: string): Promise<void> {\n return navigator.clipboard.writeText(text);\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h } from \"preact\";\nimport { useLayoutEffect, useState } from \"preact/hooks\";\nimport { MerchantBackend, Timestamp } from \"../../declaration.js\";\nimport { FormErrors, FormProvider } from \"./FormProvider.js\";\nimport { InputDate } from \"./InputDate.js\";\nimport { InputGroup } from \"./InputGroup.js\";\nimport { InputLocation } from \"./InputLocation.js\";\nimport { InputNumber } from \"./InputNumber.js\";\nimport { InputProps, useField } from \"./useField.js\";\n\nexport interface Props<T> extends InputProps<T> {\n alreadyExist?: boolean;\n}\n\ntype Entity = Stock;\n\nexport interface Stock {\n current: number;\n lost: number;\n sold: number;\n address?: MerchantBackend.Location;\n nextRestock?: Timestamp;\n}\n\ninterface StockDelta {\n incoming: number;\n lost: number;\n}\n\nexport function InputStock<T>({\n name,\n tooltip,\n label,\n alreadyExist,\n}: Props<keyof T>) {\n const { error, value, onChange } = useField<T>(name);\n\n const [errors, setErrors] = useState<FormErrors<Entity>>({});\n\n const [formValue, valueHandler] = useState<Partial<Entity>>(value);\n const [addedStock, setAddedStock] = useState<StockDelta>({\n incoming: 0,\n lost: 0,\n });\n const { i18n } = useTranslationContext();\n\n useLayoutEffect(() => {\n if (!formValue) {\n onChange(undefined as any);\n } else {\n onChange({\n ...formValue,\n current: (formValue?.current || 0) + addedStock.incoming,\n lost: (formValue?.lost || 0) + addedStock.lost,\n } as any);\n }\n }, [formValue, addedStock]);\n\n if (!formValue) {\n return (\n <Fragment>\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">\n {label}\n {tooltip && (\n <span class=\"icon has-tooltip-right\" data-tooltip={tooltip}>\n <i class=\"mdi mdi-information\" />\n </span>\n )}\n </label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field has-addons\">\n {!alreadyExist ? (\n <button\n class=\"button\"\n data-tooltip={i18n.str`click here to configure the stock of the product, leave it as is and the backend will not control stock`}\n onClick={(): void => {\n valueHandler({\n current: 0,\n lost: 0,\n sold: 0,\n } as Stock as any);\n }}\n >\n <span>\n <i18n.Translate>Manage stock</i18n.Translate>\n </span>\n </button>\n ) : (\n <button\n class=\"button\"\n data-tooltip={i18n.str`this product has been configured without stock control`}\n disabled\n >\n <span>\n <i18n.Translate>Infinite</i18n.Translate>\n </span>\n </button>\n )}\n </div>\n </div>\n </div>\n </Fragment>\n );\n }\n\n const currentStock =\n (formValue.current || 0) - (formValue.lost || 0) - (formValue.sold || 0);\n\n const stockAddedErrors: FormErrors<typeof addedStock> = {\n lost:\n currentStock + addedStock.incoming < addedStock.lost\n ? i18n.str`lost cannot be greater than current and incoming (max ${\n currentStock + addedStock.incoming\n })`\n : undefined,\n };\n\n // const stockUpdateDescription = stockAddedErrors.lost ? '' : (\n // !!addedStock.incoming || !!addedStock.lost ?\n // i18n.str`current stock will change from ${currentStock} to ${currentStock + addedStock.incoming - addedStock.lost}` :\n // i18n.str`current stock will stay at ${currentStock}`\n // )\n\n return (\n <Fragment>\n <div class=\"card\">\n <header class=\"card-header\">\n <p class=\"card-header-title\">\n {label}\n {tooltip && (\n <span class=\"icon\" data-tooltip={tooltip}>\n <i class=\"mdi mdi-information\" />\n </span>\n )}\n </p>\n </header>\n <div class=\"card-content\">\n <FormProvider<Entity>\n name=\"stock\"\n errors={errors}\n object={formValue}\n valueHandler={valueHandler}\n >\n {alreadyExist ? (\n <Fragment>\n <FormProvider\n name=\"added\"\n errors={stockAddedErrors}\n object={addedStock}\n valueHandler={setAddedStock as any}\n >\n <InputNumber name=\"incoming\" label={i18n.str`Incoming`} />\n <InputNumber name=\"lost\" label={i18n.str`Lost`} />\n </FormProvider>\n\n {/* <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\" />\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n {stockUpdateDescription}\n </div>\n </div>\n </div> */}\n </Fragment>\n ) : (\n <InputNumber<Entity>\n name=\"current\"\n label={i18n.str`Current`}\n side={\n <button\n class=\"button is-danger\"\n data-tooltip={i18n.str`remove stock control for this product`}\n onClick={(): void => {\n valueHandler(undefined as any);\n }}\n >\n <span>\n <i18n.Translate>without stock</i18n.Translate>\n </span>\n </button>\n }\n />\n )}\n\n <InputDate<Entity>\n name=\"nextRestock\"\n label={i18n.str`Next restock`}\n withTimestampSupport\n />\n\n <InputGroup<Entity>\n name=\"address\"\n label={i18n.str`Delivery address`}\n >\n <InputLocation name=\"address\" />\n </InputGroup>\n </FormProvider>\n </div>\n </div>\n </Fragment>\n );\n}\n// (\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h } from \"preact\";\nimport { useCallback, useEffect, useState } from \"preact/hooks\";\nimport * as yup from \"yup\";\nimport { useBackendContext } from \"../../context/backend.js\";\nimport { MerchantBackend } from \"../../declaration.js\";\nimport {\n ProductCreateSchema as createSchema,\n ProductUpdateSchema as updateSchema,\n} from \"../../schemas/index.js\";\nimport { FormErrors, FormProvider } from \"../form/FormProvider.js\";\nimport { Input } from \"../form/Input.js\";\nimport { InputCurrency } from \"../form/InputCurrency.js\";\nimport { InputImage } from \"../form/InputImage.js\";\nimport { InputNumber } from \"../form/InputNumber.js\";\nimport { InputStock, Stock } from \"../form/InputStock.js\";\nimport { InputTaxes } from \"../form/InputTaxes.js\";\nimport { InputWithAddon } from \"../form/InputWithAddon.js\";\n\ntype Entity = MerchantBackend.Products.ProductDetail & { product_id: string };\n\ninterface Props {\n onSubscribe: (c?: () => Entity | undefined) => void;\n initial?: Partial<Entity>;\n alreadyExist?: boolean;\n}\n\nexport function ProductForm({ onSubscribe, initial, alreadyExist }: Props) {\n const [value, valueHandler] = useState<Partial<Entity & { stock: Stock }>>({\n address: {},\n description_i18n: {},\n taxes: [],\n next_restock: { t_s: \"never\" },\n price: \":0\",\n ...initial,\n stock:\n !initial || initial.total_stock === -1\n ? undefined\n : {\n current: initial.total_stock || 0,\n lost: initial.total_lost || 0,\n sold: initial.total_sold || 0,\n address: initial.address,\n nextRestock: initial.next_restock,\n },\n });\n let errors: FormErrors<Entity> = {};\n\n try {\n (alreadyExist ? updateSchema : createSchema).validateSync(value, {\n abortEarly: false,\n });\n } catch (err) {\n if (err instanceof yup.ValidationError) {\n const yupErrors = err.inner as yup.ValidationError[];\n errors = yupErrors.reduce(\n (prev, cur) =>\n !cur.path ? prev : { ...prev, [cur.path]: cur.message },\n {},\n );\n }\n }\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n\n const submit = useCallback((): Entity | undefined => {\n const stock: Stock = (value as any).stock;\n\n if (!stock) {\n value.total_stock = -1;\n } else {\n value.total_stock = stock.current;\n value.total_lost = stock.lost;\n value.next_restock =\n stock.nextRestock instanceof Date\n ? { t_s: stock.nextRestock.getTime() / 1000 }\n : stock.nextRestock;\n value.address = stock.address;\n }\n delete (value as any).stock;\n\n if (typeof value.minimum_age !== \"undefined\" && value.minimum_age < 1) {\n delete value.minimum_age;\n }\n\n return value as MerchantBackend.Products.ProductDetail & {\n product_id: string;\n };\n }, [value]);\n\n useEffect(() => {\n onSubscribe(hasErrors ? undefined : submit);\n }, [submit, hasErrors]);\n\n const backend = useBackendContext();\n const { i18n } = useTranslationContext();\n\n return (\n <div>\n <FormProvider<Entity>\n name=\"product\"\n errors={errors}\n object={value}\n valueHandler={valueHandler}\n >\n {alreadyExist ? undefined : (\n <InputWithAddon<Entity>\n name=\"product_id\"\n addonBefore={`${backend.url}/product/`}\n label={i18n.str`ID`}\n tooltip={i18n.str`product identification to use in URLs (for internal use only)`}\n />\n )}\n <InputImage<Entity>\n name=\"image\"\n label={i18n.str`Image`}\n tooltip={i18n.str`illustration of the product for customers`}\n />\n <Input<Entity>\n name=\"description\"\n inputType=\"multiline\"\n label={i18n.str`Description`}\n tooltip={i18n.str`product description for customers`}\n />\n <InputNumber<Entity>\n name=\"minimum_age\"\n label={i18n.str`Age restricted`}\n tooltip={i18n.str`is this product restricted for customer below certain age?`}\n />\n <Input<Entity>\n name=\"unit\"\n label={i18n.str`Unit`}\n tooltip={i18n.str`unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers`}\n />\n <InputCurrency<Entity>\n name=\"price\"\n label={i18n.str`Price`}\n tooltip={i18n.str`sale price for customers, including taxes, for above units of the product`}\n />\n <InputStock\n name=\"stock\"\n label={i18n.str`Stock`}\n alreadyExist={alreadyExist}\n tooltip={i18n.str`product inventory for products with finite supply (for internal use only)`}\n />\n <InputTaxes<Entity>\n name=\"taxes\"\n label={i18n.str`Taxes`}\n tooltip={i18n.str`taxes included in the product price, exposed to customers`}\n />\n </FormProvider>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { AsyncButton } from \"../../../../components/exception/AsyncButton.js\";\nimport { ProductForm } from \"../../../../components/product/ProductForm.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport { useListener } from \"../../../../hooks/listener.js\";\n\ntype Entity = MerchantBackend.Products.ProductAddDetail & {\n product_id: string;\n};\n\ninterface Props {\n onCreate: (d: Entity) => Promise<void>;\n onBack?: () => void;\n}\n\nexport function CreatePage({ onCreate, onBack }: Props): VNode {\n const [submitForm, addFormSubmitter] = useListener<Entity | undefined>(\n (result) => {\n if (result) return onCreate(result);\n return Promise.reject();\n },\n );\n\n const { i18n } = useTranslationContext();\n\n return (\n <div>\n <section class=\"section is-main-section\">\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-four-fifths\">\n <ProductForm onSubscribe={addFormSubmitter} />\n\n <div class=\"buttons is-right mt-5\">\n {onBack && (\n <button class=\"button\" onClick={onBack}>\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n )}\n <AsyncButton\n onClick={submitForm}\n data-tooltip={\n !submitForm\n ? i18n.str`Need to complete marked fields`\n : \"confirm operation\"\n }\n disabled={!submitForm}\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </AsyncButton>\n </div>\n </div>\n <div class=\"column\" />\n </div>\n </section>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport { useProductAPI } from \"../../../../hooks/product.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { CreatePage } from \"./CreatePage.js\";\n\nexport type Entity = MerchantBackend.Products.ProductAddDetail;\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n}\nexport default function CreateProduct({ onConfirm, onBack }: Props): VNode {\n const { createProduct } = useProductAPI();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { i18n } = useTranslationContext();\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n <CreatePage\n onBack={onBack}\n onCreate={(request: MerchantBackend.Products.ProductAddDetail) => {\n return createProduct(request)\n .then(() => onConfirm())\n .catch((error) => {\n setNotif({\n message: i18n.str`could not create product`,\n type: \"ERROR\",\n description: error.message,\n });\n });\n }}\n />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { Amounts } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { format } from \"date-fns\";\nimport { ComponentChildren, Fragment, h, VNode } from \"preact\";\nimport { StateUpdater, useState } from \"preact/hooks\";\nimport emptyImage from \"../../../../assets/empty.png\";\nimport {\n FormErrors,\n FormProvider,\n} from \"../../../../components/form/FormProvider.js\";\nimport { InputCurrency } from \"../../../../components/form/InputCurrency.js\";\nimport { InputNumber } from \"../../../../components/form/InputNumber.js\";\nimport { MerchantBackend, WithId } from \"../../../../declaration.js\";\n\ntype Entity = MerchantBackend.Products.ProductDetail & WithId;\n\ninterface Props {\n instances: Entity[];\n onDelete: (id: Entity) => void;\n onSelect: (product: Entity) => void;\n onUpdate: (\n id: string,\n data: MerchantBackend.Products.ProductPatchDetail,\n ) => Promise<void>;\n onCreate: () => void;\n selected?: boolean;\n}\n\nexport function CardTable({\n instances,\n onCreate,\n onSelect,\n onUpdate,\n onDelete,\n}: Props): VNode {\n const [rowSelection, rowSelectionHandler] = useState<string | undefined>(\n undefined,\n );\n const { i18n } = useTranslationContext();\n return (\n <div class=\"card has-table\">\n <header class=\"card-header\">\n <p class=\"card-header-title\">\n <span class=\"icon\">\n <i class=\"mdi mdi-shopping\" />\n </span>\n <i18n.Translate>Products</i18n.Translate>\n </p>\n <div class=\"card-header-icon\" aria-label=\"more options\">\n <span\n class=\"has-tooltip-left\"\n data-tooltip={i18n.str`add product to inventory`}\n >\n <button class=\"button is-info\" type=\"button\" onClick={onCreate}>\n <span class=\"icon is-small\">\n <i class=\"mdi mdi-plus mdi-36px\" />\n </span>\n </button>\n </span>\n </div>\n </header>\n <div class=\"card-content\">\n <div class=\"b-table has-pagination\">\n <div class=\"table-wrapper has-mobile-cards\">\n {instances.length > 0 ? (\n <Table\n instances={instances}\n onSelect={onSelect}\n onDelete={onDelete}\n onUpdate={onUpdate}\n rowSelection={rowSelection}\n rowSelectionHandler={rowSelectionHandler}\n />\n ) : (\n <EmptyTable />\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\ninterface TableProps {\n rowSelection: string | undefined;\n instances: Entity[];\n onSelect: (id: Entity) => void;\n onUpdate: (\n id: string,\n data: MerchantBackend.Products.ProductPatchDetail,\n ) => Promise<void>;\n onDelete: (id: Entity) => void;\n rowSelectionHandler: StateUpdater<string | undefined>;\n}\n\nfunction Table({\n rowSelection,\n rowSelectionHandler,\n instances,\n onSelect,\n onUpdate,\n onDelete,\n}: TableProps): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"table-container\">\n <table class=\"table is-fullwidth is-striped is-hoverable is-fullwidth\">\n <thead>\n <tr>\n <th>\n <i18n.Translate>Image</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Description</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Sell</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Taxes</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Profit</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Stock</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Sold</i18n.Translate>\n </th>\n <th />\n </tr>\n </thead>\n <tbody>\n {instances.map((i) => {\n const restStockInfo = !i.next_restock\n ? \"\"\n : i.next_restock.t_s === \"never\"\n ? \"never\"\n : `restock at ${format(\n new Date(i.next_restock.t_s * 1000),\n \"yyyy/MM/dd\",\n )}`;\n let stockInfo: ComponentChildren = \"\";\n if (i.total_stock < 0) {\n stockInfo = \"infinite\";\n } else {\n const totalStock = i.total_stock - i.total_lost - i.total_sold;\n stockInfo = (\n <label title={restStockInfo}>\n {totalStock} {i.unit}\n </label>\n );\n }\n\n const isFree = Amounts.isZero(Amounts.parseOrThrow(i.price));\n\n return (\n <Fragment key={i.id}>\n <tr key=\"info\">\n <td\n onClick={() =>\n rowSelection !== i.id && rowSelectionHandler(i.id)\n }\n style={{ cursor: \"pointer\" }}\n >\n <img\n src={i.image ? i.image : emptyImage}\n style={{\n border: \"solid black 1px\",\n width: 100,\n height: 100,\n }}\n />\n </td>\n <td\n onClick={() =>\n rowSelection !== i.id && rowSelectionHandler(i.id)\n }\n style={{ cursor: \"pointer\" }}\n >\n {i.description}\n </td>\n <td\n onClick={() =>\n rowSelection !== i.id && rowSelectionHandler(i.id)\n }\n style={{ cursor: \"pointer\" }}\n >\n {isFree ? i18n.str`free` : `${i.price} / ${i.unit}`}\n </td>\n <td\n onClick={() =>\n rowSelection !== i.id && rowSelectionHandler(i.id)\n }\n style={{ cursor: \"pointer\" }}\n >\n {sum(i.taxes)}\n </td>\n <td\n onClick={() =>\n rowSelection !== i.id && rowSelectionHandler(i.id)\n }\n style={{ cursor: \"pointer\" }}\n >\n {difference(i.price, sum(i.taxes))}\n </td>\n <td\n onClick={() =>\n rowSelection !== i.id && rowSelectionHandler(i.id)\n }\n style={{ cursor: \"pointer\" }}\n >\n {stockInfo}\n </td>\n <td\n onClick={() =>\n rowSelection !== i.id && rowSelectionHandler(i.id)\n }\n style={{ cursor: \"pointer\" }}\n >\n {i.total_sold} {i.unit}\n </td>\n <td class=\"is-actions-cell right-sticky\">\n <div class=\"buttons is-right\">\n <span\n class=\"has-tooltip-bottom\"\n data-tooltip={i18n.str`go to product update page`}\n >\n <button\n class=\"button is-small is-success \"\n type=\"button\"\n onClick={(): void => onSelect(i)}\n >\n <i18n.Translate>Update</i18n.Translate>\n </button>\n </span>\n <span\n class=\"has-tooltip-left\"\n data-tooltip={i18n.str`remove this product from the database`}\n >\n <button\n class=\"button is-small is-danger\"\n type=\"button\"\n onClick={(): void => onDelete(i)}\n >\n <i18n.Translate>Delete</i18n.Translate>\n </button>\n </span>\n </div>\n </td>\n </tr>\n {rowSelection === i.id && (\n <tr key=\"form\">\n <td colSpan={10}>\n <FastProductUpdateForm\n product={i}\n onUpdate={(prod) =>\n onUpdate(i.id, prod).then((r) =>\n rowSelectionHandler(undefined),\n )\n }\n onCancel={() => rowSelectionHandler(undefined)}\n />\n </td>\n </tr>\n )}\n </Fragment>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n}\n\ninterface FastProductUpdateFormProps {\n product: Entity;\n onUpdate: (\n data: MerchantBackend.Products.ProductPatchDetail,\n ) => Promise<void>;\n onCancel: () => void;\n}\ninterface FastProductUpdate {\n incoming: number;\n lost: number;\n price: string;\n}\ninterface UpdatePrice {\n price: string;\n}\n\nfunction FastProductWithInfiniteStockUpdateForm({\n product,\n onUpdate,\n onCancel,\n}: FastProductUpdateFormProps) {\n const [value, valueHandler] = useState<UpdatePrice>({ price: product.price });\n const { i18n } = useTranslationContext();\n\n return (\n <Fragment>\n <FormProvider<FastProductUpdate>\n name=\"added\"\n object={value}\n valueHandler={valueHandler as any}\n >\n <InputCurrency<FastProductUpdate>\n name=\"price\"\n label={i18n.str`Price`}\n tooltip={i18n.str`update the product with new price`}\n />\n </FormProvider>\n\n <div class=\"buttons is-right mt-5\">\n <button class=\"button\" onClick={onCancel}>\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n <span\n class=\"has-tooltip-left\"\n data-tooltip={i18n.str`update product with new price`}\n >\n <button\n class=\"button is-info\"\n onClick={() =>\n onUpdate({\n ...product,\n price: value.price,\n })\n }\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </button>\n </span>\n </div>\n </Fragment>\n );\n}\n\nfunction FastProductWithManagedStockUpdateForm({\n product,\n onUpdate,\n onCancel,\n}: FastProductUpdateFormProps) {\n const [value, valueHandler] = useState<FastProductUpdate>({\n incoming: 0,\n lost: 0,\n price: product.price,\n });\n\n const currentStock =\n product.total_stock - product.total_sold - product.total_lost;\n\n const errors: FormErrors<FastProductUpdate> = {\n lost:\n currentStock + value.incoming < value.lost\n ? `lost cannot be greater that current + incoming (max ${\n currentStock + value.incoming\n })`\n : undefined,\n };\n\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n const { i18n } = useTranslationContext();\n\n return (\n <Fragment>\n <FormProvider<FastProductUpdate>\n name=\"added\"\n errors={errors}\n object={value}\n valueHandler={valueHandler as any}\n >\n <InputNumber<FastProductUpdate>\n name=\"incoming\"\n label={i18n.str`Incoming`}\n tooltip={i18n.str`add more elements to the inventory`}\n />\n <InputNumber<FastProductUpdate>\n name=\"lost\"\n label={i18n.str`Lost`}\n tooltip={i18n.str`report elements lost in the inventory`}\n />\n <InputCurrency<FastProductUpdate>\n name=\"price\"\n label={i18n.str`Price`}\n tooltip={i18n.str`new price for the product`}\n />\n </FormProvider>\n\n <div class=\"buttons is-right mt-5\">\n <button class=\"button\" onClick={onCancel}>\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n <span\n class=\"has-tooltip-left\"\n data-tooltip={\n hasErrors\n ? i18n.str`the are value with errors`\n : i18n.str`update product with new stock and price`\n }\n >\n <button\n class=\"button is-info\"\n disabled={hasErrors}\n onClick={() =>\n onUpdate({\n ...product,\n total_stock: product.total_stock + value.incoming,\n total_lost: product.total_lost + value.lost,\n price: value.price,\n })\n }\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </button>\n </span>\n </div>\n </Fragment>\n );\n}\n\nfunction FastProductUpdateForm(props: FastProductUpdateFormProps) {\n return props.product.total_stock === -1 ? (\n <FastProductWithInfiniteStockUpdateForm {...props} />\n ) : (\n <FastProductWithManagedStockUpdateForm {...props} />\n );\n}\n\nfunction EmptyTable(): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"content has-text-grey has-text-centered\">\n <p>\n <span class=\"icon is-large\">\n <i class=\"mdi mdi-emoticon-sad mdi-48px\" />\n </span>\n </p>\n <p>\n <i18n.Translate>\n There is no products yet, add more pressing the + sign\n </i18n.Translate>\n </p>\n </div>\n );\n}\n\nfunction difference(price: string, tax: number) {\n if (!tax) return price;\n const ps = price.split(\":\");\n const p = parseInt(ps[1], 10);\n ps[1] = `${p - tax}`;\n return ps.join(\":\");\n}\nfunction sum(taxes: MerchantBackend.Tax[]) {\n return taxes.reduce((p, c) => p + parseInt(c.tax.split(\":\")[1], 10), 0);\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport {\n HttpError,\n useTranslationContext,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { MerchantBackend, WithId } from \"../../../../declaration.js\";\nimport {\n useInstanceProducts,\n useProductAPI,\n} from \"../../../../hooks/product.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { CardTable } from \"./Table.js\";\n\ninterface Props {\n onUnauthorized: () => VNode;\n onNotFound: () => VNode;\n onCreate: () => void;\n onSelect: (id: string) => void;\n onLoadError: (e: HttpError<MerchantBackend.ErrorDetail>) => VNode;\n}\nexport default function ProductList({\n onUnauthorized,\n onLoadError,\n onCreate,\n onSelect,\n onNotFound,\n}: Props): VNode {\n const result = useInstanceProducts();\n const { deleteProduct, updateProduct } = useProductAPI();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n\n const { i18n } = useTranslationContext();\n\n if (result.clientError && result.isUnauthorized) return onUnauthorized();\n if (result.clientError && result.isNotfound) return onNotFound();\n if (result.loading) return <Loading />;\n if (!result.ok) return onLoadError(result);\n\n return (\n <section class=\"section is-main-section\">\n <NotificationCard notification={notif} />\n\n <CardTable\n instances={result.data}\n onCreate={onCreate}\n onUpdate={(id, prod) =>\n updateProduct(id, prod)\n .then(() =>\n setNotif({\n message: i18n.str`product updated successfully`,\n type: \"SUCCESS\",\n }),\n )\n .catch((error) =>\n setNotif({\n message: i18n.str`could not update the product`,\n type: \"ERROR\",\n description: error.message,\n }),\n )\n }\n onSelect={(product) => onSelect(product.id)}\n onDelete={(prod: MerchantBackend.Products.ProductDetail & WithId) =>\n deleteProduct(prod.id)\n .then(() =>\n setNotif({\n message: i18n.str`product delete successfully`,\n type: \"SUCCESS\",\n }),\n )\n .catch((error) =>\n setNotif({\n message: i18n.str`could not delete the product`,\n type: \"ERROR\",\n description: error.message,\n }),\n )\n }\n />\n </section>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { AsyncButton } from \"../../../../components/exception/AsyncButton.js\";\nimport { ProductForm } from \"../../../../components/product/ProductForm.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport { useListener } from \"../../../../hooks/listener.js\";\n\ntype Entity = MerchantBackend.Products.ProductDetail & { product_id: string };\n\ninterface Props {\n onUpdate: (d: Entity) => Promise<void>;\n onBack?: () => void;\n product: Entity;\n}\n\nexport function UpdatePage({ product, onUpdate, onBack }: Props): VNode {\n const [submitForm, addFormSubmitter] = useListener<Entity | undefined>(\n (result) => {\n if (result) return onUpdate(result);\n return Promise.resolve();\n },\n );\n\n const { i18n } = useTranslationContext();\n\n return (\n <div>\n <section class=\"section\">\n <section class=\"hero is-hero-bar\">\n <div class=\"hero-body\">\n <div class=\"level\">\n <div class=\"level-left\">\n <div class=\"level-item\">\n <span class=\"is-size-4\">\n <i18n.Translate>Product id:</i18n.Translate>\n <b>{product.product_id}</b>\n </span>\n </div>\n </div>\n </div>\n </div>\n </section>\n <hr />\n\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-four-fifths\">\n <ProductForm\n initial={product}\n onSubscribe={addFormSubmitter}\n alreadyExist\n />\n\n <div class=\"buttons is-right mt-5\">\n {onBack && (\n <button class=\"button\" onClick={onBack}>\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n )}\n <AsyncButton\n onClick={submitForm}\n data-tooltip={\n !submitForm\n ? i18n.str`Need to complete marked fields`\n : \"confirm operation\"\n }\n disabled={!submitForm}\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </AsyncButton>\n </div>\n </div>\n <div class=\"column\" />\n </div>\n </section>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport {\n HttpError,\n useTranslationContext,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport { useProductAPI, useProductDetails } from \"../../../../hooks/product.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { UpdatePage } from \"./UpdatePage.js\";\n\nexport type Entity = MerchantBackend.Products.ProductAddDetail;\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n onUnauthorized: () => VNode;\n onNotFound: () => VNode;\n onLoadError: (e: HttpError<MerchantBackend.ErrorDetail>) => VNode;\n pid: string;\n}\nexport default function UpdateProduct({\n pid,\n onConfirm,\n onBack,\n onUnauthorized,\n onNotFound,\n onLoadError,\n}: Props): VNode {\n const { updateProduct } = useProductAPI();\n const result = useProductDetails(pid);\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n\n const { i18n } = useTranslationContext();\n\n if (result.clientError && result.isUnauthorized) return onUnauthorized();\n if (result.clientError && result.isNotfound) return onNotFound();\n if (result.loading) return <Loading />;\n if (!result.ok) return onLoadError(result);\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n <UpdatePage\n product={{ ...result.data, product_id: pid }}\n onBack={onBack}\n onUpdate={(data) => {\n return updateProduct(pid, data)\n .then(onConfirm)\n .catch((error) => {\n setNotif({\n message: i18n.str`could not create product`,\n type: \"ERROR\",\n description: error.message,\n });\n });\n }}\n />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\nimport {\n HttpResponse,\n HttpResponseOk,\n RequestError,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { MerchantBackend } from \"../declaration.js\";\nimport { useBackendInstanceRequest, useMatchMutate } from \"./backend.js\";\n\n// FIX default import https://github.com/microsoft/TypeScript/issues/49189\nimport _useSWR, { SWRHook, useSWRConfig } from \"swr\";\nconst useSWR = _useSWR as unknown as SWRHook;\n\nexport function useReservesAPI(): ReserveMutateAPI {\n const mutateAll = useMatchMutate();\n const { mutate } = useSWRConfig();\n const { request } = useBackendInstanceRequest();\n\n const createReserve = async (\n data: MerchantBackend.Tips.ReserveCreateRequest,\n ): Promise<\n HttpResponseOk<MerchantBackend.Tips.ReserveCreateConfirmation>\n > => {\n const res = await request<MerchantBackend.Tips.ReserveCreateConfirmation>(\n `/private/reserves`,\n {\n method: \"POST\",\n data,\n },\n );\n\n //evict reserve list query\n await mutateAll(/.*private\\/reserves.*/);\n\n return res;\n };\n\n const authorizeTipReserve = async (\n pub: string,\n data: MerchantBackend.Tips.TipCreateRequest,\n ): Promise<HttpResponseOk<MerchantBackend.Tips.TipCreateConfirmation>> => {\n const res = await request<MerchantBackend.Tips.TipCreateConfirmation>(\n `/private/reserves/${pub}/authorize-tip`,\n {\n method: \"POST\",\n data,\n },\n );\n\n //evict reserve details query\n await mutate([`/private/reserves/${pub}`]);\n\n return res;\n };\n\n const authorizeTip = async (\n data: MerchantBackend.Tips.TipCreateRequest,\n ): Promise<HttpResponseOk<MerchantBackend.Tips.TipCreateConfirmation>> => {\n const res = await request<MerchantBackend.Tips.TipCreateConfirmation>(\n `/private/tips`,\n {\n method: \"POST\",\n data,\n },\n );\n\n //evict all details query\n await mutateAll(/.*private\\/reserves\\/.*/);\n\n return res;\n };\n\n const deleteReserve = async (\n pub: string,\n ): Promise<HttpResponse<void, MerchantBackend.ErrorDetail>> => {\n const res = await request<void>(`/private/reserves/${pub}`, {\n method: \"DELETE\",\n });\n\n //evict reserve list query\n await mutateAll(/.*private\\/reserves.*/);\n\n return res;\n };\n\n return { createReserve, authorizeTip, authorizeTipReserve, deleteReserve };\n}\n\nexport interface ReserveMutateAPI {\n createReserve: (\n data: MerchantBackend.Tips.ReserveCreateRequest,\n ) => Promise<HttpResponseOk<MerchantBackend.Tips.ReserveCreateConfirmation>>;\n authorizeTipReserve: (\n id: string,\n data: MerchantBackend.Tips.TipCreateRequest,\n ) => Promise<HttpResponseOk<MerchantBackend.Tips.TipCreateConfirmation>>;\n authorizeTip: (\n data: MerchantBackend.Tips.TipCreateRequest,\n ) => Promise<HttpResponseOk<MerchantBackend.Tips.TipCreateConfirmation>>;\n deleteReserve: (\n id: string,\n ) => Promise<HttpResponse<void, MerchantBackend.ErrorDetail>>;\n}\n\nexport function useInstanceReserves(): HttpResponse<\n MerchantBackend.Tips.TippingReserveStatus,\n MerchantBackend.ErrorDetail\n> {\n const { fetcher } = useBackendInstanceRequest();\n\n const { data, error, isValidating } = useSWR<\n HttpResponseOk<MerchantBackend.Tips.TippingReserveStatus>,\n RequestError<MerchantBackend.ErrorDetail>\n >([`/private/reserves`], fetcher);\n\n if (isValidating) return { loading: true, data: data?.data };\n if (data) return data;\n if (error) return error.info;\n return { loading: true };\n}\n\nexport function useReserveDetails(\n reserveId: string,\n): HttpResponse<\n MerchantBackend.Tips.ReserveDetail,\n MerchantBackend.ErrorDetail\n> {\n const { reserveDetailFetcher } = useBackendInstanceRequest();\n\n const { data, error, isValidating } = useSWR<\n HttpResponseOk<MerchantBackend.Tips.ReserveDetail>,\n RequestError<MerchantBackend.ErrorDetail>\n >([`/private/reserves/${reserveId}`], reserveDetailFetcher, {\n refreshInterval: 0,\n refreshWhenHidden: false,\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n refreshWhenOffline: false,\n });\n\n if (isValidating) return { loading: true, data: data?.data };\n if (data) return data;\n if (error) return error.info;\n return { loading: true };\n}\n\nexport function useTipDetails(\n tipId: string,\n): HttpResponse<MerchantBackend.Tips.TipDetails, MerchantBackend.ErrorDetail> {\n const { tipsDetailFetcher } = useBackendInstanceRequest();\n\n const { data, error, isValidating } = useSWR<\n HttpResponseOk<MerchantBackend.Tips.TipDetails>,\n RequestError<MerchantBackend.ErrorDetail>\n >([`/private/tips/${tipId}`], tipsDetailFetcher, {\n refreshInterval: 0,\n refreshWhenHidden: false,\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n refreshWhenOffline: false,\n });\n\n if (isValidating) return { loading: true, data: data?.data };\n if (data) return data;\n if (error) return error.info;\n return { loading: true };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\nimport { h, VNode } from \"preact\";\nimport { useEffect, useRef } from \"preact/hooks\";\nimport qrcode from \"qrcode-generator\";\n\nexport function QR({ text }: { text: string }): VNode {\n const divRef = useRef<HTMLDivElement>(null);\n useEffect(() => {\n const qr = qrcode(0, \"L\");\n qr.addData(text);\n qr.make();\n if (divRef.current) {\n divRef.current.innerHTML = qr.createSvgTag({\n scalable: true,\n });\n }\n });\n\n return (\n <div\n style={{\n width: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n }}\n >\n <div\n style={{ width: \"50%\", minWidth: 200, maxWidth: 300 }}\n ref={divRef}\n />\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\nimport { parsePaytoUri, stringifyPaytoUri } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { QR } from \"../../../../components/exception/QR.js\";\nimport { CreatedSuccessfully as Template } from \"../../../../components/notifications/CreatedSuccessfully.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\n\ntype Entity = {\n request: MerchantBackend.Tips.ReserveCreateRequest;\n response: MerchantBackend.Tips.ReserveCreateConfirmation;\n};\n\ninterface Props {\n entity: Entity;\n onConfirm: () => void;\n onCreateAnother?: () => void;\n}\n\nexport function CreatedSuccessfully({\n entity,\n onConfirm,\n onCreateAnother,\n}: Props): VNode {\n const p = parsePaytoUri(entity.response.payto_uri);\n if (p) {\n p.params[\"message\"] = entity.response.reserve_pub;\n p.params[\"amount\"] = entity.request.initial_balance;\n }\n\n const link = !p ? entity.response.payto_uri : stringifyPaytoUri(p);\n const { i18n } = useTranslationContext();\n return (\n <Template onConfirm={onConfirm} onCreateAnother={onCreateAnother}>\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">Amount</label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n <p class=\"control\">\n <input\n readonly\n class=\"input\"\n value={entity.request.initial_balance}\n />\n </p>\n </div>\n </div>\n </div>\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">Exchange bank account</label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n <p class=\"control\">\n <input readonly class=\"input\" value={entity.response.payto_uri} />\n </p>\n </div>\n </div>\n </div>\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">Wire transfer subject</label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n <p class=\"control\">\n <input\n class=\"input\"\n readonly\n value={entity.response.reserve_pub}\n />\n </p>\n </div>\n </div>\n </div>\n <p class=\"is-size-5\">\n <i18n.Translate>\n To complete the setup of the reserve, you must now initiate a wire\n transfer using the given wire transfer subject and crediting the\n specified amount to the indicated account of the exchange.\n </i18n.Translate>\n </p>\n <p class=\"is-size-5\">\n <i18n.Translate>\n If your system supports RFC 8905, you can do this by opening this URI:\n </i18n.Translate>\n </p>\n <pre>\n <a target=\"_blank\" rel=\"noreferrer\" href={link}>\n {link}\n </a>\n </pre>\n <QR text={link} />\n </Template>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { StateUpdater, useEffect, useState } from \"preact/hooks\";\nimport { AsyncButton } from \"../../../../components/exception/AsyncButton.js\";\nimport {\n FormErrors,\n FormProvider,\n} from \"../../../../components/form/FormProvider.js\";\nimport { Input } from \"../../../../components/form/Input.js\";\nimport { InputCurrency } from \"../../../../components/form/InputCurrency.js\";\nimport { InputSelector } from \"../../../../components/form/InputSelector.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport {\n PAYTO_WIRE_METHOD_LOOKUP,\n URL_REGEX,\n} from \"../../../../utils/constants.js\";\n\ntype Entity = MerchantBackend.Tips.ReserveCreateRequest;\n\ninterface Props {\n onCreate: (d: Entity) => Promise<void>;\n onBack?: () => void;\n}\n\nenum Steps {\n EXCHANGE,\n WIRE_METHOD,\n}\n\ninterface ViewProps {\n step: Steps;\n setCurrentStep: (s: Steps) => void;\n reserve: Partial<Entity>;\n onBack?: () => void;\n submitForm: () => Promise<void>;\n setReserve: StateUpdater<Partial<Entity>>;\n}\nfunction ViewStep({\n step,\n setCurrentStep,\n reserve,\n onBack,\n submitForm,\n setReserve,\n}: ViewProps): VNode {\n const { i18n } = useTranslationContext();\n const [wireMethods, setWireMethods] = useState<Array<string>>([]);\n const [exchangeQueryError, setExchangeQueryError] = useState<\n string | undefined\n >(undefined);\n\n useEffect(() => {\n setExchangeQueryError(undefined);\n }, [reserve.exchange_url]);\n\n switch (step) {\n case Steps.EXCHANGE: {\n const errors: FormErrors<Entity> = {\n initial_balance: !reserve.initial_balance\n ? \"cannot be empty\"\n : !(parseInt(reserve.initial_balance.split(\":\")[1], 10) > 0)\n ? i18n.str`it should be greater than 0`\n : undefined,\n exchange_url: !reserve.exchange_url\n ? i18n.str`cannot be empty`\n : !URL_REGEX.test(reserve.exchange_url)\n ? i18n.str`must be a valid URL`\n : !exchangeQueryError\n ? undefined\n : exchangeQueryError,\n };\n\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n\n return (\n <Fragment>\n <FormProvider<Entity>\n object={reserve}\n errors={errors}\n valueHandler={setReserve}\n >\n <InputCurrency<Entity>\n name=\"initial_balance\"\n label={i18n.str`Initial balance`}\n tooltip={i18n.str`balance prior to deposit`}\n />\n <Input<Entity>\n name=\"exchange_url\"\n label={i18n.str`Exchange URL`}\n tooltip={i18n.str`URL of exchange`}\n />\n </FormProvider>\n\n <div class=\"buttons is-right mt-5\">\n {onBack && (\n <button class=\"button\" onClick={onBack}>\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n )}\n <AsyncButton\n class=\"has-tooltip-left\"\n onClick={() => {\n return fetch(`${reserve.exchange_url}wire`)\n .then((r) => r.json())\n .then((r) => {\n const wireMethods = r.accounts.map((a: any) => {\n const match = PAYTO_WIRE_METHOD_LOOKUP.exec(a.payto_uri);\n return (match && match[1]) || \"\";\n });\n setWireMethods(wireMethods);\n setCurrentStep(Steps.WIRE_METHOD);\n return;\n })\n .catch((r: any) => {\n setExchangeQueryError(r.message);\n });\n }}\n data-tooltip={\n hasErrors\n ? i18n.str`Need to complete marked fields`\n : \"confirm operation\"\n }\n disabled={hasErrors}\n >\n <i18n.Translate>Next</i18n.Translate>\n </AsyncButton>\n </div>\n </Fragment>\n );\n }\n\n case Steps.WIRE_METHOD: {\n const errors: FormErrors<Entity> = {\n wire_method: !reserve.wire_method\n ? i18n.str`cannot be empty`\n : undefined,\n };\n\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n return (\n <Fragment>\n <FormProvider<Entity>\n object={reserve}\n errors={errors}\n valueHandler={setReserve}\n >\n <InputCurrency<Entity>\n name=\"initial_balance\"\n label={i18n.str`Initial balance`}\n tooltip={i18n.str`balance prior to deposit`}\n readonly\n />\n <Input<Entity>\n name=\"exchange_url\"\n label={i18n.str`Exchange URL`}\n tooltip={i18n.str`URL of exchange`}\n readonly\n />\n <InputSelector<Entity>\n name=\"wire_method\"\n label={i18n.str`Wire method`}\n tooltip={i18n.str`method to use for wire transfer`}\n values={wireMethods}\n placeholder={i18n.str`Select one wire method`}\n />\n </FormProvider>\n <div class=\"buttons is-right mt-5\">\n {onBack && (\n <button\n class=\"button\"\n onClick={() => setCurrentStep(Steps.EXCHANGE)}\n >\n <i18n.Translate>Back</i18n.Translate>\n </button>\n )}\n <AsyncButton\n onClick={submitForm}\n data-tooltip={\n hasErrors\n ? i18n.str`Need to complete marked fields`\n : \"confirm operation\"\n }\n disabled={hasErrors}\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </AsyncButton>\n </div>\n </Fragment>\n );\n }\n }\n}\n\nexport function CreatePage({ onCreate, onBack }: Props): VNode {\n const [reserve, setReserve] = useState<Partial<Entity>>({});\n\n const submitForm = () => {\n return onCreate(reserve as Entity);\n };\n\n const [currentStep, setCurrentStep] = useState(Steps.EXCHANGE);\n\n return (\n <div>\n <section class=\"section is-main-section\">\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-four-fifths\">\n <div class=\"tabs is-toggle is-fullwidth is-small\">\n <ul>\n <li class={currentStep === Steps.EXCHANGE ? \"is-active\" : \"\"}>\n <a style={{ cursor: \"initial\" }}>\n <span>Step 1: Specify exchange</span>\n </a>\n </li>\n <li\n class={currentStep === Steps.WIRE_METHOD ? \"is-active\" : \"\"}\n >\n <a style={{ cursor: \"initial\" }}>\n <span>Step 2: Select wire method</span>\n </a>\n </li>\n </ul>\n </div>\n\n <ViewStep\n step={currentStep}\n reserve={reserve}\n setCurrentStep={setCurrentStep}\n setReserve={setReserve}\n submitForm={submitForm}\n onBack={onBack}\n />\n </div>\n <div class=\"column\" />\n </div>\n </section>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport { useReservesAPI } from \"../../../../hooks/reserves.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { CreatedSuccessfully } from \"./CreatedSuccessfully.js\";\nimport { CreatePage } from \"./CreatePage.js\";\ninterface Props {\n onBack: () => void;\n onConfirm: () => void;\n}\nexport default function CreateReserve({ onBack, onConfirm }: Props): VNode {\n const { createReserve } = useReservesAPI();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { i18n } = useTranslationContext();\n\n const [createdOk, setCreatedOk] = useState<\n | {\n request: MerchantBackend.Tips.ReserveCreateRequest;\n response: MerchantBackend.Tips.ReserveCreateConfirmation;\n }\n | undefined\n >(undefined);\n\n if (createdOk) {\n return <CreatedSuccessfully entity={createdOk} onConfirm={onConfirm} />;\n }\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n <CreatePage\n onBack={onBack}\n onCreate={(request: MerchantBackend.Tips.ReserveCreateRequest) => {\n return createReserve(request)\n .then((r) => setCreatedOk({ request, response: r.data }))\n .catch((error) => {\n setNotif({\n message: i18n.str`could not create reserve`,\n type: \"ERROR\",\n description: error.message,\n });\n });\n }}\n />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\nimport { format } from \"date-fns\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useBackendContext } from \"../../../../context/backend.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\n\ntype Entity = MerchantBackend.Tips.TipDetails;\n\ninterface Props {\n id: string;\n entity: Entity;\n amount: string;\n}\n\nexport function TipInfo({ id, amount, entity }: Props): VNode {\n const { url } = useBackendContext();\n const tipHost = url.replace(/.*:\\/\\//, \"\"); // remove protocol part\n const proto = url.startsWith(\"http://\") ? \"taler+http\" : \"taler\";\n const tipURL = `${proto}://tip/${tipHost}/${id}`;\n return (\n <Fragment>\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">Amount</label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n <p class=\"control\">\n <input readonly class=\"input\" value={amount} />\n </p>\n </div>\n </div>\n </div>\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">URL</label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\" style={{ overflowWrap: \"anywhere\" }}>\n <p class=\"control\">\n <a target=\"_blank\" rel=\"noreferrer\" href={tipURL}>\n {tipURL}\n </a>\n </p>\n </div>\n </div>\n </div>\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">Valid until</label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n <p class=\"control\">\n <input\n class=\"input\"\n readonly\n value={\n !entity.expiration || entity.expiration.t_s === \"never\"\n ? \"never\"\n : format(\n entity.expiration.t_s * 1000,\n \"yyyy/MM/dd HH:mm:ss\",\n )\n }\n />\n </p>\n </div>\n </div>\n </div>\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport {\n Amounts,\n parsePaytoUri,\n stringifyPaytoUri,\n} from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { format } from \"date-fns\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { QR } from \"../../../../components/exception/QR.js\";\nimport { FormProvider } from \"../../../../components/form/FormProvider.js\";\nimport { Input } from \"../../../../components/form/Input.js\";\nimport { InputCurrency } from \"../../../../components/form/InputCurrency.js\";\nimport { InputDate } from \"../../../../components/form/InputDate.js\";\nimport { TextField } from \"../../../../components/form/TextField.js\";\nimport { SimpleModal } from \"../../../../components/modal/index.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport { useTipDetails } from \"../../../../hooks/reserves.js\";\nimport { TipInfo } from \"./TipInfo.js\";\n\ntype Entity = MerchantBackend.Tips.ReserveDetail;\ntype CT = MerchantBackend.ContractTerms;\n\ninterface Props {\n onBack: () => void;\n selected: Entity;\n id: string;\n}\n\nexport function DetailPage({ id, selected, onBack }: Props): VNode {\n const { i18n } = useTranslationContext();\n const didExchangeAckTransfer = Amounts.isNonZero(\n Amounts.parseOrThrow(selected.exchange_initial_amount),\n );\n const p = parsePaytoUri(selected.payto_uri);\n if (p) {\n p.params[\"message\"] = id;\n p.params[\"amount\"] = selected.merchant_initial_amount;\n }\n\n const link = !p ? selected.payto_uri : stringifyPaytoUri(p);\n\n return (\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-four-fifths\">\n <div class=\"section main-section\">\n <FormProvider object={{ ...selected, id }} valueHandler={null}>\n <InputDate<Entity>\n name=\"creation_time\"\n label={i18n.str`Created at`}\n readonly\n />\n <InputDate<Entity>\n name=\"expiration_time\"\n label={i18n.str`Valid until`}\n readonly\n />\n <InputCurrency<Entity>\n name=\"merchant_initial_amount\"\n label={i18n.str`Created balance`}\n readonly\n />\n <TextField<Entity>\n name=\"exchange_url\"\n label={i18n.str`Exchange URL`}\n readonly\n >\n <a target=\"_blank\" rel=\"noreferrer\" href={selected.exchange_url}>\n {selected.exchange_url}\n </a>\n </TextField>\n\n {didExchangeAckTransfer && (\n <Fragment>\n <InputCurrency<Entity>\n name=\"exchange_initial_amount\"\n label={i18n.str`Exchange balance`}\n readonly\n />\n <InputCurrency<Entity>\n name=\"pickup_amount\"\n label={i18n.str`Picked up`}\n readonly\n />\n <InputCurrency<Entity>\n name=\"committed_amount\"\n label={i18n.str`Committed`}\n readonly\n />\n </Fragment>\n )}\n <Input<Entity>\n name=\"payto_uri\"\n label={i18n.str`Account address`}\n readonly\n />\n <Input name=\"id\" label={i18n.str`Subject`} readonly />\n </FormProvider>\n\n {didExchangeAckTransfer ? (\n <Fragment>\n <div class=\"card has-table\">\n <header class=\"card-header\">\n <p class=\"card-header-title\">\n <span class=\"icon\">\n <i class=\"mdi mdi-cash-register\" />\n </span>\n <i18n.Translate>Tips</i18n.Translate>\n </p>\n </header>\n <div class=\"card-content\">\n <div class=\"b-table has-pagination\">\n <div class=\"table-wrapper has-mobile-cards\">\n {selected.tips && selected.tips.length > 0 ? (\n <Table tips={selected.tips} />\n ) : (\n <EmptyTable />\n )}\n </div>\n </div>\n </div>\n </div>\n </Fragment>\n ) : (\n <Fragment>\n <p class=\"is-size-5\">\n <i18n.Translate>\n To complete the setup of the reserve, you must now initiate a\n wire transfer using the given wire transfer subject and\n crediting the specified amount to the indicated account of the\n exchange.\n </i18n.Translate>\n </p>\n <p class=\"is-size-5\">\n <i18n.Translate>\n If your system supports RFC 8905, you can do this by opening\n this URI:\n </i18n.Translate>\n </p>\n <pre>\n <a target=\"_blank\" rel=\"noreferrer\" href={link}>\n {link}\n </a>\n </pre>\n <QR text={link} />\n </Fragment>\n )}\n\n <div class=\"buttons is-right mt-5\">\n <button class=\"button\" onClick={onBack}>\n <i18n.Translate>Back</i18n.Translate>\n </button>\n </div>\n </div>\n </div>\n <div class=\"column\" />\n </div>\n );\n}\n\nfunction EmptyTable(): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"content has-text-grey has-text-centered\">\n <p>\n <span class=\"icon is-large\">\n <i class=\"mdi mdi-emoticon-sad mdi-48px\" />\n </span>\n </p>\n <p>\n <i18n.Translate>\n No tips has been authorized from this reserve\n </i18n.Translate>\n </p>\n </div>\n );\n}\n\ninterface TableProps {\n tips: MerchantBackend.Tips.TipStatusEntry[];\n}\n\nfunction Table({ tips }: TableProps): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"table-container\">\n <table class=\"table is-fullwidth is-striped is-hoverable is-fullwidth\">\n <thead>\n <tr>\n <th>\n <i18n.Translate>Authorized</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Picked up</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Reason</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Expiration</i18n.Translate>\n </th>\n </tr>\n </thead>\n <tbody>\n {tips.map((t, i) => {\n return <TipRow id={t.tip_id} key={i} entry={t} />;\n })}\n </tbody>\n </table>\n </div>\n );\n}\n\nfunction TipRow({\n id,\n entry,\n}: {\n id: string;\n entry: MerchantBackend.Tips.TipStatusEntry;\n}) {\n const [selected, setSelected] = useState(false);\n const result = useTipDetails(id);\n if (result.loading) {\n return (\n <tr>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n </tr>\n );\n }\n if (!result.ok) {\n return (\n <tr>\n <td>...</td> {/* authorized */}\n <td>{entry.total_amount}</td>\n <td>{entry.reason}</td>\n <td>...</td> {/* expired */}\n </tr>\n );\n }\n const info = result.data;\n function onSelect() {\n setSelected(true);\n }\n return (\n <Fragment>\n {selected && (\n <SimpleModal\n description=\"tip\"\n active\n onCancel={() => setSelected(false)}\n >\n <TipInfo id={id} amount={info.total_authorized} entity={info} />\n </SimpleModal>\n )}\n <tr>\n <td onClick={onSelect}>{info.total_authorized}</td>\n <td onClick={onSelect}>{info.total_picked_up}</td>\n <td onClick={onSelect}>{info.reason}</td>\n <td onClick={onSelect}>\n {info.expiration.t_s === \"never\"\n ? \"never\"\n : format(info.expiration.t_s * 1000, \"yyyy/MM/dd HH:mm:ss\")}\n </td>\n </tr>\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { HttpError } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport { useReserveDetails } from \"../../../../hooks/reserves.js\";\nimport { DetailPage } from \"./DetailPage.js\";\n\ninterface Props {\n rid: string;\n\n onUnauthorized: () => VNode;\n onLoadError: (error: HttpError<MerchantBackend.ErrorDetail>) => VNode;\n onNotFound: () => VNode;\n onDelete: () => void;\n onBack: () => void;\n}\nexport default function DetailReserve({\n rid,\n onUnauthorized,\n onLoadError,\n onNotFound,\n onBack,\n onDelete,\n}: Props): VNode {\n const result = useReserveDetails(rid);\n\n if (result.clientError && result.isUnauthorized) return onUnauthorized();\n if (result.clientError && result.isNotfound) return onNotFound();\n if (result.loading) return <Loading />;\n if (!result.ok) return onLoadError(result);\n return (\n <Fragment>\n <DetailPage selected={result.data} onBack={onBack} id={rid} />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\nimport { format } from \"date-fns\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { CreatedSuccessfully as Template } from \"../../../../components/notifications/CreatedSuccessfully.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\n\ntype Entity = MerchantBackend.Tips.TipCreateConfirmation;\n\ninterface Props {\n entity: Entity;\n request: MerchantBackend.Tips.TipCreateRequest;\n onConfirm: () => void;\n onCreateAnother?: () => void;\n}\n\nexport function CreatedSuccessfully({\n request,\n entity,\n onConfirm,\n onCreateAnother,\n}: Props): VNode {\n return (\n <Fragment>\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">Amount</label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n <p class=\"control\">\n <input readonly class=\"input\" value={request.amount} />\n </p>\n </div>\n </div>\n </div>\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">Justification</label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n <p class=\"control\">\n <input readonly class=\"input\" value={request.justification} />\n </p>\n </div>\n </div>\n </div>\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">URL</label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n <p class=\"control\">\n <input readonly class=\"input\" value={entity.tip_status_url} />\n </p>\n </div>\n </div>\n </div>\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">Valid until</label>\n </div>\n <div class=\"field-body is-flex-grow-3\">\n <div class=\"field\">\n <p class=\"control\">\n <input\n class=\"input\"\n readonly\n value={\n !entity.tip_expiration ||\n entity.tip_expiration.t_s === \"never\"\n ? \"never\"\n : format(\n entity.tip_expiration.t_s * 1000,\n \"yyyy/MM/dd HH:mm:ss\",\n )\n }\n />\n </p>\n </div>\n </div>\n </div>\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport * as yup from \"yup\";\nimport {\n FormErrors,\n FormProvider,\n} from \"../../../../components/form/FormProvider.js\";\nimport { Input } from \"../../../../components/form/Input.js\";\nimport { InputCurrency } from \"../../../../components/form/InputCurrency.js\";\nimport {\n ConfirmModal,\n ContinueModal,\n} from \"../../../../components/modal/index.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport { AuthorizeTipSchema } from \"../../../../schemas/index.js\";\nimport { CreatedSuccessfully } from \"./CreatedSuccessfully.js\";\n\ninterface AuthorizeTipModalProps {\n onCancel: () => void;\n onConfirm: (value: MerchantBackend.Tips.TipCreateRequest) => void;\n tipAuthorized?: {\n response: MerchantBackend.Tips.TipCreateConfirmation;\n request: MerchantBackend.Tips.TipCreateRequest;\n };\n}\n\nexport function AuthorizeTipModal({\n onCancel,\n onConfirm,\n tipAuthorized,\n}: AuthorizeTipModalProps): VNode {\n // const result = useOrderDetails(id)\n type State = MerchantBackend.Tips.TipCreateRequest;\n const [form, setValue] = useState<Partial<State>>({});\n const { i18n } = useTranslationContext();\n\n // const [errors, setErrors] = useState<FormErrors<State>>({})\n let errors: FormErrors<State> = {};\n try {\n AuthorizeTipSchema.validateSync(form, { abortEarly: false });\n } catch (err) {\n if (err instanceof yup.ValidationError) {\n const yupErrors = err.inner as any[];\n errors = yupErrors.reduce(\n (prev, cur) =>\n !cur.path ? prev : { ...prev, [cur.path]: cur.message },\n {},\n );\n }\n }\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n\n const validateAndConfirm = () => {\n onConfirm(form as State);\n };\n if (tipAuthorized) {\n return (\n <ContinueModal description=\"tip\" active onConfirm={onCancel}>\n <CreatedSuccessfully\n entity={tipAuthorized.response}\n request={tipAuthorized.request}\n onConfirm={onCancel}\n />\n </ContinueModal>\n );\n }\n\n return (\n <ConfirmModal\n description=\"tip\"\n active\n onCancel={onCancel}\n disabled={hasErrors}\n onConfirm={validateAndConfirm}\n >\n <FormProvider<State>\n errors={errors}\n object={form}\n valueHandler={setValue}\n >\n <InputCurrency<State>\n name=\"amount\"\n label={i18n.str`Amount`}\n tooltip={i18n.str`amount of tip`}\n />\n <Input<State>\n name=\"justification\"\n label={i18n.str`Justification`}\n inputType=\"multiline\"\n tooltip={i18n.str`reason for the tip`}\n />\n <Input<State>\n name=\"next_url\"\n label={i18n.str`URL after tip`}\n tooltip={i18n.str`URL to visit after tip payment`}\n />\n </FormProvider>\n </ConfirmModal>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { format } from \"date-fns\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { MerchantBackend, WithId } from \"../../../../declaration.js\";\n\ntype Entity = MerchantBackend.Tips.ReserveStatusEntry & WithId;\n\ninterface Props {\n instances: Entity[];\n onNewTip: (id: Entity) => void;\n onSelect: (id: Entity) => void;\n onDelete: (id: Entity) => void;\n onCreate: () => void;\n}\n\nexport function CardTable({\n instances,\n onCreate,\n onSelect,\n onNewTip,\n onDelete,\n}: Props): VNode {\n const [withoutFunds, withFunds] = instances.reduce((prev, current) => {\n const amount = current.exchange_initial_amount;\n if (amount.endsWith(\":0\")) {\n prev[0] = prev[0].concat(current);\n } else {\n prev[1] = prev[1].concat(current);\n }\n return prev;\n }, new Array<Array<Entity>>([], []));\n\n const { i18n } = useTranslationContext();\n\n return (\n <Fragment>\n {withoutFunds.length > 0 && (\n <div class=\"card has-table\">\n <header class=\"card-header\">\n <p class=\"card-header-title\">\n <span class=\"icon\">\n <i class=\"mdi mdi-cash\" />\n </span>\n <i18n.Translate>Reserves not yet funded</i18n.Translate>\n </p>\n </header>\n <div class=\"card-content\">\n <div class=\"b-table has-pagination\">\n <div class=\"table-wrapper has-mobile-cards\">\n <TableWithoutFund\n instances={withoutFunds}\n onNewTip={onNewTip}\n onSelect={onSelect}\n onDelete={onDelete}\n />\n </div>\n </div>\n </div>\n </div>\n )}\n\n <div class=\"card has-table\">\n <header class=\"card-header\">\n <p class=\"card-header-title\">\n <span class=\"icon\">\n <i class=\"mdi mdi-cash\" />\n </span>\n <i18n.Translate>Reserves ready</i18n.Translate>\n </p>\n <div class=\"card-header-icon\" aria-label=\"more options\" />\n <div class=\"card-header-icon\" aria-label=\"more options\">\n <span\n class=\"has-tooltip-left\"\n data-tooltip={i18n.str`add new reserve`}\n >\n <button class=\"button is-info\" type=\"button\" onClick={onCreate}>\n <span class=\"icon is-small\">\n <i class=\"mdi mdi-plus mdi-36px\" />\n </span>\n </button>\n </span>\n </div>\n </header>\n <div class=\"card-content\">\n <div class=\"b-table has-pagination\">\n <div class=\"table-wrapper has-mobile-cards\">\n {withFunds.length > 0 ? (\n <Table\n instances={withFunds}\n onNewTip={onNewTip}\n onSelect={onSelect}\n onDelete={onDelete}\n />\n ) : (\n <EmptyTable />\n )}\n </div>\n </div>\n </div>\n </div>\n </Fragment>\n );\n}\ninterface TableProps {\n instances: Entity[];\n onNewTip: (id: Entity) => void;\n onDelete: (id: Entity) => void;\n onSelect: (id: Entity) => void;\n}\n\nfunction Table({ instances, onNewTip, onSelect, onDelete }: TableProps): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"table-container\">\n <table class=\"table is-fullwidth is-striped is-hoverable is-fullwidth\">\n <thead>\n <tr>\n <th>\n <i18n.Translate>Created at</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Expires at</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Initial</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Picked up</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Committed</i18n.Translate>\n </th>\n <th />\n </tr>\n </thead>\n <tbody>\n {instances.map((i) => {\n return (\n <tr key={i.id}>\n <td\n onClick={(): void => onSelect(i)}\n style={{ cursor: \"pointer\" }}\n >\n {i.creation_time.t_s === \"never\"\n ? \"never\"\n : format(i.creation_time.t_s * 1000, \"yyyy/MM/dd HH:mm:ss\")}\n </td>\n <td\n onClick={(): void => onSelect(i)}\n style={{ cursor: \"pointer\" }}\n >\n {i.expiration_time.t_s === \"never\"\n ? \"never\"\n : format(\n i.expiration_time.t_s * 1000,\n \"yyyy/MM/dd HH:mm:ss\",\n )}\n </td>\n <td\n onClick={(): void => onSelect(i)}\n style={{ cursor: \"pointer\" }}\n >\n {i.exchange_initial_amount}\n </td>\n <td\n onClick={(): void => onSelect(i)}\n style={{ cursor: \"pointer\" }}\n >\n {i.pickup_amount}\n </td>\n <td\n onClick={(): void => onSelect(i)}\n style={{ cursor: \"pointer\" }}\n >\n {i.committed_amount}\n </td>\n <td class=\"is-actions-cell right-sticky\">\n <div class=\"buttons is-right\">\n <button\n class=\"button is-small is-danger has-tooltip-left\"\n data-tooltip={i18n.str`delete selected reserve from the database`}\n type=\"button\"\n onClick={(): void => onDelete(i)}\n >\n Delete\n </button>\n <button\n class=\"button is-small is-info has-tooltip-left\"\n data-tooltip={i18n.str`authorize new tip from selected reserve`}\n type=\"button\"\n onClick={(): void => onNewTip(i)}\n >\n New Tip\n </button>\n </div>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n}\n\nfunction EmptyTable(): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"content has-text-grey has-text-centered\">\n <p>\n <span class=\"icon is-large\">\n <i class=\"mdi mdi-emoticon-sad mdi-48px\" />\n </span>\n </p>\n <p>\n <i18n.Translate>\n There is no ready reserves yet, add more pressing the + sign or fund\n them\n </i18n.Translate>\n </p>\n </div>\n );\n}\n\nfunction TableWithoutFund({\n instances,\n onSelect,\n onDelete,\n}: TableProps): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"table-container\">\n <table class=\"table is-fullwidth is-striped is-hoverable is-fullwidth\">\n <thead>\n <tr>\n <th>\n <i18n.Translate>Created at</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Expires at</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Expected Balance</i18n.Translate>\n </th>\n <th />\n </tr>\n </thead>\n <tbody>\n {instances.map((i) => {\n return (\n <tr key={i.id}>\n <td\n onClick={(): void => onSelect(i)}\n style={{ cursor: \"pointer\" }}\n >\n {i.creation_time.t_s === \"never\"\n ? \"never\"\n : format(i.creation_time.t_s * 1000, \"yyyy/MM/dd HH:mm:ss\")}\n </td>\n <td\n onClick={(): void => onSelect(i)}\n style={{ cursor: \"pointer\" }}\n >\n {i.expiration_time.t_s === \"never\"\n ? \"never\"\n : format(\n i.expiration_time.t_s * 1000,\n \"yyyy/MM/dd HH:mm:ss\",\n )}\n </td>\n <td\n onClick={(): void => onSelect(i)}\n style={{ cursor: \"pointer\" }}\n >\n {i.merchant_initial_amount}\n </td>\n <td class=\"is-actions-cell right-sticky\">\n <div class=\"buttons is-right\">\n <button\n class=\"button is-small is-danger jb-modal has-tooltip-left\"\n type=\"button\"\n data-tooltip={i18n.str`delete selected reserve from the database`}\n onClick={(): void => onDelete(i)}\n >\n Delete\n </button>\n </div>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport {\n HttpError,\n useTranslationContext,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport {\n useInstanceReserves,\n useReservesAPI,\n} from \"../../../../hooks/reserves.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { AuthorizeTipModal } from \"./AutorizeTipModal.js\";\nimport { CardTable } from \"./Table.js\";\n\ninterface Props {\n onUnauthorized: () => VNode;\n onLoadError: (e: HttpError<MerchantBackend.ErrorDetail>) => VNode;\n onSelect: (id: string) => void;\n onNotFound: () => VNode;\n onCreate: () => void;\n}\n\ninterface TipConfirmation {\n response: MerchantBackend.Tips.TipCreateConfirmation;\n request: MerchantBackend.Tips.TipCreateRequest;\n}\n\nexport default function ListTips({\n onUnauthorized,\n onLoadError,\n onNotFound,\n onSelect,\n onCreate,\n}: Props): VNode {\n const result = useInstanceReserves();\n const { deleteReserve, authorizeTipReserve } = useReservesAPI();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { i18n } = useTranslationContext();\n const [reserveForTip, setReserveForTip] = useState<string | undefined>(\n undefined,\n );\n const [tipAuthorized, setTipAuthorized] = useState<\n TipConfirmation | undefined\n >(undefined);\n\n if (result.clientError && result.isUnauthorized) return onUnauthorized();\n if (result.clientError && result.isNotfound) return onNotFound();\n if (result.loading) return <Loading />;\n if (!result.ok) return onLoadError(result);\n\n return (\n <section class=\"section is-main-section\">\n <NotificationCard notification={notif} />\n\n {reserveForTip && (\n <AuthorizeTipModal\n onCancel={() => {\n setReserveForTip(undefined);\n setTipAuthorized(undefined);\n }}\n tipAuthorized={tipAuthorized}\n onConfirm={async (request) => {\n try {\n const response = await authorizeTipReserve(\n reserveForTip,\n request,\n );\n setTipAuthorized({\n request,\n response: response.data,\n });\n } catch (error) {\n setNotif({\n message: i18n.str`could not create the tip`,\n type: \"ERROR\",\n description: error instanceof Error ? error.message : undefined,\n });\n setReserveForTip(undefined);\n }\n }}\n />\n )}\n\n <CardTable\n instances={result.data.reserves\n .filter((r) => r.active)\n .map((o) => ({ ...o, id: o.reserve_pub }))}\n onCreate={onCreate}\n onDelete={(reserve) => deleteReserve(reserve.reserve_pub)}\n onSelect={(reserve) => onSelect(reserve.id)}\n onNewTip={(reserve) => setReserveForTip(reserve.id)}\n />\n </section>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\nimport {\n HttpResponse,\n HttpResponseOk,\n HttpResponsePaginated,\n RequestError,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { MerchantBackend } from \"../declaration.js\";\nimport { MAX_RESULT_SIZE, PAGE_SIZE } from \"../utils/constants.js\";\nimport { useBackendInstanceRequest, useMatchMutate } from \"./backend.js\";\n\n// FIX default import https://github.com/microsoft/TypeScript/issues/49189\nimport _useSWR, { SWRHook } from \"swr\";\nconst useSWR = _useSWR as unknown as SWRHook;\n\nexport function useTemplateAPI(): TemplateAPI {\n const mutateAll = useMatchMutate();\n const { request } = useBackendInstanceRequest();\n\n const createTemplate = async (\n data: MerchantBackend.Template.TemplateAddDetails,\n ): Promise<HttpResponseOk<void>> => {\n const res = await request<void>(`/private/templates`, {\n method: \"POST\",\n data,\n });\n await mutateAll(/.*private\\/templates.*/);\n return res;\n };\n\n const updateTemplate = async (\n templateId: string,\n data: MerchantBackend.Template.TemplatePatchDetails,\n ): Promise<HttpResponseOk<void>> => {\n const res = await request<void>(`/private/templates/${templateId}`, {\n method: \"PATCH\",\n data,\n });\n await mutateAll(/.*private\\/templates.*/);\n return res;\n };\n\n const deleteTemplate = async (\n templateId: string,\n ): Promise<HttpResponseOk<void>> => {\n const res = await request<void>(`/private/templates/${templateId}`, {\n method: \"DELETE\",\n });\n await mutateAll(/.*private\\/templates.*/);\n return res;\n };\n\n const createOrderFromTemplate = async (\n templateId: string,\n data: MerchantBackend.Template.UsingTemplateDetails,\n ): Promise<\n HttpResponseOk<MerchantBackend.Template.UsingTemplateResponse>\n > => {\n const res = await request<MerchantBackend.Template.UsingTemplateResponse>(\n `/templates/${templateId}`,\n {\n method: \"POST\",\n data,\n },\n );\n await mutateAll(/.*private\\/templates.*/);\n return res;\n };\n\n return {\n createTemplate,\n updateTemplate,\n deleteTemplate,\n createOrderFromTemplate,\n };\n}\n\nexport interface TemplateAPI {\n createTemplate: (\n data: MerchantBackend.Template.TemplateAddDetails,\n ) => Promise<HttpResponseOk<void>>;\n updateTemplate: (\n id: string,\n data: MerchantBackend.Template.TemplatePatchDetails,\n ) => Promise<HttpResponseOk<void>>;\n deleteTemplate: (id: string) => Promise<HttpResponseOk<void>>;\n createOrderFromTemplate: (\n id: string,\n data: MerchantBackend.Template.UsingTemplateDetails,\n ) => Promise<HttpResponseOk<MerchantBackend.Template.UsingTemplateResponse>>;\n}\n\nexport interface InstanceTemplateFilter {\n //FIXME: add filter to the template list\n position?: string;\n}\n\nexport function useInstanceTemplates(\n args?: InstanceTemplateFilter,\n updatePosition?: (id: string) => void,\n): HttpResponsePaginated<\n MerchantBackend.Template.TemplateSummaryResponse,\n MerchantBackend.ErrorDetail\n> {\n const { templateFetcher } = useBackendInstanceRequest();\n\n // const [pageBefore, setPageBefore] = useState(1);\n const [pageAfter, setPageAfter] = useState(1);\n\n const totalAfter = pageAfter * PAGE_SIZE;\n // const totalBefore = args?.position !== undefined ? pageBefore * PAGE_SIZE : 0;\n\n /**\n * FIXME: this can be cleaned up a little\n *\n * the logic of double query should be inside the orderFetch so from the hook perspective and cache\n * is just one query and one error status\n */\n // const {\n // data: beforeData,\n // error: beforeError,\n // isValidating: loadingBefore,\n // } = useSWR<HttpResponseOk<MerchantBackend.Template.TemplateSummaryResponse>, HttpError>(\n // [\n // `/private/templates`,\n // token,\n // url,\n // args?.position,\n // totalBefore,\n // ],\n // templateFetcher,\n // );\n const {\n data: afterData,\n error: afterError,\n isValidating: loadingAfter,\n } = useSWR<\n HttpResponseOk<MerchantBackend.Template.TemplateSummaryResponse>,\n RequestError<MerchantBackend.ErrorDetail>\n >([`/private/templates`, args?.position, -totalAfter], templateFetcher);\n\n //this will save last result\n // const [lastBefore, setLastBefore] = useState<\n // HttpResponse<MerchantBackend.Template.TemplateSummaryResponse, MerchantBackend.ErrorDetail>\n // >({ loading: true });\n const [lastAfter, setLastAfter] = useState<\n HttpResponse<\n MerchantBackend.Template.TemplateSummaryResponse,\n MerchantBackend.ErrorDetail\n >\n >({ loading: true });\n useEffect(() => {\n if (afterData) setLastAfter(afterData);\n // if (beforeData) setLastBefore(beforeData);\n }, [afterData /*, beforeData*/]);\n\n // if (beforeError) return beforeError;\n if (afterError) return afterError.info;\n\n // if the query returns less that we ask, then we have reach the end or beginning\n const isReachingEnd =\n afterData && afterData.data.templates.length < totalAfter;\n const isReachingStart = false;\n // args?.position === undefined\n // ||\n // (beforeData && beforeData.data.templates.length < totalBefore);\n\n const pagination = {\n isReachingEnd,\n isReachingStart,\n loadMore: () => {\n if (!afterData || isReachingEnd) return;\n if (afterData.data.templates.length < MAX_RESULT_SIZE) {\n setPageAfter(pageAfter + 1);\n } else {\n const from = `${\n afterData.data.templates[afterData.data.templates.length - 1]\n .template_id\n }`;\n if (from && updatePosition) updatePosition(from);\n }\n },\n loadMorePrev: () => {\n // if (!beforeData || isReachingStart) return;\n // if (beforeData.data.templates.length < MAX_RESULT_SIZE) {\n // setPageBefore(pageBefore + 1);\n // } else if (beforeData) {\n // const from = `${beforeData.data.templates[beforeData.data.templates.length - 1]\n // .template_id\n // }`;\n // if (from && updatePosition) updatePosition(from);\n // }\n },\n };\n\n const templates = !afterData ? [] : (afterData || lastAfter).data.templates;\n // const templates =\n // !beforeData || !afterData\n // ? []\n // : (beforeData || lastBefore).data.templates\n // .slice()\n // .reverse()\n // .concat((afterData || lastAfter).data.templates);\n if (loadingAfter /* || loadingBefore */)\n return { loading: true, data: { templates } };\n if (/*beforeData &&*/ afterData) {\n return { ok: true, data: { templates }, ...pagination };\n }\n return { loading: true };\n}\n\nexport function useTemplateDetails(\n templateId: string,\n): HttpResponse<\n MerchantBackend.Template.TemplateDetails,\n MerchantBackend.ErrorDetail\n> {\n const { templateFetcher } = useBackendInstanceRequest();\n\n const { data, error, isValidating } = useSWR<\n HttpResponseOk<MerchantBackend.Template.TemplateDetails>,\n RequestError<MerchantBackend.ErrorDetail>\n >([`/private/templates/${templateId}`], templateFetcher, {\n refreshInterval: 0,\n refreshWhenHidden: false,\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n refreshWhenOffline: false,\n });\n\n if (isValidating) return { loading: true, data: data?.data };\n if (data) {\n const d = structuredClone(data);\n d.data.pos_algorithm = 1;\n return d;\n }\n if (error) return error.info;\n return { loading: true };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nconst encTable = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\";\n// base32 RFC 3548\nfunction encodeBase32(data: ArrayBuffer) {\n const dataBytes = new Uint8Array(data);\n let sb = \"\";\n const size = data.byteLength;\n let bitBuf = 0;\n let numBits = 0;\n let pos = 0;\n while (pos < size || numBits > 0) {\n if (pos < size && numBits < 5) {\n const d = dataBytes[pos++];\n bitBuf = (bitBuf << 8) | d;\n numBits += 8;\n }\n if (numBits < 5) {\n // zero-padding\n bitBuf = bitBuf << (5 - numBits);\n numBits = 5;\n }\n const v = (bitBuf >>> (numBits - 5)) & 31;\n sb += encTable[v];\n numBits -= 5;\n }\n return sb;\n}\n\nexport function randomBase32Key(): string {\n var buf = new Uint8Array(20);\n window.crypto.getRandomValues(buf);\n return encodeBase32(buf);\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { AsyncButton } from \"../../../../components/exception/AsyncButton.js\";\nimport {\n FormErrors,\n FormProvider,\n} from \"../../../../components/form/FormProvider.js\";\nimport { Input } from \"../../../../components/form/Input.js\";\nimport { InputCurrency } from \"../../../../components/form/InputCurrency.js\";\nimport { InputDuration } from \"../../../../components/form/InputDuration.js\";\nimport { InputNumber } from \"../../../../components/form/InputNumber.js\";\nimport { InputSelector } from \"../../../../components/form/InputSelector.js\";\nimport { InputWithAddon } from \"../../../../components/form/InputWithAddon.js\";\nimport { useBackendContext } from \"../../../../context/backend.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport { randomBase32Key } from \"../../../../utils/crypto.js\";\nimport { undefinedIfEmpty } from \"../../../../utils/table.js\";\n\ntype Entity = MerchantBackend.Template.TemplateAddDetails;\n\ninterface Props {\n onCreate: (d: Entity) => Promise<void>;\n onBack?: () => void;\n}\n\nconst algorithms = [\"0\", \"1\", \"2\"];\nconst algorithmsNames = [\n \"off\",\n \"30s 8d TOTP-SHA1 without amount\",\n \"30s 8d eTOTP-SHA1 with amount\",\n];\n\nexport function CreatePage({ onCreate, onBack }: Props): VNode {\n const { i18n } = useTranslationContext();\n const backend = useBackendContext();\n\n const [state, setState] = useState<Partial<Entity>>({\n template_contract: {\n minimum_age: 0,\n pay_duration: {\n d_us: 1000 * 1000 * 60 * 30, //30 min\n },\n },\n });\n\n const errors: FormErrors<Entity> = {\n template_id: !state.template_id ? i18n.str`should not be empty` : undefined,\n template_description: !state.template_description\n ? i18n.str`should not be empty`\n : undefined,\n template_contract: !state.template_contract\n ? undefined\n : undefinedIfEmpty({\n minimum_age:\n state.template_contract.minimum_age < 0\n ? i18n.str`should be greater that 0`\n : undefined,\n pay_duration: !state.template_contract.pay_duration\n ? i18n.str`can't be empty`\n : state.template_contract.pay_duration.d_us === \"forever\"\n ? undefined\n : state.template_contract.pay_duration.d_us < 1000 * 1000 //less than one second\n ? i18n.str`to short`\n : undefined,\n }),\n };\n\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n\n const submitForm = () => {\n if (hasErrors) return Promise.reject();\n return onCreate(state as any);\n };\n\n return (\n <div>\n <section class=\"section is-main-section\">\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-four-fifths\">\n <FormProvider\n object={state}\n valueHandler={setState}\n errors={errors}\n >\n <InputWithAddon<Entity>\n name=\"template_id\"\n addonBefore={`${backend.url}/instances/templates/`}\n label={i18n.str`Identifier`}\n tooltip={i18n.str`Name of the template in URLs.`}\n />\n <Input<Entity>\n name=\"template_description\"\n label={i18n.str`Description`}\n help=\"\"\n tooltip={i18n.str`Describe what this template stands for`}\n />\n <Input\n name=\"template_contract.summary\"\n inputType=\"multiline\"\n label={i18n.str`Fixed summary`}\n tooltip={i18n.str`If specified, this template will create order with the same summary`}\n />\n <InputCurrency\n name=\"template_contract.amount\"\n label={i18n.str`Fixed price`}\n tooltip={i18n.str`If specified, this template will create order with the same price`}\n />\n <InputNumber\n name=\"template_contract.minimum_age\"\n label={i18n.str`Minimum age`}\n help=\"\"\n tooltip={i18n.str`Is this contract restricted to some age?`}\n />\n <InputDuration\n name=\"template_contract.pay_duration\"\n label={i18n.str`Payment timeout`}\n help=\"\"\n tooltip={i18n.str`How much time has the customer to complete the payment once the order was created.`}\n />\n <InputSelector<Entity>\n name=\"pos_algorithm\"\n label={i18n.str`Veritifaction algorithm`}\n tooltip={i18n.str`Algorithm to use to verify transaction in offline mode`}\n values={algorithms}\n toStr={(v) => algorithmsNames[v]}\n convert={(v) => Number(v)}\n />\n {state.pos_algorithm && state.pos_algorithm > 0 ? (\n <Input<Entity>\n name=\"pos_key\"\n label={i18n.str`Point-of-sale key`}\n help=\"\"\n tooltip={i18n.str`Useful to validate the purchase`}\n side={\n <span data-tooltip={i18n.str`generate random secret key`}>\n <button\n class=\"button is-info mr-3\"\n onClick={(e) => {\n const pos_key = randomBase32Key();\n setState((s) => ({ ...s, pos_key }));\n }}\n >\n <i18n.Translate>random</i18n.Translate>\n </button>\n </span>\n }\n />\n ) : undefined}\n </FormProvider>\n\n <div class=\"buttons is-right mt-5\">\n {onBack && (\n <button class=\"button\" onClick={onBack}>\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n )}\n <AsyncButton\n disabled={hasErrors}\n data-tooltip={\n hasErrors\n ? i18n.str`Need to complete marked fields`\n : \"confirm operation\"\n }\n onClick={submitForm}\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </AsyncButton>\n </div>\n </div>\n <div class=\"column\" />\n </div>\n </section>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport { useTemplateAPI } from \"../../../../hooks/templates.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { CreatePage } from \"./CreatePage.js\";\n\nexport type Entity = MerchantBackend.Transfers.TransferInformation;\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n}\n\nexport default function CreateTransfer({ onConfirm, onBack }: Props): VNode {\n const { createTemplate } = useTemplateAPI();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { i18n } = useTranslationContext();\n\n return (\n <>\n <NotificationCard notification={notif} />\n <CreatePage\n onBack={onBack}\n onCreate={(request: MerchantBackend.Template.TemplateAddDetails) => {\n return createTemplate(request)\n .then(() => onConfirm())\n .catch((error) => {\n setNotif({\n message: i18n.str`could not inform template`,\n type: \"ERROR\",\n description: error.message,\n });\n });\n }}\n />\n </>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { AsyncButton } from \"../../../../components/exception/AsyncButton.js\";\nimport {\n FormErrors,\n FormProvider,\n} from \"../../../../components/form/FormProvider.js\";\nimport { Input } from \"../../../../components/form/Input.js\";\nimport { InputCurrency } from \"../../../../components/form/InputCurrency.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\n\ntype Entity = MerchantBackend.Template.UsingTemplateDetails;\n\ninterface Props {\n id: string;\n template: MerchantBackend.Template.TemplateDetails;\n onCreateOrder: (d: Entity) => Promise<void>;\n onBack?: () => void;\n}\n\nexport function UsePage({ id, template, onCreateOrder, onBack }: Props): VNode {\n const { i18n } = useTranslationContext();\n\n const [state, setState] = useState<Partial<Entity>>({\n amount: template.template_contract.amount,\n summary: template.template_contract.summary,\n });\n\n const errors: FormErrors<Entity> = {\n amount:\n !template.template_contract.amount && !state.amount\n ? i18n.str`Amount is required`\n : undefined,\n summary:\n !template.template_contract.summary && !state.summary\n ? i18n.str`Order summary is required`\n : undefined,\n };\n\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n\n const submitForm = () => {\n if (hasErrors) return Promise.reject();\n if (template.template_contract.amount) {\n delete state.amount;\n }\n if (template.template_contract.summary) {\n delete state.summary;\n }\n return onCreateOrder(state as any);\n };\n\n return (\n <div>\n <section class=\"section\">\n <section class=\"hero is-hero-bar\">\n <div class=\"hero-body\">\n <div class=\"level\">\n <div class=\"level-left\">\n <div class=\"level-item\">\n <span class=\"is-size-4\">\n <i18n.Translate>New order for template</i18n.Translate>:{\" \"}\n <b>{id}</b>\n </span>\n </div>\n </div>\n </div>\n </div>\n </section>\n </section>\n <section class=\"section is-main-section\">\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-four-fifths\">\n <FormProvider\n object={state}\n valueHandler={setState}\n errors={errors}\n >\n <InputCurrency<Entity>\n name=\"amount\"\n label={i18n.str`Amount`}\n readonly={!!template.template_contract.amount}\n tooltip={i18n.str`Amount of the order`}\n />\n <Input<Entity>\n name=\"summary\"\n inputType=\"multiline\"\n label={i18n.str`Order summary`}\n readonly={!!template.template_contract.summary}\n tooltip={i18n.str`Title of the order to be shown to the customer`}\n />\n </FormProvider>\n\n <div class=\"buttons is-right mt-5\">\n {onBack && (\n <button class=\"button\" onClick={onBack}>\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n )}\n <AsyncButton\n disabled={hasErrors}\n data-tooltip={\n hasErrors\n ? i18n.str`Need to complete marked fields`\n : \"confirm operation\"\n }\n onClick={submitForm}\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </AsyncButton>\n </div>\n </div>\n <div class=\"column\" />\n </div>\n </section>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport {\n HttpError,\n useTranslationContext,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport {\n useTemplateAPI,\n useTemplateDetails,\n} from \"../../../../hooks/templates.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { UsePage } from \"./UsePage.js\";\n\nexport type Entity = MerchantBackend.Transfers.TransferInformation;\ninterface Props {\n onBack?: () => void;\n onOrderCreated: (id: string) => void;\n onUnauthorized: () => VNode;\n onNotFound: () => VNode;\n onLoadError: (e: HttpError<MerchantBackend.ErrorDetail>) => VNode;\n tid: string;\n}\n\nexport default function TemplateUsePage({\n tid,\n onOrderCreated,\n onBack,\n onLoadError,\n onNotFound,\n onUnauthorized,\n}: Props): VNode {\n const { createOrderFromTemplate } = useTemplateAPI();\n const result = useTemplateDetails(tid);\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { i18n } = useTranslationContext();\n\n if (result.clientError && result.isUnauthorized) return onUnauthorized();\n if (result.clientError && result.isNotfound) return onNotFound();\n if (result.loading) return <Loading />;\n if (!result.ok) return onLoadError(result);\n\n return (\n <>\n <NotificationCard notification={notif} />\n <UsePage\n template={result.data}\n id={tid}\n onBack={onBack}\n onCreateOrder={(\n request: MerchantBackend.Template.UsingTemplateDetails,\n ) => {\n return createOrderFromTemplate(tid, request)\n .then((res) => onOrderCreated(res.data.order_id))\n .catch((error) => {\n setNotif({\n message: i18n.str`could not create order from template`,\n type: \"ERROR\",\n description: error.message,\n });\n });\n }}\n />\n </>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { buildPayto, classifyTalerUri } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { AsyncButton } from \"../../../../components/exception/AsyncButton.js\";\nimport { QR } from \"../../../../components/exception/QR.js\";\nimport {\n FormErrors,\n FormProvider,\n} from \"../../../../components/form/FormProvider.js\";\nimport { Input } from \"../../../../components/form/Input.js\";\nimport { InputCurrency } from \"../../../../components/form/InputCurrency.js\";\nimport { ConfirmModal } from \"../../../../components/modal/index.js\";\nimport { useBackendContext } from \"../../../../context/backend.js\";\nimport { useConfigContext } from \"../../../../context/config.js\";\nimport { useInstanceContext } from \"../../../../context/instance.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\n\ntype Entity = MerchantBackend.Template.UsingTemplateDetails;\n\ninterface Props {\n template: MerchantBackend.Template.TemplateDetails;\n id: string;\n onBack?: () => void;\n}\n\nexport function QrPage({ template, id: templateId, onBack }: Props): VNode {\n const { i18n } = useTranslationContext();\n const { url: backendUrl } = useBackendContext();\n const { id: instanceId } = useInstanceContext();\n const config = useConfigContext();\n const [setupTOTP, setSetupTOTP] = useState(false);\n\n const [state, setState] = useState<Partial<Entity>>({\n amount: template.template_contract.amount,\n summary: template.template_contract.summary,\n });\n\n const errors: FormErrors<Entity> = {};\n\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n\n const fixedAmount = !!template.template_contract.amount;\n const fixedSummary = !!template.template_contract.summary;\n\n const params = new URLSearchParams();\n if (!fixedAmount) {\n if (state.amount) {\n params.append(\"amount\", state.amount);\n } else {\n params.append(\"amount\", config.currency);\n }\n }\n if (!fixedSummary) {\n params.append(\"summary\", state.summary ?? \"\");\n }\n\n const paramsStr = fixedAmount && fixedSummary ? \"\" : \"?\" + params.toString();\n const merchantURL = new URL(backendUrl);\n\n const talerProto =\n merchantURL.protocol === \"http:\" ? \"taler+http:\" : \"taler:\";\n\n const payTemplateUri = `${talerProto}//pay-template/${merchantURL.hostname}/${templateId}${paramsStr}`;\n\n const issuer = encodeURIComponent(\n `${new URL(backendUrl).hostname}/${instanceId}`,\n );\n const oauthUri = !template.pos_algorithm\n ? undefined\n : template.pos_algorithm === 1\n ? `otpauth://totp/${issuer}:${templateId}?secret=${template.pos_key}&issuer=${issuer}&algorithm=SHA1&digits=8&period=30`\n : template.pos_algorithm === 2\n ? `otpauth://totp/${issuer}:${templateId}?secret=${template.pos_key}&issuer=${issuer}&algorithm=SHA1&digits=8&period=30`\n : undefined;\n\n const keySlice = template.pos_key?.substring(0, 4);\n\n const oauthUriWithoutSecret = !template.pos_algorithm\n ? undefined\n : template.pos_algorithm === 1\n ? `otpauth://totp/${issuer}:${templateId}?secret=${keySlice}...&issuer=${issuer}&algorithm=SHA1&digits=8&period=30`\n : template.pos_algorithm === 2\n ? `otpauth://totp/${issuer}:${templateId}?secret=${keySlice}...&issuer=${issuer}&algorithm=SHA1&digits=8&period=30`\n : undefined;\n return (\n <div>\n {oauthUri && (\n <ConfirmModal\n description=\"Setup TOTP\"\n active={setupTOTP}\n onCancel={() => {\n setSetupTOTP(false);\n }}\n >\n <p>Scan this qr code with your TOTP device</p>\n <QR text={oauthUri} />\n <pre style={{ textAlign: \"center\" }}>\n <a href={oauthUri}>{oauthUriWithoutSecret}</a>\n </pre>\n </ConfirmModal>\n )}\n <section class=\"section is-main-section\">\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-four-fifths\">\n <FormProvider\n object={state}\n valueHandler={setState}\n errors={errors}\n >\n <InputCurrency<Entity>\n name=\"amount\"\n label={i18n.str`Amount`}\n readonly={fixedAmount}\n tooltip={i18n.str`Amount of the order`}\n />\n <Input<Entity>\n name=\"summary\"\n inputType=\"multiline\"\n readonly={fixedSummary}\n label={i18n.str`Order summary`}\n tooltip={i18n.str`Title of the order to be shown to the customer`}\n />\n </FormProvider>\n\n <div class=\"buttons is-right mt-5\">\n {onBack && (\n <button class=\"button\" onClick={onBack}>\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n )}\n <button\n class=\"button is-info\"\n onClick={() => saveAsPDF(templateId)}\n >\n <i18n.Translate>Print</i18n.Translate>\n </button>\n {oauthUri && (\n <button\n class=\"button is-info\"\n onClick={() => setSetupTOTP(true)}\n >\n <i18n.Translate>Setup TOTP</i18n.Translate>\n </button>\n )}\n </div>\n </div>\n <div class=\"column\" />\n </div>\n </section>\n <section id=\"printThis\">\n <QR text={payTemplateUri} />\n <pre style={{ textAlign: \"center\" }}>\n <a href={payTemplateUri}>{payTemplateUri}</a>\n </pre>\n </section>\n </div>\n );\n}\n\nfunction saveAsPDF(name: string): void {\n const printWindow = window.open(\"\", \"\", \"height=400,width=800\");\n if (!printWindow) return;\n const divContents = document.getElementById(\"printThis\");\n if (!divContents) return;\n printWindow.document.write(\n `<html><head><title>Order template for ${name}</title><style>`,\n );\n printWindow.document.write(\"</style></head><body>&nbsp;</body></html>\");\n printWindow.document.close();\n printWindow.document.body.appendChild(divContents.cloneNode(true));\n printWindow.addEventListener(\"load\", () => {\n printWindow.print();\n printWindow.close();\n });\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport {\n HttpError,\n useTranslationContext,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport {\n useTemplateAPI,\n useTemplateDetails,\n} from \"../../../../hooks/templates.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { QrPage } from \"./QrPage.js\";\n\nexport type Entity = MerchantBackend.Transfers.TransferInformation;\ninterface Props {\n onBack?: () => void;\n onUnauthorized: () => VNode;\n onNotFound: () => VNode;\n onLoadError: (e: HttpError<MerchantBackend.ErrorDetail>) => VNode;\n tid: string;\n}\n\nexport default function TemplateQrPage({\n tid,\n onBack,\n onLoadError,\n onNotFound,\n onUnauthorized,\n}: Props): VNode {\n const result = useTemplateDetails(tid);\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n\n if (result.clientError && result.isUnauthorized) return onUnauthorized();\n if (result.clientError && result.isNotfound) return onNotFound();\n if (result.loading) return <Loading />;\n if (!result.ok) return onLoadError(result);\n\n return (\n <>\n <NotificationCard notification={notif} />\n <QrPage template={result.data} id={tid} onBack={onBack} />\n </>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { StateUpdater, useState } from \"preact/hooks\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\n\ntype Entity = MerchantBackend.Template.TemplateEntry;\n\ninterface Props {\n templates: Entity[];\n onDelete: (e: Entity) => void;\n onSelect: (e: Entity) => void;\n onNewOrder: (e: Entity) => void;\n onQR: (e: Entity) => void;\n onCreate: () => void;\n onLoadMoreBefore?: () => void;\n hasMoreBefore?: boolean;\n hasMoreAfter?: boolean;\n onLoadMoreAfter?: () => void;\n}\n\nexport function CardTable({\n templates,\n onCreate,\n onDelete,\n onSelect,\n onQR,\n onNewOrder,\n onLoadMoreAfter,\n onLoadMoreBefore,\n hasMoreAfter,\n hasMoreBefore,\n}: Props): VNode {\n const [rowSelection, rowSelectionHandler] = useState<string[]>([]);\n\n const { i18n } = useTranslationContext();\n\n return (\n <div class=\"card has-table\">\n <header class=\"card-header\">\n <p class=\"card-header-title\">\n <span class=\"icon\">\n <i class=\"mdi mdi-newspaper\" />\n </span>\n <i18n.Translate>Templates</i18n.Translate>\n </p>\n <div class=\"card-header-icon\" aria-label=\"more options\">\n <span\n class=\"has-tooltip-left\"\n data-tooltip={i18n.str`add new templates`}\n >\n <button class=\"button is-info\" type=\"button\" onClick={onCreate}>\n <span class=\"icon is-small\">\n <i class=\"mdi mdi-plus mdi-36px\" />\n </span>\n </button>\n </span>\n </div>\n </header>\n <div class=\"card-content\">\n <div class=\"b-table has-pagination\">\n <div class=\"table-wrapper has-mobile-cards\">\n {templates.length > 0 ? (\n <Table\n instances={templates}\n onDelete={onDelete}\n onSelect={onSelect}\n onNewOrder={onNewOrder}\n onQR={onQR}\n rowSelection={rowSelection}\n rowSelectionHandler={rowSelectionHandler}\n onLoadMoreAfter={onLoadMoreAfter}\n onLoadMoreBefore={onLoadMoreBefore}\n hasMoreAfter={hasMoreAfter}\n hasMoreBefore={hasMoreBefore}\n />\n ) : (\n <EmptyTable />\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\ninterface TableProps {\n rowSelection: string[];\n instances: Entity[];\n onDelete: (e: Entity) => void;\n onNewOrder: (e: Entity) => void;\n onQR: (e: Entity) => void;\n onSelect: (e: Entity) => void;\n rowSelectionHandler: StateUpdater<string[]>;\n onLoadMoreBefore?: () => void;\n hasMoreBefore?: boolean;\n hasMoreAfter?: boolean;\n onLoadMoreAfter?: () => void;\n}\n\nfunction toggleSelected<T>(id: T): (prev: T[]) => T[] {\n return (prev: T[]): T[] =>\n prev.indexOf(id) == -1 ? [...prev, id] : prev.filter((e) => e != id);\n}\n\nfunction Table({\n instances,\n onLoadMoreAfter,\n onDelete,\n onNewOrder,\n onQR,\n onSelect,\n onLoadMoreBefore,\n hasMoreAfter,\n hasMoreBefore,\n}: TableProps): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"table-container\">\n {onLoadMoreBefore && (\n <button\n class=\"button is-fullwidth\"\n data-tooltip={i18n.str`load more templates before the first one`}\n disabled={!hasMoreBefore}\n onClick={onLoadMoreBefore}\n >\n <i18n.Translate>load newer templates</i18n.Translate>\n </button>\n )}\n <table class=\"table is-fullwidth is-striped is-hoverable is-fullwidth\">\n <thead>\n <tr>\n <th>\n <i18n.Translate>ID</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Description</i18n.Translate>\n </th>\n <th />\n </tr>\n </thead>\n <tbody>\n {instances.map((i) => {\n return (\n <tr key={i.template_id}>\n <td\n onClick={(): void => onSelect(i)}\n style={{ cursor: \"pointer\" }}\n >\n {i.template_id}\n </td>\n <td\n onClick={(): void => onSelect(i)}\n style={{ cursor: \"pointer\" }}\n >\n {i.template_description}\n </td>\n <td class=\"is-actions-cell right-sticky\">\n <div class=\"buttons is-right\">\n <button\n class=\"button is-danger is-small has-tooltip-left\"\n data-tooltip={i18n.str`delete selected templates from the database`}\n onClick={() => onDelete(i)}\n >\n Delete\n </button>\n <button\n class=\"button is-info is-small has-tooltip-left\"\n data-tooltip={i18n.str`use template to create new order`}\n onClick={() => onNewOrder(i)}\n >\n New order\n </button>\n <button\n class=\"button is-info is-small has-tooltip-left\"\n data-tooltip={i18n.str`create qr code for the template`}\n onClick={() => onQR(i)}\n >\n QR\n </button>\n </div>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n {onLoadMoreAfter && (\n <button\n class=\"button is-fullwidth\"\n data-tooltip={i18n.str`load more templates after the last one`}\n disabled={!hasMoreAfter}\n onClick={onLoadMoreAfter}\n >\n <i18n.Translate>load older templates</i18n.Translate>\n </button>\n )}\n </div>\n );\n}\n\nfunction EmptyTable(): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"content has-text-grey has-text-centered\">\n <p>\n <span class=\"icon is-large\">\n <i class=\"mdi mdi-emoticon-sad mdi-48px\" />\n </span>\n </p>\n <p>\n <i18n.Translate>\n There is no templates yet, add more pressing the + sign\n </i18n.Translate>\n </p>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { h, VNode } from \"preact\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { CardTable } from \"./Table.js\";\n\nexport interface Props {\n templates: MerchantBackend.Template.TemplateEntry[];\n onLoadMoreBefore?: () => void;\n onLoadMoreAfter?: () => void;\n onCreate: () => void;\n onDelete: (e: MerchantBackend.Template.TemplateEntry) => void;\n onSelect: (e: MerchantBackend.Template.TemplateEntry) => void;\n onNewOrder: (e: MerchantBackend.Template.TemplateEntry) => void;\n onQR: (e: MerchantBackend.Template.TemplateEntry) => void;\n}\n\nexport function ListPage({\n templates,\n onCreate,\n onDelete,\n onSelect,\n onNewOrder,\n onQR,\n onLoadMoreBefore,\n onLoadMoreAfter,\n}: Props): VNode {\n const form = { payto_uri: \"\" };\n\n const { i18n } = useTranslationContext();\n return (\n <section class=\"section is-main-section\">\n <CardTable\n templates={templates.map((o) => ({\n ...o,\n id: String(o.template_id),\n }))}\n onQR={onQR}\n onCreate={onCreate}\n onDelete={onDelete}\n onSelect={onSelect}\n onNewOrder={onNewOrder}\n onLoadMoreBefore={onLoadMoreBefore}\n hasMoreBefore={!onLoadMoreBefore}\n onLoadMoreAfter={onLoadMoreAfter}\n hasMoreAfter={!onLoadMoreAfter}\n />\n </section>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport {\n HttpError,\n useTranslationContext,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport {\n useInstanceTemplates,\n useTemplateAPI,\n} from \"../../../../hooks/templates.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { ListPage } from \"./ListPage.js\";\n\ninterface Props {\n onUnauthorized: () => VNode;\n onLoadError: (error: HttpError<MerchantBackend.ErrorDetail>) => VNode;\n onNotFound: () => VNode;\n onCreate: () => void;\n onSelect: (id: string) => void;\n onNewOrder: (id: string) => void;\n onQR: (id: string) => void;\n}\n\nexport default function ListTemplates({\n onUnauthorized,\n onLoadError,\n onCreate,\n onQR,\n onSelect,\n onNewOrder,\n onNotFound,\n}: Props): VNode {\n const [position, setPosition] = useState<string | undefined>(undefined);\n const { i18n } = useTranslationContext();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { deleteTemplate } = useTemplateAPI();\n const result = useInstanceTemplates({ position }, (id) => setPosition(id));\n\n if (result.clientError && result.isUnauthorized) return onUnauthorized();\n if (result.clientError && result.isNotfound) return onNotFound();\n if (result.loading) return <Loading />;\n if (!result.ok) return onLoadError(result);\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n\n <ListPage\n templates={result.data.templates}\n onLoadMoreBefore={\n result.isReachingStart ? result.loadMorePrev : undefined\n }\n onLoadMoreAfter={result.isReachingEnd ? result.loadMore : undefined}\n onCreate={onCreate}\n onSelect={(e) => {\n onSelect(e.template_id);\n }}\n onNewOrder={(e) => {\n onNewOrder(e.template_id);\n }}\n onQR={(e) => {\n onQR(e.template_id);\n }}\n onDelete={(e: MerchantBackend.Template.TemplateEntry) =>\n deleteTemplate(e.template_id)\n .then(() =>\n setNotif({\n message: i18n.str`template delete successfully`,\n type: \"SUCCESS\",\n }),\n )\n .catch((error) =>\n setNotif({\n message: i18n.str`could not delete the template`,\n type: \"ERROR\",\n description: error.message,\n }),\n )\n }\n />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { AsyncButton } from \"../../../../components/exception/AsyncButton.js\";\nimport {\n FormErrors,\n FormProvider,\n} from \"../../../../components/form/FormProvider.js\";\nimport { Input } from \"../../../../components/form/Input.js\";\nimport { InputCurrency } from \"../../../../components/form/InputCurrency.js\";\nimport { InputDuration } from \"../../../../components/form/InputDuration.js\";\nimport { InputNumber } from \"../../../../components/form/InputNumber.js\";\nimport { InputSelector } from \"../../../../components/form/InputSelector.js\";\nimport { InputWithAddon } from \"../../../../components/form/InputWithAddon.js\";\nimport { useBackendContext } from \"../../../../context/backend.js\";\nimport { MerchantBackend, WithId } from \"../../../../declaration.js\";\nimport { randomBase32Key } from \"../../../../utils/crypto.js\";\nimport { undefinedIfEmpty } from \"../../../../utils/table.js\";\n\ntype Entity = MerchantBackend.Template.TemplatePatchDetails & WithId;\n\ninterface Props {\n onUpdate: (d: Entity) => Promise<void>;\n onBack?: () => void;\n template: Entity;\n}\n\nconst algorithms = [\"0\", \"1\", \"2\"];\nconst algorithmsNames = [\n \"off\",\n \"30s 8d TOTP-SHA1 without amount\",\n \"30s 8d eTOTP-SHA1 with amount\",\n];\n\nexport function UpdatePage({ template, onUpdate, onBack }: Props): VNode {\n const { i18n } = useTranslationContext();\n const backend = useBackendContext();\n\n const [showKey, setShowKey] = useState(false);\n const [state, setState] = useState<Partial<Entity>>(template);\n\n const errors: FormErrors<Entity> = {\n template_description: !state.template_description\n ? i18n.str`should not be empty`\n : undefined,\n template_contract: !state.template_contract\n ? undefined\n : undefinedIfEmpty({\n minimum_age:\n state.template_contract.minimum_age < 0\n ? i18n.str`should be greater that 0`\n : undefined,\n pay_duration: !state.template_contract.pay_duration\n ? i18n.str`can't be empty`\n : state.template_contract.pay_duration.d_us === \"forever\"\n ? undefined\n : state.template_contract.pay_duration.d_us < 1000 * 1000 // less than one second\n ? i18n.str`to short`\n : undefined,\n }),\n };\n\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n\n const submitForm = () => {\n if (hasErrors) return Promise.reject();\n return onUpdate(state as any);\n };\n\n return (\n <div>\n <section class=\"section\">\n <section class=\"hero is-hero-bar\">\n <div class=\"hero-body\">\n <div class=\"level\">\n <div class=\"level-left\">\n <div class=\"level-item\">\n <span class=\"is-size-4\">\n {backend.url}/instances/template/{template.id}\n </span>\n </div>\n </div>\n </div>\n </div>\n </section>\n <hr />\n\n <section class=\"section is-main-section\">\n <div class=\"columns\">\n <div class=\"column is-four-fifths\">\n <FormProvider\n object={state}\n valueHandler={setState}\n errors={errors}\n >\n <InputWithAddon<Entity>\n name=\"id\"\n addonBefore={`templates/`}\n readonly\n label={i18n.str`Identifier`}\n tooltip={i18n.str`Name of the template in URLs.`}\n />\n\n <Input<Entity>\n name=\"template_description\"\n label={i18n.str`Description`}\n help=\"\"\n tooltip={i18n.str`Describe what this template stands for`}\n />\n <Input\n name=\"template_contract.summary\"\n inputType=\"multiline\"\n label={i18n.str`Fixed summary`}\n tooltip={i18n.str`If specified, this template will create order with the same summary`}\n />\n <InputCurrency\n name=\"template_contract.amount\"\n label={i18n.str`Fixed price`}\n tooltip={i18n.str`If specified, this template will create order with the same price`}\n />\n <InputNumber\n name=\"template_contract.minimum_age\"\n label={i18n.str`Minimum age`}\n help=\"\"\n tooltip={i18n.str`Is this contract restricted to some age?`}\n />\n <InputDuration\n name=\"template_contract.pay_duration\"\n label={i18n.str`Payment timeout`}\n help=\"\"\n tooltip={i18n.str`How much time has the customer to complete the payment once the order was created.`}\n />\n <InputSelector<Entity>\n name=\"pos_algorithm\"\n label={i18n.str`Veritifaction algorithm`}\n tooltip={i18n.str`Algorithm to use to verify transaction in offline mode`}\n values={algorithms}\n toStr={(v) => algorithmsNames[v]}\n convert={(v) => Number(v)}\n />\n {state.pos_algorithm && state.pos_algorithm > 0 ? (\n <InputWithAddon<Entity>\n name=\"pos_key\"\n label={i18n.str`Point-of-sale key`}\n inputType={showKey ? \"text\" : \"password\"}\n help=\"\"\n expand\n tooltip={i18n.str`Useful to validate the purchase`}\n addonAfter={\n <span class=\"icon\">\n {showKey ? (\n <i class=\"mdi mdi-eye\" />\n ) : (\n <i class=\"mdi mdi-eye-off\" />\n )}\n </span>\n }\n side={\n <span>\n <button\n data-tooltip={i18n.str`generate random secret key`}\n class=\"button is-info mr-3\"\n onClick={(e) => {\n const pos_key = randomBase32Key();\n setState((s) => ({ ...s, pos_key }));\n }}\n >\n <i18n.Translate>random</i18n.Translate>\n </button>\n <button\n data-tooltip={\n showKey\n ? i18n.str`show secret key`\n : i18n.str`hide secret key`\n }\n class=\"button is-info mr-3\"\n onClick={(e) => {\n setShowKey(!showKey);\n }}\n >\n {showKey ? (\n <i18n.Translate>hide</i18n.Translate>\n ) : (\n <i18n.Translate>show</i18n.Translate>\n )}\n </button>\n </span>\n }\n />\n ) : undefined}\n </FormProvider>\n\n <div class=\"buttons is-right mt-5\">\n {onBack && (\n <button class=\"button\" onClick={onBack}>\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n )}\n <AsyncButton\n disabled={hasErrors}\n data-tooltip={\n hasErrors\n ? i18n.str`Need to complete marked fields`\n : \"confirm operation\"\n }\n onClick={submitForm}\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </AsyncButton>\n </div>\n </div>\n </div>\n </section>\n </section>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport {\n HttpError,\n useTranslationContext,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { MerchantBackend, WithId } from \"../../../../declaration.js\";\nimport {\n useTemplateAPI,\n useTemplateDetails,\n} from \"../../../../hooks/templates.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { UpdatePage } from \"./UpdatePage.js\";\n\nexport type Entity = MerchantBackend.Template.TemplatePatchDetails & WithId;\n\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n onUnauthorized: () => VNode;\n onNotFound: () => VNode;\n onLoadError: (e: HttpError<MerchantBackend.ErrorDetail>) => VNode;\n tid: string;\n}\nexport default function UpdateTemplate({\n tid,\n onConfirm,\n onBack,\n onUnauthorized,\n onNotFound,\n onLoadError,\n}: Props): VNode {\n const { updateTemplate } = useTemplateAPI();\n const result = useTemplateDetails(tid);\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n\n const { i18n } = useTranslationContext();\n\n if (result.clientError && result.isUnauthorized) return onUnauthorized();\n if (result.clientError && result.isNotfound) return onNotFound();\n if (result.loading) return <Loading />;\n if (!result.ok) return onLoadError(result);\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n <UpdatePage\n template={{ ...result.data, id: tid }}\n onBack={onBack}\n onUpdate={(data) => {\n return updateTemplate(tid, data)\n .then(onConfirm)\n .catch((error) => {\n setNotif({\n message: i18n.str`could not update template`,\n type: \"ERROR\",\n description: error.message,\n });\n });\n }}\n />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\nimport {\n HttpResponse,\n HttpResponseOk,\n HttpResponsePaginated,\n RequestError,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { MerchantBackend } from \"../declaration.js\";\nimport { MAX_RESULT_SIZE, PAGE_SIZE } from \"../utils/constants.js\";\nimport { useBackendInstanceRequest, useMatchMutate } from \"./backend.js\";\n\n// FIX default import https://github.com/microsoft/TypeScript/issues/49189\nimport _useSWR, { SWRHook } from \"swr\";\nconst useSWR = _useSWR as unknown as SWRHook;\n\nexport function useWebhookAPI(): WebhookAPI {\n const mutateAll = useMatchMutate();\n const { request } = useBackendInstanceRequest();\n\n const createWebhook = async (\n data: MerchantBackend.Webhooks.WebhookAddDetails,\n ): Promise<HttpResponseOk<void>> => {\n const res = await request<void>(`/private/webhooks`, {\n method: \"POST\",\n data,\n });\n await mutateAll(/.*private\\/webhooks.*/);\n return res;\n };\n\n const updateWebhook = async (\n webhookId: string,\n data: MerchantBackend.Webhooks.WebhookPatchDetails,\n ): Promise<HttpResponseOk<void>> => {\n const res = await request<void>(`/private/webhooks/${webhookId}`, {\n method: \"PATCH\",\n data,\n });\n await mutateAll(/.*private\\/webhooks.*/);\n return res;\n };\n\n const deleteWebhook = async (\n webhookId: string,\n ): Promise<HttpResponseOk<void>> => {\n const res = await request<void>(`/private/webhooks/${webhookId}`, {\n method: \"DELETE\",\n });\n await mutateAll(/.*private\\/webhooks.*/);\n return res;\n };\n\n return { createWebhook, updateWebhook, deleteWebhook };\n}\n\nexport interface WebhookAPI {\n createWebhook: (\n data: MerchantBackend.Webhooks.WebhookAddDetails,\n ) => Promise<HttpResponseOk<void>>;\n updateWebhook: (\n id: string,\n data: MerchantBackend.Webhooks.WebhookPatchDetails,\n ) => Promise<HttpResponseOk<void>>;\n deleteWebhook: (id: string) => Promise<HttpResponseOk<void>>;\n}\n\nexport interface InstanceWebhookFilter {\n //FIXME: add filter to the webhook list\n position?: string;\n}\n\nexport function useInstanceWebhooks(\n args?: InstanceWebhookFilter,\n updatePosition?: (id: string) => void,\n): HttpResponsePaginated<\n MerchantBackend.Webhooks.WebhookSummaryResponse,\n MerchantBackend.ErrorDetail\n> {\n const { webhookFetcher } = useBackendInstanceRequest();\n\n const [pageAfter, setPageAfter] = useState(1);\n\n const totalAfter = pageAfter * PAGE_SIZE;\n\n const {\n data: afterData,\n error: afterError,\n isValidating: loadingAfter,\n } = useSWR<\n HttpResponseOk<MerchantBackend.Webhooks.WebhookSummaryResponse>,\n RequestError<MerchantBackend.ErrorDetail>\n >([`/private/webhooks`, args?.position, -totalAfter], webhookFetcher);\n\n const [lastAfter, setLastAfter] = useState<\n HttpResponse<\n MerchantBackend.Webhooks.WebhookSummaryResponse,\n MerchantBackend.ErrorDetail\n >\n >({ loading: true });\n useEffect(() => {\n if (afterData) setLastAfter(afterData);\n }, [afterData]);\n\n if (afterError) return afterError.info;\n\n const isReachingEnd =\n afterData && afterData.data.webhooks.length < totalAfter;\n const isReachingStart = false;\n\n const pagination = {\n isReachingEnd,\n isReachingStart,\n loadMore: () => {\n if (!afterData || isReachingEnd) return;\n if (afterData.data.webhooks.length < MAX_RESULT_SIZE) {\n setPageAfter(pageAfter + 1);\n } else {\n const from = `${\n afterData.data.webhooks[afterData.data.webhooks.length - 1].webhook_id\n }`;\n if (from && updatePosition) updatePosition(from);\n }\n },\n loadMorePrev: () => {\n return;\n },\n };\n\n const webhooks = !afterData ? [] : (afterData || lastAfter).data.webhooks;\n\n if (loadingAfter) return { loading: true, data: { webhooks } };\n if (afterData) {\n return { ok: true, data: { webhooks }, ...pagination };\n }\n return { loading: true };\n}\n\nexport function useWebhookDetails(\n webhookId: string,\n): HttpResponse<\n MerchantBackend.Webhooks.WebhookDetails,\n MerchantBackend.ErrorDetail\n> {\n const { webhookFetcher } = useBackendInstanceRequest();\n\n const { data, error, isValidating } = useSWR<\n HttpResponseOk<MerchantBackend.Webhooks.WebhookDetails>,\n RequestError<MerchantBackend.ErrorDetail>\n >([`/private/webhooks/${webhookId}`], webhookFetcher, {\n refreshInterval: 0,\n refreshWhenHidden: false,\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n refreshWhenOffline: false,\n });\n\n if (isValidating) return { loading: true, data: data?.data };\n if (data) return data;\n if (error) return error.info;\n return { loading: true };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { AsyncButton } from \"../../../../components/exception/AsyncButton.js\";\nimport {\n FormErrors,\n FormProvider,\n} from \"../../../../components/form/FormProvider.js\";\nimport { Input } from \"../../../../components/form/Input.js\";\nimport { InputCurrency } from \"../../../../components/form/InputCurrency.js\";\nimport { InputDuration } from \"../../../../components/form/InputDuration.js\";\nimport { InputNumber } from \"../../../../components/form/InputNumber.js\";\nimport { useBackendContext } from \"../../../../context/backend.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\n\ntype Entity = MerchantBackend.Webhooks.WebhookAddDetails;\n\ninterface Props {\n onCreate: (d: Entity) => Promise<void>;\n onBack?: () => void;\n}\n\nconst validMethod = [\"GET\", \"POST\", \"PUT\", \"PATCH\", \"HEAD\"];\n\nexport function CreatePage({ onCreate, onBack }: Props): VNode {\n const { i18n } = useTranslationContext();\n\n const [state, setState] = useState<Partial<Entity>>({});\n\n const errors: FormErrors<Entity> = {\n webhook_id: !state.webhook_id ? i18n.str`required` : undefined,\n event_type: !state.event_type ? i18n.str`required` : undefined,\n http_method: !state.http_method\n ? i18n.str`required`\n : !validMethod.includes(state.http_method)\n ? i18n.str`should be one of '${validMethod.join(\", \")}'`\n : undefined,\n url: !state.url ? i18n.str`required` : undefined,\n };\n\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n\n const submitForm = () => {\n if (hasErrors) return Promise.reject();\n return onCreate(state as any);\n };\n\n return (\n <div>\n <section class=\"section is-main-section\">\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-four-fifths\">\n <FormProvider\n object={state}\n valueHandler={setState}\n errors={errors}\n >\n <Input<Entity>\n name=\"webhook_id\"\n label={i18n.str`ID`}\n tooltip={i18n.str`Webhook ID to use`}\n />\n <Input<Entity>\n name=\"event_type\"\n label={i18n.str`Event`}\n tooltip={i18n.str`The event of the webhook: why the webhook is used`}\n />\n <Input<Entity>\n name=\"http_method\"\n label={i18n.str`Method`}\n tooltip={i18n.str`Method used by the webhook`}\n />\n <Input<Entity>\n name=\"url\"\n label={i18n.str`URL`}\n tooltip={i18n.str`URL of the webhook where the customer will be redirected`}\n />\n <Input<Entity>\n name=\"header_template\"\n label={i18n.str`Header`}\n inputType=\"multiline\"\n tooltip={i18n.str`Header template of the webhook`}\n />\n <Input<Entity>\n name=\"body_template\"\n inputType=\"multiline\"\n label={i18n.str`Body`}\n tooltip={i18n.str`Body template by the webhook`}\n />\n </FormProvider>\n\n <div class=\"buttons is-right mt-5\">\n {onBack && (\n <button class=\"button\" onClick={onBack}>\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n )}\n <AsyncButton\n disabled={hasErrors}\n data-tooltip={\n hasErrors\n ? i18n.str`Need to complete marked fields`\n : \"confirm operation\"\n }\n onClick={submitForm}\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </AsyncButton>\n </div>\n </div>\n <div class=\"column\" />\n </div>\n </section>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport { useWebhookAPI } from \"../../../../hooks/webhooks.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { CreatePage } from \"./CreatePage.js\";\n\nexport type Entity = MerchantBackend.Webhooks.WebhookAddDetails;\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n}\n\nexport default function CreateWebhook({ onConfirm, onBack }: Props): VNode {\n const { createWebhook } = useWebhookAPI();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { i18n } = useTranslationContext();\n\n return (\n <>\n <NotificationCard notification={notif} />\n <CreatePage\n onBack={onBack}\n onCreate={(request: MerchantBackend.Webhooks.WebhookAddDetails) => {\n return createWebhook(request)\n .then(() => onConfirm())\n .catch((error) => {\n setNotif({\n message: i18n.str`could not inform template`,\n type: \"ERROR\",\n description: error.message,\n });\n });\n }}\n />\n </>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { StateUpdater, useState } from \"preact/hooks\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\n\ntype Entity = MerchantBackend.Webhooks.WebhookEntry;\n\ninterface Props {\n webhooks: Entity[];\n onDelete: (e: Entity) => void;\n onSelect: (e: Entity) => void;\n onCreate: () => void;\n onLoadMoreBefore?: () => void;\n hasMoreBefore?: boolean;\n hasMoreAfter?: boolean;\n onLoadMoreAfter?: () => void;\n}\n\nexport function CardTable({\n webhooks,\n onCreate,\n onDelete,\n onSelect,\n onLoadMoreAfter,\n onLoadMoreBefore,\n hasMoreAfter,\n hasMoreBefore,\n}: Props): VNode {\n const [rowSelection, rowSelectionHandler] = useState<string[]>([]);\n\n const { i18n } = useTranslationContext();\n\n return (\n <div class=\"card has-table\">\n <header class=\"card-header\">\n <p class=\"card-header-title\">\n <span class=\"icon\">\n <i class=\"mdi mdi-newspaper\" />\n </span>\n <i18n.Translate>Webhooks</i18n.Translate>\n </p>\n <div class=\"card-header-icon\" aria-label=\"more options\">\n <span\n class=\"has-tooltip-left\"\n data-tooltip={i18n.str`add new webhooks`}\n >\n <button class=\"button is-info\" type=\"button\" onClick={onCreate}>\n <span class=\"icon is-small\">\n <i class=\"mdi mdi-plus mdi-36px\" />\n </span>\n </button>\n </span>\n </div>\n </header>\n <div class=\"card-content\">\n <div class=\"b-table has-pagination\">\n <div class=\"table-wrapper has-mobile-cards\">\n {webhooks.length > 0 ? (\n <Table\n instances={webhooks}\n onDelete={onDelete}\n onSelect={onSelect}\n onNewOrder={(d) => {\n console.log(\"test\", d);\n }}\n rowSelection={rowSelection}\n rowSelectionHandler={rowSelectionHandler}\n onLoadMoreAfter={onLoadMoreAfter}\n onLoadMoreBefore={onLoadMoreBefore}\n hasMoreAfter={hasMoreAfter}\n hasMoreBefore={hasMoreBefore}\n />\n ) : (\n <EmptyTable />\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\ninterface TableProps {\n rowSelection: string[];\n instances: Entity[];\n onDelete: (e: Entity) => void;\n onNewOrder: (e: Entity) => void;\n onSelect: (e: Entity) => void;\n rowSelectionHandler: StateUpdater<string[]>;\n onLoadMoreBefore?: () => void;\n hasMoreBefore?: boolean;\n hasMoreAfter?: boolean;\n onLoadMoreAfter?: () => void;\n}\n\nfunction toggleSelected<T>(id: T): (prev: T[]) => T[] {\n return (prev: T[]): T[] =>\n prev.indexOf(id) == -1 ? [...prev, id] : prev.filter((e) => e != id);\n}\n\nfunction Table({\n instances,\n onLoadMoreAfter,\n onDelete,\n onNewOrder,\n onSelect,\n onLoadMoreBefore,\n hasMoreAfter,\n hasMoreBefore,\n}: TableProps): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"table-container\">\n {onLoadMoreBefore && (\n <button\n class=\"button is-fullwidth\"\n data-tooltip={i18n.str`load more webhooks before the first one`}\n disabled={!hasMoreBefore}\n onClick={onLoadMoreBefore}\n >\n <i18n.Translate>load newer webhooks</i18n.Translate>\n </button>\n )}\n <table class=\"table is-fullwidth is-striped is-hoverable is-fullwidth\">\n <thead>\n <tr>\n <th>\n <i18n.Translate>ID</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Event type</i18n.Translate>\n </th>\n <th />\n </tr>\n </thead>\n <tbody>\n {instances.map((i) => {\n return (\n <tr key={i.webhook_id}>\n <td\n onClick={(): void => onSelect(i)}\n style={{ cursor: \"pointer\" }}\n >\n {i.webhook_id}\n </td>\n <td\n onClick={(): void => onSelect(i)}\n style={{ cursor: \"pointer\" }}\n >\n {i.event_type}\n </td>\n <td class=\"is-actions-cell right-sticky\">\n <div class=\"buttons is-right\">\n <button\n class=\"button is-danger is-small has-tooltip-left\"\n data-tooltip={i18n.str`delete selected webhook from the database`}\n onClick={() => onDelete(i)}\n >\n Delete\n </button>\n {/* <button\n class=\"button is-info is-small has-tooltip-left\"\n data-tooltip={i18n.str`test webhook`}\n onClick={() => onNewOrder(i)}\n >\n Test\n </button> */}\n </div>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n {onLoadMoreAfter && (\n <button\n class=\"button is-fullwidth\"\n data-tooltip={i18n.str`load more webhooks after the last one`}\n disabled={!hasMoreAfter}\n onClick={onLoadMoreAfter}\n >\n <i18n.Translate>load older webhooks</i18n.Translate>\n </button>\n )}\n </div>\n );\n}\n\nfunction EmptyTable(): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"content has-text-grey has-text-centered\">\n <p>\n <span class=\"icon is-large\">\n <i class=\"mdi mdi-emoticon-sad mdi-48px\" />\n </span>\n </p>\n <p>\n <i18n.Translate>\n There is no webhooks yet, add more pressing the + sign\n </i18n.Translate>\n </p>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { h, VNode } from \"preact\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { CardTable } from \"./Table.js\";\n\nexport interface Props {\n webhooks: MerchantBackend.Webhooks.WebhookEntry[];\n onLoadMoreBefore?: () => void;\n onLoadMoreAfter?: () => void;\n onCreate: () => void;\n onDelete: (e: MerchantBackend.Webhooks.WebhookEntry) => void;\n onSelect: (e: MerchantBackend.Webhooks.WebhookEntry) => void;\n}\n\nexport function ListPage({\n webhooks,\n onCreate,\n onDelete,\n onSelect,\n onLoadMoreBefore,\n onLoadMoreAfter,\n}: Props): VNode {\n const form = { payto_uri: \"\" };\n\n const { i18n } = useTranslationContext();\n return (\n <section class=\"section is-main-section\">\n <CardTable\n webhooks={webhooks.map((o) => ({\n ...o,\n id: String(o.webhook_id),\n }))}\n onCreate={onCreate}\n onDelete={onDelete}\n onSelect={onSelect}\n onLoadMoreBefore={onLoadMoreBefore}\n hasMoreBefore={!onLoadMoreBefore}\n onLoadMoreAfter={onLoadMoreAfter}\n hasMoreAfter={!onLoadMoreAfter}\n />\n </section>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport {\n HttpError,\n useTranslationContext,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport {\n useInstanceWebhooks,\n useWebhookAPI,\n} from \"../../../../hooks/webhooks.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { ListPage } from \"./ListPage.js\";\n\ninterface Props {\n onUnauthorized: () => VNode;\n onLoadError: (error: HttpError<MerchantBackend.ErrorDetail>) => VNode;\n onNotFound: () => VNode;\n onCreate: () => void;\n onSelect: (id: string) => void;\n}\n\nexport default function ListWebhooks({\n onUnauthorized,\n onLoadError,\n onCreate,\n onSelect,\n onNotFound,\n}: Props): VNode {\n const [position, setPosition] = useState<string | undefined>(undefined);\n const { i18n } = useTranslationContext();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { deleteWebhook } = useWebhookAPI();\n const result = useInstanceWebhooks({ position }, (id) => setPosition(id));\n\n if (result.clientError && result.isUnauthorized) return onUnauthorized();\n if (result.clientError && result.isNotfound) return onNotFound();\n if (result.loading) return <Loading />;\n if (!result.ok) return onLoadError(result);\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n\n <ListPage\n webhooks={result.data.webhooks}\n onLoadMoreBefore={\n result.isReachingStart ? result.loadMorePrev : undefined\n }\n onLoadMoreAfter={result.isReachingEnd ? result.loadMore : undefined}\n onCreate={onCreate}\n onSelect={(e) => {\n onSelect(e.webhook_id);\n }}\n onDelete={(e: MerchantBackend.Webhooks.WebhookEntry) =>\n deleteWebhook(e.webhook_id)\n .then(() =>\n setNotif({\n message: i18n.str`webhook delete successfully`,\n type: \"SUCCESS\",\n }),\n )\n .catch((error) =>\n setNotif({\n message: i18n.str`could not delete the webhook`,\n type: \"ERROR\",\n description: error.message,\n }),\n )\n }\n />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { AsyncButton } from \"../../../../components/exception/AsyncButton.js\";\nimport {\n FormErrors,\n FormProvider,\n} from \"../../../../components/form/FormProvider.js\";\nimport { Input } from \"../../../../components/form/Input.js\";\nimport { useBackendContext } from \"../../../../context/backend.js\";\nimport { MerchantBackend, WithId } from \"../../../../declaration.js\";\n\ntype Entity = MerchantBackend.Webhooks.WebhookPatchDetails & WithId;\n\ninterface Props {\n onUpdate: (d: Entity) => Promise<void>;\n onBack?: () => void;\n webhook: Entity;\n}\nconst validMethod = [\"GET\", \"POST\", \"PUT\", \"PATCH\", \"HEAD\"];\n\nexport function UpdatePage({ webhook, onUpdate, onBack }: Props): VNode {\n const { i18n } = useTranslationContext();\n\n const [state, setState] = useState<Partial<Entity>>(webhook);\n\n const errors: FormErrors<Entity> = {\n event_type: !state.event_type ? i18n.str`required` : undefined,\n http_method: !state.http_method\n ? i18n.str`required`\n : !validMethod.includes(state.http_method)\n ? i18n.str`should be one of '${validMethod.join(\", \")}'`\n : undefined,\n url: !state.url ? i18n.str`required` : undefined,\n };\n\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n\n const submitForm = () => {\n if (hasErrors) return Promise.reject();\n return onUpdate(state as any);\n };\n\n return (\n <div>\n <section class=\"section\">\n <section class=\"hero is-hero-bar\">\n <div class=\"hero-body\">\n <div class=\"level\">\n <div class=\"level-left\">\n <div class=\"level-item\">\n <span class=\"is-size-4\">\n Webhook: <b>{webhook.id}</b>\n </span>\n </div>\n </div>\n </div>\n </div>\n </section>\n <hr />\n\n <section class=\"section is-main-section\">\n <div class=\"columns\">\n <div class=\"column is-four-fifths\">\n <FormProvider\n object={state}\n valueHandler={setState}\n errors={errors}\n >\n <Input<Entity>\n name=\"event_type\"\n label={i18n.str`Event`}\n tooltip={i18n.str`The event of the webhook: why the webhook is used`}\n />\n <Input<Entity>\n name=\"http_method\"\n label={i18n.str`Method`}\n tooltip={i18n.str`Method used by the webhook`}\n />\n <Input<Entity>\n name=\"url\"\n label={i18n.str`URL`}\n tooltip={i18n.str`URL of the webhook where the customer will be redirected`}\n />\n <Input<Entity>\n name=\"header_template\"\n label={i18n.str`Header`}\n inputType=\"multiline\"\n tooltip={i18n.str`Header template of the webhook`}\n />\n <Input<Entity>\n name=\"body_template\"\n inputType=\"multiline\"\n label={i18n.str`Body`}\n tooltip={i18n.str`Body template by the webhook`}\n />\n </FormProvider>\n\n <div class=\"buttons is-right mt-5\">\n {onBack && (\n <button class=\"button\" onClick={onBack}>\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n )}\n <AsyncButton\n disabled={hasErrors}\n data-tooltip={\n hasErrors\n ? i18n.str`Need to complete marked fields`\n : \"confirm operation\"\n }\n onClick={submitForm}\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </AsyncButton>\n </div>\n </div>\n </div>\n </section>\n </section>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport {\n HttpError,\n useTranslationContext,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { MerchantBackend, WithId } from \"../../../../declaration.js\";\nimport {\n useWebhookAPI,\n useWebhookDetails,\n} from \"../../../../hooks/webhooks.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { UpdatePage } from \"./UpdatePage.js\";\n\nexport type Entity = MerchantBackend.Webhooks.WebhookPatchDetails & WithId;\n\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n onUnauthorized: () => VNode;\n onNotFound: () => VNode;\n onLoadError: (e: HttpError<MerchantBackend.ErrorDetail>) => VNode;\n tid: string;\n}\nexport default function UpdateWebhook({\n tid,\n onConfirm,\n onBack,\n onUnauthorized,\n onNotFound,\n onLoadError,\n}: Props): VNode {\n const { updateWebhook } = useWebhookAPI();\n const result = useWebhookDetails(tid);\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n\n const { i18n } = useTranslationContext();\n\n if (result.clientError && result.isUnauthorized) return onUnauthorized();\n if (result.clientError && result.isNotfound) return onNotFound();\n if (result.loading) return <Loading />;\n if (!result.ok) return onLoadError(result);\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n <UpdatePage\n webhook={{ ...result.data, id: tid }}\n onBack={onBack}\n onUpdate={(data) => {\n return updateWebhook(tid, data)\n .then(onConfirm)\n .catch((error) => {\n setNotif({\n message: i18n.str`could not update template`,\n type: \"ERROR\",\n description: error.message,\n });\n });\n }}\n />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\nimport {\n HttpResponse,\n HttpResponseOk,\n HttpResponsePaginated,\n RequestError,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { MerchantBackend } from \"../declaration.js\";\nimport { MAX_RESULT_SIZE, PAGE_SIZE } from \"../utils/constants.js\";\nimport { useBackendInstanceRequest, useMatchMutate } from \"./backend.js\";\n\n// FIX default import https://github.com/microsoft/TypeScript/issues/49189\nimport _useSWR, { SWRHook } from \"swr\";\nconst useSWR = _useSWR as unknown as SWRHook;\n\nexport function useTransferAPI(): TransferAPI {\n const mutateAll = useMatchMutate();\n const { request } = useBackendInstanceRequest();\n\n const informTransfer = async (\n data: MerchantBackend.Transfers.TransferInformation,\n ): Promise<\n HttpResponseOk<MerchantBackend.Transfers.MerchantTrackTransferResponse>\n > => {\n const res =\n await request<MerchantBackend.Transfers.MerchantTrackTransferResponse>(\n `/private/transfers`,\n {\n method: \"POST\",\n data,\n },\n );\n\n await mutateAll(/.*private\\/transfers.*/);\n return res;\n };\n\n return { informTransfer };\n}\n\nexport interface TransferAPI {\n informTransfer: (\n data: MerchantBackend.Transfers.TransferInformation,\n ) => Promise<\n HttpResponseOk<MerchantBackend.Transfers.MerchantTrackTransferResponse>\n >;\n}\n\nexport interface InstanceTransferFilter {\n payto_uri?: string;\n verified?: \"yes\" | \"no\";\n position?: string;\n}\n\nexport function useInstanceTransfers(\n args?: InstanceTransferFilter,\n updatePosition?: (id: string) => void,\n): HttpResponsePaginated<\n MerchantBackend.Transfers.TransferList,\n MerchantBackend.ErrorDetail\n> {\n const { transferFetcher } = useBackendInstanceRequest();\n\n const [pageBefore, setPageBefore] = useState(1);\n const [pageAfter, setPageAfter] = useState(1);\n\n const totalAfter = pageAfter * PAGE_SIZE;\n const totalBefore = args?.position !== undefined ? pageBefore * PAGE_SIZE : 0;\n\n /**\n * FIXME: this can be cleaned up a little\n *\n * the logic of double query should be inside the orderFetch so from the hook perspective and cache\n * is just one query and one error status\n */\n const {\n data: beforeData,\n error: beforeError,\n isValidating: loadingBefore,\n } = useSWR<\n HttpResponseOk<MerchantBackend.Transfers.TransferList>,\n RequestError<MerchantBackend.ErrorDetail>\n >(\n [\n `/private/transfers`,\n args?.payto_uri,\n args?.verified,\n args?.position,\n totalBefore,\n ],\n transferFetcher,\n );\n const {\n data: afterData,\n error: afterError,\n isValidating: loadingAfter,\n } = useSWR<\n HttpResponseOk<MerchantBackend.Transfers.TransferList>,\n RequestError<MerchantBackend.ErrorDetail>\n >(\n [\n `/private/transfers`,\n args?.payto_uri,\n args?.verified,\n args?.position,\n -totalAfter,\n ],\n transferFetcher,\n );\n\n //this will save last result\n const [lastBefore, setLastBefore] = useState<\n HttpResponse<\n MerchantBackend.Transfers.TransferList,\n MerchantBackend.ErrorDetail\n >\n >({ loading: true });\n const [lastAfter, setLastAfter] = useState<\n HttpResponse<\n MerchantBackend.Transfers.TransferList,\n MerchantBackend.ErrorDetail\n >\n >({ loading: true });\n useEffect(() => {\n if (afterData) setLastAfter(afterData);\n if (beforeData) setLastBefore(beforeData);\n }, [afterData, beforeData]);\n\n if (beforeError) return beforeError.info;\n if (afterError) return afterError.info;\n\n // if the query returns less that we ask, then we have reach the end or beginning\n const isReachingEnd =\n afterData && afterData.data.transfers.length < totalAfter;\n const isReachingStart =\n args?.position === undefined ||\n (beforeData && beforeData.data.transfers.length < totalBefore);\n\n const pagination = {\n isReachingEnd,\n isReachingStart,\n loadMore: () => {\n if (!afterData || isReachingEnd) return;\n if (afterData.data.transfers.length < MAX_RESULT_SIZE) {\n setPageAfter(pageAfter + 1);\n } else {\n const from = `${\n afterData.data.transfers[afterData.data.transfers.length - 1]\n .transfer_serial_id\n }`;\n if (from && updatePosition) updatePosition(from);\n }\n },\n loadMorePrev: () => {\n if (!beforeData || isReachingStart) return;\n if (beforeData.data.transfers.length < MAX_RESULT_SIZE) {\n setPageBefore(pageBefore + 1);\n } else if (beforeData) {\n const from = `${\n beforeData.data.transfers[beforeData.data.transfers.length - 1]\n .transfer_serial_id\n }`;\n if (from && updatePosition) updatePosition(from);\n }\n },\n };\n\n const transfers =\n !beforeData || !afterData\n ? []\n : (beforeData || lastBefore).data.transfers\n .slice()\n .reverse()\n .concat((afterData || lastAfter).data.transfers);\n if (loadingAfter || loadingBefore)\n return { loading: true, data: { transfers } };\n if (beforeData && afterData) {\n return { ok: true, data: { transfers }, ...pagination };\n }\n return { loading: true };\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { AsyncButton } from \"../../../../components/exception/AsyncButton.js\";\nimport {\n FormErrors,\n FormProvider,\n} from \"../../../../components/form/FormProvider.js\";\nimport { Input } from \"../../../../components/form/Input.js\";\nimport { InputCurrency } from \"../../../../components/form/InputCurrency.js\";\nimport { InputSelector } from \"../../../../components/form/InputSelector.js\";\nimport { useConfigContext } from \"../../../../context/config.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport {\n CROCKFORD_BASE32_REGEX,\n URL_REGEX,\n} from \"../../../../utils/constants.js\";\n\ntype Entity = MerchantBackend.Transfers.TransferInformation;\n\ninterface Props {\n onCreate: (d: Entity) => Promise<void>;\n onBack?: () => void;\n accounts: string[];\n}\n\nexport function CreatePage({ accounts, onCreate, onBack }: Props): VNode {\n const { i18n } = useTranslationContext();\n const { currency } = useConfigContext();\n\n const [state, setState] = useState<Partial<Entity>>({\n wtid: \"\",\n // payto_uri: ,\n // exchange_url: 'http://exchange.taler:8081/',\n credit_amount: ``,\n });\n\n const errors: FormErrors<Entity> = {\n wtid: !state.wtid\n ? i18n.str`cannot be empty`\n : !CROCKFORD_BASE32_REGEX.test(state.wtid)\n ? i18n.str`check the id, does not look valid`\n : state.wtid.length !== 52\n ? i18n.str`should have 52 characters, current ${state.wtid.length}`\n : undefined,\n payto_uri: !state.payto_uri ? i18n.str`cannot be empty` : undefined,\n credit_amount: !state.credit_amount ? i18n.str`cannot be empty` : undefined,\n exchange_url: !state.exchange_url\n ? i18n.str`cannot be empty`\n : !URL_REGEX.test(state.exchange_url)\n ? i18n.str`URL doesn't have the right format`\n : undefined,\n };\n\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n\n const submitForm = () => {\n if (hasErrors) return Promise.reject();\n return onCreate(state as any);\n };\n\n return (\n <div>\n <section class=\"section is-main-section\">\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-four-fifths\">\n <FormProvider\n object={state}\n valueHandler={setState}\n errors={errors}\n >\n <InputSelector\n name=\"payto_uri\"\n label={i18n.str`Credited bank account`}\n values={accounts}\n placeholder={i18n.str`Select one account`}\n tooltip={i18n.str`Bank account of the merchant where the payment was received`}\n />\n <Input<Entity>\n name=\"wtid\"\n label={i18n.str`Wire transfer ID`}\n help=\"\"\n tooltip={i18n.str`unique identifier of the wire transfer used by the exchange, must be 52 characters long`}\n />\n <Input<Entity>\n name=\"exchange_url\"\n label={i18n.str`Exchange URL`}\n tooltip={i18n.str`Base URL of the exchange that made the transfer, should have been in the wire transfer subject`}\n help=\"http://exchange.taler:8081/\"\n />\n <InputCurrency<Entity>\n name=\"credit_amount\"\n label={i18n.str`Amount credited`}\n tooltip={i18n.str`Actual amount that was wired to the merchant's bank account`}\n />\n </FormProvider>\n\n <div class=\"buttons is-right mt-5\">\n {onBack && (\n <button class=\"button\" onClick={onBack}>\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n )}\n <AsyncButton\n disabled={hasErrors}\n data-tooltip={\n hasErrors\n ? i18n.str`Need to complete marked fields`\n : \"confirm operation\"\n }\n onClick={submitForm}\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </AsyncButton>\n </div>\n </div>\n <div class=\"column\" />\n </div>\n </section>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { NotificationCard } from \"../../../../components/menu/index.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport { useInstanceDetails } from \"../../../../hooks/instance.js\";\nimport { useTransferAPI } from \"../../../../hooks/transfer.js\";\nimport { Notification } from \"../../../../utils/types.js\";\nimport { CreatePage } from \"./CreatePage.js\";\n\nexport type Entity = MerchantBackend.Transfers.TransferInformation;\ninterface Props {\n onBack?: () => void;\n onConfirm: () => void;\n}\n\nexport default function CreateTransfer({ onConfirm, onBack }: Props): VNode {\n const { informTransfer } = useTransferAPI();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { i18n } = useTranslationContext();\n const instance = useInstanceDetails();\n const accounts = !instance.ok\n ? []\n : instance.data.accounts.map((a) => a.payto_uri);\n\n return (\n <>\n <NotificationCard notification={notif} />\n <CreatePage\n onBack={onBack}\n accounts={accounts}\n onCreate={(request: MerchantBackend.Transfers.TransferInformation) => {\n return informTransfer(request)\n .then(() => onConfirm())\n .catch((error) => {\n setNotif({\n message: i18n.str`could not inform transfer`,\n type: \"ERROR\",\n description: error.message,\n });\n });\n }}\n />\n </>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { format } from \"date-fns\";\nimport { h, VNode } from \"preact\";\nimport { StateUpdater, useState } from \"preact/hooks\";\nimport { MerchantBackend, WithId } from \"../../../../declaration.js\";\n\ntype Entity = MerchantBackend.Transfers.TransferDetails & WithId;\n\ninterface Props {\n transfers: Entity[];\n onDelete: (id: Entity) => void;\n onCreate: () => void;\n accounts: string[];\n onLoadMoreBefore?: () => void;\n hasMoreBefore?: boolean;\n hasMoreAfter?: boolean;\n onLoadMoreAfter?: () => void;\n}\n\nexport function CardTable({\n transfers,\n onCreate,\n onDelete,\n onLoadMoreAfter,\n onLoadMoreBefore,\n hasMoreAfter,\n hasMoreBefore,\n}: Props): VNode {\n const [rowSelection, rowSelectionHandler] = useState<string[]>([]);\n\n const { i18n } = useTranslationContext();\n\n return (\n <div class=\"card has-table\">\n <header class=\"card-header\">\n <p class=\"card-header-title\">\n <span class=\"icon\">\n <i class=\"mdi mdi-bank\" />\n </span>\n <i18n.Translate>Transfers</i18n.Translate>\n </p>\n <div class=\"card-header-icon\" aria-label=\"more options\">\n <span\n class=\"has-tooltip-left\"\n data-tooltip={i18n.str`add new transfer`}\n >\n <button class=\"button is-info\" type=\"button\" onClick={onCreate}>\n <span class=\"icon is-small\">\n <i class=\"mdi mdi-plus mdi-36px\" />\n </span>\n </button>\n </span>\n </div>\n </header>\n <div class=\"card-content\">\n <div class=\"b-table has-pagination\">\n <div class=\"table-wrapper has-mobile-cards\">\n {transfers.length > 0 ? (\n <Table\n instances={transfers}\n onDelete={onDelete}\n rowSelection={rowSelection}\n rowSelectionHandler={rowSelectionHandler}\n onLoadMoreAfter={onLoadMoreAfter}\n onLoadMoreBefore={onLoadMoreBefore}\n hasMoreAfter={hasMoreAfter}\n hasMoreBefore={hasMoreBefore}\n />\n ) : (\n <EmptyTable />\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\ninterface TableProps {\n rowSelection: string[];\n instances: Entity[];\n onDelete: (id: Entity) => void;\n rowSelectionHandler: StateUpdater<string[]>;\n onLoadMoreBefore?: () => void;\n hasMoreBefore?: boolean;\n hasMoreAfter?: boolean;\n onLoadMoreAfter?: () => void;\n}\n\nfunction toggleSelected<T>(id: T): (prev: T[]) => T[] {\n return (prev: T[]): T[] =>\n prev.indexOf(id) == -1 ? [...prev, id] : prev.filter((e) => e != id);\n}\n\nfunction Table({\n instances,\n onLoadMoreAfter,\n onDelete,\n onLoadMoreBefore,\n hasMoreAfter,\n hasMoreBefore,\n}: TableProps): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"table-container\">\n {onLoadMoreBefore && (\n <button\n class=\"button is-fullwidth\"\n data-tooltip={i18n.str`load more transfers before the first one`}\n disabled={!hasMoreBefore}\n onClick={onLoadMoreBefore}\n >\n <i18n.Translate>load newer transfers</i18n.Translate>\n </button>\n )}\n <table class=\"table is-fullwidth is-striped is-hoverable is-fullwidth\">\n <thead>\n <tr>\n <th>\n <i18n.Translate>ID</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Credit</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Address</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Exchange URL</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Confirmed</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Verified</i18n.Translate>\n </th>\n <th>\n <i18n.Translate>Executed at</i18n.Translate>\n </th>\n <th />\n </tr>\n </thead>\n <tbody>\n {instances.map((i) => {\n return (\n <tr key={i.id}>\n <td>{i.id}</td>\n <td>{i.credit_amount}</td>\n <td>{i.payto_uri}</td>\n <td>{i.exchange_url}</td>\n <td>{i.confirmed ? i18n.str`yes` : i18n.str`no`}</td>\n <td>{i.verified ? i18n.str`yes` : i18n.str`no`}</td>\n <td>\n {i.execution_time\n ? i.execution_time.t_s == \"never\"\n ? i18n.str`never`\n : format(\n i.execution_time.t_s * 1000,\n \"yyyy/MM/dd HH:mm:ss\",\n )\n : i18n.str`unknown`}\n </td>\n <td>\n {i.verified === undefined ? (\n <button\n class=\"button is-danger is-small has-tooltip-left\"\n data-tooltip={i18n.str`delete selected transfer from the database`}\n onClick={() => onDelete(i)}\n >\n Delete\n </button>\n ) : undefined}\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n {onLoadMoreAfter && (\n <button\n class=\"button is-fullwidth\"\n data-tooltip={i18n.str`load more transfer after the last one`}\n disabled={!hasMoreAfter}\n onClick={onLoadMoreAfter}\n >\n <i18n.Translate>load older transfers</i18n.Translate>\n </button>\n )}\n </div>\n );\n}\n\nfunction EmptyTable(): VNode {\n const { i18n } = useTranslationContext();\n return (\n <div class=\"content has-text-grey has-text-centered\">\n <p>\n <span class=\"icon is-large\">\n <i class=\"mdi mdi-emoticon-sad mdi-48px\" />\n </span>\n </p>\n <p>\n <i18n.Translate>\n There is no transfer yet, add more pressing the + sign\n </i18n.Translate>\n </p>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { FormProvider } from \"../../../../components/form/FormProvider.js\";\nimport { InputSelector } from \"../../../../components/form/InputSelector.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport { CardTable } from \"./Table.js\";\n\nexport interface Props {\n transfers: MerchantBackend.Transfers.TransferDetails[];\n onLoadMoreBefore?: () => void;\n onLoadMoreAfter?: () => void;\n onShowAll: () => void;\n onShowVerified: () => void;\n onShowUnverified: () => void;\n isVerifiedTransfers?: boolean;\n isNonVerifiedTransfers?: boolean;\n isAllTransfers?: boolean;\n accounts: string[];\n onChangePayTo: (p?: string) => void;\n payTo?: string;\n onCreate: () => void;\n onDelete: () => void;\n}\n\nexport function ListPage({\n payTo,\n onChangePayTo,\n transfers,\n onCreate,\n onDelete,\n accounts,\n onLoadMoreBefore,\n onLoadMoreAfter,\n isAllTransfers,\n isNonVerifiedTransfers,\n isVerifiedTransfers,\n onShowAll,\n onShowUnverified,\n onShowVerified,\n}: Props): VNode {\n const form = { payto_uri: payTo };\n\n const { i18n } = useTranslationContext();\n return (\n <section class=\"section is-main-section\">\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-10\">\n <FormProvider\n object={form}\n valueHandler={(updater) => onChangePayTo(updater(form).payto_uri)}\n >\n <InputSelector\n name=\"payto_uri\"\n label={i18n.str`Address`}\n values={accounts}\n placeholder={i18n.str`Select one account`}\n tooltip={i18n.str`filter by account address`}\n />\n </FormProvider>\n </div>\n <div class=\"column\" />\n </div>\n <div class=\"tabs\">\n <ul>\n <li class={isAllTransfers ? \"is-active\" : \"\"}>\n <div\n class=\"has-tooltip-right\"\n data-tooltip={i18n.str`remove all filters`}\n >\n <a onClick={onShowAll}>\n <i18n.Translate>All</i18n.Translate>\n </a>\n </div>\n </li>\n <li class={isVerifiedTransfers ? \"is-active\" : \"\"}>\n <div\n class=\"has-tooltip-right\"\n data-tooltip={i18n.str`only show wire transfers confirmed by the merchant`}\n >\n <a onClick={onShowVerified}>\n <i18n.Translate>Verified</i18n.Translate>\n </a>\n </div>\n </li>\n <li class={isNonVerifiedTransfers ? \"is-active\" : \"\"}>\n <div\n class=\"has-tooltip-right\"\n data-tooltip={i18n.str`only show wire transfers claimed by the exchange`}\n >\n <a onClick={onShowUnverified}>\n <i18n.Translate>Unverified</i18n.Translate>\n </a>\n </div>\n </li>\n </ul>\n </div>\n <CardTable\n transfers={transfers.map((o) => ({\n ...o,\n id: String(o.transfer_serial_id),\n }))}\n accounts={accounts}\n onCreate={onCreate}\n onDelete={onDelete}\n onLoadMoreBefore={onLoadMoreBefore}\n hasMoreBefore={!onLoadMoreBefore}\n onLoadMoreAfter={onLoadMoreAfter}\n hasMoreAfter={!onLoadMoreAfter}\n />\n </section>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { HttpError } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { Loading } from \"../../../../components/exception/loading.js\";\nimport { MerchantBackend } from \"../../../../declaration.js\";\nimport { useInstanceDetails } from \"../../../../hooks/instance.js\";\nimport { useInstanceTransfers } from \"../../../../hooks/transfer.js\";\nimport { ListPage } from \"./ListPage.js\";\n\ninterface Props {\n onUnauthorized: () => VNode;\n onLoadError: (error: HttpError<MerchantBackend.ErrorDetail>) => VNode;\n onNotFound: () => VNode;\n onCreate: () => void;\n}\ninterface Form {\n verified?: \"yes\" | \"no\";\n payto_uri?: string;\n}\n\nexport default function ListTransfer({\n onUnauthorized,\n onLoadError,\n onCreate,\n onNotFound,\n}: Props): VNode {\n const [form, setForm] = useState<Form>({ payto_uri: \"\" });\n const setFilter = (s?: \"yes\" | \"no\") => setForm({ ...form, verified: s });\n\n const [position, setPosition] = useState<string | undefined>(undefined);\n\n const instance = useInstanceDetails();\n const accounts = !instance.ok\n ? []\n : instance.data.accounts.map((a) => a.payto_uri);\n\n const isVerifiedTransfers = form.verified === \"yes\";\n const isNonVerifiedTransfers = form.verified === \"no\";\n const isAllTransfers = form.verified === undefined;\n\n const result = useInstanceTransfers(\n {\n position,\n payto_uri: form.payto_uri === \"\" ? undefined : form.payto_uri,\n verified: form.verified,\n },\n (id) => setPosition(id),\n );\n\n if (result.clientError && result.isUnauthorized) return onUnauthorized();\n if (result.clientError && result.isNotfound) return onNotFound();\n if (result.loading) return <Loading />;\n if (!result.ok) return onLoadError(result);\n\n return (\n <ListPage\n accounts={accounts}\n transfers={result.data.transfers}\n onLoadMoreBefore={\n result.isReachingStart ? result.loadMorePrev : undefined\n }\n onLoadMoreAfter={result.isReachingEnd ? result.loadMore : undefined}\n onCreate={onCreate}\n onDelete={() => {\n null;\n }}\n // position={position} setPosition={setPosition}\n onShowAll={() => setFilter(undefined)}\n onShowUnverified={() => setFilter(\"no\")}\n onShowVerified={() => setFilter(\"yes\")}\n isAllTransfers={isAllTransfers}\n isVerifiedTransfers={isVerifiedTransfers}\n isNonVerifiedTransfers={isNonVerifiedTransfers}\n payTo={form.payto_uri}\n onChangePayTo={(p) => setForm((v) => ({ ...v, payto_uri: p }))}\n />\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { Amounts } from \"@gnu-taler/taler-util\";\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { AsyncButton } from \"../../../components/exception/AsyncButton.js\";\nimport {\n FormErrors,\n FormProvider,\n} from \"../../../components/form/FormProvider.js\";\nimport { DefaultInstanceFormFields } from \"../../../components/instance/DefaultInstanceFormFields.js\";\nimport { UpdateTokenModal } from \"../../../components/modal/index.js\";\nimport { useInstanceContext } from \"../../../context/instance.js\";\nimport { MerchantBackend } from \"../../../declaration.js\";\nimport { PAYTO_REGEX } from \"../../../utils/constants.js\";\nimport { undefinedIfEmpty } from \"../../../utils/table.js\";\n\ntype Entity = MerchantBackend.Instances.InstanceReconfigurationMessage & {\n auth_token?: string;\n};\n\n//MerchantBackend.Instances.InstanceAuthConfigurationMessage\ninterface Props {\n onUpdate: (d: Entity) => void;\n onChangeAuth: (\n d: MerchantBackend.Instances.InstanceAuthConfigurationMessage,\n ) => Promise<void>;\n selected: MerchantBackend.Instances.QueryInstancesResponse;\n isLoading: boolean;\n onBack: () => void;\n}\n\nfunction convert(\n from: MerchantBackend.Instances.QueryInstancesResponse,\n): Entity {\n const { accounts, ...rest } = from;\n const payto_uris = accounts.filter((a) => a.active).map((a) => a.payto_uri);\n const defaults = {\n default_wire_fee_amortization: 1,\n default_pay_delay: { d_us: 2 * 1000 * 1000 * 60 * 60 }, //two hours\n default_wire_transfer_delay: { d_us: 2 * 1000 * 1000 * 60 * 60 * 2 }, //two hours\n };\n return { ...defaults, ...rest, payto_uris };\n}\n\nfunction getTokenValuePart(t?: string): string | undefined {\n if (!t) return t;\n const match = /secret-token:(.*)/.exec(t);\n if (!match || !match[1]) return undefined;\n return match[1];\n}\n\nexport function UpdatePage({\n onUpdate,\n onChangeAuth,\n selected,\n onBack,\n}: Props): VNode {\n const { id, token } = useInstanceContext();\n const currentTokenValue = getTokenValuePart(token);\n\n function updateToken(token: string | undefined | null) {\n const value =\n token && token.startsWith(\"secret-token:\")\n ? token.substring(\"secret-token:\".length)\n : token;\n\n if (!token) {\n onChangeAuth({ method: \"external\" });\n } else {\n onChangeAuth({ method: \"token\", token: `secret-token:${value}` });\n }\n }\n\n const [value, valueHandler] = useState<Partial<Entity>>(convert(selected));\n\n const { i18n } = useTranslationContext();\n\n const errors: FormErrors<Entity> = {\n name: !value.name ? i18n.str`required` : undefined,\n payto_uris:\n !value.payto_uris || !value.payto_uris.length\n ? i18n.str`required`\n : undefinedIfEmpty(\n value.payto_uris.map((p) => {\n return !PAYTO_REGEX.test(p) ? i18n.str`is not valid` : undefined;\n }),\n ),\n default_max_deposit_fee: !value.default_max_deposit_fee\n ? i18n.str`required`\n : !Amounts.parse(value.default_max_deposit_fee)\n ? i18n.str`invalid format`\n : undefined,\n default_max_wire_fee: !value.default_max_wire_fee\n ? i18n.str`required`\n : !Amounts.parse(value.default_max_wire_fee)\n ? i18n.str`invalid format`\n : undefined,\n default_wire_fee_amortization:\n value.default_wire_fee_amortization === undefined\n ? i18n.str`required`\n : isNaN(value.default_wire_fee_amortization)\n ? i18n.str`is not a number`\n : value.default_wire_fee_amortization < 1\n ? i18n.str`must be 1 or greater`\n : undefined,\n default_pay_delay: !value.default_pay_delay\n ? i18n.str`required`\n : undefined,\n default_wire_transfer_delay: !value.default_wire_transfer_delay\n ? i18n.str`required`\n : undefined,\n address: undefinedIfEmpty({\n address_lines:\n value.address?.address_lines && value.address?.address_lines.length > 7\n ? i18n.str`max 7 lines`\n : undefined,\n }),\n jurisdiction: undefinedIfEmpty({\n address_lines:\n value.address?.address_lines && value.address?.address_lines.length > 7\n ? i18n.str`max 7 lines`\n : undefined,\n }),\n };\n\n const hasErrors = Object.keys(errors).some(\n (k) => (errors as any)[k] !== undefined,\n );\n const submit = async (): Promise<void> => {\n await onUpdate(value as Entity);\n };\n const [active, setActive] = useState(false);\n\n return (\n <div>\n <section class=\"section\">\n <section class=\"hero is-hero-bar\">\n <div class=\"hero-body\">\n <div class=\"level\">\n <div class=\"level-left\">\n <div class=\"level-item\">\n <span class=\"is-size-4\">\n <i18n.Translate>Instance id</i18n.Translate>: <b>{id}</b>\n </span>\n </div>\n </div>\n <div class=\"level-right\">\n <div class=\"level-item\">\n <h1 class=\"title\">\n <button\n class=\"button is-danger\"\n data-tooltip={i18n.str`Change the authorization method use for this instance.`}\n onClick={(): void => {\n setActive(!active);\n }}\n >\n <div class=\"icon is-left\">\n <i class=\"mdi mdi-lock-reset\" />\n </div>\n <span>\n <i18n.Translate>Manage access token</i18n.Translate>\n </span>\n </button>\n </h1>\n </div>\n </div>\n </div>\n </div>\n </section>\n\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-four-fifths\">\n {active && (\n <UpdateTokenModal\n oldToken={currentTokenValue}\n onCancel={() => {\n setActive(false);\n }}\n onClear={() => {\n updateToken(null);\n setActive(false);\n }}\n onConfirm={(newToken) => {\n updateToken(newToken);\n setActive(false);\n }}\n />\n )}\n </div>\n <div class=\"column\" />\n </div>\n <hr />\n\n <div class=\"columns\">\n <div class=\"column\" />\n <div class=\"column is-four-fifths\">\n <FormProvider<Entity>\n errors={errors}\n object={value}\n valueHandler={valueHandler}\n >\n <DefaultInstanceFormFields showId={false} />\n </FormProvider>\n\n <div class=\"buttons is-right mt-4\">\n <button\n class=\"button\"\n onClick={onBack}\n data-tooltip=\"cancel operation\"\n >\n <i18n.Translate>Cancel</i18n.Translate>\n </button>\n\n <AsyncButton\n onClick={submit}\n data-tooltip={\n hasErrors\n ? i18n.str`Need to complete marked fields`\n : \"confirm operation\"\n }\n disabled={hasErrors}\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </AsyncButton>\n </div>\n </div>\n <div class=\"column\" />\n </div>\n </section>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\nimport {\n HttpError,\n HttpResponse,\n useTranslationContext,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { Loading } from \"../../../components/exception/loading.js\";\nimport { NotificationCard } from \"../../../components/menu/index.js\";\nimport { useInstanceContext } from \"../../../context/instance.js\";\nimport { MerchantBackend } from \"../../../declaration.js\";\nimport {\n useInstanceAPI,\n useInstanceDetails,\n useManagedInstanceDetails,\n useManagementAPI,\n} from \"../../../hooks/instance.js\";\nimport { Notification } from \"../../../utils/types.js\";\nimport { UpdatePage } from \"./UpdatePage.js\";\n\nexport interface Props {\n onBack: () => void;\n onConfirm: () => void;\n\n onUnauthorized: () => VNode;\n onNotFound: () => VNode;\n onLoadError: (e: HttpError<MerchantBackend.ErrorDetail>) => VNode;\n onUpdateError: (e: HttpError<MerchantBackend.ErrorDetail>) => void;\n}\n\nexport default function Update(props: Props): VNode {\n const { updateInstance, clearToken, setNewToken } = useInstanceAPI();\n const result = useInstanceDetails();\n return CommonUpdate(props, result, updateInstance, clearToken, setNewToken);\n}\n\nexport function AdminUpdate(props: Props & { instanceId: string }): VNode {\n const { updateInstance, clearToken, setNewToken } = useManagementAPI(\n props.instanceId,\n );\n const result = useManagedInstanceDetails(props.instanceId);\n return CommonUpdate(props, result, updateInstance, clearToken, setNewToken);\n}\n\nfunction CommonUpdate(\n {\n onBack,\n onConfirm,\n onLoadError,\n onNotFound,\n onUpdateError,\n onUnauthorized,\n }: Props,\n result: HttpResponse<\n MerchantBackend.Instances.QueryInstancesResponse,\n MerchantBackend.ErrorDetail\n >,\n updateInstance: any,\n clearToken: any,\n setNewToken: any,\n): VNode {\n const { changeToken } = useInstanceContext();\n const [notif, setNotif] = useState<Notification | undefined>(undefined);\n const { i18n } = useTranslationContext();\n\n if (result.clientError && result.isUnauthorized) return onUnauthorized();\n if (result.clientError && result.isNotfound) return onNotFound();\n if (result.loading) return <Loading />;\n if (!result.ok) return onLoadError(result);\n\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n <UpdatePage\n onBack={onBack}\n isLoading={false}\n selected={result.data}\n onUpdate={(\n d: MerchantBackend.Instances.InstanceReconfigurationMessage,\n ): Promise<void> => {\n return updateInstance(d)\n .then(onConfirm)\n .catch((error: Error) =>\n setNotif({\n message: i18n.str`Failed to create instance`,\n type: \"ERROR\",\n description: error.message,\n }),\n );\n }}\n onChangeAuth={(\n d: MerchantBackend.Instances.InstanceAuthConfigurationMessage,\n ): Promise<void> => {\n const apiCall =\n d.method === \"external\" ? clearToken() : setNewToken(d.token!);\n return apiCall\n .then(() => changeToken(d.token))\n .then(onConfirm)\n .catch(onUpdateError);\n }}\n />\n </Fragment>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { useBackendContext } from \"../../context/backend.js\";\nimport { useInstanceContext } from \"../../context/instance.js\";\nimport { Notification } from \"../../utils/types.js\";\n\ninterface Props {\n withMessage?: Notification;\n onConfirm: (backend: string, token?: string) => void;\n}\n\nfunction getTokenValuePart(t?: string): string | undefined {\n if (!t) return t;\n const match = /secret-token:(.*)/.exec(t);\n if (!match || !match[1]) return undefined;\n return match[1];\n}\n\nfunction normalizeToken(r: string | undefined): string | undefined {\n return r ? `secret-token:${encodeURIComponent(r)}` : undefined;\n}\n\nfunction cleanUp(s: string): string {\n let result = s;\n if (result.indexOf(\"webui/\") !== -1) {\n result = result.substring(0, result.indexOf(\"webui/\"));\n }\n return result;\n}\n\nexport function LoginModal({ onConfirm, withMessage }: Props): VNode {\n const { url: backendUrl, token: baseToken } = useBackendContext();\n const { admin, token: instanceToken } = useInstanceContext();\n const currentToken = getTokenValuePart(\n !admin ? baseToken : instanceToken || \"\",\n );\n const [token, setToken] = useState(currentToken);\n\n const [url, setURL] = useState(cleanUp(backendUrl));\n const { i18n } = useTranslationContext();\n\n return (\n <div class=\"columns is-centered\" style={{ margin: \"auto\" }}>\n <div class=\"column is-two-thirds \">\n <div class=\"modal-card\" style={{ width: \"100%\", margin: 0 }}>\n <header\n class=\"modal-card-head\"\n style={{ border: \"1px solid\", borderBottom: 0 }}\n >\n <p class=\"modal-card-title\">{i18n.str`Login required`}</p>\n </header>\n <section\n class=\"modal-card-body\"\n style={{ border: \"1px solid\", borderTop: 0, borderBottom: 0 }}\n >\n <i18n.Translate>Please enter your access token.</i18n.Translate>\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">URL</label>\n </div>\n <div class=\"field-body\">\n <div class=\"field\">\n <p class=\"control is-expanded\">\n <input\n class=\"input\"\n type=\"text\"\n placeholder=\"set new url\"\n name=\"id\"\n value={url}\n onKeyPress={(e) =>\n e.keyCode === 13\n ? onConfirm(url, normalizeToken(token))\n : null\n }\n onInput={(e): void => setURL(e?.currentTarget.value)}\n />\n </p>\n </div>\n </div>\n </div>\n <div class=\"field is-horizontal\">\n <div class=\"field-label is-normal\">\n <label class=\"label\">\n <i18n.Translate>Access Token</i18n.Translate>\n </label>\n </div>\n <div class=\"field-body\">\n <div class=\"field\">\n <p class=\"control is-expanded\">\n <input\n class=\"input\"\n type=\"password\"\n placeholder={\"set new access token\"}\n name=\"token\"\n onKeyPress={(e) =>\n e.keyCode === 13\n ? onConfirm(url, normalizeToken(token))\n : null\n }\n value={token}\n onInput={(e): void => setToken(e?.currentTarget.value)}\n />\n </p>\n </div>\n </div>\n </div>\n </section>\n <footer\n class=\"modal-card-foot \"\n style={{\n justifyContent: \"flex-end\",\n border: \"1px solid\",\n borderTop: 0,\n }}\n >\n <button\n class=\"button is-info\"\n onClick={(): void => {\n onConfirm(url, normalizeToken(token));\n }}\n >\n <i18n.Translate>Confirm</i18n.Translate>\n </button>\n </footer>\n </div>\n </div>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { h, VNode } from \"preact\";\nimport { LoginModal } from \"../../components/exception/login.js\";\n\ninterface Props {\n onConfirm: (url: string, token?: string) => void;\n}\nexport default function LoginPage({ onConfirm }: Props): VNode {\n return <LoginModal onConfirm={onConfirm} />;\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { h, VNode } from \"preact\";\nimport { Link } from \"preact-router\";\n\nexport default function NotFoundPage(): VNode {\n return (\n <div>\n <h1>Error 404</h1>\n <p>That page doesn&apos;t exist.</p>\n <Link href=\"/\">\n <h4>Back to Home</h4>\n </Link>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport {\n useTranslationContext,\n HttpError,\n ErrorType,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { format } from \"date-fns\";\nimport { Fragment, FunctionComponent, h, VNode } from \"preact\";\nimport { Route, route, Router } from \"preact-router\";\nimport { useCallback, useEffect, useMemo, useState } from \"preact/hooks\";\nimport { Loading } from \"./components/exception/loading.js\";\nimport { Menu, NotificationCard } from \"./components/menu/index.js\";\nimport { useBackendContext } from \"./context/backend.js\";\nimport { InstanceContextProvider } from \"./context/instance.js\";\nimport {\n useBackendDefaultToken,\n useBackendInstanceToken,\n useLocalStorage,\n} from \"./hooks/index.js\";\nimport { useInstanceKYCDetails } from \"./hooks/instance.js\";\nimport InstanceCreatePage from \"./paths/admin/create/index.js\";\nimport InstanceListPage from \"./paths/admin/list/index.js\";\nimport ListKYCPage from \"./paths/instance/kyc/list/index.js\";\nimport OrderCreatePage from \"./paths/instance/orders/create/index.js\";\nimport OrderDetailsPage from \"./paths/instance/orders/details/index.js\";\nimport OrderListPage from \"./paths/instance/orders/list/index.js\";\nimport ProductCreatePage from \"./paths/instance/products/create/index.js\";\nimport ProductListPage from \"./paths/instance/products/list/index.js\";\nimport ProductUpdatePage from \"./paths/instance/products/update/index.js\";\nimport ReservesCreatePage from \"./paths/instance/reserves/create/index.js\";\nimport ReservesDetailsPage from \"./paths/instance/reserves/details/index.js\";\nimport ReservesListPage from \"./paths/instance/reserves/list/index.js\";\nimport TemplateCreatePage from \"./paths/instance/templates/create/index.js\";\nimport TemplateUsePage from \"./paths/instance/templates/use/index.js\";\nimport TemplateQrPage from \"./paths/instance/templates/qr/index.js\";\nimport TemplateListPage from \"./paths/instance/templates/list/index.js\";\nimport TemplateUpdatePage from \"./paths/instance/templates/update/index.js\";\nimport WebhookCreatePage from \"./paths/instance/webhooks/create/index.js\";\nimport WebhookListPage from \"./paths/instance/webhooks/list/index.js\";\nimport WebhookUpdatePage from \"./paths/instance/webhooks/update/index.js\";\nimport TransferCreatePage from \"./paths/instance/transfers/create/index.js\";\nimport TransferListPage from \"./paths/instance/transfers/list/index.js\";\nimport InstanceUpdatePage, {\n AdminUpdate as InstanceAdminUpdatePage,\n Props as InstanceUpdatePageProps,\n} from \"./paths/instance/update/index.js\";\nimport LoginPage from \"./paths/login/index.js\";\nimport NotFoundPage from \"./paths/notfound/index.js\";\nimport { Notification } from \"./utils/types.js\";\nimport { MerchantBackend } from \"./declaration.js\";\n\nexport enum InstancePaths {\n // details = '/',\n error = \"/error\",\n update = \"/update\",\n\n product_list = \"/products\",\n product_update = \"/product/:pid/update\",\n product_new = \"/product/new\",\n\n order_list = \"/orders\",\n order_new = \"/order/new\",\n order_details = \"/order/:oid/details\",\n\n reserves_list = \"/reserves\",\n reserves_details = \"/reserves/:rid/details\",\n reserves_new = \"/reserves/new\",\n\n kyc = \"/kyc\",\n\n transfers_list = \"/transfers\",\n transfers_new = \"/transfer/new\",\n\n templates_list = \"/templates\",\n templates_update = \"/templates/:tid/update\",\n templates_new = \"/templates/new\",\n templates_use = \"/templates/:tid/use\",\n templates_qr = \"/templates/:tid/qr\",\n\n webhooks_list = \"/webhooks\",\n webhooks_update = \"/webhooks/:tid/update\",\n webhooks_new = \"/webhooks/new\",\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst noop = () => {};\n\nexport enum AdminPaths {\n list_instances = \"/instances\",\n new_instance = \"/instance/new\",\n update_instance = \"/instance/:id/update\",\n}\n\nexport interface Props {\n id: string;\n admin?: boolean;\n path: string;\n setInstanceName: (s: string) => void;\n}\n\nexport function InstanceRoutes({\n id,\n admin,\n path,\n setInstanceName,\n}: Props): VNode {\n const [_, updateDefaultToken] = useBackendDefaultToken();\n const [token, updateToken] = useBackendInstanceToken(id);\n const {\n updateLoginStatus: changeBackend,\n addTokenCleaner,\n clearAllTokens,\n } = useBackendContext();\n const cleaner = useCallback(() => {\n updateToken(undefined);\n }, [id]);\n const { i18n } = useTranslationContext();\n\n type GlobalNotifState = (Notification & { to: string }) | undefined;\n const [globalNotification, setGlobalNotification] =\n useState<GlobalNotifState>(undefined);\n\n useEffect(() => {\n addTokenCleaner(cleaner);\n }, [addTokenCleaner, cleaner]);\n\n const changeToken = (token?: string) => {\n if (admin) {\n updateToken(token);\n } else {\n updateDefaultToken(token);\n }\n };\n const updateLoginStatus = (url: string, token?: string) => {\n changeBackend(url);\n if (!token) return;\n changeToken(token);\n };\n\n const value = useMemo(\n () => ({ id, token, admin, changeToken }),\n [id, token, admin],\n );\n\n function ServerErrorRedirectTo(to: InstancePaths | AdminPaths) {\n return function ServerErrorRedirectToImpl(\n error: HttpError<MerchantBackend.ErrorDetail>,\n ) {\n if (error.type === ErrorType.TIMEOUT) {\n setGlobalNotification({\n message: i18n.str`The request to the backend take too long and was cancelled`,\n description: i18n.str`Diagnostic from ${error.info?.url} is '${error.message}'`,\n type: \"ERROR\",\n to,\n });\n } else {\n setGlobalNotification({\n message: i18n.str`The backend reported a problem: HTTP status #${error.status}`,\n description: i18n.str`Diagnostic from ${error.info?.url} is '${error.message}'`,\n details:\n error.clientError || error.serverError\n ? error.error?.detail\n : undefined,\n type: \"ERROR\",\n to,\n });\n }\n return <Redirect to={to} />;\n };\n }\n\n const LoginPageAccessDenied = () => (\n <Fragment>\n <NotificationCard\n notification={{\n message: i18n.str`Access denied`,\n description: i18n.str`The access token provided is invalid.`,\n type: \"ERROR\",\n }}\n />\n <LoginPage onConfirm={updateLoginStatus} />\n </Fragment>\n );\n\n function IfAdminCreateDefaultOr<T>(Next: FunctionComponent<any>) {\n return function IfAdminCreateDefaultOrImpl(props?: T) {\n if (admin && id === \"default\") {\n return (\n <Fragment>\n <NotificationCard\n notification={{\n message: i18n.str`No 'default' instance configured yet.`,\n description: i18n.str`Create a 'default' instance to begin using the merchant backoffice.`,\n type: \"INFO\",\n }}\n />\n <InstanceCreatePage\n forceId=\"default\"\n onConfirm={() => {\n route(AdminPaths.list_instances);\n }}\n />\n </Fragment>\n );\n }\n if (props) {\n return <Next {...props} />;\n }\n return <Next />;\n };\n }\n\n const clearTokenAndGoToRoot = () => {\n clearAllTokens();\n route(\"/\");\n };\n\n return (\n <InstanceContextProvider value={value}>\n <Menu\n instance={id}\n admin={admin}\n path={path}\n onLogout={clearTokenAndGoToRoot}\n setInstanceName={setInstanceName}\n />\n <KycBanner />\n <NotificationCard notification={globalNotification} />\n\n <Router\n onChange={(e) => {\n const movingOutFromNotification =\n globalNotification && e.url !== globalNotification.to;\n if (movingOutFromNotification) {\n setGlobalNotification(undefined);\n }\n }}\n >\n <Route path=\"/\" component={Redirect} to={InstancePaths.order_list} />\n {/**\n * Admin pages\n */}\n {admin && (\n <Route\n path={AdminPaths.list_instances}\n component={InstanceListPage}\n onCreate={() => {\n route(AdminPaths.new_instance);\n }}\n onUpdate={(id: string): void => {\n route(`/instance/${id}/update`);\n }}\n setInstanceName={setInstanceName}\n onUnauthorized={LoginPageAccessDenied}\n onLoadError={ServerErrorRedirectTo(InstancePaths.error)}\n />\n )}\n {admin && (\n <Route\n path={AdminPaths.new_instance}\n component={InstanceCreatePage}\n onBack={() => route(AdminPaths.list_instances)}\n onConfirm={() => {\n route(AdminPaths.list_instances);\n }}\n />\n )}\n {admin && (\n <Route\n path={AdminPaths.update_instance}\n component={AdminInstanceUpdatePage}\n onBack={() => route(AdminPaths.list_instances)}\n onConfirm={() => {\n route(AdminPaths.list_instances);\n }}\n onUpdateError={ServerErrorRedirectTo(AdminPaths.list_instances)}\n onLoadError={ServerErrorRedirectTo(AdminPaths.list_instances)}\n onNotFound={NotFoundPage}\n />\n )}\n {/**\n * Update instance page\n */}\n <Route\n path={InstancePaths.update}\n component={InstanceUpdatePage}\n onBack={() => {\n route(`/`);\n }}\n onConfirm={() => {\n route(`/`);\n }}\n onUpdateError={noop}\n onNotFound={IfAdminCreateDefaultOr(NotFoundPage)}\n onUnauthorized={LoginPageAccessDenied}\n onLoadError={ServerErrorRedirectTo(InstancePaths.error)}\n />\n {/**\n * Product pages\n */}\n <Route\n path={InstancePaths.product_list}\n component={ProductListPage}\n onUnauthorized={LoginPageAccessDenied}\n onLoadError={ServerErrorRedirectTo(InstancePaths.update)}\n onCreate={() => {\n route(InstancePaths.product_new);\n }}\n onSelect={(id: string) => {\n route(InstancePaths.product_update.replace(\":pid\", id));\n }}\n onNotFound={IfAdminCreateDefaultOr(NotFoundPage)}\n />\n <Route\n path={InstancePaths.product_update}\n component={ProductUpdatePage}\n onUnauthorized={LoginPageAccessDenied}\n onLoadError={ServerErrorRedirectTo(InstancePaths.product_list)}\n onConfirm={() => {\n route(InstancePaths.product_list);\n }}\n onBack={() => {\n route(InstancePaths.product_list);\n }}\n onNotFound={IfAdminCreateDefaultOr(NotFoundPage)}\n />\n <Route\n path={InstancePaths.product_new}\n component={ProductCreatePage}\n onConfirm={() => {\n route(InstancePaths.product_list);\n }}\n onBack={() => {\n route(InstancePaths.product_list);\n }}\n />\n {/**\n * Order pages\n */}\n <Route\n path={InstancePaths.order_list}\n component={OrderListPage}\n onCreate={() => {\n route(InstancePaths.order_new);\n }}\n onSelect={(id: string) => {\n route(InstancePaths.order_details.replace(\":oid\", id));\n }}\n onUnauthorized={LoginPageAccessDenied}\n onLoadError={ServerErrorRedirectTo(InstancePaths.update)}\n onNotFound={IfAdminCreateDefaultOr(NotFoundPage)}\n />\n <Route\n path={InstancePaths.order_details}\n component={OrderDetailsPage}\n onUnauthorized={LoginPageAccessDenied}\n onLoadError={ServerErrorRedirectTo(InstancePaths.order_list)}\n onNotFound={IfAdminCreateDefaultOr(NotFoundPage)}\n onBack={() => {\n route(InstancePaths.order_list);\n }}\n />\n <Route\n path={InstancePaths.order_new}\n component={OrderCreatePage}\n onConfirm={() => {\n route(InstancePaths.order_list);\n }}\n onBack={() => {\n route(InstancePaths.order_list);\n }}\n />\n {/**\n * Transfer pages\n */}\n <Route\n path={InstancePaths.transfers_list}\n component={TransferListPage}\n onUnauthorized={LoginPageAccessDenied}\n onNotFound={IfAdminCreateDefaultOr(NotFoundPage)}\n onLoadError={ServerErrorRedirectTo(InstancePaths.update)}\n onCreate={() => {\n route(InstancePaths.transfers_new);\n }}\n />\n <Route\n path={InstancePaths.transfers_new}\n component={TransferCreatePage}\n onConfirm={() => {\n route(InstancePaths.transfers_list);\n }}\n onBack={() => {\n route(InstancePaths.transfers_list);\n }}\n />\n {/**\n * Webhooks pages\n */}\n <Route\n path={InstancePaths.webhooks_list}\n component={WebhookListPage}\n onUnauthorized={LoginPageAccessDenied}\n onNotFound={IfAdminCreateDefaultOr(NotFoundPage)}\n onLoadError={ServerErrorRedirectTo(InstancePaths.update)}\n onCreate={() => {\n route(InstancePaths.webhooks_new);\n }}\n onSelect={(id: string) => {\n route(InstancePaths.webhooks_update.replace(\":tid\", id));\n }}\n />\n <Route\n path={InstancePaths.webhooks_update}\n component={WebhookUpdatePage}\n onConfirm={() => {\n route(InstancePaths.webhooks_list);\n }}\n onUnauthorized={LoginPageAccessDenied}\n onLoadError={ServerErrorRedirectTo(InstancePaths.webhooks_list)}\n onNotFound={IfAdminCreateDefaultOr(NotFoundPage)}\n onBack={() => {\n route(InstancePaths.webhooks_list);\n }}\n />\n <Route\n path={InstancePaths.webhooks_new}\n component={WebhookCreatePage}\n onConfirm={() => {\n route(InstancePaths.webhooks_list);\n }}\n onBack={() => {\n route(InstancePaths.webhooks_list);\n }}\n />\n {/**\n * Templates pages\n */}\n <Route\n path={InstancePaths.templates_list}\n component={TemplateListPage}\n onUnauthorized={LoginPageAccessDenied}\n onNotFound={IfAdminCreateDefaultOr(NotFoundPage)}\n onLoadError={ServerErrorRedirectTo(InstancePaths.update)}\n onCreate={() => {\n route(InstancePaths.templates_new);\n }}\n onNewOrder={(id: string) => {\n route(InstancePaths.templates_use.replace(\":tid\", id));\n }}\n onQR={(id: string) => {\n route(InstancePaths.templates_qr.replace(\":tid\", id));\n }}\n onSelect={(id: string) => {\n route(InstancePaths.templates_update.replace(\":tid\", id));\n }}\n />\n <Route\n path={InstancePaths.templates_update}\n component={TemplateUpdatePage}\n onConfirm={() => {\n route(InstancePaths.templates_list);\n }}\n onUnauthorized={LoginPageAccessDenied}\n onLoadError={ServerErrorRedirectTo(InstancePaths.templates_list)}\n onNotFound={IfAdminCreateDefaultOr(NotFoundPage)}\n onBack={() => {\n route(InstancePaths.templates_list);\n }}\n />\n <Route\n path={InstancePaths.templates_new}\n component={TemplateCreatePage}\n onConfirm={() => {\n route(InstancePaths.templates_list);\n }}\n onBack={() => {\n route(InstancePaths.templates_list);\n }}\n />\n <Route\n path={InstancePaths.templates_use}\n component={TemplateUsePage}\n onOrderCreated={(id: string) => {\n route(InstancePaths.order_details.replace(\":oid\", id));\n }}\n onUnauthorized={LoginPageAccessDenied}\n onLoadError={ServerErrorRedirectTo(InstancePaths.templates_list)}\n onNotFound={IfAdminCreateDefaultOr(NotFoundPage)}\n onBack={() => {\n route(InstancePaths.templates_list);\n }}\n />\n <Route\n path={InstancePaths.templates_qr}\n component={TemplateQrPage}\n onUnauthorized={LoginPageAccessDenied}\n onLoadError={ServerErrorRedirectTo(InstancePaths.templates_list)}\n onNotFound={IfAdminCreateDefaultOr(NotFoundPage)}\n onBack={() => {\n route(InstancePaths.templates_list);\n }}\n />\n\n {/**\n * reserves pages\n */}\n <Route\n path={InstancePaths.reserves_list}\n component={ReservesListPage}\n onUnauthorized={LoginPageAccessDenied}\n onNotFound={IfAdminCreateDefaultOr(NotFoundPage)}\n onLoadError={ServerErrorRedirectTo(InstancePaths.update)}\n onSelect={(id: string) => {\n route(InstancePaths.reserves_details.replace(\":rid\", id));\n }}\n onCreate={() => {\n route(InstancePaths.reserves_new);\n }}\n />\n <Route\n path={InstancePaths.reserves_details}\n component={ReservesDetailsPage}\n onUnauthorized={LoginPageAccessDenied}\n onLoadError={ServerErrorRedirectTo(InstancePaths.reserves_list)}\n onNotFound={IfAdminCreateDefaultOr(NotFoundPage)}\n onBack={() => {\n route(InstancePaths.reserves_list);\n }}\n />\n <Route\n path={InstancePaths.reserves_new}\n component={ReservesCreatePage}\n onConfirm={() => {\n route(InstancePaths.reserves_list);\n }}\n onBack={() => {\n route(InstancePaths.reserves_list);\n }}\n />\n <Route path={InstancePaths.kyc} component={ListKYCPage} />\n {/**\n * Example pages\n */}\n <Route path=\"/loading\" component={Loading} />\n <Route default component={NotFoundPage} />\n </Router>\n </InstanceContextProvider>\n );\n}\n\nexport function Redirect({ to }: { to: string }): null {\n useEffect(() => {\n route(to, true);\n });\n return null;\n}\n\nfunction AdminInstanceUpdatePage({\n id,\n ...rest\n}: { id: string } & InstanceUpdatePageProps): VNode {\n const [token, changeToken] = useBackendInstanceToken(id);\n const { updateLoginStatus: changeBackend } = useBackendContext();\n const updateLoginStatus = (url: string, token?: string): void => {\n changeBackend(url);\n if (token) changeToken(token);\n };\n const value = useMemo(\n () => ({ id, token, admin: true, changeToken }),\n [id, token],\n );\n const { i18n } = useTranslationContext();\n\n return (\n <InstanceContextProvider value={value}>\n <InstanceAdminUpdatePage\n {...rest}\n instanceId={id}\n onLoadError={(error: HttpError<MerchantBackend.ErrorDetail>) => {\n const notif =\n error.type === ErrorType.TIMEOUT\n ? {\n message: i18n.str`The request to the backend take too long and was cancelled`,\n description: i18n.str`Diagnostic from ${error.info?.url} is '${error.message}'`,\n type: \"ERROR\" as const,\n }\n : {\n message: i18n.str`The backend reported a problem: HTTP status #${error.status}`,\n description: i18n.str`Diagnostic from ${error.info?.url} is '${error.message}'`,\n details:\n error.clientError || error.serverError\n ? error.error?.detail\n : undefined,\n type: \"ERROR\" as const,\n };\n return (\n <Fragment>\n <NotificationCard notification={notif} />\n <LoginPage onConfirm={updateLoginStatus} />\n </Fragment>\n );\n }}\n onUnauthorized={() => {\n return (\n <Fragment>\n <NotificationCard\n notification={{\n message: i18n.str`Access denied`,\n description: i18n.str`The access token provided is invalid`,\n type: \"ERROR\",\n }}\n />\n <LoginPage onConfirm={updateLoginStatus} />\n </Fragment>\n );\n }}\n />\n </InstanceContextProvider>\n );\n}\n\nfunction KycBanner(): VNode {\n const kycStatus = useInstanceKYCDetails();\n const { i18n } = useTranslationContext();\n const today = format(new Date(), \"yyyy-MM-dd\");\n const [lastHide, setLastHide] = useLocalStorage(\"kyc-last-hide\");\n const hasBeenHidden = today === lastHide;\n const needsToBeShown = kycStatus.ok && kycStatus.data.type === \"redirect\";\n if (hasBeenHidden || !needsToBeShown) return <Fragment />;\n return (\n <NotificationCard\n notification={{\n type: \"WARN\",\n message: \"KYC verification needed\",\n description: (\n <div>\n <p>\n Some transfer are on hold until a KYC process is completed. Go to\n the KYC section in the left panel for more information\n </p>\n <div class=\"buttons is-right\">\n <button class=\"button\" onClick={() => setLastHide(today)}>\n <i18n.Translate>Hide for today</i18n.Translate>\n </button>\n </div>\n </div>\n ),\n }}\n />\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/*eslint quote-props: [\"error\", \"consistent\"]*/\nexport const strings: {[s: string]: any} = {};\n\nstrings['de'] = {\n \"domain\": \"messages\",\n \"locale_data\": {\n \"messages\": {\n \"\": {\n \"domain\": \"messages\",\n \"plural_forms\": \"nplurals=2; plural=(n != 1);\",\n \"lang\": \"\"\n },\n \"Cancel\": [\n \"\"\n ],\n \"%1$s\": [\n \"\"\n ],\n \"Continue\": [\n \"\"\n ],\n \"Clear\": [\n \"\"\n ],\n \"Confirm\": [\n \"\"\n ],\n \"is not the same as the current access token\": [\n \"\"\n ],\n \"cannot be empty\": [\n \"\"\n ],\n \"cannot be the same as the old token\": [\n \"\"\n ],\n \"is not the same\": [\n \"\"\n ],\n \"You are updating the access token from instance with id %1$s\": [\n \"\"\n ],\n \"Old access token\": [\n \"\"\n ],\n \"access token currently in use\": [\n \"\"\n ],\n \"New access token\": [\n \"\"\n ],\n \"next access token to be used\": [\n \"\"\n ],\n \"Repeat access token\": [\n \"\"\n ],\n \"confirm the same access token\": [\n \"\"\n ],\n \"Clearing the access token will mean public access to the instance\": [\n \"\"\n ],\n \"cannot be the same as the old access token\": [\n \"\"\n ],\n \"You are setting the access token for the new instance\": [\n \"\"\n ],\n \"With external authorization method no check will be done by the merchant backend\": [\n \"\"\n ],\n \"Set external authorization\": [\n \"\"\n ],\n \"Set access token\": [\n \"\"\n ],\n \"Operation in progress...\": [\n \"\"\n ],\n \"The operation will be automatically canceled after %1$s seconds\": [\n \"\"\n ],\n \"Instances\": [\n \"\"\n ],\n \"Delete\": [\n \"\"\n ],\n \"add new instance\": [\n \"\"\n ],\n \"ID\": [\n \"\"\n ],\n \"Name\": [\n \"\"\n ],\n \"Edit\": [\n \"\"\n ],\n \"Purge\": [\n \"\"\n ],\n \"There is no instances yet, add more pressing the + sign\": [\n \"\"\n ],\n \"Only show active instances\": [\n \"\"\n ],\n \"Active\": [\n \"\"\n ],\n \"Only show deleted instances\": [\n \"\"\n ],\n \"Deleted\": [\n \"\"\n ],\n \"Show all instances\": [\n \"\"\n ],\n \"All\": [\n \"\"\n ],\n \"Instance '%1$s' (ID: %2$s) has been deleted\": [\n \"\"\n ],\n \"Failed to delete instance\": [\n \"\"\n ],\n \"Instance '%1$s' (ID: %2$s) has been disabled\": [\n \"\"\n ],\n \"Failed to purge instance\": [\n \"\"\n ],\n \"Pending KYC verification\": [\n \"\"\n ],\n \"Timed out\": [\n \"\"\n ],\n \"Exchange\": [\n \"\"\n ],\n \"Target account\": [\n \"\"\n ],\n \"KYC URL\": [\n \"\"\n ],\n \"Code\": [\n \"\"\n ],\n \"Http Status\": [\n \"\"\n ],\n \"No pending kyc verification!\": [\n \"\"\n ],\n \"change value to unknown date\": [\n \"\"\n ],\n \"change value to empty\": [\n \"\"\n ],\n \"clear\": [\n \"\"\n ],\n \"change value to never\": [\n \"\"\n ],\n \"never\": [\n \"\"\n ],\n \"Country\": [\n \"\"\n ],\n \"Address\": [\n \"\"\n ],\n \"Building number\": [\n \"\"\n ],\n \"Building name\": [\n \"\"\n ],\n \"Street\": [\n \"\"\n ],\n \"Post code\": [\n \"\"\n ],\n \"Town location\": [\n \"\"\n ],\n \"Town\": [\n \"\"\n ],\n \"District\": [\n \"\"\n ],\n \"Country subdivision\": [\n \"\"\n ],\n \"Product id\": [\n \"\"\n ],\n \"Description\": [\n \"\"\n ],\n \"Product\": [\n \"\"\n ],\n \"search products by it's description or id\": [\n \"\"\n ],\n \"no products found with that description\": [\n \"\"\n ],\n \"You must enter a valid product identifier.\": [\n \"\"\n ],\n \"Quantity must be greater than 0!\": [\n \"\"\n ],\n \"This quantity exceeds remaining stock. Currently, only %1$s units remain unreserved in stock.\": [\n \"\"\n ],\n \"Quantity\": [\n \"\"\n ],\n \"how many products will be added\": [\n \"\"\n ],\n \"Add from inventory\": [\n \"\"\n ],\n \"Image should be smaller than 1 MB\": [\n \"\"\n ],\n \"Add\": [\n \"\"\n ],\n \"Remove\": [\n \"\"\n ],\n \"No taxes configured for this product.\": [\n \"\"\n ],\n \"Amount\": [\n \"\"\n ],\n \"Taxes can be in currencies that differ from the main currency used by the merchant.\": [\n \"\"\n ],\n \"Enter currency and value separated with a colon, e.g. &quot;USD:2.3&quot;.\": [\n \"\"\n ],\n \"Legal name of the tax, e.g. VAT or import duties.\": [\n \"\"\n ],\n \"add tax to the tax list\": [\n \"\"\n ],\n \"describe and add a product that is not in the inventory list\": [\n \"\"\n ],\n \"Add custom product\": [\n \"\"\n ],\n \"Complete information of the product\": [\n \"\"\n ],\n \"Image\": [\n \"\"\n ],\n \"photo of the product\": [\n \"\"\n ],\n \"full product description\": [\n \"\"\n ],\n \"Unit\": [\n \"\"\n ],\n \"name of the product unit\": [\n \"\"\n ],\n \"Price\": [\n \"\"\n ],\n \"amount in the current currency\": [\n \"\"\n ],\n \"Taxes\": [\n \"\"\n ],\n \"image\": [\n \"\"\n ],\n \"description\": [\n \"\"\n ],\n \"quantity\": [\n \"\"\n ],\n \"unit price\": [\n \"\"\n ],\n \"total price\": [\n \"\"\n ],\n \"required\": [\n \"\"\n ],\n \"must be greater than 0\": [\n \"\"\n ],\n \"not a valid json\": [\n \"\"\n ],\n \"should be in the future\": [\n \"\"\n ],\n \"refund deadline cannot be before pay deadline\": [\n \"\"\n ],\n \"wire transfer deadline cannot be before refund deadline\": [\n \"\"\n ],\n \"wire transfer deadline cannot be before pay deadline\": [\n \"\"\n ],\n \"should have a refund deadline\": [\n \"\"\n ],\n \"auto refund cannot be after refund deadline\": [\n \"\"\n ],\n \"Manage products in order\": [\n \"\"\n ],\n \"Manage list of products in the order.\": [\n \"\"\n ],\n \"Remove this product from the order.\": [\n \"\"\n ],\n \"Total price\": [\n \"\"\n ],\n \"total product price added up\": [\n \"\"\n ],\n \"Amount to be paid by the customer\": [\n \"\"\n ],\n \"Order price\": [\n \"\"\n ],\n \"final order price\": [\n \"\"\n ],\n \"Summary\": [\n \"\"\n ],\n \"Title of the order to be shown to the customer\": [\n \"\"\n ],\n \"Shipping and Fulfillment\": [\n \"\"\n ],\n \"Delivery date\": [\n \"\"\n ],\n \"Deadline for physical delivery assured by the merchant.\": [\n \"\"\n ],\n \"Location\": [\n \"\"\n ],\n \"address where the products will be delivered\": [\n \"\"\n ],\n \"Fulfillment URL\": [\n \"\"\n ],\n \"URL to which the user will be redirected after successful payment.\": [\n \"\"\n ],\n \"Taler payment options\": [\n \"\"\n ],\n \"Override default Taler payment settings for this order\": [\n \"\"\n ],\n \"Payment deadline\": [\n \"\"\n ],\n \"Deadline for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline.\": [\n \"\"\n ],\n \"Refund deadline\": [\n \"\"\n ],\n \"Time until which the order can be refunded by the merchant.\": [\n \"\"\n ],\n \"Wire transfer deadline\": [\n \"\"\n ],\n \"Deadline for the exchange to make the wire transfer.\": [\n \"\"\n ],\n \"Auto-refund deadline\": [\n \"\"\n ],\n \"Time until which the wallet will automatically check for refunds without user interaction.\": [\n \"\"\n ],\n \"Maximum deposit fee\": [\n \"\"\n ],\n \"Maximum deposit fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.\": [\n \"\"\n ],\n \"Maximum wire fee\": [\n \"\"\n ],\n \"Maximum aggregate wire fees the merchant is willing to cover for this order. Wire fees exceeding this amount are to be covered by the customers.\": [\n \"\"\n ],\n \"Wire fee amortization\": [\n \"\"\n ],\n \"Factor by which wire fees exceeding the above threshold are divided to determine the share of excess wire fees to be paid explicitly by the consumer.\": [\n \"\"\n ],\n \"Create token\": [\n \"\"\n ],\n \"Uncheck this option if the merchant backend generated an order ID with enough entropy to prevent adversarial claims.\": [\n \"\"\n ],\n \"Minimum age required\": [\n \"\"\n ],\n \"Any value greater than 0 will limit the coins able be used to pay this contract. If empty the age restriction will be defined by the products\": [\n \"\"\n ],\n \"Min age defined by the producs is %1$s\": [\n \"\"\n ],\n \"Additional information\": [\n \"\"\n ],\n \"Custom information to be included in the contract for this order.\": [\n \"\"\n ],\n \"You must enter a value in JavaScript Object Notation (JSON).\": [\n \"\"\n ],\n \"days\": [\n \"\"\n ],\n \"hours\": [\n \"\"\n ],\n \"minutes\": [\n \"\"\n ],\n \"seconds\": [\n \"\"\n ],\n \"forever\": [\n \"\"\n ],\n \"%1$sM\": [\n \"\"\n ],\n \"%1$sY\": [\n \"\"\n ],\n \"%1$sd\": [\n \"\"\n ],\n \"%1$sh\": [\n \"\"\n ],\n \"%1$smin\": [\n \"\"\n ],\n \"%1$ssec\": [\n \"\"\n ],\n \"Orders\": [\n \"\"\n ],\n \"create order\": [\n \"\"\n ],\n \"load newer orders\": [\n \"\"\n ],\n \"Date\": [\n \"\"\n ],\n \"Refund\": [\n \"\"\n ],\n \"copy url\": [\n \"\"\n ],\n \"load older orders\": [\n \"\"\n ],\n \"No orders have been found matching your query!\": [\n \"\"\n ],\n \"duplicated\": [\n \"\"\n ],\n \"invalid format\": [\n \"\"\n ],\n \"this value exceed the refundable amount\": [\n \"\"\n ],\n \"date\": [\n \"\"\n ],\n \"amount\": [\n \"\"\n ],\n \"reason\": [\n \"\"\n ],\n \"amount to be refunded\": [\n \"\"\n ],\n \"Max refundable:\": [\n \"\"\n ],\n \"Reason\": [\n \"\"\n ],\n \"Choose one...\": [\n \"\"\n ],\n \"requested by the customer\": [\n \"\"\n ],\n \"other\": [\n \"\"\n ],\n \"why this order is being refunded\": [\n \"\"\n ],\n \"more information to give context\": [\n \"\"\n ],\n \"Contract Terms\": [\n \"\"\n ],\n \"human-readable description of the whole purchase\": [\n \"\"\n ],\n \"total price for the transaction\": [\n \"\"\n ],\n \"URL for this purchase\": [\n \"\"\n ],\n \"Max fee\": [\n \"\"\n ],\n \"maximum total deposit fee accepted by the merchant for this contract\": [\n \"\"\n ],\n \"Max wire fee\": [\n \"\"\n ],\n \"maximum wire fee accepted by the merchant\": [\n \"\"\n ],\n \"over how many customer transactions does the merchant expect to amortize wire fees on average\": [\n \"\"\n ],\n \"Created at\": [\n \"\"\n ],\n \"time when this contract was generated\": [\n \"\"\n ],\n \"after this deadline has passed no refunds will be accepted\": [\n \"\"\n ],\n \"after this deadline, the merchant won't accept payments for the contract\": [\n \"\"\n ],\n \"transfer deadline for the exchange\": [\n \"\"\n ],\n \"time indicating when the order should be delivered\": [\n \"\"\n ],\n \"where the order will be delivered\": [\n \"\"\n ],\n \"Auto-refund delay\": [\n \"\"\n ],\n \"how long the wallet should try to get an automatic refund for the purchase\": [\n \"\"\n ],\n \"Extra info\": [\n \"\"\n ],\n \"extra data that is only interpreted by the merchant frontend\": [\n \"\"\n ],\n \"Order\": [\n \"\"\n ],\n \"claimed\": [\n \"\"\n ],\n \"claimed at\": [\n \"\"\n ],\n \"Timeline\": [\n \"\"\n ],\n \"Payment details\": [\n \"\"\n ],\n \"Order status\": [\n \"\"\n ],\n \"Product list\": [\n \"\"\n ],\n \"paid\": [\n \"\"\n ],\n \"wired\": [\n \"\"\n ],\n \"refunded\": [\n \"\"\n ],\n \"refund order\": [\n \"\"\n ],\n \"not refundable\": [\n \"\"\n ],\n \"refund\": [\n \"\"\n ],\n \"Refunded amount\": [\n \"\"\n ],\n \"Refund taken\": [\n \"\"\n ],\n \"Status URL\": [\n \"\"\n ],\n \"Refund URI\": [\n \"\"\n ],\n \"unpaid\": [\n \"\"\n ],\n \"pay at\": [\n \"\"\n ],\n \"created at\": [\n \"\"\n ],\n \"Order status URL\": [\n \"\"\n ],\n \"Payment URI\": [\n \"\"\n ],\n \"Unknown order status. This is an error, please contact the administrator.\": [\n \"\"\n ],\n \"Back\": [\n \"\"\n ],\n \"refund created successfully\": [\n \"\"\n ],\n \"could not create the refund\": [\n \"\"\n ],\n \"select date to show nearby orders\": [\n \"\"\n ],\n \"order id\": [\n \"\"\n ],\n \"jump to order with the given order ID\": [\n \"\"\n ],\n \"remove all filters\": [\n \"\"\n ],\n \"only show paid orders\": [\n \"\"\n ],\n \"Paid\": [\n \"\"\n ],\n \"only show orders with refunds\": [\n \"\"\n ],\n \"Refunded\": [\n \"\"\n ],\n \"only show orders where customers paid, but wire payments from payment provider are still pending\": [\n \"\"\n ],\n \"Not wired\": [\n \"\"\n ],\n \"clear date filter\": [\n \"\"\n ],\n \"date (YYYY/MM/DD)\": [\n \"\"\n ],\n \"Enter an order id\": [\n \"\"\n ],\n \"order not found\": [\n \"\"\n ],\n \"could not get the order to refund\": [\n \"\"\n ],\n \"Loading...\": [\n \"\"\n ],\n \"click here to configure the stock of the product, leave it as is and the backend will not control stock\": [\n \"\"\n ],\n \"Manage stock\": [\n \"\"\n ],\n \"this product has been configured without stock control\": [\n \"\"\n ],\n \"Infinite\": [\n \"\"\n ],\n \"lost cannot be greater than current and incoming (max %1$s)\": [\n \"\"\n ],\n \"Incoming\": [\n \"\"\n ],\n \"Lost\": [\n \"\"\n ],\n \"Current\": [\n \"\"\n ],\n \"remove stock control for this product\": [\n \"\"\n ],\n \"without stock\": [\n \"\"\n ],\n \"Next restock\": [\n \"\"\n ],\n \"Delivery address\": [\n \"\"\n ],\n \"product identification to use in URLs (for internal use only)\": [\n \"\"\n ],\n \"illustration of the product for customers\": [\n \"\"\n ],\n \"product description for customers\": [\n \"\"\n ],\n \"Age restricted\": [\n \"\"\n ],\n \"is this product restricted for customer below certain age?\": [\n \"\"\n ],\n \"unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers\": [\n \"\"\n ],\n \"sale price for customers, including taxes, for above units of the product\": [\n \"\"\n ],\n \"Stock\": [\n \"\"\n ],\n \"product inventory for products with finite supply (for internal use only)\": [\n \"\"\n ],\n \"taxes included in the product price, exposed to customers\": [\n \"\"\n ],\n \"Need to complete marked fields\": [\n \"\"\n ],\n \"could not create product\": [\n \"\"\n ],\n \"Products\": [\n \"\"\n ],\n \"add product to inventory\": [\n \"\"\n ],\n \"Sell\": [\n \"\"\n ],\n \"Profit\": [\n \"\"\n ],\n \"Sold\": [\n \"\"\n ],\n \"free\": [\n \"\"\n ],\n \"go to product update page\": [\n \"\"\n ],\n \"Update\": [\n \"\"\n ],\n \"remove this product from the database\": [\n \"\"\n ],\n \"update the product with new price\": [\n \"\"\n ],\n \"update product with new price\": [\n \"\"\n ],\n \"add more elements to the inventory\": [\n \"\"\n ],\n \"report elements lost in the inventory\": [\n \"\"\n ],\n \"new price for the product\": [\n \"\"\n ],\n \"the are value with errors\": [\n \"\"\n ],\n \"update product with new stock and price\": [\n \"\"\n ],\n \"There is no products yet, add more pressing the + sign\": [\n \"\"\n ],\n \"product updated successfully\": [\n \"\"\n ],\n \"could not update the product\": [\n \"\"\n ],\n \"product delete successfully\": [\n \"\"\n ],\n \"could not delete the product\": [\n \"\"\n ],\n \"Product id:\": [\n \"\"\n ],\n \"To complete the setup of the reserve, you must now initiate a wire transfer using the given wire transfer subject and crediting the specified amount to the indicated account of the exchange.\": [\n \"\"\n ],\n \"If your system supports RFC 8905, you can do this by opening this URI:\": [\n \"\"\n ],\n \"it should be greater than 0\": [\n \"\"\n ],\n \"must be a valid URL\": [\n \"\"\n ],\n \"Initial balance\": [\n \"\"\n ],\n \"balance prior to deposit\": [\n \"\"\n ],\n \"Exchange URL\": [\n \"\"\n ],\n \"URL of exchange\": [\n \"\"\n ],\n \"Next\": [\n \"\"\n ],\n \"Wire method\": [\n \"\"\n ],\n \"method to use for wire transfer\": [\n \"\"\n ],\n \"Select one wire method\": [\n \"\"\n ],\n \"could not create reserve\": [\n \"\"\n ],\n \"Valid until\": [\n \"\"\n ],\n \"Created balance\": [\n \"\"\n ],\n \"Exchange balance\": [\n \"\"\n ],\n \"Picked up\": [\n \"\"\n ],\n \"Committed\": [\n \"\"\n ],\n \"Account address\": [\n \"\"\n ],\n \"Subject\": [\n \"\"\n ],\n \"Tips\": [\n \"\"\n ],\n \"No tips has been authorized from this reserve\": [\n \"\"\n ],\n \"Authorized\": [\n \"\"\n ],\n \"Expiration\": [\n \"\"\n ],\n \"amount of tip\": [\n \"\"\n ],\n \"Justification\": [\n \"\"\n ],\n \"reason for the tip\": [\n \"\"\n ],\n \"URL after tip\": [\n \"\"\n ],\n \"URL to visit after tip payment\": [\n \"\"\n ],\n \"Reserves not yet funded\": [\n \"\"\n ],\n \"Reserves ready\": [\n \"\"\n ],\n \"add new reserve\": [\n \"\"\n ],\n \"Expires at\": [\n \"\"\n ],\n \"Initial\": [\n \"\"\n ],\n \"delete selected reserve from the database\": [\n \"\"\n ],\n \"authorize new tip from selected reserve\": [\n \"\"\n ],\n \"There is no ready reserves yet, add more pressing the + sign or fund them\": [\n \"\"\n ],\n \"Expected Balance\": [\n \"\"\n ],\n \"could not create the tip\": [\n \"\"\n ],\n \"should not be empty\": [\n \"\"\n ],\n \"should be greater that 0\": [\n \"\"\n ],\n \"can't be empty\": [\n \"\"\n ],\n \"to short\": [\n \"\"\n ],\n \"Identifier\": [\n \"\"\n ],\n \"Name of the template in URLs.\": [\n \"\"\n ],\n \"Describe what this template stands for\": [\n \"\"\n ],\n \"Order summary\": [\n \"\"\n ],\n \"Minimum age\": [\n \"\"\n ],\n \"Is this contract restricted to some age?\": [\n \"\"\n ],\n \"Payment timeout\": [\n \"\"\n ],\n \"How much time has the customer to complete the payment once the order was created.\": [\n \"\"\n ],\n \"Point-of-sale key\": [\n \"\"\n ],\n \"Useful to validate the purchase\": [\n \"\"\n ],\n \"could not inform template\": [\n \"\"\n ],\n \"Amount is required\": [\n \"\"\n ],\n \"Order summary is required\": [\n \"\"\n ],\n \"Amount of the order\": [\n \"\"\n ],\n \"could not create order from template\": [\n \"\"\n ],\n \"Templates\": [\n \"\"\n ],\n \"add new templates\": [\n \"\"\n ],\n \"load more templates before the first one\": [\n \"\"\n ],\n \"load newer templates\": [\n \"\"\n ],\n \"delete selected templates from the database\": [\n \"\"\n ],\n \"use template to create new order\": [\n \"\"\n ],\n \"load more templates after the last one\": [\n \"\"\n ],\n \"load older templates\": [\n \"\"\n ],\n \"There is no templates yet, add more pressing the + sign\": [\n \"\"\n ],\n \"template delete successfully\": [\n \"\"\n ],\n \"could not delete the template\": [\n \"\"\n ],\n \"could not update template\": [\n \"\"\n ],\n \"should be one of '%1$s'\": [\n \"\"\n ],\n \"Webhook ID to use\": [\n \"\"\n ],\n \"Event\": [\n \"\"\n ],\n \"The event of the webhook: why the webhook is used\": [\n \"\"\n ],\n \"Method\": [\n \"\"\n ],\n \"Method used by the webhook\": [\n \"\"\n ],\n \"URL\": [\n \"\"\n ],\n \"URL of the webhook where the customer will be redirected\": [\n \"\"\n ],\n \"Header\": [\n \"\"\n ],\n \"Header template of the webhook\": [\n \"\"\n ],\n \"Body\": [\n \"\"\n ],\n \"Body template by the webhook\": [\n \"\"\n ],\n \"Webhooks\": [\n \"\"\n ],\n \"add new webhooks\": [\n \"\"\n ],\n \"load more webhooks before the first one\": [\n \"\"\n ],\n \"load newer webhooks\": [\n \"\"\n ],\n \"Event type\": [\n \"\"\n ],\n \"delete selected webhook from the database\": [\n \"\"\n ],\n \"load more webhooks after the last one\": [\n \"\"\n ],\n \"load older webhooks\": [\n \"\"\n ],\n \"There is no webhooks yet, add more pressing the + sign\": [\n \"\"\n ],\n \"webhook delete successfully\": [\n \"\"\n ],\n \"could not delete the webhook\": [\n \"\"\n ],\n \"check the id, does not look valid\": [\n \"\"\n ],\n \"should have 52 characters, current %1$s\": [\n \"\"\n ],\n \"URL doesn't have the right format\": [\n \"\"\n ],\n \"Credited bank account\": [\n \"\"\n ],\n \"Select one account\": [\n \"\"\n ],\n \"Bank account of the merchant where the payment was received\": [\n \"\"\n ],\n \"Wire transfer ID\": [\n \"\"\n ],\n \"unique identifier of the wire transfer used by the exchange, must be 52 characters long\": [\n \"\"\n ],\n \"Base URL of the exchange that made the transfer, should have been in the wire transfer subject\": [\n \"\"\n ],\n \"Amount credited\": [\n \"\"\n ],\n \"Actual amount that was wired to the merchant's bank account\": [\n \"\"\n ],\n \"could not inform transfer\": [\n \"\"\n ],\n \"Transfers\": [\n \"\"\n ],\n \"add new transfer\": [\n \"\"\n ],\n \"load more transfers before the first one\": [\n \"\"\n ],\n \"load newer transfers\": [\n \"\"\n ],\n \"Credit\": [\n \"\"\n ],\n \"Confirmed\": [\n \"\"\n ],\n \"Verified\": [\n \"\"\n ],\n \"Executed at\": [\n \"\"\n ],\n \"yes\": [\n \"\"\n ],\n \"no\": [\n \"\"\n ],\n \"unknown\": [\n \"\"\n ],\n \"delete selected transfer from the database\": [\n \"\"\n ],\n \"load more transfer after the last one\": [\n \"\"\n ],\n \"load older transfers\": [\n \"\"\n ],\n \"There is no transfer yet, add more pressing the + sign\": [\n \"\"\n ],\n \"filter by account address\": [\n \"\"\n ],\n \"only show wire transfers confirmed by the merchant\": [\n \"\"\n ],\n \"only show wire transfers claimed by the exchange\": [\n \"\"\n ],\n \"Unverified\": [\n \"\"\n ],\n \"is not valid\": [\n \"\"\n ],\n \"is not a number\": [\n \"\"\n ],\n \"must be 1 or greater\": [\n \"\"\n ],\n \"max 7 lines\": [\n \"\"\n ],\n \"change authorization configuration\": [\n \"\"\n ],\n \"Need to complete marked fields and choose authorization method\": [\n \"\"\n ],\n \"This is not a valid bitcoin address.\": [\n \"\"\n ],\n \"This is not a valid Ethereum address.\": [\n \"\"\n ],\n \"IBAN numbers usually have more that 4 digits\": [\n \"\"\n ],\n \"IBAN numbers usually have less that 34 digits\": [\n \"\"\n ],\n \"IBAN country code not found\": [\n \"\"\n ],\n \"IBAN number is not valid, checksum is wrong\": [\n \"\"\n ],\n \"Target type\": [\n \"\"\n ],\n \"Method to use for wire transfer\": [\n \"\"\n ],\n \"Routing\": [\n \"\"\n ],\n \"Routing number.\": [\n \"\"\n ],\n \"Account\": [\n \"\"\n ],\n \"Account number.\": [\n \"\"\n ],\n \"Business Identifier Code.\": [\n \"\"\n ],\n \"Bank Account Number.\": [\n \"\"\n ],\n \"Unified Payment Interface.\": [\n \"\"\n ],\n \"Bitcoin protocol.\": [\n \"\"\n ],\n \"Ethereum protocol.\": [\n \"\"\n ],\n \"Interledger protocol.\": [\n \"\"\n ],\n \"Host\": [\n \"\"\n ],\n \"Bank host.\": [\n \"\"\n ],\n \"Bank account.\": [\n \"\"\n ],\n \"Bank account owner's name.\": [\n \"\"\n ],\n \"No accounts yet.\": [\n \"\"\n ],\n \"Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.\": [\n \"\"\n ],\n \"Business name\": [\n \"\"\n ],\n \"Legal name of the business represented by this instance.\": [\n \"\"\n ],\n \"Email\": [\n \"\"\n ],\n \"Contact email\": [\n \"\"\n ],\n \"Website URL\": [\n \"\"\n ],\n \"URL.\": [\n \"\"\n ],\n \"Logo\": [\n \"\"\n ],\n \"Logo image.\": [\n \"\"\n ],\n \"Bank account\": [\n \"\"\n ],\n \"URI specifying bank account for crediting revenue.\": [\n \"\"\n ],\n \"Default max deposit fee\": [\n \"\"\n ],\n \"Maximum deposit fees this merchant is willing to pay per order by default.\": [\n \"\"\n ],\n \"Default max wire fee\": [\n \"\"\n ],\n \"Maximum wire fees this merchant is willing to pay per wire transfer by default.\": [\n \"\"\n ],\n \"Default wire fee amortization\": [\n \"\"\n ],\n \"Number of orders excess wire transfer fees will be divided by to compute per order surcharge.\": [\n \"\"\n ],\n \"Physical location of the merchant.\": [\n \"\"\n ],\n \"Jurisdiction\": [\n \"\"\n ],\n \"Jurisdiction for legal disputes with the merchant.\": [\n \"\"\n ],\n \"Default payment delay\": [\n \"\"\n ],\n \"Time customers have to pay an order before the offer expires by default.\": [\n \"\"\n ],\n \"Default wire transfer delay\": [\n \"\"\n ],\n \"Maximum time an exchange is allowed to delay wiring funds to the merchant, enabling it to aggregate smaller payments into larger wire transfers and reducing wire fees.\": [\n \"\"\n ],\n \"Instance id\": [\n \"\"\n ],\n \"Change the authorization method use for this instance.\": [\n \"\"\n ],\n \"Manage access token\": [\n \"\"\n ],\n \"Failed to create instance\": [\n \"\"\n ],\n \"Login required\": [\n \"\"\n ],\n \"Please enter your access token.\": [\n \"\"\n ],\n \"Access Token\": [\n \"\"\n ],\n \"The request to the backend take too long and was cancelled\": [\n \"\"\n ],\n \"Diagnostic from %1$s is '%2$s'\": [\n \"\"\n ],\n \"The backend reported a problem: HTTP status #%1$s\": [\n \"\"\n ],\n \"Access denied\": [\n \"\"\n ],\n \"The access token provided is invalid.\": [\n \"\"\n ],\n \"No 'default' instance configured yet.\": [\n \"\"\n ],\n \"Create a 'default' instance to begin using the merchant backoffice.\": [\n \"\"\n ],\n \"The access token provided is invalid\": [\n \"\"\n ],\n \"Hide for today\": [\n \"\"\n ],\n \"Instance\": [\n \"\"\n ],\n \"Settings\": [\n \"\"\n ],\n \"Connection\": [\n \"\"\n ],\n \"New\": [\n \"\"\n ],\n \"List\": [\n \"\"\n ],\n \"Log out\": [\n \"\"\n ],\n \"Check your token is valid\": [\n \"\"\n ],\n \"Couldn't access the server.\": [\n \"\"\n ],\n \"Could not infer instance id from url %1$s\": [\n \"\"\n ],\n \"Server not found\": [\n \"\"\n ],\n \"Couldn't access the server\": [\n \"\"\n ],\n \"Got message %1$s from %2$s\": [\n \"\"\n ],\n \"Unexpected Error\": [\n \"\"\n ],\n \"The value %1$s is invalid for a payment url\": [\n \"\"\n ],\n \"add element to the list\": [\n \"\"\n ],\n \"add\": [\n \"\"\n ],\n \"Deleting\": [\n \"\"\n ],\n \"Changing\": [\n \"\"\n ],\n \"Order ID\": [\n \"\"\n ],\n \"Payment URL\": [\n \"\"\n ]\n }\n }\n};\n\nstrings['en'] = {\n \"domain\": \"messages\",\n \"locale_data\": {\n \"messages\": {\n \"\": {\n \"domain\": \"messages\",\n \"plural_forms\": \"nplurals=2; plural=(n != 1);\",\n \"lang\": \"\"\n },\n \"Cancel\": [\n \"\"\n ],\n \"%1$s\": [\n \"\"\n ],\n \"Continue\": [\n \"\"\n ],\n \"Clear\": [\n \"\"\n ],\n \"Confirm\": [\n \"\"\n ],\n \"is not the same as the current access token\": [\n \"\"\n ],\n \"cannot be empty\": [\n \"\"\n ],\n \"cannot be the same as the old token\": [\n \"\"\n ],\n \"is not the same\": [\n \"\"\n ],\n \"You are updating the access token from instance with id %1$s\": [\n \"\"\n ],\n \"Old access token\": [\n \"\"\n ],\n \"access token currently in use\": [\n \"\"\n ],\n \"New access token\": [\n \"\"\n ],\n \"next access token to be used\": [\n \"\"\n ],\n \"Repeat access token\": [\n \"\"\n ],\n \"confirm the same access token\": [\n \"\"\n ],\n \"Clearing the access token will mean public access to the instance\": [\n \"\"\n ],\n \"cannot be the same as the old access token\": [\n \"\"\n ],\n \"You are setting the access token for the new instance\": [\n \"\"\n ],\n \"With external authorization method no check will be done by the merchant backend\": [\n \"\"\n ],\n \"Set external authorization\": [\n \"\"\n ],\n \"Set access token\": [\n \"\"\n ],\n \"Operation in progress...\": [\n \"\"\n ],\n \"The operation will be automatically canceled after %1$s seconds\": [\n \"\"\n ],\n \"Instances\": [\n \"\"\n ],\n \"Delete\": [\n \"\"\n ],\n \"add new instance\": [\n \"\"\n ],\n \"ID\": [\n \"\"\n ],\n \"Name\": [\n \"\"\n ],\n \"Edit\": [\n \"\"\n ],\n \"Purge\": [\n \"\"\n ],\n \"There is no instances yet, add more pressing the + sign\": [\n \"\"\n ],\n \"Only show active instances\": [\n \"\"\n ],\n \"Active\": [\n \"\"\n ],\n \"Only show deleted instances\": [\n \"\"\n ],\n \"Deleted\": [\n \"\"\n ],\n \"Show all instances\": [\n \"\"\n ],\n \"All\": [\n \"\"\n ],\n \"Instance '%1$s' (ID: %2$s) has been deleted\": [\n \"\"\n ],\n \"Failed to delete instance\": [\n \"\"\n ],\n \"Instance '%1$s' (ID: %2$s) has been disabled\": [\n \"\"\n ],\n \"Failed to purge instance\": [\n \"\"\n ],\n \"Pending KYC verification\": [\n \"\"\n ],\n \"Timed out\": [\n \"\"\n ],\n \"Exchange\": [\n \"\"\n ],\n \"Target account\": [\n \"\"\n ],\n \"KYC URL\": [\n \"\"\n ],\n \"Code\": [\n \"\"\n ],\n \"Http Status\": [\n \"\"\n ],\n \"No pending kyc verification!\": [\n \"\"\n ],\n \"change value to unknown date\": [\n \"\"\n ],\n \"change value to empty\": [\n \"\"\n ],\n \"clear\": [\n \"\"\n ],\n \"change value to never\": [\n \"\"\n ],\n \"never\": [\n \"\"\n ],\n \"Country\": [\n \"\"\n ],\n \"Address\": [\n \"\"\n ],\n \"Building number\": [\n \"\"\n ],\n \"Building name\": [\n \"\"\n ],\n \"Street\": [\n \"\"\n ],\n \"Post code\": [\n \"\"\n ],\n \"Town location\": [\n \"\"\n ],\n \"Town\": [\n \"\"\n ],\n \"District\": [\n \"\"\n ],\n \"Country subdivision\": [\n \"\"\n ],\n \"Product id\": [\n \"\"\n ],\n \"Description\": [\n \"\"\n ],\n \"Product\": [\n \"\"\n ],\n \"search products by it's description or id\": [\n \"\"\n ],\n \"no products found with that description\": [\n \"\"\n ],\n \"You must enter a valid product identifier.\": [\n \"\"\n ],\n \"Quantity must be greater than 0!\": [\n \"\"\n ],\n \"This quantity exceeds remaining stock. Currently, only %1$s units remain unreserved in stock.\": [\n \"\"\n ],\n \"Quantity\": [\n \"\"\n ],\n \"how many products will be added\": [\n \"\"\n ],\n \"Add from inventory\": [\n \"\"\n ],\n \"Image should be smaller than 1 MB\": [\n \"\"\n ],\n \"Add\": [\n \"\"\n ],\n \"Remove\": [\n \"\"\n ],\n \"No taxes configured for this product.\": [\n \"\"\n ],\n \"Amount\": [\n \"\"\n ],\n \"Taxes can be in currencies that differ from the main currency used by the merchant.\": [\n \"\"\n ],\n \"Enter currency and value separated with a colon, e.g. &quot;USD:2.3&quot;.\": [\n \"\"\n ],\n \"Legal name of the tax, e.g. VAT or import duties.\": [\n \"\"\n ],\n \"add tax to the tax list\": [\n \"\"\n ],\n \"describe and add a product that is not in the inventory list\": [\n \"\"\n ],\n \"Add custom product\": [\n \"\"\n ],\n \"Complete information of the product\": [\n \"\"\n ],\n \"Image\": [\n \"\"\n ],\n \"photo of the product\": [\n \"\"\n ],\n \"full product description\": [\n \"\"\n ],\n \"Unit\": [\n \"\"\n ],\n \"name of the product unit\": [\n \"\"\n ],\n \"Price\": [\n \"\"\n ],\n \"amount in the current currency\": [\n \"\"\n ],\n \"Taxes\": [\n \"\"\n ],\n \"image\": [\n \"\"\n ],\n \"description\": [\n \"\"\n ],\n \"quantity\": [\n \"\"\n ],\n \"unit price\": [\n \"\"\n ],\n \"total price\": [\n \"\"\n ],\n \"required\": [\n \"\"\n ],\n \"must be greater than 0\": [\n \"\"\n ],\n \"not a valid json\": [\n \"\"\n ],\n \"should be in the future\": [\n \"\"\n ],\n \"refund deadline cannot be before pay deadline\": [\n \"\"\n ],\n \"wire transfer deadline cannot be before refund deadline\": [\n \"\"\n ],\n \"wire transfer deadline cannot be before pay deadline\": [\n \"\"\n ],\n \"should have a refund deadline\": [\n \"\"\n ],\n \"auto refund cannot be after refund deadline\": [\n \"\"\n ],\n \"Manage products in order\": [\n \"\"\n ],\n \"Manage list of products in the order.\": [\n \"\"\n ],\n \"Remove this product from the order.\": [\n \"\"\n ],\n \"Total price\": [\n \"\"\n ],\n \"total product price added up\": [\n \"\"\n ],\n \"Amount to be paid by the customer\": [\n \"\"\n ],\n \"Order price\": [\n \"\"\n ],\n \"final order price\": [\n \"\"\n ],\n \"Summary\": [\n \"\"\n ],\n \"Title of the order to be shown to the customer\": [\n \"\"\n ],\n \"Shipping and Fulfillment\": [\n \"\"\n ],\n \"Delivery date\": [\n \"\"\n ],\n \"Deadline for physical delivery assured by the merchant.\": [\n \"\"\n ],\n \"Location\": [\n \"\"\n ],\n \"address where the products will be delivered\": [\n \"\"\n ],\n \"Fulfillment URL\": [\n \"\"\n ],\n \"URL to which the user will be redirected after successful payment.\": [\n \"\"\n ],\n \"Taler payment options\": [\n \"\"\n ],\n \"Override default Taler payment settings for this order\": [\n \"\"\n ],\n \"Payment deadline\": [\n \"\"\n ],\n \"Deadline for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline.\": [\n \"\"\n ],\n \"Refund deadline\": [\n \"\"\n ],\n \"Time until which the order can be refunded by the merchant.\": [\n \"\"\n ],\n \"Wire transfer deadline\": [\n \"\"\n ],\n \"Deadline for the exchange to make the wire transfer.\": [\n \"\"\n ],\n \"Auto-refund deadline\": [\n \"\"\n ],\n \"Time until which the wallet will automatically check for refunds without user interaction.\": [\n \"\"\n ],\n \"Maximum deposit fee\": [\n \"\"\n ],\n \"Maximum deposit fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.\": [\n \"\"\n ],\n \"Maximum wire fee\": [\n \"\"\n ],\n \"Maximum aggregate wire fees the merchant is willing to cover for this order. Wire fees exceeding this amount are to be covered by the customers.\": [\n \"\"\n ],\n \"Wire fee amortization\": [\n \"\"\n ],\n \"Factor by which wire fees exceeding the above threshold are divided to determine the share of excess wire fees to be paid explicitly by the consumer.\": [\n \"\"\n ],\n \"Create token\": [\n \"\"\n ],\n \"Uncheck this option if the merchant backend generated an order ID with enough entropy to prevent adversarial claims.\": [\n \"\"\n ],\n \"Minimum age required\": [\n \"\"\n ],\n \"Any value greater than 0 will limit the coins able be used to pay this contract. If empty the age restriction will be defined by the products\": [\n \"\"\n ],\n \"Min age defined by the producs is %1$s\": [\n \"\"\n ],\n \"Additional information\": [\n \"\"\n ],\n \"Custom information to be included in the contract for this order.\": [\n \"\"\n ],\n \"You must enter a value in JavaScript Object Notation (JSON).\": [\n \"\"\n ],\n \"days\": [\n \"\"\n ],\n \"hours\": [\n \"\"\n ],\n \"minutes\": [\n \"\"\n ],\n \"seconds\": [\n \"\"\n ],\n \"forever\": [\n \"\"\n ],\n \"%1$sM\": [\n \"\"\n ],\n \"%1$sY\": [\n \"\"\n ],\n \"%1$sd\": [\n \"\"\n ],\n \"%1$sh\": [\n \"\"\n ],\n \"%1$smin\": [\n \"\"\n ],\n \"%1$ssec\": [\n \"\"\n ],\n \"Orders\": [\n \"\"\n ],\n \"create order\": [\n \"\"\n ],\n \"load newer orders\": [\n \"\"\n ],\n \"Date\": [\n \"\"\n ],\n \"Refund\": [\n \"\"\n ],\n \"copy url\": [\n \"\"\n ],\n \"load older orders\": [\n \"\"\n ],\n \"No orders have been found matching your query!\": [\n \"\"\n ],\n \"duplicated\": [\n \"\"\n ],\n \"invalid format\": [\n \"\"\n ],\n \"this value exceed the refundable amount\": [\n \"\"\n ],\n \"date\": [\n \"\"\n ],\n \"amount\": [\n \"\"\n ],\n \"reason\": [\n \"\"\n ],\n \"amount to be refunded\": [\n \"\"\n ],\n \"Max refundable:\": [\n \"\"\n ],\n \"Reason\": [\n \"\"\n ],\n \"Choose one...\": [\n \"\"\n ],\n \"requested by the customer\": [\n \"\"\n ],\n \"other\": [\n \"\"\n ],\n \"why this order is being refunded\": [\n \"\"\n ],\n \"more information to give context\": [\n \"\"\n ],\n \"Contract Terms\": [\n \"\"\n ],\n \"human-readable description of the whole purchase\": [\n \"\"\n ],\n \"total price for the transaction\": [\n \"\"\n ],\n \"URL for this purchase\": [\n \"\"\n ],\n \"Max fee\": [\n \"\"\n ],\n \"maximum total deposit fee accepted by the merchant for this contract\": [\n \"\"\n ],\n \"Max wire fee\": [\n \"\"\n ],\n \"maximum wire fee accepted by the merchant\": [\n \"\"\n ],\n \"over how many customer transactions does the merchant expect to amortize wire fees on average\": [\n \"\"\n ],\n \"Created at\": [\n \"\"\n ],\n \"time when this contract was generated\": [\n \"\"\n ],\n \"after this deadline has passed no refunds will be accepted\": [\n \"\"\n ],\n \"after this deadline, the merchant won't accept payments for the contract\": [\n \"\"\n ],\n \"transfer deadline for the exchange\": [\n \"\"\n ],\n \"time indicating when the order should be delivered\": [\n \"\"\n ],\n \"where the order will be delivered\": [\n \"\"\n ],\n \"Auto-refund delay\": [\n \"\"\n ],\n \"how long the wallet should try to get an automatic refund for the purchase\": [\n \"\"\n ],\n \"Extra info\": [\n \"\"\n ],\n \"extra data that is only interpreted by the merchant frontend\": [\n \"\"\n ],\n \"Order\": [\n \"\"\n ],\n \"claimed\": [\n \"\"\n ],\n \"claimed at\": [\n \"\"\n ],\n \"Timeline\": [\n \"\"\n ],\n \"Payment details\": [\n \"\"\n ],\n \"Order status\": [\n \"\"\n ],\n \"Product list\": [\n \"\"\n ],\n \"paid\": [\n \"\"\n ],\n \"wired\": [\n \"\"\n ],\n \"refunded\": [\n \"\"\n ],\n \"refund order\": [\n \"\"\n ],\n \"not refundable\": [\n \"\"\n ],\n \"refund\": [\n \"\"\n ],\n \"Refunded amount\": [\n \"\"\n ],\n \"Refund taken\": [\n \"\"\n ],\n \"Status URL\": [\n \"\"\n ],\n \"Refund URI\": [\n \"\"\n ],\n \"unpaid\": [\n \"\"\n ],\n \"pay at\": [\n \"\"\n ],\n \"created at\": [\n \"\"\n ],\n \"Order status URL\": [\n \"\"\n ],\n \"Payment URI\": [\n \"\"\n ],\n \"Unknown order status. This is an error, please contact the administrator.\": [\n \"\"\n ],\n \"Back\": [\n \"\"\n ],\n \"refund created successfully\": [\n \"\"\n ],\n \"could not create the refund\": [\n \"\"\n ],\n \"select date to show nearby orders\": [\n \"\"\n ],\n \"order id\": [\n \"\"\n ],\n \"jump to order with the given order ID\": [\n \"\"\n ],\n \"remove all filters\": [\n \"\"\n ],\n \"only show paid orders\": [\n \"\"\n ],\n \"Paid\": [\n \"\"\n ],\n \"only show orders with refunds\": [\n \"\"\n ],\n \"Refunded\": [\n \"\"\n ],\n \"only show orders where customers paid, but wire payments from payment provider are still pending\": [\n \"\"\n ],\n \"Not wired\": [\n \"\"\n ],\n \"clear date filter\": [\n \"\"\n ],\n \"date (YYYY/MM/DD)\": [\n \"\"\n ],\n \"Enter an order id\": [\n \"\"\n ],\n \"order not found\": [\n \"\"\n ],\n \"could not get the order to refund\": [\n \"\"\n ],\n \"Loading...\": [\n \"\"\n ],\n \"click here to configure the stock of the product, leave it as is and the backend will not control stock\": [\n \"\"\n ],\n \"Manage stock\": [\n \"\"\n ],\n \"this product has been configured without stock control\": [\n \"\"\n ],\n \"Infinite\": [\n \"\"\n ],\n \"lost cannot be greater than current and incoming (max %1$s)\": [\n \"\"\n ],\n \"Incoming\": [\n \"\"\n ],\n \"Lost\": [\n \"\"\n ],\n \"Current\": [\n \"\"\n ],\n \"remove stock control for this product\": [\n \"\"\n ],\n \"without stock\": [\n \"\"\n ],\n \"Next restock\": [\n \"\"\n ],\n \"Delivery address\": [\n \"\"\n ],\n \"product identification to use in URLs (for internal use only)\": [\n \"\"\n ],\n \"illustration of the product for customers\": [\n \"\"\n ],\n \"product description for customers\": [\n \"\"\n ],\n \"Age restricted\": [\n \"\"\n ],\n \"is this product restricted for customer below certain age?\": [\n \"\"\n ],\n \"unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers\": [\n \"\"\n ],\n \"sale price for customers, including taxes, for above units of the product\": [\n \"\"\n ],\n \"Stock\": [\n \"\"\n ],\n \"product inventory for products with finite supply (for internal use only)\": [\n \"\"\n ],\n \"taxes included in the product price, exposed to customers\": [\n \"\"\n ],\n \"Need to complete marked fields\": [\n \"\"\n ],\n \"could not create product\": [\n \"\"\n ],\n \"Products\": [\n \"\"\n ],\n \"add product to inventory\": [\n \"\"\n ],\n \"Sell\": [\n \"\"\n ],\n \"Profit\": [\n \"\"\n ],\n \"Sold\": [\n \"\"\n ],\n \"free\": [\n \"\"\n ],\n \"go to product update page\": [\n \"\"\n ],\n \"Update\": [\n \"\"\n ],\n \"remove this product from the database\": [\n \"\"\n ],\n \"update the product with new price\": [\n \"\"\n ],\n \"update product with new price\": [\n \"\"\n ],\n \"add more elements to the inventory\": [\n \"\"\n ],\n \"report elements lost in the inventory\": [\n \"\"\n ],\n \"new price for the product\": [\n \"\"\n ],\n \"the are value with errors\": [\n \"\"\n ],\n \"update product with new stock and price\": [\n \"\"\n ],\n \"There is no products yet, add more pressing the + sign\": [\n \"\"\n ],\n \"product updated successfully\": [\n \"\"\n ],\n \"could not update the product\": [\n \"\"\n ],\n \"product delete successfully\": [\n \"\"\n ],\n \"could not delete the product\": [\n \"\"\n ],\n \"Product id:\": [\n \"\"\n ],\n \"To complete the setup of the reserve, you must now initiate a wire transfer using the given wire transfer subject and crediting the specified amount to the indicated account of the exchange.\": [\n \"\"\n ],\n \"If your system supports RFC 8905, you can do this by opening this URI:\": [\n \"\"\n ],\n \"it should be greater than 0\": [\n \"\"\n ],\n \"must be a valid URL\": [\n \"\"\n ],\n \"Initial balance\": [\n \"\"\n ],\n \"balance prior to deposit\": [\n \"\"\n ],\n \"Exchange URL\": [\n \"\"\n ],\n \"URL of exchange\": [\n \"\"\n ],\n \"Next\": [\n \"\"\n ],\n \"Wire method\": [\n \"\"\n ],\n \"method to use for wire transfer\": [\n \"\"\n ],\n \"Select one wire method\": [\n \"\"\n ],\n \"could not create reserve\": [\n \"\"\n ],\n \"Valid until\": [\n \"\"\n ],\n \"Created balance\": [\n \"\"\n ],\n \"Exchange balance\": [\n \"\"\n ],\n \"Picked up\": [\n \"\"\n ],\n \"Committed\": [\n \"\"\n ],\n \"Account address\": [\n \"\"\n ],\n \"Subject\": [\n \"\"\n ],\n \"Tips\": [\n \"\"\n ],\n \"No tips has been authorized from this reserve\": [\n \"\"\n ],\n \"Authorized\": [\n \"\"\n ],\n \"Expiration\": [\n \"\"\n ],\n \"amount of tip\": [\n \"\"\n ],\n \"Justification\": [\n \"\"\n ],\n \"reason for the tip\": [\n \"\"\n ],\n \"URL after tip\": [\n \"\"\n ],\n \"URL to visit after tip payment\": [\n \"\"\n ],\n \"Reserves not yet funded\": [\n \"\"\n ],\n \"Reserves ready\": [\n \"\"\n ],\n \"add new reserve\": [\n \"\"\n ],\n \"Expires at\": [\n \"\"\n ],\n \"Initial\": [\n \"\"\n ],\n \"delete selected reserve from the database\": [\n \"\"\n ],\n \"authorize new tip from selected reserve\": [\n \"\"\n ],\n \"There is no ready reserves yet, add more pressing the + sign or fund them\": [\n \"\"\n ],\n \"Expected Balance\": [\n \"\"\n ],\n \"could not create the tip\": [\n \"\"\n ],\n \"should not be empty\": [\n \"\"\n ],\n \"should be greater that 0\": [\n \"\"\n ],\n \"can't be empty\": [\n \"\"\n ],\n \"to short\": [\n \"\"\n ],\n \"Identifier\": [\n \"\"\n ],\n \"Name of the template in URLs.\": [\n \"\"\n ],\n \"Describe what this template stands for\": [\n \"\"\n ],\n \"Order summary\": [\n \"\"\n ],\n \"Minimum age\": [\n \"\"\n ],\n \"Is this contract restricted to some age?\": [\n \"\"\n ],\n \"Payment timeout\": [\n \"\"\n ],\n \"How much time has the customer to complete the payment once the order was created.\": [\n \"\"\n ],\n \"Point-of-sale key\": [\n \"\"\n ],\n \"Useful to validate the purchase\": [\n \"\"\n ],\n \"could not inform template\": [\n \"\"\n ],\n \"Amount is required\": [\n \"\"\n ],\n \"Order summary is required\": [\n \"\"\n ],\n \"Amount of the order\": [\n \"\"\n ],\n \"could not create order from template\": [\n \"\"\n ],\n \"Templates\": [\n \"\"\n ],\n \"add new templates\": [\n \"\"\n ],\n \"load more templates before the first one\": [\n \"\"\n ],\n \"load newer templates\": [\n \"\"\n ],\n \"delete selected templates from the database\": [\n \"\"\n ],\n \"use template to create new order\": [\n \"\"\n ],\n \"load more templates after the last one\": [\n \"\"\n ],\n \"load older templates\": [\n \"\"\n ],\n \"There is no templates yet, add more pressing the + sign\": [\n \"\"\n ],\n \"template delete successfully\": [\n \"\"\n ],\n \"could not delete the template\": [\n \"\"\n ],\n \"could not update template\": [\n \"\"\n ],\n \"should be one of '%1$s'\": [\n \"\"\n ],\n \"Webhook ID to use\": [\n \"\"\n ],\n \"Event\": [\n \"\"\n ],\n \"The event of the webhook: why the webhook is used\": [\n \"\"\n ],\n \"Method\": [\n \"\"\n ],\n \"Method used by the webhook\": [\n \"\"\n ],\n \"URL\": [\n \"\"\n ],\n \"URL of the webhook where the customer will be redirected\": [\n \"\"\n ],\n \"Header\": [\n \"\"\n ],\n \"Header template of the webhook\": [\n \"\"\n ],\n \"Body\": [\n \"\"\n ],\n \"Body template by the webhook\": [\n \"\"\n ],\n \"Webhooks\": [\n \"\"\n ],\n \"add new webhooks\": [\n \"\"\n ],\n \"load more webhooks before the first one\": [\n \"\"\n ],\n \"load newer webhooks\": [\n \"\"\n ],\n \"Event type\": [\n \"\"\n ],\n \"delete selected webhook from the database\": [\n \"\"\n ],\n \"load more webhooks after the last one\": [\n \"\"\n ],\n \"load older webhooks\": [\n \"\"\n ],\n \"There is no webhooks yet, add more pressing the + sign\": [\n \"\"\n ],\n \"webhook delete successfully\": [\n \"\"\n ],\n \"could not delete the webhook\": [\n \"\"\n ],\n \"check the id, does not look valid\": [\n \"\"\n ],\n \"should have 52 characters, current %1$s\": [\n \"\"\n ],\n \"URL doesn't have the right format\": [\n \"\"\n ],\n \"Credited bank account\": [\n \"\"\n ],\n \"Select one account\": [\n \"\"\n ],\n \"Bank account of the merchant where the payment was received\": [\n \"\"\n ],\n \"Wire transfer ID\": [\n \"\"\n ],\n \"unique identifier of the wire transfer used by the exchange, must be 52 characters long\": [\n \"\"\n ],\n \"Base URL of the exchange that made the transfer, should have been in the wire transfer subject\": [\n \"\"\n ],\n \"Amount credited\": [\n \"\"\n ],\n \"Actual amount that was wired to the merchant's bank account\": [\n \"\"\n ],\n \"could not inform transfer\": [\n \"\"\n ],\n \"Transfers\": [\n \"\"\n ],\n \"add new transfer\": [\n \"\"\n ],\n \"load more transfers before the first one\": [\n \"\"\n ],\n \"load newer transfers\": [\n \"\"\n ],\n \"Credit\": [\n \"\"\n ],\n \"Confirmed\": [\n \"\"\n ],\n \"Verified\": [\n \"\"\n ],\n \"Executed at\": [\n \"\"\n ],\n \"yes\": [\n \"\"\n ],\n \"no\": [\n \"\"\n ],\n \"unknown\": [\n \"\"\n ],\n \"delete selected transfer from the database\": [\n \"\"\n ],\n \"load more transfer after the last one\": [\n \"\"\n ],\n \"load older transfers\": [\n \"\"\n ],\n \"There is no transfer yet, add more pressing the + sign\": [\n \"\"\n ],\n \"filter by account address\": [\n \"\"\n ],\n \"only show wire transfers confirmed by the merchant\": [\n \"\"\n ],\n \"only show wire transfers claimed by the exchange\": [\n \"\"\n ],\n \"Unverified\": [\n \"\"\n ],\n \"is not valid\": [\n \"\"\n ],\n \"is not a number\": [\n \"\"\n ],\n \"must be 1 or greater\": [\n \"\"\n ],\n \"max 7 lines\": [\n \"\"\n ],\n \"change authorization configuration\": [\n \"\"\n ],\n \"Need to complete marked fields and choose authorization method\": [\n \"\"\n ],\n \"This is not a valid bitcoin address.\": [\n \"\"\n ],\n \"This is not a valid Ethereum address.\": [\n \"\"\n ],\n \"IBAN numbers usually have more that 4 digits\": [\n \"\"\n ],\n \"IBAN numbers usually have less that 34 digits\": [\n \"\"\n ],\n \"IBAN country code not found\": [\n \"\"\n ],\n \"IBAN number is not valid, checksum is wrong\": [\n \"\"\n ],\n \"Target type\": [\n \"\"\n ],\n \"Method to use for wire transfer\": [\n \"\"\n ],\n \"Routing\": [\n \"\"\n ],\n \"Routing number.\": [\n \"\"\n ],\n \"Account\": [\n \"\"\n ],\n \"Account number.\": [\n \"\"\n ],\n \"Business Identifier Code.\": [\n \"\"\n ],\n \"Bank Account Number.\": [\n \"\"\n ],\n \"Unified Payment Interface.\": [\n \"\"\n ],\n \"Bitcoin protocol.\": [\n \"\"\n ],\n \"Ethereum protocol.\": [\n \"\"\n ],\n \"Interledger protocol.\": [\n \"\"\n ],\n \"Host\": [\n \"\"\n ],\n \"Bank host.\": [\n \"\"\n ],\n \"Bank account.\": [\n \"\"\n ],\n \"Bank account owner's name.\": [\n \"\"\n ],\n \"No accounts yet.\": [\n \"\"\n ],\n \"Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.\": [\n \"\"\n ],\n \"Business name\": [\n \"\"\n ],\n \"Legal name of the business represented by this instance.\": [\n \"\"\n ],\n \"Email\": [\n \"\"\n ],\n \"Contact email\": [\n \"\"\n ],\n \"Website URL\": [\n \"\"\n ],\n \"URL.\": [\n \"\"\n ],\n \"Logo\": [\n \"\"\n ],\n \"Logo image.\": [\n \"\"\n ],\n \"Bank account\": [\n \"\"\n ],\n \"URI specifying bank account for crediting revenue.\": [\n \"\"\n ],\n \"Default max deposit fee\": [\n \"\"\n ],\n \"Maximum deposit fees this merchant is willing to pay per order by default.\": [\n \"\"\n ],\n \"Default max wire fee\": [\n \"\"\n ],\n \"Maximum wire fees this merchant is willing to pay per wire transfer by default.\": [\n \"\"\n ],\n \"Default wire fee amortization\": [\n \"\"\n ],\n \"Number of orders excess wire transfer fees will be divided by to compute per order surcharge.\": [\n \"\"\n ],\n \"Physical location of the merchant.\": [\n \"\"\n ],\n \"Jurisdiction\": [\n \"\"\n ],\n \"Jurisdiction for legal disputes with the merchant.\": [\n \"\"\n ],\n \"Default payment delay\": [\n \"\"\n ],\n \"Time customers have to pay an order before the offer expires by default.\": [\n \"\"\n ],\n \"Default wire transfer delay\": [\n \"\"\n ],\n \"Maximum time an exchange is allowed to delay wiring funds to the merchant, enabling it to aggregate smaller payments into larger wire transfers and reducing wire fees.\": [\n \"\"\n ],\n \"Instance id\": [\n \"\"\n ],\n \"Change the authorization method use for this instance.\": [\n \"\"\n ],\n \"Manage access token\": [\n \"\"\n ],\n \"Failed to create instance\": [\n \"\"\n ],\n \"Login required\": [\n \"\"\n ],\n \"Please enter your access token.\": [\n \"\"\n ],\n \"Access Token\": [\n \"\"\n ],\n \"The request to the backend take too long and was cancelled\": [\n \"\"\n ],\n \"Diagnostic from %1$s is '%2$s'\": [\n \"\"\n ],\n \"The backend reported a problem: HTTP status #%1$s\": [\n \"\"\n ],\n \"Access denied\": [\n \"\"\n ],\n \"The access token provided is invalid.\": [\n \"\"\n ],\n \"No 'default' instance configured yet.\": [\n \"\"\n ],\n \"Create a 'default' instance to begin using the merchant backoffice.\": [\n \"\"\n ],\n \"The access token provided is invalid\": [\n \"\"\n ],\n \"Hide for today\": [\n \"\"\n ],\n \"Instance\": [\n \"\"\n ],\n \"Settings\": [\n \"\"\n ],\n \"Connection\": [\n \"\"\n ],\n \"New\": [\n \"\"\n ],\n \"List\": [\n \"\"\n ],\n \"Log out\": [\n \"\"\n ],\n \"Check your token is valid\": [\n \"\"\n ],\n \"Couldn't access the server.\": [\n \"\"\n ],\n \"Could not infer instance id from url %1$s\": [\n \"\"\n ],\n \"Server not found\": [\n \"\"\n ],\n \"Couldn't access the server\": [\n \"\"\n ],\n \"Got message %1$s from %2$s\": [\n \"\"\n ],\n \"Unexpected Error\": [\n \"\"\n ],\n \"The value %1$s is invalid for a payment url\": [\n \"\"\n ],\n \"add element to the list\": [\n \"\"\n ],\n \"add\": [\n \"\"\n ],\n \"Deleting\": [\n \"\"\n ],\n \"Changing\": [\n \"\"\n ],\n \"Order ID\": [\n \"\"\n ],\n \"Payment URL\": [\n \"\"\n ]\n }\n }\n};\n\nstrings['es'] = {\n \"domain\": \"messages\",\n \"locale_data\": {\n \"messages\": {\n \"\": {\n \"domain\": \"messages\",\n \"plural_forms\": \"nplurals=2; plural=n != 1;\",\n \"lang\": \"es\"\n },\n \"Cancel\": [\n \"Cancelar\"\n ],\n \"%1$s\": [\n \"%1$s\"\n ],\n \"Continue\": [\n \"Continuar\"\n ],\n \"Clear\": [\n \"Limpiar\"\n ],\n \"Confirm\": [\n \"Confirmar\"\n ],\n \"is not the same as the current access token\": [\n \"no es el mismo que el token de acceso actual\"\n ],\n \"cannot be empty\": [\n \"no puede ser vac\u00EDo\"\n ],\n \"cannot be the same as the old token\": [\n \"no puede ser igual al viejo token\"\n ],\n \"is not the same\": [\n \"no son iguales\"\n ],\n \"You are updating the access token from instance with id %1$s\": [\n \"Est\u00E1 actualizando el token de autorizaci\u00F3n para la instancia con id %1$s\"\n ],\n \"Old access token\": [\n \"Viejo token de acceso\"\n ],\n \"access token currently in use\": [\n \"\"\n ],\n \"New access token\": [\n \"Nuevo token\"\n ],\n \"next access token to be used\": [\n \"\"\n ],\n \"Repeat access token\": [\n \"\"\n ],\n \"confirm the same access token\": [\n \"\"\n ],\n \"Clearing the access token will mean public access to the instance\": [\n \"Limpiar el token de autorizaci\u00F3n significa acceso publico a la instancia\"\n ],\n \"cannot be the same as the old access token\": [\n \"no puede ser igual al anterior\"\n ],\n \"You are setting the access token for the new instance\": [\n \"\"\n ],\n \"With external authorization method no check will be done by the merchant backend\": [\n \"\"\n ],\n \"Set external authorization\": [\n \"Amortizaci\u00F3n de comisi\u00F3n de transferencia\"\n ],\n \"Set access token\": [\n \"\"\n ],\n \"Operation in progress...\": [\n \"\"\n ],\n \"The operation will be automatically canceled after %1$s seconds\": [\n \"\"\n ],\n \"Instances\": [\n \"Instancias\"\n ],\n \"Delete\": [\n \"Eliminar\"\n ],\n \"add new instance\": [\n \"no se pudo crear la instancia\"\n ],\n \"ID\": [\n \"ID\"\n ],\n \"Name\": [\n \"Nombre\"\n ],\n \"Edit\": [\n \"Editar\"\n ],\n \"Purge\": [\n \"\"\n ],\n \"There is no instances yet, add more pressing the + sign\": [\n \"No hay instancias todav\u00EDan, agregue mas presionando el signo +\"\n ],\n \"Only show active instances\": [\n \"no se pudo crear la instancia\"\n ],\n \"Active\": [\n \"\"\n ],\n \"Only show deleted instances\": [\n \"Sin instancia default\"\n ],\n \"Deleted\": [\n \"Eliminar\"\n ],\n \"Show all instances\": [\n \"Sin instancia default\"\n ],\n \"All\": [\n \"Todo\"\n ],\n \"Instance '%1$s' (ID: %2$s) has been deleted\": [\n \"\"\n ],\n \"Failed to delete instance\": [\n \"Sin instancia default\"\n ],\n \"Instance '%1$s' (ID: %2$s) has been disabled\": [\n \"\"\n ],\n \"Failed to purge instance\": [\n \"no se pudo crear la instancia\"\n ],\n \"Pending KYC verification\": [\n \"\"\n ],\n \"Timed out\": [\n \"\"\n ],\n \"Exchange\": [\n \"URL del Exchange\"\n ],\n \"Target account\": [\n \"\"\n ],\n \"KYC URL\": [\n \"\"\n ],\n \"Code\": [\n \"\"\n ],\n \"Http Status\": [\n \"\"\n ],\n \"No pending kyc verification!\": [\n \"\"\n ],\n \"change value to unknown date\": [\n \"\"\n ],\n \"change value to empty\": [\n \"no puede ser vac\u00EDo\"\n ],\n \"clear\": [\n \"Limpiar\"\n ],\n \"change value to never\": [\n \"\"\n ],\n \"never\": [\n \"nunca\"\n ],\n \"Country\": [\n \"Pa\u00EDs\"\n ],\n \"Address\": [\n \"Direcci\u00F3n\"\n ],\n \"Building number\": [\n \"N\u00FAmero de edificio\"\n ],\n \"Building name\": [\n \"Nombre de edificio\"\n ],\n \"Street\": [\n \"Calle\"\n ],\n \"Post code\": [\n \"C\u00F3digo postal\"\n ],\n \"Town location\": [\n \"Ubicaci\u00F3n de ciudad\"\n ],\n \"Town\": [\n \"Ciudad\"\n ],\n \"District\": [\n \"Distrito\"\n ],\n \"Country subdivision\": [\n \"Subdivisi\u00F3n de pa\u00EDs\"\n ],\n \"Product id\": [\n \"Id de producto\"\n ],\n \"Description\": [\n \"Descripcion\"\n ],\n \"Product\": [\n \"Productos\"\n ],\n \"search products by it's description or id\": [\n \"\"\n ],\n \"no products found with that description\": [\n \"No se encontraron productos\"\n ],\n \"You must enter a valid product identifier.\": [\n \"\"\n ],\n \"Quantity must be greater than 0!\": [\n \"Debe ser mayor a 0\"\n ],\n \"This quantity exceeds remaining stock. Currently, only %1$s units remain unreserved in stock.\": [\n \"\"\n ],\n \"Quantity\": [\n \"Cantidad\"\n ],\n \"how many products will be added\": [\n \"\"\n ],\n \"Add from inventory\": [\n \"\"\n ],\n \"Image should be smaller than 1 MB\": [\n \"La imagen debe ser mas chica que 1 MB\"\n ],\n \"Add\": [\n \"Agregar\"\n ],\n \"Remove\": [\n \"Eliminar\"\n ],\n \"No taxes configured for this product.\": [\n \"\"\n ],\n \"Amount\": [\n \"Monto\"\n ],\n \"Taxes can be in currencies that differ from the main currency used by the merchant.\": [\n \"\"\n ],\n \"Enter currency and value separated with a colon, e.g. &quot;USD:2.3&quot;.\": [\n \"Moneda y valor separado por dos puntos\"\n ],\n \"Legal name of the tax, e.g. VAT or import duties.\": [\n \"\"\n ],\n \"add tax to the tax list\": [\n \"\"\n ],\n \"describe and add a product that is not in the inventory list\": [\n \"\"\n ],\n \"Add custom product\": [\n \"\"\n ],\n \"Complete information of the product\": [\n \"no se pudo eliminar el producto\"\n ],\n \"Image\": [\n \"Imagen\"\n ],\n \"photo of the product\": [\n \"no se pudo crear el producto\"\n ],\n \"full product description\": [\n \"\"\n ],\n \"Unit\": [\n \"Unidad\"\n ],\n \"name of the product unit\": [\n \"No se encontraron productos\"\n ],\n \"Price\": [\n \"Precio\"\n ],\n \"amount in the current currency\": [\n \"\"\n ],\n \"Taxes\": [\n \"Impuesto\"\n ],\n \"image\": [\n \"Imagen\"\n ],\n \"description\": [\n \"Descripcion\"\n ],\n \"quantity\": [\n \"Cantidad\"\n ],\n \"unit price\": [\n \"Precio total\"\n ],\n \"total price\": [\n \"Precio total\"\n ],\n \"required\": [\n \"Login necesario\"\n ],\n \"must be greater than 0\": [\n \"Debe ser mayor a 0\"\n ],\n \"not a valid json\": [\n \"\"\n ],\n \"should be in the future\": [\n \"deber\u00EDan ser iguales\"\n ],\n \"refund deadline cannot be before pay deadline\": [\n \"\"\n ],\n \"wire transfer deadline cannot be before refund deadline\": [\n \"\"\n ],\n \"wire transfer deadline cannot be before pay deadline\": [\n \"\"\n ],\n \"should have a refund deadline\": [\n \"Plazo de reembolso autom\u00E1tico\"\n ],\n \"auto refund cannot be after refund deadline\": [\n \"Plazo de reembolso autom\u00E1tico\"\n ],\n \"Manage products in order\": [\n \"No se encontraron productos\"\n ],\n \"Manage list of products in the order.\": [\n \"\"\n ],\n \"Remove this product from the order.\": [\n \"\"\n ],\n \"Total price\": [\n \"Precio total\"\n ],\n \"total product price added up\": [\n \"\"\n ],\n \"Amount to be paid by the customer\": [\n \"pedido por el consumidor\"\n ],\n \"Order price\": [\n \"Precio de la orden\"\n ],\n \"final order price\": [\n \"Precio de la orden\"\n ],\n \"Summary\": [\n \"Resumen\"\n ],\n \"Title of the order to be shown to the customer\": [\n \"\"\n ],\n \"Shipping and Fulfillment\": [\n \"\"\n ],\n \"Delivery date\": [\n \"Fecha de entrega\"\n ],\n \"Deadline for physical delivery assured by the merchant.\": [\n \"\"\n ],\n \"Location\": [\n \"Ubicaci\u00F3n\"\n ],\n \"address where the products will be delivered\": [\n \"\"\n ],\n \"Fulfillment URL\": [\n \"URL de completitud\"\n ],\n \"URL to which the user will be redirected after successful payment.\": [\n \"\"\n ],\n \"Taler payment options\": [\n \"Opciones de pago\"\n ],\n \"Override default Taler payment settings for this order\": [\n \"\"\n ],\n \"Payment deadline\": [\n \"Plazo de pago\"\n ],\n \"Deadline for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline.\": [\n \"\"\n ],\n \"Refund deadline\": [\n \"Plazo de reembolso\"\n ],\n \"Time until which the order can be refunded by the merchant.\": [\n \"\"\n ],\n \"Wire transfer deadline\": [\n \"Retrazo de transferencia por omisi\u00F3n\"\n ],\n \"Deadline for the exchange to make the wire transfer.\": [\n \"\"\n ],\n \"Auto-refund deadline\": [\n \"Plazo de reembolso autom\u00E1tico\"\n ],\n \"Time until which the wallet will automatically check for refunds without user interaction.\": [\n \"\"\n ],\n \"Maximum deposit fee\": [\n \"Impuesto m\u00E1ximo de deposito por omisi\u00F3n\"\n ],\n \"Maximum deposit fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.\": [\n \"\"\n ],\n \"Maximum wire fee\": [\n \"Impuesto de transferencia m\u00E1ximo\"\n ],\n \"Maximum aggregate wire fees the merchant is willing to cover for this order. Wire fees exceeding this amount are to be covered by the customers.\": [\n \"\"\n ],\n \"Wire fee amortization\": [\n \"Amortizaci\u00F3n de comisi\u00F3n de transferencia\"\n ],\n \"Factor by which wire fees exceeding the above threshold are divided to determine the share of excess wire fees to be paid explicitly by the consumer.\": [\n \"\"\n ],\n \"Create token\": [\n \"Administrar token\"\n ],\n \"Uncheck this option if the merchant backend generated an order ID with enough entropy to prevent adversarial claims.\": [\n \"\"\n ],\n \"Minimum age required\": [\n \"Login necesario\"\n ],\n \"Any value greater than 0 will limit the coins able be used to pay this contract. If empty the age restriction will be defined by the products\": [\n \"\"\n ],\n \"Min age defined by the producs is %1$s\": [\n \"\"\n ],\n \"Additional information\": [\n \"Informaci\u00F3n extra\"\n ],\n \"Custom information to be included in the contract for this order.\": [\n \"\"\n ],\n \"You must enter a value in JavaScript Object Notation (JSON).\": [\n \"\"\n ],\n \"days\": [\n \"\"\n ],\n \"hours\": [\n \"\"\n ],\n \"minutes\": [\n \"\"\n ],\n \"seconds\": [\n \"\"\n ],\n \"forever\": [\n \"nunca\"\n ],\n \"%1$sM\": [\n \"\"\n ],\n \"%1$sY\": [\n \"\"\n ],\n \"%1$sd\": [\n \"\"\n ],\n \"%1$sh\": [\n \"\"\n ],\n \"%1$smin\": [\n \"\"\n ],\n \"%1$ssec\": [\n \"\"\n ],\n \"Orders\": [\n \"\u00D3rdenes\"\n ],\n \"create order\": [\n \"creado\"\n ],\n \"load newer orders\": [\n \"cargar nuevas ordenes\"\n ],\n \"Date\": [\n \"Fecha\"\n ],\n \"Refund\": [\n \"Devoluci\u00F3n\"\n ],\n \"copy url\": [\n \"copiar url\"\n ],\n \"load older orders\": [\n \"cargar viejas ordenes\"\n ],\n \"No orders have been found matching your query!\": [\n \"No se enconraron ordenes\"\n ],\n \"duplicated\": [\n \"duplicado\"\n ],\n \"invalid format\": [\n \"\"\n ],\n \"this value exceed the refundable amount\": [\n \"\"\n ],\n \"date\": [\n \"fecha\"\n ],\n \"amount\": [\n \"monto\"\n ],\n \"reason\": [\n \"raz\u00F3n\"\n ],\n \"amount to be refunded\": [\n \"No se pudo create el reembolso\"\n ],\n \"Max refundable:\": [\n \"M\u00E1ximo reembolzable:\"\n ],\n \"Reason\": [\n \"Raz\u00F3n\"\n ],\n \"Choose one...\": [\n \"\"\n ],\n \"requested by the customer\": [\n \"pedido por el consumidor\"\n ],\n \"other\": [\n \"otro\"\n ],\n \"why this order is being refunded\": [\n \"No se enconraron ordenes\"\n ],\n \"more information to give context\": [\n \"\"\n ],\n \"Contract Terms\": [\n \"\"\n ],\n \"human-readable description of the whole purchase\": [\n \"\"\n ],\n \"total price for the transaction\": [\n \"\"\n ],\n \"URL for this purchase\": [\n \"\"\n ],\n \"Max fee\": [\n \"M\u00E1xima comisi\u00F3n\"\n ],\n \"maximum total deposit fee accepted by the merchant for this contract\": [\n \"\"\n ],\n \"Max wire fee\": [\n \"Impuesto de transferencia m\u00E1ximo\"\n ],\n \"maximum wire fee accepted by the merchant\": [\n \"\"\n ],\n \"over how many customer transactions does the merchant expect to amortize wire fees on average\": [\n \"\"\n ],\n \"Created at\": [\n \"creado\"\n ],\n \"time when this contract was generated\": [\n \"\"\n ],\n \"after this deadline has passed no refunds will be accepted\": [\n \"\"\n ],\n \"after this deadline, the merchant won't accept payments for the contract\": [\n \"\"\n ],\n \"transfer deadline for the exchange\": [\n \"\"\n ],\n \"time indicating when the order should be delivered\": [\n \"\"\n ],\n \"where the order will be delivered\": [\n \"\"\n ],\n \"Auto-refund delay\": [\n \"Plazo de reembolso autom\u00E1tico\"\n ],\n \"how long the wallet should try to get an automatic refund for the purchase\": [\n \"\"\n ],\n \"Extra info\": [\n \"Informaci\u00F3n extra\"\n ],\n \"extra data that is only interpreted by the merchant frontend\": [\n \"\"\n ],\n \"Order\": [\n \"Orden\"\n ],\n \"claimed\": [\n \"reclamado\"\n ],\n \"claimed at\": [\n \"reclamado\"\n ],\n \"Timeline\": [\n \"Cronolog\u00EDa\"\n ],\n \"Payment details\": [\n \"Detalles de pago\"\n ],\n \"Order status\": [\n \"Estado de orden\"\n ],\n \"Product list\": [\n \"Lista de producto\"\n ],\n \"paid\": [\n \"pagados\"\n ],\n \"wired\": [\n \"transferido\"\n ],\n \"refunded\": [\n \"reembolzado\"\n ],\n \"refund order\": [\n \"reembolzado\"\n ],\n \"not refundable\": [\n \"M\u00E1ximo reembolzable:\"\n ],\n \"refund\": [\n \"reembolzar\"\n ],\n \"Refunded amount\": [\n \"Monto reembolzado\"\n ],\n \"Refund taken\": [\n \"Reembolzado\"\n ],\n \"Status URL\": [\n \"URL de estado de orden\"\n ],\n \"Refund URI\": [\n \"Devoluci\u00F3n\"\n ],\n \"unpaid\": [\n \"impago\"\n ],\n \"pay at\": [\n \"pagar en\"\n ],\n \"created at\": [\n \"creado\"\n ],\n \"Order status URL\": [\n \"URL de estado de orden\"\n ],\n \"Payment URI\": [\n \"URI de pago\"\n ],\n \"Unknown order status. This is an error, please contact the administrator.\": [\n \"Estado de orden desconocido. Esto es un error, por favor contacte a su administrador.\"\n ],\n \"Back\": [\n \"\"\n ],\n \"refund created successfully\": [\n \"reembolzo creado satisfactoriamente\"\n ],\n \"could not create the refund\": [\n \"No se pudo create el reembolso\"\n ],\n \"select date to show nearby orders\": [\n \"\"\n ],\n \"order id\": [\n \"ir a id de orden\"\n ],\n \"jump to order with the given order ID\": [\n \"\"\n ],\n \"remove all filters\": [\n \"\"\n ],\n \"only show paid orders\": [\n \"\"\n ],\n \"Paid\": [\n \"Pagado\"\n ],\n \"only show orders with refunds\": [\n \"No se pudo create el reembolso\"\n ],\n \"Refunded\": [\n \"Reembolzado\"\n ],\n \"only show orders where customers paid, but wire payments from payment provider are still pending\": [\n \"\"\n ],\n \"Not wired\": [\n \"No transferido\"\n ],\n \"clear date filter\": [\n \"\"\n ],\n \"date (YYYY/MM/DD)\": [\n \"\"\n ],\n \"Enter an order id\": [\n \"ir a id de orden\"\n ],\n \"order not found\": [\n \"Servidor no encontrado\"\n ],\n \"could not get the order to refund\": [\n \"No se pudo create el reembolso\"\n ],\n \"Loading...\": [\n \"Cargando...\"\n ],\n \"click here to configure the stock of the product, leave it as is and the backend will not control stock\": [\n \"\"\n ],\n \"Manage stock\": [\n \"Administrar stock\"\n ],\n \"this product has been configured without stock control\": [\n \"\"\n ],\n \"Infinite\": [\n \"Inifinito\"\n ],\n \"lost cannot be greater than current and incoming (max %1$s)\": [\n \"la p\u00E9rdida no puede ser mayor al stock actual + entrante (max %1$s )\"\n ],\n \"Incoming\": [\n \"Ingresando\"\n ],\n \"Lost\": [\n \"Perdido\"\n ],\n \"Current\": [\n \"Actual\"\n ],\n \"remove stock control for this product\": [\n \"\"\n ],\n \"without stock\": [\n \"sin stock\"\n ],\n \"Next restock\": [\n \"Pr\u00F3ximo reabastecimiento\"\n ],\n \"Delivery address\": [\n \"Direcci\u00F3n de entrega\"\n ],\n \"product identification to use in URLs (for internal use only)\": [\n \"\"\n ],\n \"illustration of the product for customers\": [\n \"\"\n ],\n \"product description for customers\": [\n \"\"\n ],\n \"Age restricted\": [\n \"\"\n ],\n \"is this product restricted for customer below certain age?\": [\n \"\"\n ],\n \"unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers\": [\n \"\"\n ],\n \"sale price for customers, including taxes, for above units of the product\": [\n \"\"\n ],\n \"Stock\": [\n \"Existencias\"\n ],\n \"product inventory for products with finite supply (for internal use only)\": [\n \"\"\n ],\n \"taxes included in the product price, exposed to customers\": [\n \"\"\n ],\n \"Need to complete marked fields\": [\n \"\"\n ],\n \"could not create product\": [\n \"no se pudo crear el producto\"\n ],\n \"Products\": [\n \"Productos\"\n ],\n \"add product to inventory\": [\n \"\"\n ],\n \"Sell\": [\n \"Venta\"\n ],\n \"Profit\": [\n \"Ganancia\"\n ],\n \"Sold\": [\n \"Vendido\"\n ],\n \"free\": [\n \"\"\n ],\n \"go to product update page\": [\n \"producto actualizado correctamente\"\n ],\n \"Update\": [\n \"Actualizar\"\n ],\n \"remove this product from the database\": [\n \"\"\n ],\n \"update the product with new price\": [\n \"\"\n ],\n \"update product with new price\": [\n \"\"\n ],\n \"add more elements to the inventory\": [\n \"\"\n ],\n \"report elements lost in the inventory\": [\n \"\"\n ],\n \"new price for the product\": [\n \"no se pudo actualizar el producto\"\n ],\n \"the are value with errors\": [\n \"\"\n ],\n \"update product with new stock and price\": [\n \"\"\n ],\n \"There is no products yet, add more pressing the + sign\": [\n \"No hay propinas todav\u00EDa, agregar mas presionando el signo +\"\n ],\n \"product updated successfully\": [\n \"producto actualizado correctamente\"\n ],\n \"could not update the product\": [\n \"no se pudo actualizar el producto\"\n ],\n \"product delete successfully\": [\n \"producto fue eliminado correctamente\"\n ],\n \"could not delete the product\": [\n \"no se pudo eliminar el producto\"\n ],\n \"Product id:\": [\n \"Id de producto\"\n ],\n \"To complete the setup of the reserve, you must now initiate a wire transfer using the given wire transfer subject and crediting the specified amount to the indicated account of the exchange.\": [\n \"\"\n ],\n \"If your system supports RFC 8905, you can do this by opening this URI:\": [\n \"\"\n ],\n \"it should be greater than 0\": [\n \"Debe ser mayor a 0\"\n ],\n \"must be a valid URL\": [\n \"\"\n ],\n \"Initial balance\": [\n \"Instancia\"\n ],\n \"balance prior to deposit\": [\n \"\"\n ],\n \"Exchange URL\": [\n \"URL del Exchange\"\n ],\n \"URL of exchange\": [\n \"\"\n ],\n \"Next\": [\n \"\"\n ],\n \"Wire method\": [\n \"\"\n ],\n \"method to use for wire transfer\": [\n \"no se pudo informar la transferencia\"\n ],\n \"Select one wire method\": [\n \"\"\n ],\n \"could not create reserve\": [\n \"No se pudo create el reembolso\"\n ],\n \"Valid until\": [\n \"\"\n ],\n \"Created balance\": [\n \"creado\"\n ],\n \"Exchange balance\": [\n \"Monto inicial\"\n ],\n \"Picked up\": [\n \"\"\n ],\n \"Committed\": [\n \"Monto confirmado\"\n ],\n \"Account address\": [\n \"Direcci\u00F3n de cuenta\"\n ],\n \"Subject\": [\n \"\"\n ],\n \"Tips\": [\n \"Propinas\"\n ],\n \"No tips has been authorized from this reserve\": [\n \"\"\n ],\n \"Authorized\": [\n \"Token de autorizaci\u00F3n\"\n ],\n \"Expiration\": [\n \"Informaci\u00F3n extra\"\n ],\n \"amount of tip\": [\n \"monto\"\n ],\n \"Justification\": [\n \"Jurisdicci\u00F3n\"\n ],\n \"reason for the tip\": [\n \"\"\n ],\n \"URL after tip\": [\n \"\"\n ],\n \"URL to visit after tip payment\": [\n \"\"\n ],\n \"Reserves not yet funded\": [\n \"Servidor no encontrado\"\n ],\n \"Reserves ready\": [\n \"\"\n ],\n \"add new reserve\": [\n \"cargar nuevas transferencias\"\n ],\n \"Expires at\": [\n \"\"\n ],\n \"Initial\": [\n \"\"\n ],\n \"delete selected reserve from the database\": [\n \"\"\n ],\n \"authorize new tip from selected reserve\": [\n \"\"\n ],\n \"There is no ready reserves yet, add more pressing the + sign or fund them\": [\n \"No hay transferencias todav\u00EDa, agregar mas presionando el signo +\"\n ],\n \"Expected Balance\": [\n \"Ejecutado en\"\n ],\n \"could not create the tip\": [\n \"No se pudo create el reembolso\"\n ],\n \"should not be empty\": [\n \"no puede ser vac\u00EDo\"\n ],\n \"should be greater that 0\": [\n \"Debe ser mayor a 0\"\n ],\n \"can't be empty\": [\n \"no puede ser vac\u00EDo\"\n ],\n \"to short\": [\n \"\"\n ],\n \"Identifier\": [\n \"\"\n ],\n \"Name of the template in URLs.\": [\n \"\"\n ],\n \"Describe what this template stands for\": [\n \"\"\n ],\n \"Order summary\": [\n \"Estado de orden\"\n ],\n \"Minimum age\": [\n \"\"\n ],\n \"Is this contract restricted to some age?\": [\n \"\"\n ],\n \"Payment timeout\": [\n \"Opciones de pago\"\n ],\n \"How much time has the customer to complete the payment once the order was created.\": [\n \"\"\n ],\n \"Point-of-sale key\": [\n \"\"\n ],\n \"Useful to validate the purchase\": [\n \"\"\n ],\n \"could not inform template\": [\n \"no se pudo informar la transferencia\"\n ],\n \"Amount is required\": [\n \"Login necesario\"\n ],\n \"Order summary is required\": [\n \"\"\n ],\n \"Amount of the order\": [\n \"\"\n ],\n \"could not create order from template\": [\n \"No se pudo create el reembolso\"\n ],\n \"Templates\": [\n \"\"\n ],\n \"add new templates\": [\n \"\"\n ],\n \"load more templates before the first one\": [\n \"\"\n ],\n \"load newer templates\": [\n \"cargar nuevas transferencias\"\n ],\n \"delete selected templates from the database\": [\n \"\"\n ],\n \"use template to create new order\": [\n \"\"\n ],\n \"load more templates after the last one\": [\n \"\"\n ],\n \"load older templates\": [\n \"cargar viejas transferencias\"\n ],\n \"There is no templates yet, add more pressing the + sign\": [\n \"No hay propinas todav\u00EDa, agregar mas presionando el signo +\"\n ],\n \"template delete successfully\": [\n \"producto fue eliminado correctamente\"\n ],\n \"could not delete the template\": [\n \"no se pudo eliminar el producto\"\n ],\n \"could not update template\": [\n \"no se pudo actualizar el producto\"\n ],\n \"should be one of '%1$s'\": [\n \"deber\u00EDan ser iguales\"\n ],\n \"Webhook ID to use\": [\n \"\"\n ],\n \"Event\": [\n \"\"\n ],\n \"The event of the webhook: why the webhook is used\": [\n \"\"\n ],\n \"Method\": [\n \"\"\n ],\n \"Method used by the webhook\": [\n \"\"\n ],\n \"URL\": [\n \"\"\n ],\n \"URL of the webhook where the customer will be redirected\": [\n \"\"\n ],\n \"Header\": [\n \"\"\n ],\n \"Header template of the webhook\": [\n \"\"\n ],\n \"Body\": [\n \"\"\n ],\n \"Body template by the webhook\": [\n \"\"\n ],\n \"Webhooks\": [\n \"\"\n ],\n \"add new webhooks\": [\n \"\"\n ],\n \"load more webhooks before the first one\": [\n \"\"\n ],\n \"load newer webhooks\": [\n \"cargar nuevas ordenes\"\n ],\n \"Event type\": [\n \"\"\n ],\n \"delete selected webhook from the database\": [\n \"\"\n ],\n \"load more webhooks after the last one\": [\n \"\"\n ],\n \"load older webhooks\": [\n \"cargar viejas ordenes\"\n ],\n \"There is no webhooks yet, add more pressing the + sign\": [\n \"No hay propinas todav\u00EDa, agregar mas presionando el signo +\"\n ],\n \"webhook delete successfully\": [\n \"producto fue eliminado correctamente\"\n ],\n \"could not delete the webhook\": [\n \"no se pudo eliminar el producto\"\n ],\n \"check the id, does not look valid\": [\n \"verificar el id, no parece v\u00E1lido\"\n ],\n \"should have 52 characters, current %1$s\": [\n \"deber\u00EDa tener 52 caracteres, actualmente %1$s\"\n ],\n \"URL doesn't have the right format\": [\n \"La URL no tiene el formato correcto\"\n ],\n \"Credited bank account\": [\n \"\"\n ],\n \"Select one account\": [\n \"\"\n ],\n \"Bank account of the merchant where the payment was received\": [\n \"\"\n ],\n \"Wire transfer ID\": [\n \"Id de transferencia\"\n ],\n \"unique identifier of the wire transfer used by the exchange, must be 52 characters long\": [\n \"\"\n ],\n \"Base URL of the exchange that made the transfer, should have been in the wire transfer subject\": [\n \"\"\n ],\n \"Amount credited\": [\n \"\"\n ],\n \"Actual amount that was wired to the merchant's bank account\": [\n \"\"\n ],\n \"could not inform transfer\": [\n \"no se pudo informar la transferencia\"\n ],\n \"Transfers\": [\n \"Transferencias\"\n ],\n \"add new transfer\": [\n \"cargar nuevas transferencias\"\n ],\n \"load more transfers before the first one\": [\n \"\"\n ],\n \"load newer transfers\": [\n \"cargar nuevas transferencias\"\n ],\n \"Credit\": [\n \"Cr\u00E9dito\"\n ],\n \"Confirmed\": [\n \"Confirmado\"\n ],\n \"Verified\": [\n \"Verificado\"\n ],\n \"Executed at\": [\n \"Ejecutado en\"\n ],\n \"yes\": [\n \"si\"\n ],\n \"no\": [\n \"no\"\n ],\n \"unknown\": [\n \"desconocido\"\n ],\n \"delete selected transfer from the database\": [\n \"\"\n ],\n \"load more transfer after the last one\": [\n \"\"\n ],\n \"load older transfers\": [\n \"cargar viejas transferencias\"\n ],\n \"There is no transfer yet, add more pressing the + sign\": [\n \"No hay transferencias todav\u00EDa, agregar mas presionando el signo +\"\n ],\n \"filter by account address\": [\n \"Direcci\u00F3n de cuenta\"\n ],\n \"only show wire transfers confirmed by the merchant\": [\n \"\"\n ],\n \"only show wire transfers claimed by the exchange\": [\n \"\"\n ],\n \"Unverified\": [\n \"Verificado\"\n ],\n \"is not valid\": [\n \"\"\n ],\n \"is not a number\": [\n \"N\u00FAmero de edificio\"\n ],\n \"must be 1 or greater\": [\n \"\"\n ],\n \"max 7 lines\": [\n \"\"\n ],\n \"change authorization configuration\": [\n \"\"\n ],\n \"Need to complete marked fields and choose authorization method\": [\n \"\"\n ],\n \"This is not a valid bitcoin address.\": [\n \"\"\n ],\n \"This is not a valid Ethereum address.\": [\n \"\"\n ],\n \"IBAN numbers usually have more that 4 digits\": [\n \"\"\n ],\n \"IBAN numbers usually have less that 34 digits\": [\n \"\"\n ],\n \"IBAN country code not found\": [\n \"\"\n ],\n \"IBAN number is not valid, checksum is wrong\": [\n \"\"\n ],\n \"Target type\": [\n \"\"\n ],\n \"Method to use for wire transfer\": [\n \"no se pudo informar la transferencia\"\n ],\n \"Routing\": [\n \"\"\n ],\n \"Routing number.\": [\n \"N\u00FAmero de edificio\"\n ],\n \"Account\": [\n \"Monto\"\n ],\n \"Account number.\": [\n \"Direcci\u00F3n de cuenta\"\n ],\n \"Business Identifier Code.\": [\n \"\"\n ],\n \"Bank Account Number.\": [\n \"\"\n ],\n \"Unified Payment Interface.\": [\n \"\"\n ],\n \"Bitcoin protocol.\": [\n \"\"\n ],\n \"Ethereum protocol.\": [\n \"\"\n ],\n \"Interledger protocol.\": [\n \"\"\n ],\n \"Host\": [\n \"\"\n ],\n \"Bank host.\": [\n \"\"\n ],\n \"Bank account.\": [\n \"\"\n ],\n \"Bank account owner's name.\": [\n \"\"\n ],\n \"No accounts yet.\": [\n \"\"\n ],\n \"Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.\": [\n \"\"\n ],\n \"Business name\": [\n \"Nombre de edificio\"\n ],\n \"Legal name of the business represented by this instance.\": [\n \"\"\n ],\n \"Email\": [\n \"\"\n ],\n \"Contact email\": [\n \"\"\n ],\n \"Website URL\": [\n \"\"\n ],\n \"URL.\": [\n \"\"\n ],\n \"Logo\": [\n \"\"\n ],\n \"Logo image.\": [\n \"\"\n ],\n \"Bank account\": [\n \"\"\n ],\n \"URI specifying bank account for crediting revenue.\": [\n \"\"\n ],\n \"Default max deposit fee\": [\n \"Impuesto m\u00E1ximo de deposito por omisi\u00F3n\"\n ],\n \"Maximum deposit fees this merchant is willing to pay per order by default.\": [\n \"\"\n ],\n \"Default max wire fee\": [\n \"Impuesto m\u00E1ximo de transferencia por omisi\u00F3n\"\n ],\n \"Maximum wire fees this merchant is willing to pay per wire transfer by default.\": [\n \"\"\n ],\n \"Default wire fee amortization\": [\n \"Amortizaci\u00F3n de impuesto de transferencia por omisi\u00F3n\"\n ],\n \"Number of orders excess wire transfer fees will be divided by to compute per order surcharge.\": [\n \"\"\n ],\n \"Physical location of the merchant.\": [\n \"\"\n ],\n \"Jurisdiction\": [\n \"Jurisdicci\u00F3n\"\n ],\n \"Jurisdiction for legal disputes with the merchant.\": [\n \"\"\n ],\n \"Default payment delay\": [\n \"Retrazo de pago por omisi\u00F3n\"\n ],\n \"Time customers have to pay an order before the offer expires by default.\": [\n \"\"\n ],\n \"Default wire transfer delay\": [\n \"Retrazo de transferencia por omisi\u00F3n\"\n ],\n \"Maximum time an exchange is allowed to delay wiring funds to the merchant, enabling it to aggregate smaller payments into larger wire transfers and reducing wire fees.\": [\n \"\"\n ],\n \"Instance id\": [\n \"Instancia\"\n ],\n \"Change the authorization method use for this instance.\": [\n \"Limpiar el token de autorizaci\u00F3n significa acceso publico a la instancia\"\n ],\n \"Manage access token\": [\n \"Administrar token\"\n ],\n \"Failed to create instance\": [\n \"no se pudo crear la instancia\"\n ],\n \"Login required\": [\n \"Login necesario\"\n ],\n \"Please enter your access token.\": [\n \"\"\n ],\n \"Access Token\": [\n \"Acceso denegado\"\n ],\n \"The request to the backend take too long and was cancelled\": [\n \"\"\n ],\n \"Diagnostic from %1$s is '%2$s'\": [\n \"\"\n ],\n \"The backend reported a problem: HTTP status #%1$s\": [\n \"Servidir reporto un problema: HTTP status #%1$s\"\n ],\n \"Access denied\": [\n \"Acceso denegado\"\n ],\n \"The access token provided is invalid.\": [\n \"\"\n ],\n \"No 'default' instance configured yet.\": [\n \"Sin instancia default\"\n ],\n \"Create a 'default' instance to begin using the merchant backoffice.\": [\n \"\"\n ],\n \"The access token provided is invalid\": [\n \"\"\n ],\n \"Hide for today\": [\n \"\"\n ],\n \"Instance\": [\n \"Instancia\"\n ],\n \"Settings\": [\n \"Configuraci\u00F3n\"\n ],\n \"Connection\": [\n \"Conexi\u00F3n\"\n ],\n \"New\": [\n \"Nuevo\"\n ],\n \"List\": [\n \"Lista\"\n ],\n \"Log out\": [\n \"Salir\"\n ],\n \"Check your token is valid\": [\n \"Verifica que el token sea valido\"\n ],\n \"Couldn't access the server.\": [\n \"No se pudo acceder al servidor.\"\n ],\n \"Could not infer instance id from url %1$s\": [\n \"No se pudo inferir el id de la instancia con la url %1$s\"\n ],\n \"Server not found\": [\n \"Servidor no encontrado\"\n ],\n \"Couldn't access the server\": [\n \"No se pudo aceder al servidor\"\n ],\n \"Got message %1$s from %2$s\": [\n \"Recivimos el mensaje %1$s desde %2$s\"\n ],\n \"Unexpected Error\": [\n \"Error inesperado\"\n ],\n \"The value %1$s is invalid for a payment url\": [\n \"El valor %1$s es invalido para una URL de pago\"\n ],\n \"add element to the list\": [\n \"\"\n ],\n \"add\": [\n \"Agregar\"\n ],\n \"Deleting\": [\n \"Borrando\"\n ],\n \"Changing\": [\n \"Cambiando\"\n ],\n \"Order ID\": [\n \"Orden\"\n ],\n \"Payment URL\": [\n \"Detalles de pago\"\n ]\n }\n }\n};\n\nstrings['fr'] = {\n \"domain\": \"messages\",\n \"locale_data\": {\n \"messages\": {\n \"\": {\n \"domain\": \"messages\",\n \"plural_forms\": \"nplurals=2; plural=(n != 1);\",\n \"lang\": \"\"\n },\n \"Cancel\": [\n \"\"\n ],\n \"%1$s\": [\n \"\"\n ],\n \"Continue\": [\n \"\"\n ],\n \"Clear\": [\n \"\"\n ],\n \"Confirm\": [\n \"\"\n ],\n \"is not the same as the current access token\": [\n \"\"\n ],\n \"cannot be empty\": [\n \"\"\n ],\n \"cannot be the same as the old token\": [\n \"\"\n ],\n \"is not the same\": [\n \"\"\n ],\n \"You are updating the access token from instance with id %1$s\": [\n \"\"\n ],\n \"Old access token\": [\n \"\"\n ],\n \"access token currently in use\": [\n \"\"\n ],\n \"New access token\": [\n \"\"\n ],\n \"next access token to be used\": [\n \"\"\n ],\n \"Repeat access token\": [\n \"\"\n ],\n \"confirm the same access token\": [\n \"\"\n ],\n \"Clearing the access token will mean public access to the instance\": [\n \"\"\n ],\n \"cannot be the same as the old access token\": [\n \"\"\n ],\n \"You are setting the access token for the new instance\": [\n \"\"\n ],\n \"With external authorization method no check will be done by the merchant backend\": [\n \"\"\n ],\n \"Set external authorization\": [\n \"\"\n ],\n \"Set access token\": [\n \"\"\n ],\n \"Operation in progress...\": [\n \"\"\n ],\n \"The operation will be automatically canceled after %1$s seconds\": [\n \"\"\n ],\n \"Instances\": [\n \"\"\n ],\n \"Delete\": [\n \"\"\n ],\n \"add new instance\": [\n \"\"\n ],\n \"ID\": [\n \"\"\n ],\n \"Name\": [\n \"\"\n ],\n \"Edit\": [\n \"\"\n ],\n \"Purge\": [\n \"\"\n ],\n \"There is no instances yet, add more pressing the + sign\": [\n \"\"\n ],\n \"Only show active instances\": [\n \"\"\n ],\n \"Active\": [\n \"\"\n ],\n \"Only show deleted instances\": [\n \"\"\n ],\n \"Deleted\": [\n \"\"\n ],\n \"Show all instances\": [\n \"\"\n ],\n \"All\": [\n \"\"\n ],\n \"Instance '%1$s' (ID: %2$s) has been deleted\": [\n \"\"\n ],\n \"Failed to delete instance\": [\n \"\"\n ],\n \"Instance '%1$s' (ID: %2$s) has been disabled\": [\n \"\"\n ],\n \"Failed to purge instance\": [\n \"\"\n ],\n \"Pending KYC verification\": [\n \"\"\n ],\n \"Timed out\": [\n \"\"\n ],\n \"Exchange\": [\n \"\"\n ],\n \"Target account\": [\n \"\"\n ],\n \"KYC URL\": [\n \"\"\n ],\n \"Code\": [\n \"\"\n ],\n \"Http Status\": [\n \"\"\n ],\n \"No pending kyc verification!\": [\n \"\"\n ],\n \"change value to unknown date\": [\n \"\"\n ],\n \"change value to empty\": [\n \"\"\n ],\n \"clear\": [\n \"\"\n ],\n \"change value to never\": [\n \"\"\n ],\n \"never\": [\n \"\"\n ],\n \"Country\": [\n \"\"\n ],\n \"Address\": [\n \"\"\n ],\n \"Building number\": [\n \"\"\n ],\n \"Building name\": [\n \"\"\n ],\n \"Street\": [\n \"\"\n ],\n \"Post code\": [\n \"\"\n ],\n \"Town location\": [\n \"\"\n ],\n \"Town\": [\n \"\"\n ],\n \"District\": [\n \"\"\n ],\n \"Country subdivision\": [\n \"\"\n ],\n \"Product id\": [\n \"\"\n ],\n \"Description\": [\n \"\"\n ],\n \"Product\": [\n \"\"\n ],\n \"search products by it's description or id\": [\n \"\"\n ],\n \"no products found with that description\": [\n \"\"\n ],\n \"You must enter a valid product identifier.\": [\n \"\"\n ],\n \"Quantity must be greater than 0!\": [\n \"\"\n ],\n \"This quantity exceeds remaining stock. Currently, only %1$s units remain unreserved in stock.\": [\n \"\"\n ],\n \"Quantity\": [\n \"\"\n ],\n \"how many products will be added\": [\n \"\"\n ],\n \"Add from inventory\": [\n \"\"\n ],\n \"Image should be smaller than 1 MB\": [\n \"\"\n ],\n \"Add\": [\n \"\"\n ],\n \"Remove\": [\n \"\"\n ],\n \"No taxes configured for this product.\": [\n \"\"\n ],\n \"Amount\": [\n \"\"\n ],\n \"Taxes can be in currencies that differ from the main currency used by the merchant.\": [\n \"\"\n ],\n \"Enter currency and value separated with a colon, e.g. &quot;USD:2.3&quot;.\": [\n \"\"\n ],\n \"Legal name of the tax, e.g. VAT or import duties.\": [\n \"\"\n ],\n \"add tax to the tax list\": [\n \"\"\n ],\n \"describe and add a product that is not in the inventory list\": [\n \"\"\n ],\n \"Add custom product\": [\n \"\"\n ],\n \"Complete information of the product\": [\n \"\"\n ],\n \"Image\": [\n \"\"\n ],\n \"photo of the product\": [\n \"\"\n ],\n \"full product description\": [\n \"\"\n ],\n \"Unit\": [\n \"\"\n ],\n \"name of the product unit\": [\n \"\"\n ],\n \"Price\": [\n \"\"\n ],\n \"amount in the current currency\": [\n \"\"\n ],\n \"Taxes\": [\n \"\"\n ],\n \"image\": [\n \"\"\n ],\n \"description\": [\n \"\"\n ],\n \"quantity\": [\n \"\"\n ],\n \"unit price\": [\n \"\"\n ],\n \"total price\": [\n \"\"\n ],\n \"required\": [\n \"\"\n ],\n \"must be greater than 0\": [\n \"\"\n ],\n \"not a valid json\": [\n \"\"\n ],\n \"should be in the future\": [\n \"\"\n ],\n \"refund deadline cannot be before pay deadline\": [\n \"\"\n ],\n \"wire transfer deadline cannot be before refund deadline\": [\n \"\"\n ],\n \"wire transfer deadline cannot be before pay deadline\": [\n \"\"\n ],\n \"should have a refund deadline\": [\n \"\"\n ],\n \"auto refund cannot be after refund deadline\": [\n \"\"\n ],\n \"Manage products in order\": [\n \"\"\n ],\n \"Manage list of products in the order.\": [\n \"\"\n ],\n \"Remove this product from the order.\": [\n \"\"\n ],\n \"Total price\": [\n \"\"\n ],\n \"total product price added up\": [\n \"\"\n ],\n \"Amount to be paid by the customer\": [\n \"\"\n ],\n \"Order price\": [\n \"\"\n ],\n \"final order price\": [\n \"\"\n ],\n \"Summary\": [\n \"\"\n ],\n \"Title of the order to be shown to the customer\": [\n \"\"\n ],\n \"Shipping and Fulfillment\": [\n \"\"\n ],\n \"Delivery date\": [\n \"\"\n ],\n \"Deadline for physical delivery assured by the merchant.\": [\n \"\"\n ],\n \"Location\": [\n \"\"\n ],\n \"address where the products will be delivered\": [\n \"\"\n ],\n \"Fulfillment URL\": [\n \"\"\n ],\n \"URL to which the user will be redirected after successful payment.\": [\n \"\"\n ],\n \"Taler payment options\": [\n \"\"\n ],\n \"Override default Taler payment settings for this order\": [\n \"\"\n ],\n \"Payment deadline\": [\n \"\"\n ],\n \"Deadline for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline.\": [\n \"\"\n ],\n \"Refund deadline\": [\n \"\"\n ],\n \"Time until which the order can be refunded by the merchant.\": [\n \"\"\n ],\n \"Wire transfer deadline\": [\n \"\"\n ],\n \"Deadline for the exchange to make the wire transfer.\": [\n \"\"\n ],\n \"Auto-refund deadline\": [\n \"\"\n ],\n \"Time until which the wallet will automatically check for refunds without user interaction.\": [\n \"\"\n ],\n \"Maximum deposit fee\": [\n \"\"\n ],\n \"Maximum deposit fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.\": [\n \"\"\n ],\n \"Maximum wire fee\": [\n \"\"\n ],\n \"Maximum aggregate wire fees the merchant is willing to cover for this order. Wire fees exceeding this amount are to be covered by the customers.\": [\n \"\"\n ],\n \"Wire fee amortization\": [\n \"\"\n ],\n \"Factor by which wire fees exceeding the above threshold are divided to determine the share of excess wire fees to be paid explicitly by the consumer.\": [\n \"\"\n ],\n \"Create token\": [\n \"\"\n ],\n \"Uncheck this option if the merchant backend generated an order ID with enough entropy to prevent adversarial claims.\": [\n \"\"\n ],\n \"Minimum age required\": [\n \"\"\n ],\n \"Any value greater than 0 will limit the coins able be used to pay this contract. If empty the age restriction will be defined by the products\": [\n \"\"\n ],\n \"Min age defined by the producs is %1$s\": [\n \"\"\n ],\n \"Additional information\": [\n \"\"\n ],\n \"Custom information to be included in the contract for this order.\": [\n \"\"\n ],\n \"You must enter a value in JavaScript Object Notation (JSON).\": [\n \"\"\n ],\n \"days\": [\n \"\"\n ],\n \"hours\": [\n \"\"\n ],\n \"minutes\": [\n \"\"\n ],\n \"seconds\": [\n \"\"\n ],\n \"forever\": [\n \"\"\n ],\n \"%1$sM\": [\n \"\"\n ],\n \"%1$sY\": [\n \"\"\n ],\n \"%1$sd\": [\n \"\"\n ],\n \"%1$sh\": [\n \"\"\n ],\n \"%1$smin\": [\n \"\"\n ],\n \"%1$ssec\": [\n \"\"\n ],\n \"Orders\": [\n \"\"\n ],\n \"create order\": [\n \"\"\n ],\n \"load newer orders\": [\n \"\"\n ],\n \"Date\": [\n \"\"\n ],\n \"Refund\": [\n \"\"\n ],\n \"copy url\": [\n \"\"\n ],\n \"load older orders\": [\n \"\"\n ],\n \"No orders have been found matching your query!\": [\n \"\"\n ],\n \"duplicated\": [\n \"\"\n ],\n \"invalid format\": [\n \"\"\n ],\n \"this value exceed the refundable amount\": [\n \"\"\n ],\n \"date\": [\n \"\"\n ],\n \"amount\": [\n \"\"\n ],\n \"reason\": [\n \"\"\n ],\n \"amount to be refunded\": [\n \"\"\n ],\n \"Max refundable:\": [\n \"\"\n ],\n \"Reason\": [\n \"\"\n ],\n \"Choose one...\": [\n \"\"\n ],\n \"requested by the customer\": [\n \"\"\n ],\n \"other\": [\n \"\"\n ],\n \"why this order is being refunded\": [\n \"\"\n ],\n \"more information to give context\": [\n \"\"\n ],\n \"Contract Terms\": [\n \"\"\n ],\n \"human-readable description of the whole purchase\": [\n \"\"\n ],\n \"total price for the transaction\": [\n \"\"\n ],\n \"URL for this purchase\": [\n \"\"\n ],\n \"Max fee\": [\n \"\"\n ],\n \"maximum total deposit fee accepted by the merchant for this contract\": [\n \"\"\n ],\n \"Max wire fee\": [\n \"\"\n ],\n \"maximum wire fee accepted by the merchant\": [\n \"\"\n ],\n \"over how many customer transactions does the merchant expect to amortize wire fees on average\": [\n \"\"\n ],\n \"Created at\": [\n \"\"\n ],\n \"time when this contract was generated\": [\n \"\"\n ],\n \"after this deadline has passed no refunds will be accepted\": [\n \"\"\n ],\n \"after this deadline, the merchant won't accept payments for the contract\": [\n \"\"\n ],\n \"transfer deadline for the exchange\": [\n \"\"\n ],\n \"time indicating when the order should be delivered\": [\n \"\"\n ],\n \"where the order will be delivered\": [\n \"\"\n ],\n \"Auto-refund delay\": [\n \"\"\n ],\n \"how long the wallet should try to get an automatic refund for the purchase\": [\n \"\"\n ],\n \"Extra info\": [\n \"\"\n ],\n \"extra data that is only interpreted by the merchant frontend\": [\n \"\"\n ],\n \"Order\": [\n \"\"\n ],\n \"claimed\": [\n \"\"\n ],\n \"claimed at\": [\n \"\"\n ],\n \"Timeline\": [\n \"\"\n ],\n \"Payment details\": [\n \"\"\n ],\n \"Order status\": [\n \"\"\n ],\n \"Product list\": [\n \"\"\n ],\n \"paid\": [\n \"\"\n ],\n \"wired\": [\n \"\"\n ],\n \"refunded\": [\n \"\"\n ],\n \"refund order\": [\n \"\"\n ],\n \"not refundable\": [\n \"\"\n ],\n \"refund\": [\n \"\"\n ],\n \"Refunded amount\": [\n \"\"\n ],\n \"Refund taken\": [\n \"\"\n ],\n \"Status URL\": [\n \"\"\n ],\n \"Refund URI\": [\n \"\"\n ],\n \"unpaid\": [\n \"\"\n ],\n \"pay at\": [\n \"\"\n ],\n \"created at\": [\n \"\"\n ],\n \"Order status URL\": [\n \"\"\n ],\n \"Payment URI\": [\n \"\"\n ],\n \"Unknown order status. This is an error, please contact the administrator.\": [\n \"\"\n ],\n \"Back\": [\n \"\"\n ],\n \"refund created successfully\": [\n \"\"\n ],\n \"could not create the refund\": [\n \"\"\n ],\n \"select date to show nearby orders\": [\n \"\"\n ],\n \"order id\": [\n \"\"\n ],\n \"jump to order with the given order ID\": [\n \"\"\n ],\n \"remove all filters\": [\n \"\"\n ],\n \"only show paid orders\": [\n \"\"\n ],\n \"Paid\": [\n \"\"\n ],\n \"only show orders with refunds\": [\n \"\"\n ],\n \"Refunded\": [\n \"\"\n ],\n \"only show orders where customers paid, but wire payments from payment provider are still pending\": [\n \"\"\n ],\n \"Not wired\": [\n \"\"\n ],\n \"clear date filter\": [\n \"\"\n ],\n \"date (YYYY/MM/DD)\": [\n \"\"\n ],\n \"Enter an order id\": [\n \"\"\n ],\n \"order not found\": [\n \"\"\n ],\n \"could not get the order to refund\": [\n \"\"\n ],\n \"Loading...\": [\n \"\"\n ],\n \"click here to configure the stock of the product, leave it as is and the backend will not control stock\": [\n \"\"\n ],\n \"Manage stock\": [\n \"\"\n ],\n \"this product has been configured without stock control\": [\n \"\"\n ],\n \"Infinite\": [\n \"\"\n ],\n \"lost cannot be greater than current and incoming (max %1$s)\": [\n \"\"\n ],\n \"Incoming\": [\n \"\"\n ],\n \"Lost\": [\n \"\"\n ],\n \"Current\": [\n \"\"\n ],\n \"remove stock control for this product\": [\n \"\"\n ],\n \"without stock\": [\n \"\"\n ],\n \"Next restock\": [\n \"\"\n ],\n \"Delivery address\": [\n \"\"\n ],\n \"product identification to use in URLs (for internal use only)\": [\n \"\"\n ],\n \"illustration of the product for customers\": [\n \"\"\n ],\n \"product description for customers\": [\n \"\"\n ],\n \"Age restricted\": [\n \"\"\n ],\n \"is this product restricted for customer below certain age?\": [\n \"\"\n ],\n \"unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers\": [\n \"\"\n ],\n \"sale price for customers, including taxes, for above units of the product\": [\n \"\"\n ],\n \"Stock\": [\n \"\"\n ],\n \"product inventory for products with finite supply (for internal use only)\": [\n \"\"\n ],\n \"taxes included in the product price, exposed to customers\": [\n \"\"\n ],\n \"Need to complete marked fields\": [\n \"\"\n ],\n \"could not create product\": [\n \"\"\n ],\n \"Products\": [\n \"\"\n ],\n \"add product to inventory\": [\n \"\"\n ],\n \"Sell\": [\n \"\"\n ],\n \"Profit\": [\n \"\"\n ],\n \"Sold\": [\n \"\"\n ],\n \"free\": [\n \"\"\n ],\n \"go to product update page\": [\n \"\"\n ],\n \"Update\": [\n \"\"\n ],\n \"remove this product from the database\": [\n \"\"\n ],\n \"update the product with new price\": [\n \"\"\n ],\n \"update product with new price\": [\n \"\"\n ],\n \"add more elements to the inventory\": [\n \"\"\n ],\n \"report elements lost in the inventory\": [\n \"\"\n ],\n \"new price for the product\": [\n \"\"\n ],\n \"the are value with errors\": [\n \"\"\n ],\n \"update product with new stock and price\": [\n \"\"\n ],\n \"There is no products yet, add more pressing the + sign\": [\n \"\"\n ],\n \"product updated successfully\": [\n \"\"\n ],\n \"could not update the product\": [\n \"\"\n ],\n \"product delete successfully\": [\n \"\"\n ],\n \"could not delete the product\": [\n \"\"\n ],\n \"Product id:\": [\n \"\"\n ],\n \"To complete the setup of the reserve, you must now initiate a wire transfer using the given wire transfer subject and crediting the specified amount to the indicated account of the exchange.\": [\n \"\"\n ],\n \"If your system supports RFC 8905, you can do this by opening this URI:\": [\n \"\"\n ],\n \"it should be greater than 0\": [\n \"\"\n ],\n \"must be a valid URL\": [\n \"\"\n ],\n \"Initial balance\": [\n \"\"\n ],\n \"balance prior to deposit\": [\n \"\"\n ],\n \"Exchange URL\": [\n \"\"\n ],\n \"URL of exchange\": [\n \"\"\n ],\n \"Next\": [\n \"\"\n ],\n \"Wire method\": [\n \"\"\n ],\n \"method to use for wire transfer\": [\n \"\"\n ],\n \"Select one wire method\": [\n \"\"\n ],\n \"could not create reserve\": [\n \"\"\n ],\n \"Valid until\": [\n \"\"\n ],\n \"Created balance\": [\n \"\"\n ],\n \"Exchange balance\": [\n \"\"\n ],\n \"Picked up\": [\n \"\"\n ],\n \"Committed\": [\n \"\"\n ],\n \"Account address\": [\n \"\"\n ],\n \"Subject\": [\n \"\"\n ],\n \"Tips\": [\n \"\"\n ],\n \"No tips has been authorized from this reserve\": [\n \"\"\n ],\n \"Authorized\": [\n \"\"\n ],\n \"Expiration\": [\n \"\"\n ],\n \"amount of tip\": [\n \"\"\n ],\n \"Justification\": [\n \"\"\n ],\n \"reason for the tip\": [\n \"\"\n ],\n \"URL after tip\": [\n \"\"\n ],\n \"URL to visit after tip payment\": [\n \"\"\n ],\n \"Reserves not yet funded\": [\n \"\"\n ],\n \"Reserves ready\": [\n \"\"\n ],\n \"add new reserve\": [\n \"\"\n ],\n \"Expires at\": [\n \"\"\n ],\n \"Initial\": [\n \"\"\n ],\n \"delete selected reserve from the database\": [\n \"\"\n ],\n \"authorize new tip from selected reserve\": [\n \"\"\n ],\n \"There is no ready reserves yet, add more pressing the + sign or fund them\": [\n \"\"\n ],\n \"Expected Balance\": [\n \"\"\n ],\n \"could not create the tip\": [\n \"\"\n ],\n \"should not be empty\": [\n \"\"\n ],\n \"should be greater that 0\": [\n \"\"\n ],\n \"can't be empty\": [\n \"\"\n ],\n \"to short\": [\n \"\"\n ],\n \"Identifier\": [\n \"\"\n ],\n \"Name of the template in URLs.\": [\n \"\"\n ],\n \"Describe what this template stands for\": [\n \"\"\n ],\n \"Order summary\": [\n \"\"\n ],\n \"Minimum age\": [\n \"\"\n ],\n \"Is this contract restricted to some age?\": [\n \"\"\n ],\n \"Payment timeout\": [\n \"\"\n ],\n \"How much time has the customer to complete the payment once the order was created.\": [\n \"\"\n ],\n \"Point-of-sale key\": [\n \"\"\n ],\n \"Useful to validate the purchase\": [\n \"\"\n ],\n \"could not inform template\": [\n \"\"\n ],\n \"Amount is required\": [\n \"\"\n ],\n \"Order summary is required\": [\n \"\"\n ],\n \"Amount of the order\": [\n \"\"\n ],\n \"could not create order from template\": [\n \"\"\n ],\n \"Templates\": [\n \"\"\n ],\n \"add new templates\": [\n \"\"\n ],\n \"load more templates before the first one\": [\n \"\"\n ],\n \"load newer templates\": [\n \"\"\n ],\n \"delete selected templates from the database\": [\n \"\"\n ],\n \"use template to create new order\": [\n \"\"\n ],\n \"load more templates after the last one\": [\n \"\"\n ],\n \"load older templates\": [\n \"\"\n ],\n \"There is no templates yet, add more pressing the + sign\": [\n \"\"\n ],\n \"template delete successfully\": [\n \"\"\n ],\n \"could not delete the template\": [\n \"\"\n ],\n \"could not update template\": [\n \"\"\n ],\n \"should be one of '%1$s'\": [\n \"\"\n ],\n \"Webhook ID to use\": [\n \"\"\n ],\n \"Event\": [\n \"\"\n ],\n \"The event of the webhook: why the webhook is used\": [\n \"\"\n ],\n \"Method\": [\n \"\"\n ],\n \"Method used by the webhook\": [\n \"\"\n ],\n \"URL\": [\n \"\"\n ],\n \"URL of the webhook where the customer will be redirected\": [\n \"\"\n ],\n \"Header\": [\n \"\"\n ],\n \"Header template of the webhook\": [\n \"\"\n ],\n \"Body\": [\n \"\"\n ],\n \"Body template by the webhook\": [\n \"\"\n ],\n \"Webhooks\": [\n \"\"\n ],\n \"add new webhooks\": [\n \"\"\n ],\n \"load more webhooks before the first one\": [\n \"\"\n ],\n \"load newer webhooks\": [\n \"\"\n ],\n \"Event type\": [\n \"\"\n ],\n \"delete selected webhook from the database\": [\n \"\"\n ],\n \"load more webhooks after the last one\": [\n \"\"\n ],\n \"load older webhooks\": [\n \"\"\n ],\n \"There is no webhooks yet, add more pressing the + sign\": [\n \"\"\n ],\n \"webhook delete successfully\": [\n \"\"\n ],\n \"could not delete the webhook\": [\n \"\"\n ],\n \"check the id, does not look valid\": [\n \"\"\n ],\n \"should have 52 characters, current %1$s\": [\n \"\"\n ],\n \"URL doesn't have the right format\": [\n \"\"\n ],\n \"Credited bank account\": [\n \"\"\n ],\n \"Select one account\": [\n \"\"\n ],\n \"Bank account of the merchant where the payment was received\": [\n \"\"\n ],\n \"Wire transfer ID\": [\n \"\"\n ],\n \"unique identifier of the wire transfer used by the exchange, must be 52 characters long\": [\n \"\"\n ],\n \"Base URL of the exchange that made the transfer, should have been in the wire transfer subject\": [\n \"\"\n ],\n \"Amount credited\": [\n \"\"\n ],\n \"Actual amount that was wired to the merchant's bank account\": [\n \"\"\n ],\n \"could not inform transfer\": [\n \"\"\n ],\n \"Transfers\": [\n \"\"\n ],\n \"add new transfer\": [\n \"\"\n ],\n \"load more transfers before the first one\": [\n \"\"\n ],\n \"load newer transfers\": [\n \"\"\n ],\n \"Credit\": [\n \"\"\n ],\n \"Confirmed\": [\n \"\"\n ],\n \"Verified\": [\n \"\"\n ],\n \"Executed at\": [\n \"\"\n ],\n \"yes\": [\n \"\"\n ],\n \"no\": [\n \"\"\n ],\n \"unknown\": [\n \"\"\n ],\n \"delete selected transfer from the database\": [\n \"\"\n ],\n \"load more transfer after the last one\": [\n \"\"\n ],\n \"load older transfers\": [\n \"\"\n ],\n \"There is no transfer yet, add more pressing the + sign\": [\n \"\"\n ],\n \"filter by account address\": [\n \"\"\n ],\n \"only show wire transfers confirmed by the merchant\": [\n \"\"\n ],\n \"only show wire transfers claimed by the exchange\": [\n \"\"\n ],\n \"Unverified\": [\n \"\"\n ],\n \"is not valid\": [\n \"\"\n ],\n \"is not a number\": [\n \"\"\n ],\n \"must be 1 or greater\": [\n \"\"\n ],\n \"max 7 lines\": [\n \"\"\n ],\n \"change authorization configuration\": [\n \"\"\n ],\n \"Need to complete marked fields and choose authorization method\": [\n \"\"\n ],\n \"This is not a valid bitcoin address.\": [\n \"\"\n ],\n \"This is not a valid Ethereum address.\": [\n \"\"\n ],\n \"IBAN numbers usually have more that 4 digits\": [\n \"\"\n ],\n \"IBAN numbers usually have less that 34 digits\": [\n \"\"\n ],\n \"IBAN country code not found\": [\n \"\"\n ],\n \"IBAN number is not valid, checksum is wrong\": [\n \"\"\n ],\n \"Target type\": [\n \"\"\n ],\n \"Method to use for wire transfer\": [\n \"\"\n ],\n \"Routing\": [\n \"\"\n ],\n \"Routing number.\": [\n \"\"\n ],\n \"Account\": [\n \"\"\n ],\n \"Account number.\": [\n \"\"\n ],\n \"Business Identifier Code.\": [\n \"\"\n ],\n \"Bank Account Number.\": [\n \"\"\n ],\n \"Unified Payment Interface.\": [\n \"\"\n ],\n \"Bitcoin protocol.\": [\n \"\"\n ],\n \"Ethereum protocol.\": [\n \"\"\n ],\n \"Interledger protocol.\": [\n \"\"\n ],\n \"Host\": [\n \"\"\n ],\n \"Bank host.\": [\n \"\"\n ],\n \"Bank account.\": [\n \"\"\n ],\n \"Bank account owner's name.\": [\n \"\"\n ],\n \"No accounts yet.\": [\n \"\"\n ],\n \"Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.\": [\n \"\"\n ],\n \"Business name\": [\n \"\"\n ],\n \"Legal name of the business represented by this instance.\": [\n \"\"\n ],\n \"Email\": [\n \"\"\n ],\n \"Contact email\": [\n \"\"\n ],\n \"Website URL\": [\n \"\"\n ],\n \"URL.\": [\n \"\"\n ],\n \"Logo\": [\n \"\"\n ],\n \"Logo image.\": [\n \"\"\n ],\n \"Bank account\": [\n \"\"\n ],\n \"URI specifying bank account for crediting revenue.\": [\n \"\"\n ],\n \"Default max deposit fee\": [\n \"\"\n ],\n \"Maximum deposit fees this merchant is willing to pay per order by default.\": [\n \"\"\n ],\n \"Default max wire fee\": [\n \"\"\n ],\n \"Maximum wire fees this merchant is willing to pay per wire transfer by default.\": [\n \"\"\n ],\n \"Default wire fee amortization\": [\n \"\"\n ],\n \"Number of orders excess wire transfer fees will be divided by to compute per order surcharge.\": [\n \"\"\n ],\n \"Physical location of the merchant.\": [\n \"\"\n ],\n \"Jurisdiction\": [\n \"\"\n ],\n \"Jurisdiction for legal disputes with the merchant.\": [\n \"\"\n ],\n \"Default payment delay\": [\n \"\"\n ],\n \"Time customers have to pay an order before the offer expires by default.\": [\n \"\"\n ],\n \"Default wire transfer delay\": [\n \"\"\n ],\n \"Maximum time an exchange is allowed to delay wiring funds to the merchant, enabling it to aggregate smaller payments into larger wire transfers and reducing wire fees.\": [\n \"\"\n ],\n \"Instance id\": [\n \"\"\n ],\n \"Change the authorization method use for this instance.\": [\n \"\"\n ],\n \"Manage access token\": [\n \"\"\n ],\n \"Failed to create instance\": [\n \"\"\n ],\n \"Login required\": [\n \"\"\n ],\n \"Please enter your access token.\": [\n \"\"\n ],\n \"Access Token\": [\n \"\"\n ],\n \"The request to the backend take too long and was cancelled\": [\n \"\"\n ],\n \"Diagnostic from %1$s is '%2$s'\": [\n \"\"\n ],\n \"The backend reported a problem: HTTP status #%1$s\": [\n \"\"\n ],\n \"Access denied\": [\n \"\"\n ],\n \"The access token provided is invalid.\": [\n \"\"\n ],\n \"No 'default' instance configured yet.\": [\n \"\"\n ],\n \"Create a 'default' instance to begin using the merchant backoffice.\": [\n \"\"\n ],\n \"The access token provided is invalid\": [\n \"\"\n ],\n \"Hide for today\": [\n \"\"\n ],\n \"Instance\": [\n \"\"\n ],\n \"Settings\": [\n \"\"\n ],\n \"Connection\": [\n \"\"\n ],\n \"New\": [\n \"\"\n ],\n \"List\": [\n \"\"\n ],\n \"Log out\": [\n \"\"\n ],\n \"Check your token is valid\": [\n \"\"\n ],\n \"Couldn't access the server.\": [\n \"\"\n ],\n \"Could not infer instance id from url %1$s\": [\n \"\"\n ],\n \"Server not found\": [\n \"\"\n ],\n \"Couldn't access the server\": [\n \"\"\n ],\n \"Got message %1$s from %2$s\": [\n \"\"\n ],\n \"Unexpected Error\": [\n \"\"\n ],\n \"The value %1$s is invalid for a payment url\": [\n \"\"\n ],\n \"add element to the list\": [\n \"\"\n ],\n \"add\": [\n \"\"\n ],\n \"Deleting\": [\n \"\"\n ],\n \"Changing\": [\n \"\"\n ],\n \"Order ID\": [\n \"\"\n ],\n \"Payment URL\": [\n \"\"\n ]\n }\n }\n};\n\nstrings['it'] = {\n \"domain\": \"messages\",\n \"locale_data\": {\n \"messages\": {\n \"\": {\n \"domain\": \"messages\",\n \"plural_forms\": \"nplurals=2; plural=(n != 1);\",\n \"lang\": \"\"\n },\n \"Cancel\": [\n \"\"\n ],\n \"%1$s\": [\n \"\"\n ],\n \"Continue\": [\n \"\"\n ],\n \"Clear\": [\n \"\"\n ],\n \"Confirm\": [\n \"\"\n ],\n \"is not the same as the current access token\": [\n \"\"\n ],\n \"cannot be empty\": [\n \"\"\n ],\n \"cannot be the same as the old token\": [\n \"\"\n ],\n \"is not the same\": [\n \"\"\n ],\n \"You are updating the access token from instance with id %1$s\": [\n \"\"\n ],\n \"Old access token\": [\n \"\"\n ],\n \"access token currently in use\": [\n \"\"\n ],\n \"New access token\": [\n \"\"\n ],\n \"next access token to be used\": [\n \"\"\n ],\n \"Repeat access token\": [\n \"\"\n ],\n \"confirm the same access token\": [\n \"\"\n ],\n \"Clearing the access token will mean public access to the instance\": [\n \"\"\n ],\n \"cannot be the same as the old access token\": [\n \"\"\n ],\n \"You are setting the access token for the new instance\": [\n \"\"\n ],\n \"With external authorization method no check will be done by the merchant backend\": [\n \"\"\n ],\n \"Set external authorization\": [\n \"\"\n ],\n \"Set access token\": [\n \"\"\n ],\n \"Operation in progress...\": [\n \"\"\n ],\n \"The operation will be automatically canceled after %1$s seconds\": [\n \"\"\n ],\n \"Instances\": [\n \"\"\n ],\n \"Delete\": [\n \"\"\n ],\n \"add new instance\": [\n \"\"\n ],\n \"ID\": [\n \"\"\n ],\n \"Name\": [\n \"\"\n ],\n \"Edit\": [\n \"\"\n ],\n \"Purge\": [\n \"\"\n ],\n \"There is no instances yet, add more pressing the + sign\": [\n \"\"\n ],\n \"Only show active instances\": [\n \"\"\n ],\n \"Active\": [\n \"\"\n ],\n \"Only show deleted instances\": [\n \"\"\n ],\n \"Deleted\": [\n \"\"\n ],\n \"Show all instances\": [\n \"\"\n ],\n \"All\": [\n \"\"\n ],\n \"Instance '%1$s' (ID: %2$s) has been deleted\": [\n \"\"\n ],\n \"Failed to delete instance\": [\n \"\"\n ],\n \"Instance '%1$s' (ID: %2$s) has been disabled\": [\n \"\"\n ],\n \"Failed to purge instance\": [\n \"\"\n ],\n \"Pending KYC verification\": [\n \"\"\n ],\n \"Timed out\": [\n \"\"\n ],\n \"Exchange\": [\n \"\"\n ],\n \"Target account\": [\n \"\"\n ],\n \"KYC URL\": [\n \"\"\n ],\n \"Code\": [\n \"\"\n ],\n \"Http Status\": [\n \"\"\n ],\n \"No pending kyc verification!\": [\n \"\"\n ],\n \"change value to unknown date\": [\n \"\"\n ],\n \"change value to empty\": [\n \"\"\n ],\n \"clear\": [\n \"\"\n ],\n \"change value to never\": [\n \"\"\n ],\n \"never\": [\n \"\"\n ],\n \"Country\": [\n \"\"\n ],\n \"Address\": [\n \"\"\n ],\n \"Building number\": [\n \"\"\n ],\n \"Building name\": [\n \"\"\n ],\n \"Street\": [\n \"\"\n ],\n \"Post code\": [\n \"\"\n ],\n \"Town location\": [\n \"\"\n ],\n \"Town\": [\n \"\"\n ],\n \"District\": [\n \"\"\n ],\n \"Country subdivision\": [\n \"\"\n ],\n \"Product id\": [\n \"\"\n ],\n \"Description\": [\n \"\"\n ],\n \"Product\": [\n \"\"\n ],\n \"search products by it's description or id\": [\n \"\"\n ],\n \"no products found with that description\": [\n \"\"\n ],\n \"You must enter a valid product identifier.\": [\n \"\"\n ],\n \"Quantity must be greater than 0!\": [\n \"\"\n ],\n \"This quantity exceeds remaining stock. Currently, only %1$s units remain unreserved in stock.\": [\n \"\"\n ],\n \"Quantity\": [\n \"\"\n ],\n \"how many products will be added\": [\n \"\"\n ],\n \"Add from inventory\": [\n \"\"\n ],\n \"Image should be smaller than 1 MB\": [\n \"\"\n ],\n \"Add\": [\n \"\"\n ],\n \"Remove\": [\n \"\"\n ],\n \"No taxes configured for this product.\": [\n \"\"\n ],\n \"Amount\": [\n \"\"\n ],\n \"Taxes can be in currencies that differ from the main currency used by the merchant.\": [\n \"\"\n ],\n \"Enter currency and value separated with a colon, e.g. &quot;USD:2.3&quot;.\": [\n \"\"\n ],\n \"Legal name of the tax, e.g. VAT or import duties.\": [\n \"\"\n ],\n \"add tax to the tax list\": [\n \"\"\n ],\n \"describe and add a product that is not in the inventory list\": [\n \"\"\n ],\n \"Add custom product\": [\n \"\"\n ],\n \"Complete information of the product\": [\n \"\"\n ],\n \"Image\": [\n \"\"\n ],\n \"photo of the product\": [\n \"\"\n ],\n \"full product description\": [\n \"\"\n ],\n \"Unit\": [\n \"\"\n ],\n \"name of the product unit\": [\n \"\"\n ],\n \"Price\": [\n \"\"\n ],\n \"amount in the current currency\": [\n \"\"\n ],\n \"Taxes\": [\n \"\"\n ],\n \"image\": [\n \"\"\n ],\n \"description\": [\n \"\"\n ],\n \"quantity\": [\n \"\"\n ],\n \"unit price\": [\n \"\"\n ],\n \"total price\": [\n \"\"\n ],\n \"required\": [\n \"\"\n ],\n \"must be greater than 0\": [\n \"\"\n ],\n \"not a valid json\": [\n \"\"\n ],\n \"should be in the future\": [\n \"\"\n ],\n \"refund deadline cannot be before pay deadline\": [\n \"\"\n ],\n \"wire transfer deadline cannot be before refund deadline\": [\n \"\"\n ],\n \"wire transfer deadline cannot be before pay deadline\": [\n \"\"\n ],\n \"should have a refund deadline\": [\n \"\"\n ],\n \"auto refund cannot be after refund deadline\": [\n \"\"\n ],\n \"Manage products in order\": [\n \"\"\n ],\n \"Manage list of products in the order.\": [\n \"\"\n ],\n \"Remove this product from the order.\": [\n \"\"\n ],\n \"Total price\": [\n \"\"\n ],\n \"total product price added up\": [\n \"\"\n ],\n \"Amount to be paid by the customer\": [\n \"\"\n ],\n \"Order price\": [\n \"\"\n ],\n \"final order price\": [\n \"\"\n ],\n \"Summary\": [\n \"\"\n ],\n \"Title of the order to be shown to the customer\": [\n \"\"\n ],\n \"Shipping and Fulfillment\": [\n \"\"\n ],\n \"Delivery date\": [\n \"\"\n ],\n \"Deadline for physical delivery assured by the merchant.\": [\n \"\"\n ],\n \"Location\": [\n \"\"\n ],\n \"address where the products will be delivered\": [\n \"\"\n ],\n \"Fulfillment URL\": [\n \"\"\n ],\n \"URL to which the user will be redirected after successful payment.\": [\n \"\"\n ],\n \"Taler payment options\": [\n \"\"\n ],\n \"Override default Taler payment settings for this order\": [\n \"\"\n ],\n \"Payment deadline\": [\n \"\"\n ],\n \"Deadline for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline.\": [\n \"\"\n ],\n \"Refund deadline\": [\n \"\"\n ],\n \"Time until which the order can be refunded by the merchant.\": [\n \"\"\n ],\n \"Wire transfer deadline\": [\n \"\"\n ],\n \"Deadline for the exchange to make the wire transfer.\": [\n \"\"\n ],\n \"Auto-refund deadline\": [\n \"\"\n ],\n \"Time until which the wallet will automatically check for refunds without user interaction.\": [\n \"\"\n ],\n \"Maximum deposit fee\": [\n \"\"\n ],\n \"Maximum deposit fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.\": [\n \"\"\n ],\n \"Maximum wire fee\": [\n \"\"\n ],\n \"Maximum aggregate wire fees the merchant is willing to cover for this order. Wire fees exceeding this amount are to be covered by the customers.\": [\n \"\"\n ],\n \"Wire fee amortization\": [\n \"\"\n ],\n \"Factor by which wire fees exceeding the above threshold are divided to determine the share of excess wire fees to be paid explicitly by the consumer.\": [\n \"\"\n ],\n \"Create token\": [\n \"\"\n ],\n \"Uncheck this option if the merchant backend generated an order ID with enough entropy to prevent adversarial claims.\": [\n \"\"\n ],\n \"Minimum age required\": [\n \"\"\n ],\n \"Any value greater than 0 will limit the coins able be used to pay this contract. If empty the age restriction will be defined by the products\": [\n \"\"\n ],\n \"Min age defined by the producs is %1$s\": [\n \"\"\n ],\n \"Additional information\": [\n \"\"\n ],\n \"Custom information to be included in the contract for this order.\": [\n \"\"\n ],\n \"You must enter a value in JavaScript Object Notation (JSON).\": [\n \"\"\n ],\n \"days\": [\n \"\"\n ],\n \"hours\": [\n \"\"\n ],\n \"minutes\": [\n \"\"\n ],\n \"seconds\": [\n \"\"\n ],\n \"forever\": [\n \"\"\n ],\n \"%1$sM\": [\n \"\"\n ],\n \"%1$sY\": [\n \"\"\n ],\n \"%1$sd\": [\n \"\"\n ],\n \"%1$sh\": [\n \"\"\n ],\n \"%1$smin\": [\n \"\"\n ],\n \"%1$ssec\": [\n \"\"\n ],\n \"Orders\": [\n \"\"\n ],\n \"create order\": [\n \"\"\n ],\n \"load newer orders\": [\n \"\"\n ],\n \"Date\": [\n \"\"\n ],\n \"Refund\": [\n \"\"\n ],\n \"copy url\": [\n \"\"\n ],\n \"load older orders\": [\n \"\"\n ],\n \"No orders have been found matching your query!\": [\n \"\"\n ],\n \"duplicated\": [\n \"\"\n ],\n \"invalid format\": [\n \"\"\n ],\n \"this value exceed the refundable amount\": [\n \"\"\n ],\n \"date\": [\n \"\"\n ],\n \"amount\": [\n \"\"\n ],\n \"reason\": [\n \"\"\n ],\n \"amount to be refunded\": [\n \"\"\n ],\n \"Max refundable:\": [\n \"\"\n ],\n \"Reason\": [\n \"\"\n ],\n \"Choose one...\": [\n \"\"\n ],\n \"requested by the customer\": [\n \"\"\n ],\n \"other\": [\n \"\"\n ],\n \"why this order is being refunded\": [\n \"\"\n ],\n \"more information to give context\": [\n \"\"\n ],\n \"Contract Terms\": [\n \"\"\n ],\n \"human-readable description of the whole purchase\": [\n \"\"\n ],\n \"total price for the transaction\": [\n \"\"\n ],\n \"URL for this purchase\": [\n \"\"\n ],\n \"Max fee\": [\n \"\"\n ],\n \"maximum total deposit fee accepted by the merchant for this contract\": [\n \"\"\n ],\n \"Max wire fee\": [\n \"\"\n ],\n \"maximum wire fee accepted by the merchant\": [\n \"\"\n ],\n \"over how many customer transactions does the merchant expect to amortize wire fees on average\": [\n \"\"\n ],\n \"Created at\": [\n \"\"\n ],\n \"time when this contract was generated\": [\n \"\"\n ],\n \"after this deadline has passed no refunds will be accepted\": [\n \"\"\n ],\n \"after this deadline, the merchant won't accept payments for the contract\": [\n \"\"\n ],\n \"transfer deadline for the exchange\": [\n \"\"\n ],\n \"time indicating when the order should be delivered\": [\n \"\"\n ],\n \"where the order will be delivered\": [\n \"\"\n ],\n \"Auto-refund delay\": [\n \"\"\n ],\n \"how long the wallet should try to get an automatic refund for the purchase\": [\n \"\"\n ],\n \"Extra info\": [\n \"\"\n ],\n \"extra data that is only interpreted by the merchant frontend\": [\n \"\"\n ],\n \"Order\": [\n \"\"\n ],\n \"claimed\": [\n \"\"\n ],\n \"claimed at\": [\n \"\"\n ],\n \"Timeline\": [\n \"\"\n ],\n \"Payment details\": [\n \"\"\n ],\n \"Order status\": [\n \"\"\n ],\n \"Product list\": [\n \"\"\n ],\n \"paid\": [\n \"\"\n ],\n \"wired\": [\n \"\"\n ],\n \"refunded\": [\n \"\"\n ],\n \"refund order\": [\n \"\"\n ],\n \"not refundable\": [\n \"\"\n ],\n \"refund\": [\n \"\"\n ],\n \"Refunded amount\": [\n \"\"\n ],\n \"Refund taken\": [\n \"\"\n ],\n \"Status URL\": [\n \"\"\n ],\n \"Refund URI\": [\n \"\"\n ],\n \"unpaid\": [\n \"\"\n ],\n \"pay at\": [\n \"\"\n ],\n \"created at\": [\n \"\"\n ],\n \"Order status URL\": [\n \"\"\n ],\n \"Payment URI\": [\n \"\"\n ],\n \"Unknown order status. This is an error, please contact the administrator.\": [\n \"\"\n ],\n \"Back\": [\n \"\"\n ],\n \"refund created successfully\": [\n \"\"\n ],\n \"could not create the refund\": [\n \"\"\n ],\n \"select date to show nearby orders\": [\n \"\"\n ],\n \"order id\": [\n \"\"\n ],\n \"jump to order with the given order ID\": [\n \"\"\n ],\n \"remove all filters\": [\n \"\"\n ],\n \"only show paid orders\": [\n \"\"\n ],\n \"Paid\": [\n \"\"\n ],\n \"only show orders with refunds\": [\n \"\"\n ],\n \"Refunded\": [\n \"\"\n ],\n \"only show orders where customers paid, but wire payments from payment provider are still pending\": [\n \"\"\n ],\n \"Not wired\": [\n \"\"\n ],\n \"clear date filter\": [\n \"\"\n ],\n \"date (YYYY/MM/DD)\": [\n \"\"\n ],\n \"Enter an order id\": [\n \"\"\n ],\n \"order not found\": [\n \"\"\n ],\n \"could not get the order to refund\": [\n \"\"\n ],\n \"Loading...\": [\n \"\"\n ],\n \"click here to configure the stock of the product, leave it as is and the backend will not control stock\": [\n \"\"\n ],\n \"Manage stock\": [\n \"\"\n ],\n \"this product has been configured without stock control\": [\n \"\"\n ],\n \"Infinite\": [\n \"\"\n ],\n \"lost cannot be greater than current and incoming (max %1$s)\": [\n \"\"\n ],\n \"Incoming\": [\n \"\"\n ],\n \"Lost\": [\n \"\"\n ],\n \"Current\": [\n \"\"\n ],\n \"remove stock control for this product\": [\n \"\"\n ],\n \"without stock\": [\n \"\"\n ],\n \"Next restock\": [\n \"\"\n ],\n \"Delivery address\": [\n \"\"\n ],\n \"product identification to use in URLs (for internal use only)\": [\n \"\"\n ],\n \"illustration of the product for customers\": [\n \"\"\n ],\n \"product description for customers\": [\n \"\"\n ],\n \"Age restricted\": [\n \"\"\n ],\n \"is this product restricted for customer below certain age?\": [\n \"\"\n ],\n \"unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers\": [\n \"\"\n ],\n \"sale price for customers, including taxes, for above units of the product\": [\n \"\"\n ],\n \"Stock\": [\n \"\"\n ],\n \"product inventory for products with finite supply (for internal use only)\": [\n \"\"\n ],\n \"taxes included in the product price, exposed to customers\": [\n \"\"\n ],\n \"Need to complete marked fields\": [\n \"\"\n ],\n \"could not create product\": [\n \"\"\n ],\n \"Products\": [\n \"\"\n ],\n \"add product to inventory\": [\n \"\"\n ],\n \"Sell\": [\n \"\"\n ],\n \"Profit\": [\n \"\"\n ],\n \"Sold\": [\n \"\"\n ],\n \"free\": [\n \"\"\n ],\n \"go to product update page\": [\n \"\"\n ],\n \"Update\": [\n \"\"\n ],\n \"remove this product from the database\": [\n \"\"\n ],\n \"update the product with new price\": [\n \"\"\n ],\n \"update product with new price\": [\n \"\"\n ],\n \"add more elements to the inventory\": [\n \"\"\n ],\n \"report elements lost in the inventory\": [\n \"\"\n ],\n \"new price for the product\": [\n \"\"\n ],\n \"the are value with errors\": [\n \"\"\n ],\n \"update product with new stock and price\": [\n \"\"\n ],\n \"There is no products yet, add more pressing the + sign\": [\n \"\"\n ],\n \"product updated successfully\": [\n \"\"\n ],\n \"could not update the product\": [\n \"\"\n ],\n \"product delete successfully\": [\n \"\"\n ],\n \"could not delete the product\": [\n \"\"\n ],\n \"Product id:\": [\n \"\"\n ],\n \"To complete the setup of the reserve, you must now initiate a wire transfer using the given wire transfer subject and crediting the specified amount to the indicated account of the exchange.\": [\n \"\"\n ],\n \"If your system supports RFC 8905, you can do this by opening this URI:\": [\n \"\"\n ],\n \"it should be greater than 0\": [\n \"\"\n ],\n \"must be a valid URL\": [\n \"\"\n ],\n \"Initial balance\": [\n \"\"\n ],\n \"balance prior to deposit\": [\n \"\"\n ],\n \"Exchange URL\": [\n \"\"\n ],\n \"URL of exchange\": [\n \"\"\n ],\n \"Next\": [\n \"\"\n ],\n \"Wire method\": [\n \"\"\n ],\n \"method to use for wire transfer\": [\n \"\"\n ],\n \"Select one wire method\": [\n \"\"\n ],\n \"could not create reserve\": [\n \"\"\n ],\n \"Valid until\": [\n \"\"\n ],\n \"Created balance\": [\n \"\"\n ],\n \"Exchange balance\": [\n \"\"\n ],\n \"Picked up\": [\n \"\"\n ],\n \"Committed\": [\n \"\"\n ],\n \"Account address\": [\n \"\"\n ],\n \"Subject\": [\n \"\"\n ],\n \"Tips\": [\n \"\"\n ],\n \"No tips has been authorized from this reserve\": [\n \"\"\n ],\n \"Authorized\": [\n \"\"\n ],\n \"Expiration\": [\n \"\"\n ],\n \"amount of tip\": [\n \"\"\n ],\n \"Justification\": [\n \"\"\n ],\n \"reason for the tip\": [\n \"\"\n ],\n \"URL after tip\": [\n \"\"\n ],\n \"URL to visit after tip payment\": [\n \"\"\n ],\n \"Reserves not yet funded\": [\n \"\"\n ],\n \"Reserves ready\": [\n \"\"\n ],\n \"add new reserve\": [\n \"\"\n ],\n \"Expires at\": [\n \"\"\n ],\n \"Initial\": [\n \"\"\n ],\n \"delete selected reserve from the database\": [\n \"\"\n ],\n \"authorize new tip from selected reserve\": [\n \"\"\n ],\n \"There is no ready reserves yet, add more pressing the + sign or fund them\": [\n \"\"\n ],\n \"Expected Balance\": [\n \"\"\n ],\n \"could not create the tip\": [\n \"\"\n ],\n \"should not be empty\": [\n \"\"\n ],\n \"should be greater that 0\": [\n \"\"\n ],\n \"can't be empty\": [\n \"\"\n ],\n \"to short\": [\n \"\"\n ],\n \"Identifier\": [\n \"\"\n ],\n \"Name of the template in URLs.\": [\n \"\"\n ],\n \"Describe what this template stands for\": [\n \"\"\n ],\n \"Order summary\": [\n \"\"\n ],\n \"Minimum age\": [\n \"\"\n ],\n \"Is this contract restricted to some age?\": [\n \"\"\n ],\n \"Payment timeout\": [\n \"\"\n ],\n \"How much time has the customer to complete the payment once the order was created.\": [\n \"\"\n ],\n \"Point-of-sale key\": [\n \"\"\n ],\n \"Useful to validate the purchase\": [\n \"\"\n ],\n \"could not inform template\": [\n \"\"\n ],\n \"Amount is required\": [\n \"\"\n ],\n \"Order summary is required\": [\n \"\"\n ],\n \"Amount of the order\": [\n \"\"\n ],\n \"could not create order from template\": [\n \"\"\n ],\n \"Templates\": [\n \"\"\n ],\n \"add new templates\": [\n \"\"\n ],\n \"load more templates before the first one\": [\n \"\"\n ],\n \"load newer templates\": [\n \"\"\n ],\n \"delete selected templates from the database\": [\n \"\"\n ],\n \"use template to create new order\": [\n \"\"\n ],\n \"load more templates after the last one\": [\n \"\"\n ],\n \"load older templates\": [\n \"\"\n ],\n \"There is no templates yet, add more pressing the + sign\": [\n \"\"\n ],\n \"template delete successfully\": [\n \"\"\n ],\n \"could not delete the template\": [\n \"\"\n ],\n \"could not update template\": [\n \"\"\n ],\n \"should be one of '%1$s'\": [\n \"\"\n ],\n \"Webhook ID to use\": [\n \"\"\n ],\n \"Event\": [\n \"\"\n ],\n \"The event of the webhook: why the webhook is used\": [\n \"\"\n ],\n \"Method\": [\n \"\"\n ],\n \"Method used by the webhook\": [\n \"\"\n ],\n \"URL\": [\n \"\"\n ],\n \"URL of the webhook where the customer will be redirected\": [\n \"\"\n ],\n \"Header\": [\n \"\"\n ],\n \"Header template of the webhook\": [\n \"\"\n ],\n \"Body\": [\n \"\"\n ],\n \"Body template by the webhook\": [\n \"\"\n ],\n \"Webhooks\": [\n \"\"\n ],\n \"add new webhooks\": [\n \"\"\n ],\n \"load more webhooks before the first one\": [\n \"\"\n ],\n \"load newer webhooks\": [\n \"\"\n ],\n \"Event type\": [\n \"\"\n ],\n \"delete selected webhook from the database\": [\n \"\"\n ],\n \"load more webhooks after the last one\": [\n \"\"\n ],\n \"load older webhooks\": [\n \"\"\n ],\n \"There is no webhooks yet, add more pressing the + sign\": [\n \"\"\n ],\n \"webhook delete successfully\": [\n \"\"\n ],\n \"could not delete the webhook\": [\n \"\"\n ],\n \"check the id, does not look valid\": [\n \"\"\n ],\n \"should have 52 characters, current %1$s\": [\n \"\"\n ],\n \"URL doesn't have the right format\": [\n \"\"\n ],\n \"Credited bank account\": [\n \"\"\n ],\n \"Select one account\": [\n \"\"\n ],\n \"Bank account of the merchant where the payment was received\": [\n \"\"\n ],\n \"Wire transfer ID\": [\n \"\"\n ],\n \"unique identifier of the wire transfer used by the exchange, must be 52 characters long\": [\n \"\"\n ],\n \"Base URL of the exchange that made the transfer, should have been in the wire transfer subject\": [\n \"\"\n ],\n \"Amount credited\": [\n \"\"\n ],\n \"Actual amount that was wired to the merchant's bank account\": [\n \"\"\n ],\n \"could not inform transfer\": [\n \"\"\n ],\n \"Transfers\": [\n \"\"\n ],\n \"add new transfer\": [\n \"\"\n ],\n \"load more transfers before the first one\": [\n \"\"\n ],\n \"load newer transfers\": [\n \"\"\n ],\n \"Credit\": [\n \"\"\n ],\n \"Confirmed\": [\n \"\"\n ],\n \"Verified\": [\n \"\"\n ],\n \"Executed at\": [\n \"\"\n ],\n \"yes\": [\n \"\"\n ],\n \"no\": [\n \"\"\n ],\n \"unknown\": [\n \"\"\n ],\n \"delete selected transfer from the database\": [\n \"\"\n ],\n \"load more transfer after the last one\": [\n \"\"\n ],\n \"load older transfers\": [\n \"\"\n ],\n \"There is no transfer yet, add more pressing the + sign\": [\n \"\"\n ],\n \"filter by account address\": [\n \"\"\n ],\n \"only show wire transfers confirmed by the merchant\": [\n \"\"\n ],\n \"only show wire transfers claimed by the exchange\": [\n \"\"\n ],\n \"Unverified\": [\n \"\"\n ],\n \"is not valid\": [\n \"\"\n ],\n \"is not a number\": [\n \"\"\n ],\n \"must be 1 or greater\": [\n \"\"\n ],\n \"max 7 lines\": [\n \"\"\n ],\n \"change authorization configuration\": [\n \"\"\n ],\n \"Need to complete marked fields and choose authorization method\": [\n \"\"\n ],\n \"This is not a valid bitcoin address.\": [\n \"\"\n ],\n \"This is not a valid Ethereum address.\": [\n \"\"\n ],\n \"IBAN numbers usually have more that 4 digits\": [\n \"\"\n ],\n \"IBAN numbers usually have less that 34 digits\": [\n \"\"\n ],\n \"IBAN country code not found\": [\n \"\"\n ],\n \"IBAN number is not valid, checksum is wrong\": [\n \"\"\n ],\n \"Target type\": [\n \"\"\n ],\n \"Method to use for wire transfer\": [\n \"\"\n ],\n \"Routing\": [\n \"\"\n ],\n \"Routing number.\": [\n \"\"\n ],\n \"Account\": [\n \"\"\n ],\n \"Account number.\": [\n \"\"\n ],\n \"Business Identifier Code.\": [\n \"\"\n ],\n \"Bank Account Number.\": [\n \"\"\n ],\n \"Unified Payment Interface.\": [\n \"\"\n ],\n \"Bitcoin protocol.\": [\n \"\"\n ],\n \"Ethereum protocol.\": [\n \"\"\n ],\n \"Interledger protocol.\": [\n \"\"\n ],\n \"Host\": [\n \"\"\n ],\n \"Bank host.\": [\n \"\"\n ],\n \"Bank account.\": [\n \"\"\n ],\n \"Bank account owner's name.\": [\n \"\"\n ],\n \"No accounts yet.\": [\n \"\"\n ],\n \"Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.\": [\n \"\"\n ],\n \"Business name\": [\n \"\"\n ],\n \"Legal name of the business represented by this instance.\": [\n \"\"\n ],\n \"Email\": [\n \"\"\n ],\n \"Contact email\": [\n \"\"\n ],\n \"Website URL\": [\n \"\"\n ],\n \"URL.\": [\n \"\"\n ],\n \"Logo\": [\n \"\"\n ],\n \"Logo image.\": [\n \"\"\n ],\n \"Bank account\": [\n \"\"\n ],\n \"URI specifying bank account for crediting revenue.\": [\n \"\"\n ],\n \"Default max deposit fee\": [\n \"\"\n ],\n \"Maximum deposit fees this merchant is willing to pay per order by default.\": [\n \"\"\n ],\n \"Default max wire fee\": [\n \"\"\n ],\n \"Maximum wire fees this merchant is willing to pay per wire transfer by default.\": [\n \"\"\n ],\n \"Default wire fee amortization\": [\n \"\"\n ],\n \"Number of orders excess wire transfer fees will be divided by to compute per order surcharge.\": [\n \"\"\n ],\n \"Physical location of the merchant.\": [\n \"\"\n ],\n \"Jurisdiction\": [\n \"\"\n ],\n \"Jurisdiction for legal disputes with the merchant.\": [\n \"\"\n ],\n \"Default payment delay\": [\n \"\"\n ],\n \"Time customers have to pay an order before the offer expires by default.\": [\n \"\"\n ],\n \"Default wire transfer delay\": [\n \"\"\n ],\n \"Maximum time an exchange is allowed to delay wiring funds to the merchant, enabling it to aggregate smaller payments into larger wire transfers and reducing wire fees.\": [\n \"\"\n ],\n \"Instance id\": [\n \"\"\n ],\n \"Change the authorization method use for this instance.\": [\n \"\"\n ],\n \"Manage access token\": [\n \"\"\n ],\n \"Failed to create instance\": [\n \"\"\n ],\n \"Login required\": [\n \"\"\n ],\n \"Please enter your access token.\": [\n \"\"\n ],\n \"Access Token\": [\n \"\"\n ],\n \"The request to the backend take too long and was cancelled\": [\n \"\"\n ],\n \"Diagnostic from %1$s is '%2$s'\": [\n \"\"\n ],\n \"The backend reported a problem: HTTP status #%1$s\": [\n \"\"\n ],\n \"Access denied\": [\n \"\"\n ],\n \"The access token provided is invalid.\": [\n \"\"\n ],\n \"No 'default' instance configured yet.\": [\n \"\"\n ],\n \"Create a 'default' instance to begin using the merchant backoffice.\": [\n \"\"\n ],\n \"The access token provided is invalid\": [\n \"\"\n ],\n \"Hide for today\": [\n \"\"\n ],\n \"Instance\": [\n \"\"\n ],\n \"Settings\": [\n \"\"\n ],\n \"Connection\": [\n \"\"\n ],\n \"New\": [\n \"\"\n ],\n \"List\": [\n \"\"\n ],\n \"Log out\": [\n \"\"\n ],\n \"Check your token is valid\": [\n \"\"\n ],\n \"Couldn't access the server.\": [\n \"\"\n ],\n \"Could not infer instance id from url %1$s\": [\n \"\"\n ],\n \"Server not found\": [\n \"\"\n ],\n \"Couldn't access the server\": [\n \"\"\n ],\n \"Got message %1$s from %2$s\": [\n \"\"\n ],\n \"Unexpected Error\": [\n \"\"\n ],\n \"The value %1$s is invalid for a payment url\": [\n \"\"\n ],\n \"add element to the list\": [\n \"\"\n ],\n \"add\": [\n \"\"\n ],\n \"Deleting\": [\n \"\"\n ],\n \"Changing\": [\n \"\"\n ],\n \"Order ID\": [\n \"\"\n ],\n \"Payment URL\": [\n \"\"\n ]\n }\n }\n};\n\nstrings['sv'] = {\n \"domain\": \"messages\",\n \"locale_data\": {\n \"messages\": {\n \"\": {\n \"domain\": \"messages\",\n \"plural_forms\": \"nplurals=2; plural=(n != 1);\",\n \"lang\": \"\"\n },\n \"Cancel\": [\n \"\"\n ],\n \"%1$s\": [\n \"\"\n ],\n \"Continue\": [\n \"\"\n ],\n \"Clear\": [\n \"\"\n ],\n \"Confirm\": [\n \"\"\n ],\n \"is not the same as the current access token\": [\n \"\"\n ],\n \"cannot be empty\": [\n \"\"\n ],\n \"cannot be the same as the old token\": [\n \"\"\n ],\n \"is not the same\": [\n \"\"\n ],\n \"You are updating the access token from instance with id %1$s\": [\n \"\"\n ],\n \"Old access token\": [\n \"\"\n ],\n \"access token currently in use\": [\n \"\"\n ],\n \"New access token\": [\n \"\"\n ],\n \"next access token to be used\": [\n \"\"\n ],\n \"Repeat access token\": [\n \"\"\n ],\n \"confirm the same access token\": [\n \"\"\n ],\n \"Clearing the access token will mean public access to the instance\": [\n \"\"\n ],\n \"cannot be the same as the old access token\": [\n \"\"\n ],\n \"You are setting the access token for the new instance\": [\n \"\"\n ],\n \"With external authorization method no check will be done by the merchant backend\": [\n \"\"\n ],\n \"Set external authorization\": [\n \"\"\n ],\n \"Set access token\": [\n \"\"\n ],\n \"Operation in progress...\": [\n \"\"\n ],\n \"The operation will be automatically canceled after %1$s seconds\": [\n \"\"\n ],\n \"Instances\": [\n \"\"\n ],\n \"Delete\": [\n \"\"\n ],\n \"add new instance\": [\n \"\"\n ],\n \"ID\": [\n \"\"\n ],\n \"Name\": [\n \"\"\n ],\n \"Edit\": [\n \"\"\n ],\n \"Purge\": [\n \"\"\n ],\n \"There is no instances yet, add more pressing the + sign\": [\n \"\"\n ],\n \"Only show active instances\": [\n \"\"\n ],\n \"Active\": [\n \"\"\n ],\n \"Only show deleted instances\": [\n \"\"\n ],\n \"Deleted\": [\n \"\"\n ],\n \"Show all instances\": [\n \"\"\n ],\n \"All\": [\n \"\"\n ],\n \"Instance '%1$s' (ID: %2$s) has been deleted\": [\n \"\"\n ],\n \"Failed to delete instance\": [\n \"\"\n ],\n \"Instance '%1$s' (ID: %2$s) has been disabled\": [\n \"\"\n ],\n \"Failed to purge instance\": [\n \"\"\n ],\n \"Pending KYC verification\": [\n \"\"\n ],\n \"Timed out\": [\n \"\"\n ],\n \"Exchange\": [\n \"\"\n ],\n \"Target account\": [\n \"\"\n ],\n \"KYC URL\": [\n \"\"\n ],\n \"Code\": [\n \"\"\n ],\n \"Http Status\": [\n \"\"\n ],\n \"No pending kyc verification!\": [\n \"\"\n ],\n \"change value to unknown date\": [\n \"\"\n ],\n \"change value to empty\": [\n \"\"\n ],\n \"clear\": [\n \"\"\n ],\n \"change value to never\": [\n \"\"\n ],\n \"never\": [\n \"\"\n ],\n \"Country\": [\n \"\"\n ],\n \"Address\": [\n \"\"\n ],\n \"Building number\": [\n \"\"\n ],\n \"Building name\": [\n \"\"\n ],\n \"Street\": [\n \"\"\n ],\n \"Post code\": [\n \"\"\n ],\n \"Town location\": [\n \"\"\n ],\n \"Town\": [\n \"\"\n ],\n \"District\": [\n \"\"\n ],\n \"Country subdivision\": [\n \"\"\n ],\n \"Product id\": [\n \"\"\n ],\n \"Description\": [\n \"\"\n ],\n \"Product\": [\n \"\"\n ],\n \"search products by it's description or id\": [\n \"\"\n ],\n \"no products found with that description\": [\n \"\"\n ],\n \"You must enter a valid product identifier.\": [\n \"\"\n ],\n \"Quantity must be greater than 0!\": [\n \"\"\n ],\n \"This quantity exceeds remaining stock. Currently, only %1$s units remain unreserved in stock.\": [\n \"\"\n ],\n \"Quantity\": [\n \"\"\n ],\n \"how many products will be added\": [\n \"\"\n ],\n \"Add from inventory\": [\n \"\"\n ],\n \"Image should be smaller than 1 MB\": [\n \"\"\n ],\n \"Add\": [\n \"\"\n ],\n \"Remove\": [\n \"\"\n ],\n \"No taxes configured for this product.\": [\n \"\"\n ],\n \"Amount\": [\n \"\"\n ],\n \"Taxes can be in currencies that differ from the main currency used by the merchant.\": [\n \"\"\n ],\n \"Enter currency and value separated with a colon, e.g. &quot;USD:2.3&quot;.\": [\n \"\"\n ],\n \"Legal name of the tax, e.g. VAT or import duties.\": [\n \"\"\n ],\n \"add tax to the tax list\": [\n \"\"\n ],\n \"describe and add a product that is not in the inventory list\": [\n \"\"\n ],\n \"Add custom product\": [\n \"\"\n ],\n \"Complete information of the product\": [\n \"\"\n ],\n \"Image\": [\n \"\"\n ],\n \"photo of the product\": [\n \"\"\n ],\n \"full product description\": [\n \"\"\n ],\n \"Unit\": [\n \"\"\n ],\n \"name of the product unit\": [\n \"\"\n ],\n \"Price\": [\n \"\"\n ],\n \"amount in the current currency\": [\n \"\"\n ],\n \"Taxes\": [\n \"\"\n ],\n \"image\": [\n \"\"\n ],\n \"description\": [\n \"\"\n ],\n \"quantity\": [\n \"\"\n ],\n \"unit price\": [\n \"\"\n ],\n \"total price\": [\n \"\"\n ],\n \"required\": [\n \"\"\n ],\n \"must be greater than 0\": [\n \"\"\n ],\n \"not a valid json\": [\n \"\"\n ],\n \"should be in the future\": [\n \"\"\n ],\n \"refund deadline cannot be before pay deadline\": [\n \"\"\n ],\n \"wire transfer deadline cannot be before refund deadline\": [\n \"\"\n ],\n \"wire transfer deadline cannot be before pay deadline\": [\n \"\"\n ],\n \"should have a refund deadline\": [\n \"\"\n ],\n \"auto refund cannot be after refund deadline\": [\n \"\"\n ],\n \"Manage products in order\": [\n \"\"\n ],\n \"Manage list of products in the order.\": [\n \"\"\n ],\n \"Remove this product from the order.\": [\n \"\"\n ],\n \"Total price\": [\n \"\"\n ],\n \"total product price added up\": [\n \"\"\n ],\n \"Amount to be paid by the customer\": [\n \"\"\n ],\n \"Order price\": [\n \"\"\n ],\n \"final order price\": [\n \"\"\n ],\n \"Summary\": [\n \"\"\n ],\n \"Title of the order to be shown to the customer\": [\n \"\"\n ],\n \"Shipping and Fulfillment\": [\n \"\"\n ],\n \"Delivery date\": [\n \"\"\n ],\n \"Deadline for physical delivery assured by the merchant.\": [\n \"\"\n ],\n \"Location\": [\n \"\"\n ],\n \"address where the products will be delivered\": [\n \"\"\n ],\n \"Fulfillment URL\": [\n \"\"\n ],\n \"URL to which the user will be redirected after successful payment.\": [\n \"\"\n ],\n \"Taler payment options\": [\n \"\"\n ],\n \"Override default Taler payment settings for this order\": [\n \"\"\n ],\n \"Payment deadline\": [\n \"\"\n ],\n \"Deadline for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline.\": [\n \"\"\n ],\n \"Refund deadline\": [\n \"\"\n ],\n \"Time until which the order can be refunded by the merchant.\": [\n \"\"\n ],\n \"Wire transfer deadline\": [\n \"\"\n ],\n \"Deadline for the exchange to make the wire transfer.\": [\n \"\"\n ],\n \"Auto-refund deadline\": [\n \"\"\n ],\n \"Time until which the wallet will automatically check for refunds without user interaction.\": [\n \"\"\n ],\n \"Maximum deposit fee\": [\n \"\"\n ],\n \"Maximum deposit fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.\": [\n \"\"\n ],\n \"Maximum wire fee\": [\n \"\"\n ],\n \"Maximum aggregate wire fees the merchant is willing to cover for this order. Wire fees exceeding this amount are to be covered by the customers.\": [\n \"\"\n ],\n \"Wire fee amortization\": [\n \"\"\n ],\n \"Factor by which wire fees exceeding the above threshold are divided to determine the share of excess wire fees to be paid explicitly by the consumer.\": [\n \"\"\n ],\n \"Create token\": [\n \"\"\n ],\n \"Uncheck this option if the merchant backend generated an order ID with enough entropy to prevent adversarial claims.\": [\n \"\"\n ],\n \"Minimum age required\": [\n \"\"\n ],\n \"Any value greater than 0 will limit the coins able be used to pay this contract. If empty the age restriction will be defined by the products\": [\n \"\"\n ],\n \"Min age defined by the producs is %1$s\": [\n \"\"\n ],\n \"Additional information\": [\n \"\"\n ],\n \"Custom information to be included in the contract for this order.\": [\n \"\"\n ],\n \"You must enter a value in JavaScript Object Notation (JSON).\": [\n \"\"\n ],\n \"days\": [\n \"\"\n ],\n \"hours\": [\n \"\"\n ],\n \"minutes\": [\n \"\"\n ],\n \"seconds\": [\n \"\"\n ],\n \"forever\": [\n \"\"\n ],\n \"%1$sM\": [\n \"\"\n ],\n \"%1$sY\": [\n \"\"\n ],\n \"%1$sd\": [\n \"\"\n ],\n \"%1$sh\": [\n \"\"\n ],\n \"%1$smin\": [\n \"\"\n ],\n \"%1$ssec\": [\n \"\"\n ],\n \"Orders\": [\n \"\"\n ],\n \"create order\": [\n \"\"\n ],\n \"load newer orders\": [\n \"\"\n ],\n \"Date\": [\n \"\"\n ],\n \"Refund\": [\n \"\"\n ],\n \"copy url\": [\n \"\"\n ],\n \"load older orders\": [\n \"\"\n ],\n \"No orders have been found matching your query!\": [\n \"\"\n ],\n \"duplicated\": [\n \"\"\n ],\n \"invalid format\": [\n \"\"\n ],\n \"this value exceed the refundable amount\": [\n \"\"\n ],\n \"date\": [\n \"\"\n ],\n \"amount\": [\n \"\"\n ],\n \"reason\": [\n \"\"\n ],\n \"amount to be refunded\": [\n \"\"\n ],\n \"Max refundable:\": [\n \"\"\n ],\n \"Reason\": [\n \"\"\n ],\n \"Choose one...\": [\n \"\"\n ],\n \"requested by the customer\": [\n \"\"\n ],\n \"other\": [\n \"\"\n ],\n \"why this order is being refunded\": [\n \"\"\n ],\n \"more information to give context\": [\n \"\"\n ],\n \"Contract Terms\": [\n \"\"\n ],\n \"human-readable description of the whole purchase\": [\n \"\"\n ],\n \"total price for the transaction\": [\n \"\"\n ],\n \"URL for this purchase\": [\n \"\"\n ],\n \"Max fee\": [\n \"\"\n ],\n \"maximum total deposit fee accepted by the merchant for this contract\": [\n \"\"\n ],\n \"Max wire fee\": [\n \"\"\n ],\n \"maximum wire fee accepted by the merchant\": [\n \"\"\n ],\n \"over how many customer transactions does the merchant expect to amortize wire fees on average\": [\n \"\"\n ],\n \"Created at\": [\n \"\"\n ],\n \"time when this contract was generated\": [\n \"\"\n ],\n \"after this deadline has passed no refunds will be accepted\": [\n \"\"\n ],\n \"after this deadline, the merchant won't accept payments for the contract\": [\n \"\"\n ],\n \"transfer deadline for the exchange\": [\n \"\"\n ],\n \"time indicating when the order should be delivered\": [\n \"\"\n ],\n \"where the order will be delivered\": [\n \"\"\n ],\n \"Auto-refund delay\": [\n \"\"\n ],\n \"how long the wallet should try to get an automatic refund for the purchase\": [\n \"\"\n ],\n \"Extra info\": [\n \"\"\n ],\n \"extra data that is only interpreted by the merchant frontend\": [\n \"\"\n ],\n \"Order\": [\n \"\"\n ],\n \"claimed\": [\n \"\"\n ],\n \"claimed at\": [\n \"\"\n ],\n \"Timeline\": [\n \"\"\n ],\n \"Payment details\": [\n \"\"\n ],\n \"Order status\": [\n \"\"\n ],\n \"Product list\": [\n \"\"\n ],\n \"paid\": [\n \"\"\n ],\n \"wired\": [\n \"\"\n ],\n \"refunded\": [\n \"\"\n ],\n \"refund order\": [\n \"\"\n ],\n \"not refundable\": [\n \"\"\n ],\n \"refund\": [\n \"\"\n ],\n \"Refunded amount\": [\n \"\"\n ],\n \"Refund taken\": [\n \"\"\n ],\n \"Status URL\": [\n \"\"\n ],\n \"Refund URI\": [\n \"\"\n ],\n \"unpaid\": [\n \"\"\n ],\n \"pay at\": [\n \"\"\n ],\n \"created at\": [\n \"\"\n ],\n \"Order status URL\": [\n \"\"\n ],\n \"Payment URI\": [\n \"\"\n ],\n \"Unknown order status. This is an error, please contact the administrator.\": [\n \"\"\n ],\n \"Back\": [\n \"\"\n ],\n \"refund created successfully\": [\n \"\"\n ],\n \"could not create the refund\": [\n \"\"\n ],\n \"select date to show nearby orders\": [\n \"\"\n ],\n \"order id\": [\n \"\"\n ],\n \"jump to order with the given order ID\": [\n \"\"\n ],\n \"remove all filters\": [\n \"\"\n ],\n \"only show paid orders\": [\n \"\"\n ],\n \"Paid\": [\n \"\"\n ],\n \"only show orders with refunds\": [\n \"\"\n ],\n \"Refunded\": [\n \"\"\n ],\n \"only show orders where customers paid, but wire payments from payment provider are still pending\": [\n \"\"\n ],\n \"Not wired\": [\n \"\"\n ],\n \"clear date filter\": [\n \"\"\n ],\n \"date (YYYY/MM/DD)\": [\n \"\"\n ],\n \"Enter an order id\": [\n \"\"\n ],\n \"order not found\": [\n \"\"\n ],\n \"could not get the order to refund\": [\n \"\"\n ],\n \"Loading...\": [\n \"\"\n ],\n \"click here to configure the stock of the product, leave it as is and the backend will not control stock\": [\n \"\"\n ],\n \"Manage stock\": [\n \"\"\n ],\n \"this product has been configured without stock control\": [\n \"\"\n ],\n \"Infinite\": [\n \"\"\n ],\n \"lost cannot be greater than current and incoming (max %1$s)\": [\n \"\"\n ],\n \"Incoming\": [\n \"\"\n ],\n \"Lost\": [\n \"\"\n ],\n \"Current\": [\n \"\"\n ],\n \"remove stock control for this product\": [\n \"\"\n ],\n \"without stock\": [\n \"\"\n ],\n \"Next restock\": [\n \"\"\n ],\n \"Delivery address\": [\n \"\"\n ],\n \"product identification to use in URLs (for internal use only)\": [\n \"\"\n ],\n \"illustration of the product for customers\": [\n \"\"\n ],\n \"product description for customers\": [\n \"\"\n ],\n \"Age restricted\": [\n \"\"\n ],\n \"is this product restricted for customer below certain age?\": [\n \"\"\n ],\n \"unit describing quantity of product sold (e.g. 2 kilograms, 5 liters, 3 items, 5 meters) for customers\": [\n \"\"\n ],\n \"sale price for customers, including taxes, for above units of the product\": [\n \"\"\n ],\n \"Stock\": [\n \"\"\n ],\n \"product inventory for products with finite supply (for internal use only)\": [\n \"\"\n ],\n \"taxes included in the product price, exposed to customers\": [\n \"\"\n ],\n \"Need to complete marked fields\": [\n \"\"\n ],\n \"could not create product\": [\n \"\"\n ],\n \"Products\": [\n \"\"\n ],\n \"add product to inventory\": [\n \"\"\n ],\n \"Sell\": [\n \"\"\n ],\n \"Profit\": [\n \"\"\n ],\n \"Sold\": [\n \"\"\n ],\n \"free\": [\n \"\"\n ],\n \"go to product update page\": [\n \"\"\n ],\n \"Update\": [\n \"\"\n ],\n \"remove this product from the database\": [\n \"\"\n ],\n \"update the product with new price\": [\n \"\"\n ],\n \"update product with new price\": [\n \"\"\n ],\n \"add more elements to the inventory\": [\n \"\"\n ],\n \"report elements lost in the inventory\": [\n \"\"\n ],\n \"new price for the product\": [\n \"\"\n ],\n \"the are value with errors\": [\n \"\"\n ],\n \"update product with new stock and price\": [\n \"\"\n ],\n \"There is no products yet, add more pressing the + sign\": [\n \"\"\n ],\n \"product updated successfully\": [\n \"\"\n ],\n \"could not update the product\": [\n \"\"\n ],\n \"product delete successfully\": [\n \"\"\n ],\n \"could not delete the product\": [\n \"\"\n ],\n \"Product id:\": [\n \"\"\n ],\n \"To complete the setup of the reserve, you must now initiate a wire transfer using the given wire transfer subject and crediting the specified amount to the indicated account of the exchange.\": [\n \"\"\n ],\n \"If your system supports RFC 8905, you can do this by opening this URI:\": [\n \"\"\n ],\n \"it should be greater than 0\": [\n \"\"\n ],\n \"must be a valid URL\": [\n \"\"\n ],\n \"Initial balance\": [\n \"\"\n ],\n \"balance prior to deposit\": [\n \"\"\n ],\n \"Exchange URL\": [\n \"\"\n ],\n \"URL of exchange\": [\n \"\"\n ],\n \"Next\": [\n \"\"\n ],\n \"Wire method\": [\n \"\"\n ],\n \"method to use for wire transfer\": [\n \"\"\n ],\n \"Select one wire method\": [\n \"\"\n ],\n \"could not create reserve\": [\n \"\"\n ],\n \"Valid until\": [\n \"\"\n ],\n \"Created balance\": [\n \"\"\n ],\n \"Exchange balance\": [\n \"\"\n ],\n \"Picked up\": [\n \"\"\n ],\n \"Committed\": [\n \"\"\n ],\n \"Account address\": [\n \"\"\n ],\n \"Subject\": [\n \"\"\n ],\n \"Tips\": [\n \"\"\n ],\n \"No tips has been authorized from this reserve\": [\n \"\"\n ],\n \"Authorized\": [\n \"\"\n ],\n \"Expiration\": [\n \"\"\n ],\n \"amount of tip\": [\n \"\"\n ],\n \"Justification\": [\n \"\"\n ],\n \"reason for the tip\": [\n \"\"\n ],\n \"URL after tip\": [\n \"\"\n ],\n \"URL to visit after tip payment\": [\n \"\"\n ],\n \"Reserves not yet funded\": [\n \"\"\n ],\n \"Reserves ready\": [\n \"\"\n ],\n \"add new reserve\": [\n \"\"\n ],\n \"Expires at\": [\n \"\"\n ],\n \"Initial\": [\n \"\"\n ],\n \"delete selected reserve from the database\": [\n \"\"\n ],\n \"authorize new tip from selected reserve\": [\n \"\"\n ],\n \"There is no ready reserves yet, add more pressing the + sign or fund them\": [\n \"\"\n ],\n \"Expected Balance\": [\n \"\"\n ],\n \"could not create the tip\": [\n \"\"\n ],\n \"should not be empty\": [\n \"\"\n ],\n \"should be greater that 0\": [\n \"\"\n ],\n \"can't be empty\": [\n \"\"\n ],\n \"to short\": [\n \"\"\n ],\n \"Identifier\": [\n \"\"\n ],\n \"Name of the template in URLs.\": [\n \"\"\n ],\n \"Describe what this template stands for\": [\n \"\"\n ],\n \"Order summary\": [\n \"\"\n ],\n \"Minimum age\": [\n \"\"\n ],\n \"Is this contract restricted to some age?\": [\n \"\"\n ],\n \"Payment timeout\": [\n \"\"\n ],\n \"How much time has the customer to complete the payment once the order was created.\": [\n \"\"\n ],\n \"Point-of-sale key\": [\n \"\"\n ],\n \"Useful to validate the purchase\": [\n \"\"\n ],\n \"could not inform template\": [\n \"\"\n ],\n \"Amount is required\": [\n \"\"\n ],\n \"Order summary is required\": [\n \"\"\n ],\n \"Amount of the order\": [\n \"\"\n ],\n \"could not create order from template\": [\n \"\"\n ],\n \"Templates\": [\n \"\"\n ],\n \"add new templates\": [\n \"\"\n ],\n \"load more templates before the first one\": [\n \"\"\n ],\n \"load newer templates\": [\n \"\"\n ],\n \"delete selected templates from the database\": [\n \"\"\n ],\n \"use template to create new order\": [\n \"\"\n ],\n \"load more templates after the last one\": [\n \"\"\n ],\n \"load older templates\": [\n \"\"\n ],\n \"There is no templates yet, add more pressing the + sign\": [\n \"\"\n ],\n \"template delete successfully\": [\n \"\"\n ],\n \"could not delete the template\": [\n \"\"\n ],\n \"could not update template\": [\n \"\"\n ],\n \"should be one of '%1$s'\": [\n \"\"\n ],\n \"Webhook ID to use\": [\n \"\"\n ],\n \"Event\": [\n \"\"\n ],\n \"The event of the webhook: why the webhook is used\": [\n \"\"\n ],\n \"Method\": [\n \"\"\n ],\n \"Method used by the webhook\": [\n \"\"\n ],\n \"URL\": [\n \"\"\n ],\n \"URL of the webhook where the customer will be redirected\": [\n \"\"\n ],\n \"Header\": [\n \"\"\n ],\n \"Header template of the webhook\": [\n \"\"\n ],\n \"Body\": [\n \"\"\n ],\n \"Body template by the webhook\": [\n \"\"\n ],\n \"Webhooks\": [\n \"\"\n ],\n \"add new webhooks\": [\n \"\"\n ],\n \"load more webhooks before the first one\": [\n \"\"\n ],\n \"load newer webhooks\": [\n \"\"\n ],\n \"Event type\": [\n \"\"\n ],\n \"delete selected webhook from the database\": [\n \"\"\n ],\n \"load more webhooks after the last one\": [\n \"\"\n ],\n \"load older webhooks\": [\n \"\"\n ],\n \"There is no webhooks yet, add more pressing the + sign\": [\n \"\"\n ],\n \"webhook delete successfully\": [\n \"\"\n ],\n \"could not delete the webhook\": [\n \"\"\n ],\n \"check the id, does not look valid\": [\n \"\"\n ],\n \"should have 52 characters, current %1$s\": [\n \"\"\n ],\n \"URL doesn't have the right format\": [\n \"\"\n ],\n \"Credited bank account\": [\n \"\"\n ],\n \"Select one account\": [\n \"\"\n ],\n \"Bank account of the merchant where the payment was received\": [\n \"\"\n ],\n \"Wire transfer ID\": [\n \"\"\n ],\n \"unique identifier of the wire transfer used by the exchange, must be 52 characters long\": [\n \"\"\n ],\n \"Base URL of the exchange that made the transfer, should have been in the wire transfer subject\": [\n \"\"\n ],\n \"Amount credited\": [\n \"\"\n ],\n \"Actual amount that was wired to the merchant's bank account\": [\n \"\"\n ],\n \"could not inform transfer\": [\n \"\"\n ],\n \"Transfers\": [\n \"\"\n ],\n \"add new transfer\": [\n \"\"\n ],\n \"load more transfers before the first one\": [\n \"\"\n ],\n \"load newer transfers\": [\n \"\"\n ],\n \"Credit\": [\n \"\"\n ],\n \"Confirmed\": [\n \"\"\n ],\n \"Verified\": [\n \"\"\n ],\n \"Executed at\": [\n \"\"\n ],\n \"yes\": [\n \"\"\n ],\n \"no\": [\n \"\"\n ],\n \"unknown\": [\n \"\"\n ],\n \"delete selected transfer from the database\": [\n \"\"\n ],\n \"load more transfer after the last one\": [\n \"\"\n ],\n \"load older transfers\": [\n \"\"\n ],\n \"There is no transfer yet, add more pressing the + sign\": [\n \"\"\n ],\n \"filter by account address\": [\n \"\"\n ],\n \"only show wire transfers confirmed by the merchant\": [\n \"\"\n ],\n \"only show wire transfers claimed by the exchange\": [\n \"\"\n ],\n \"Unverified\": [\n \"\"\n ],\n \"is not valid\": [\n \"\"\n ],\n \"is not a number\": [\n \"\"\n ],\n \"must be 1 or greater\": [\n \"\"\n ],\n \"max 7 lines\": [\n \"\"\n ],\n \"change authorization configuration\": [\n \"\"\n ],\n \"Need to complete marked fields and choose authorization method\": [\n \"\"\n ],\n \"This is not a valid bitcoin address.\": [\n \"\"\n ],\n \"This is not a valid Ethereum address.\": [\n \"\"\n ],\n \"IBAN numbers usually have more that 4 digits\": [\n \"\"\n ],\n \"IBAN numbers usually have less that 34 digits\": [\n \"\"\n ],\n \"IBAN country code not found\": [\n \"\"\n ],\n \"IBAN number is not valid, checksum is wrong\": [\n \"\"\n ],\n \"Target type\": [\n \"\"\n ],\n \"Method to use for wire transfer\": [\n \"\"\n ],\n \"Routing\": [\n \"\"\n ],\n \"Routing number.\": [\n \"\"\n ],\n \"Account\": [\n \"\"\n ],\n \"Account number.\": [\n \"\"\n ],\n \"Business Identifier Code.\": [\n \"\"\n ],\n \"Bank Account Number.\": [\n \"\"\n ],\n \"Unified Payment Interface.\": [\n \"\"\n ],\n \"Bitcoin protocol.\": [\n \"\"\n ],\n \"Ethereum protocol.\": [\n \"\"\n ],\n \"Interledger protocol.\": [\n \"\"\n ],\n \"Host\": [\n \"\"\n ],\n \"Bank host.\": [\n \"\"\n ],\n \"Bank account.\": [\n \"\"\n ],\n \"Bank account owner's name.\": [\n \"\"\n ],\n \"No accounts yet.\": [\n \"\"\n ],\n \"Name of the instance in URLs. The 'default' instance is special in that it is used to administer other instances.\": [\n \"\"\n ],\n \"Business name\": [\n \"\"\n ],\n \"Legal name of the business represented by this instance.\": [\n \"\"\n ],\n \"Email\": [\n \"\"\n ],\n \"Contact email\": [\n \"\"\n ],\n \"Website URL\": [\n \"\"\n ],\n \"URL.\": [\n \"\"\n ],\n \"Logo\": [\n \"\"\n ],\n \"Logo image.\": [\n \"\"\n ],\n \"Bank account\": [\n \"\"\n ],\n \"URI specifying bank account for crediting revenue.\": [\n \"\"\n ],\n \"Default max deposit fee\": [\n \"\"\n ],\n \"Maximum deposit fees this merchant is willing to pay per order by default.\": [\n \"\"\n ],\n \"Default max wire fee\": [\n \"\"\n ],\n \"Maximum wire fees this merchant is willing to pay per wire transfer by default.\": [\n \"\"\n ],\n \"Default wire fee amortization\": [\n \"\"\n ],\n \"Number of orders excess wire transfer fees will be divided by to compute per order surcharge.\": [\n \"\"\n ],\n \"Physical location of the merchant.\": [\n \"\"\n ],\n \"Jurisdiction\": [\n \"\"\n ],\n \"Jurisdiction for legal disputes with the merchant.\": [\n \"\"\n ],\n \"Default payment delay\": [\n \"\"\n ],\n \"Time customers have to pay an order before the offer expires by default.\": [\n \"\"\n ],\n \"Default wire transfer delay\": [\n \"\"\n ],\n \"Maximum time an exchange is allowed to delay wiring funds to the merchant, enabling it to aggregate smaller payments into larger wire transfers and reducing wire fees.\": [\n \"\"\n ],\n \"Instance id\": [\n \"\"\n ],\n \"Change the authorization method use for this instance.\": [\n \"\"\n ],\n \"Manage access token\": [\n \"\"\n ],\n \"Failed to create instance\": [\n \"\"\n ],\n \"Login required\": [\n \"\"\n ],\n \"Please enter your access token.\": [\n \"\"\n ],\n \"Access Token\": [\n \"\"\n ],\n \"The request to the backend take too long and was cancelled\": [\n \"\"\n ],\n \"Diagnostic from %1$s is '%2$s'\": [\n \"\"\n ],\n \"The backend reported a problem: HTTP status #%1$s\": [\n \"\"\n ],\n \"Access denied\": [\n \"\"\n ],\n \"The access token provided is invalid.\": [\n \"\"\n ],\n \"No 'default' instance configured yet.\": [\n \"\"\n ],\n \"Create a 'default' instance to begin using the merchant backoffice.\": [\n \"\"\n ],\n \"The access token provided is invalid\": [\n \"\"\n ],\n \"Hide for today\": [\n \"\"\n ],\n \"Instance\": [\n \"\"\n ],\n \"Settings\": [\n \"\"\n ],\n \"Connection\": [\n \"\"\n ],\n \"New\": [\n \"\"\n ],\n \"List\": [\n \"\"\n ],\n \"Log out\": [\n \"\"\n ],\n \"Check your token is valid\": [\n \"\"\n ],\n \"Couldn't access the server.\": [\n \"\"\n ],\n \"Could not infer instance id from url %1$s\": [\n \"\"\n ],\n \"Server not found\": [\n \"\"\n ],\n \"Couldn't access the server\": [\n \"\"\n ],\n \"Got message %1$s from %2$s\": [\n \"\"\n ],\n \"Unexpected Error\": [\n \"\"\n ],\n \"The value %1$s is invalid for a payment url\": [\n \"\"\n ],\n \"add element to the list\": [\n \"\"\n ],\n \"add\": [\n \"\"\n ],\n \"Deleting\": [\n \"\"\n ],\n \"Changing\": [\n \"\"\n ],\n \"Order ID\": [\n \"\"\n ],\n \"Payment URL\": [\n \"\"\n ]\n }\n }\n};\n\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { h, VNode } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport langIcon from \"../../assets/icons/languageicon.svg\";\nimport { strings as messages } from \"../../i18n/strings.js\";\n\ntype LangsNames = {\n [P in keyof typeof messages]: string;\n};\n\nconst names: LangsNames = {\n es: \"Espa\u00F1ol [es]\",\n en: \"English [en]\",\n fr: \"Fran\u00E7ais [fr]\",\n de: \"Deutsch [de]\",\n sv: \"Svenska [sv]\",\n it: \"Italiano [it]\",\n};\n\nfunction getLangName(s: keyof LangsNames | string) {\n if (names[s]) return names[s];\n return s;\n}\n\nexport function LangSelector(): VNode {\n const [updatingLang, setUpdatingLang] = useState(false);\n const { lang, changeLanguage } = useTranslationContext();\n\n return (\n <div class=\"dropdown is-active \">\n <div class=\"dropdown-trigger\">\n <button\n class=\"button has-tooltip-left\"\n data-tooltip=\"change language selection\"\n aria-haspopup=\"true\"\n aria-controls=\"dropdown-menu\"\n onClick={() => setUpdatingLang(!updatingLang)}\n >\n <div class=\"icon is-small is-left\">\n <img src={langIcon} />\n </div>\n <span>{getLangName(lang)}</span>\n <div class=\"icon is-right\">\n <i class=\"mdi mdi-chevron-down\" />\n </div>\n </button>\n </div>\n {updatingLang && (\n <div class=\"dropdown-menu\" id=\"dropdown-menu\" role=\"menu\">\n <div class=\"dropdown-content\">\n {Object.keys(messages)\n .filter((l) => l !== lang)\n .map((l) => (\n <a\n key={l}\n class=\"dropdown-item\"\n value={l}\n onClick={() => {\n changeLanguage(l);\n setUpdatingLang(false);\n }}\n >\n {getLangName(l)}\n </a>\n ))}\n </div>\n </div>\n )}\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { h, VNode } from \"preact\";\nimport { LangSelector } from \"./LangSelector.js\";\nimport logo from \"../../assets/logo-2021.svg\";\n\ninterface Props {\n onMobileMenu: () => void;\n title: string;\n}\n\nexport function NavigationBar({ onMobileMenu, title }: Props): VNode {\n return (\n <nav\n class=\"navbar is-fixed-top\"\n role=\"navigation\"\n aria-label=\"main navigation\"\n >\n <div class=\"navbar-brand\">\n <span class=\"navbar-item\" style={{ fontSize: 24, fontWeight: 900 }}>\n {title}\n </span>\n\n <a\n role=\"button\"\n class=\"navbar-burger\"\n aria-label=\"menu\"\n aria-expanded=\"false\"\n onClick={(e) => {\n onMobileMenu();\n e.stopPropagation();\n }}\n >\n <span aria-hidden=\"true\" />\n <span aria-hidden=\"true\" />\n <span aria-hidden=\"true\" />\n </a>\n </div>\n\n <div class=\"navbar-menu \">\n <a\n class=\"navbar-start is-justify-content-center is-flex-grow-1\"\n href=\"https://taler.net\"\n >\n <img src={logo} style={{ height: 35, margin: 10 }} />\n </a>\n <div class=\"navbar-end\">\n <div class=\"navbar-item\" style={{ paddingTop: 4, paddingBottom: 4 }}>\n <LangSelector />\n </div>\n </div>\n </div>\n </nav>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { useBackendContext } from \"../../context/backend.js\";\nimport { useConfigContext } from \"../../context/config.js\";\nimport { useInstanceKYCDetails } from \"../../hooks/instance.js\";\nimport { LangSelector } from \"./LangSelector.js\";\n\nconst GIT_HASH = typeof __GIT_HASH__ !== \"undefined\" ? __GIT_HASH__ : undefined;\nconst VERSION = typeof __VERSION__ !== \"undefined\" ? __VERSION__ : undefined;\n\ninterface Props {\n onLogout: () => void;\n mobile?: boolean;\n instance: string;\n admin?: boolean;\n mimic?: boolean;\n}\n\nexport function Sidebar({\n mobile,\n instance,\n onLogout,\n admin,\n mimic,\n}: Props): VNode {\n const config = useConfigContext();\n const backend = useBackendContext();\n const { i18n } = useTranslationContext();\n const kycStatus = useInstanceKYCDetails();\n const needKYC = kycStatus.ok && kycStatus.data.type === \"redirect\";\n\n return (\n <aside class=\"aside is-placed-left is-expanded\">\n {mobile && (\n <div\n class=\"footer\"\n onClick={(e) => {\n return e.stopImmediatePropagation();\n }}\n >\n <LangSelector />\n </div>\n )}\n <div class=\"aside-tools\">\n <div class=\"aside-tools-label\">\n <div>\n <b>Taler</b> Backoffice\n </div>\n <div\n class=\"is-size-7 has-text-right\"\n style={{ lineHeight: 0, marginTop: -10 }}\n >\n {VERSION} ({config.version})\n </div>\n </div>\n </div>\n <div class=\"menu is-menu-main\">\n {instance ? (\n <Fragment>\n <p class=\"menu-label\">\n <i18n.Translate>Instance</i18n.Translate>\n </p>\n <ul class=\"menu-list\">\n <li>\n <a href={\"/update\"} class=\"has-icon\">\n <span class=\"icon\">\n <i class=\"mdi mdi-square-edit-outline\" />\n </span>\n <span class=\"menu-item-label\">\n <i18n.Translate>Settings</i18n.Translate>\n </span>\n </a>\n </li>\n <li>\n <a href={\"/orders\"} class=\"has-icon\">\n <span class=\"icon\">\n <i class=\"mdi mdi-cash-register\" />\n </span>\n <span class=\"menu-item-label\">\n <i18n.Translate>Orders</i18n.Translate>\n </span>\n </a>\n </li>\n <li>\n <a href={\"/products\"} class=\"has-icon\">\n <span class=\"icon\">\n <i class=\"mdi mdi-shopping\" />\n </span>\n <span class=\"menu-item-label\">\n <i18n.Translate>Products</i18n.Translate>\n </span>\n </a>\n </li>\n <li>\n <a href={\"/transfers\"} class=\"has-icon\">\n <span class=\"icon\">\n <i class=\"mdi mdi-bank\" />\n </span>\n <span class=\"menu-item-label\">\n <i18n.Translate>Transfers</i18n.Translate>\n </span>\n </a>\n </li>\n <li>\n <a href={\"/templates\"} class=\"has-icon\">\n <span class=\"icon\">\n <i class=\"mdi mdi-newspaper\" />\n </span>\n <span class=\"menu-item-label\">\n <i18n.Translate>Templates</i18n.Translate>\n </span>\n </a>\n </li>\n <li>\n <a href={\"/reserves\"} class=\"has-icon\">\n <span class=\"icon\">\n <i class=\"mdi mdi-cash\" />\n </span>\n <span class=\"menu-item-label\">Reserves</span>\n </a>\n </li>\n <li>\n <a href={\"/webhooks\"} class=\"has-icon\">\n <span class=\"icon\">\n <i class=\"mdi mdi-newspaper\" />\n </span>\n <span class=\"menu-item-label\">\n <i18n.Translate>Webhooks</i18n.Translate>\n </span>\n </a>\n </li>\n {needKYC && (\n <li>\n <a href={\"/kyc\"} class=\"has-icon\">\n <span class=\"icon\">\n <i class=\"mdi mdi-account-check\" />\n </span>\n <span class=\"menu-item-label\">KYC Status</span>\n </a>\n </li>\n )}\n </ul>\n </Fragment>\n ) : undefined}\n <p class=\"menu-label\">\n <i18n.Translate>Connection</i18n.Translate>\n </p>\n <ul class=\"menu-list\">\n <li>\n <div>\n <span style={{ width: \"3rem\" }} class=\"icon\">\n <i class=\"mdi mdi-currency-eur\" />\n </span>\n <span class=\"menu-item-label\">{config.currency}</span>\n </div>\n </li>\n <li>\n <div>\n <span style={{ width: \"3rem\" }} class=\"icon\">\n <i class=\"mdi mdi-web\" />\n </span>\n <span class=\"menu-item-label\">\n {new URL(backend.url).hostname}\n </span>\n </div>\n </li>\n <li>\n <div>\n <span style={{ width: \"3rem\" }} class=\"icon\">\n ID\n </span>\n <span class=\"menu-item-label\">\n {!instance ? \"default\" : instance}\n </span>\n </div>\n </li>\n {admin && !mimic && (\n <Fragment>\n <p class=\"menu-label\">\n <i18n.Translate>Instances</i18n.Translate>\n </p>\n <li>\n <a href={\"/instance/new\"} class=\"has-icon\">\n <span class=\"icon\">\n <i class=\"mdi mdi-plus\" />\n </span>\n <span class=\"menu-item-label\">\n <i18n.Translate>New</i18n.Translate>\n </span>\n </a>\n </li>\n <li>\n <a href={\"/instances\"} class=\"has-icon\">\n <span class=\"icon\">\n <i class=\"mdi mdi-format-list-bulleted\" />\n </span>\n <span class=\"menu-item-label\">\n <i18n.Translate>List</i18n.Translate>\n </span>\n </a>\n </li>\n </Fragment>\n )}\n <li>\n <a\n class=\"has-icon is-state-info is-hoverable\"\n onClick={(): void => onLogout()}\n >\n <span class=\"icon\">\n <i class=\"mdi mdi-logout default\" />\n </span>\n <span class=\"menu-item-label\">\n <i18n.Translate>Log out</i18n.Translate>\n </span>\n </a>\n </li>\n </ul>\n </div>\n </aside>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\nimport { ComponentChildren, Fragment, h, VNode } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { AdminPaths } from \"../../AdminRoutes.js\";\nimport { InstancePaths } from \"../../InstanceRoutes.js\";\nimport { Notification } from \"../../utils/types.js\";\nimport { NavigationBar } from \"./NavigationBar.js\";\nimport { Sidebar } from \"./SideBar.js\";\n\nfunction getInstanceTitle(path: string, id: string): string {\n switch (path) {\n case InstancePaths.update:\n return `${id}: Settings`;\n case InstancePaths.order_list:\n return `${id}: Orders`;\n case InstancePaths.order_new:\n return `${id}: New order`;\n case InstancePaths.product_list:\n return `${id}: Products`;\n case InstancePaths.product_new:\n return `${id}: New product`;\n case InstancePaths.product_update:\n return `${id}: Update product`;\n case InstancePaths.reserves_new:\n return `${id}: New reserve`;\n case InstancePaths.reserves_list:\n return `${id}: Reserves`;\n case InstancePaths.transfers_list:\n return `${id}: Transfers`;\n case InstancePaths.transfers_new:\n return `${id}: New transfer`;\n case InstancePaths.webhooks_list:\n return `${id}: Webhooks`;\n case InstancePaths.webhooks_new:\n return `${id}: New webhook`;\n case InstancePaths.webhooks_update:\n return `${id}: Update webhook`;\n case InstancePaths.templates_new:\n return `${id}: New template`;\n case InstancePaths.templates_update:\n return `${id}: Update template`;\n case InstancePaths.templates_list:\n return `${id}: Templates`;\n case InstancePaths.templates_use:\n return `${id}: Use template`;\n default:\n return \"\";\n }\n}\n\nfunction getAdminTitle(path: string, instance: string) {\n if (path === AdminPaths.new_instance) return `New instance`;\n if (path === AdminPaths.list_instances) return `Instances`;\n return getInstanceTitle(path, instance);\n}\n\ninterface MenuProps {\n title?: string;\n path: string;\n instance: string;\n admin?: boolean;\n onLogout?: () => void;\n setInstanceName: (s: string) => void;\n}\n\nfunction WithTitle({\n title,\n children,\n}: {\n title: string;\n children: ComponentChildren;\n}): VNode {\n useEffect(() => {\n document.title = `Taler Backoffice: ${title}`;\n }, [title]);\n return <Fragment>{children}</Fragment>;\n}\n\nexport function Menu({\n onLogout,\n title,\n instance,\n path,\n admin,\n setInstanceName,\n}: MenuProps): VNode {\n const [mobileOpen, setMobileOpen] = useState(false);\n\n const titleWithSubtitle = title\n ? title\n : !admin\n ? getInstanceTitle(path, instance)\n : getAdminTitle(path, instance);\n const adminInstance = instance === \"default\";\n const mimic = admin && !adminInstance;\n return (\n <WithTitle title={titleWithSubtitle}>\n <div\n class={mobileOpen ? \"has-aside-mobile-expanded\" : \"\"}\n onClick={() => setMobileOpen(false)}\n >\n <NavigationBar\n onMobileMenu={() => setMobileOpen(!mobileOpen)}\n title={titleWithSubtitle}\n />\n\n {onLogout && (\n <Sidebar\n onLogout={onLogout}\n admin={admin}\n mimic={mimic}\n instance={instance}\n mobile={mobileOpen}\n />\n )}\n\n {mimic && (\n <nav class=\"level\">\n <div class=\"level-item has-text-centered has-background-warning\">\n <p class=\"is-size-5\">\n You are viewing the instance <b>&quot;{instance}&quot;</b>.{\" \"}\n <a\n href=\"#/instances\"\n onClick={(e) => {\n setInstanceName(\"default\");\n }}\n >\n go back\n </a>\n </p>\n </div>\n </nav>\n )}\n </div>\n </WithTitle>\n );\n}\n\ninterface NotYetReadyAppMenuProps {\n title: string;\n onLogout?: () => void;\n}\n\ninterface NotifProps {\n notification?: Notification;\n}\nexport function NotificationCard({\n notification: n,\n}: NotifProps): VNode | null {\n if (!n) return null;\n return (\n <div class=\"notification\">\n <div class=\"columns is-vcentered\">\n <div class=\"column is-12\">\n <article\n class={\n n.type === \"ERROR\"\n ? \"message is-danger\"\n : n.type === \"WARN\"\n ? \"message is-warning\"\n : \"message is-info\"\n }\n >\n <div class=\"message-header\">\n <p>{n.message}</p>\n </div>\n {n.description && (\n <div class=\"message-body\">\n <div>{n.description}</div>\n {n.details && <pre>{n.details}</pre>}\n </div>\n )}\n </article>\n </div>\n </div>\n </div>\n );\n}\n\nexport function NotYetReadyAppMenu({\n onLogout,\n title,\n}: NotYetReadyAppMenuProps): VNode {\n const [mobileOpen, setMobileOpen] = useState(false);\n\n useEffect(() => {\n document.title = `Taler Backoffice: ${title}`;\n }, [title]);\n\n return (\n <div\n class={mobileOpen ? \"has-aside-mobile-expanded\" : \"\"}\n onClick={() => setMobileOpen(false)}\n >\n <NavigationBar\n onMobileMenu={() => setMobileOpen(!mobileOpen)}\n title={title}\n />\n {onLogout && (\n <Sidebar onLogout={onLogout} instance=\"\" mobile={mobileOpen} />\n )}\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\nimport { useTranslationContext } from \"@gnu-taler/web-util/lib/index.browser\";\nimport { createHashHistory } from \"history\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { Router, Route, route } from \"preact-router\";\nimport { useState } from \"preact/hooks\";\nimport {\n NotificationCard,\n NotYetReadyAppMenu,\n} from \"./components/menu/index.js\";\nimport { useBackendContext } from \"./context/backend.js\";\nimport { useBackendInstancesTestForAdmin } from \"./hooks/backend.js\";\nimport { InstanceRoutes } from \"./InstanceRoutes.js\";\nimport LoginPage from \"./paths/login/index.js\";\nimport { INSTANCE_ID_LOOKUP } from \"./utils/constants.js\";\n\nexport function ApplicationReadyRoutes(): VNode {\n const { i18n } = useTranslationContext();\n const {\n url: backendURL,\n updateLoginStatus,\n clearAllTokens,\n } = useBackendContext();\n\n const result = useBackendInstancesTestForAdmin();\n\n const clearTokenAndGoToRoot = () => {\n clearAllTokens();\n route(\"/\");\n };\n\n if (result.clientError && result.isUnauthorized) {\n return (\n <Fragment>\n <NotYetReadyAppMenu title=\"Login\" onLogout={clearTokenAndGoToRoot} />\n <NotificationCard\n notification={{\n message: i18n.str`Access denied`,\n description: i18n.str`Check your token is valid`,\n type: \"ERROR\",\n }}\n />\n <LoginPage onConfirm={updateLoginStatus} />\n </Fragment>\n );\n }\n\n if (result.loading) return <NotYetReadyAppMenu title=\"Loading...\" />;\n\n let admin = true;\n let instanceNameByBackendURL;\n\n if (!result.ok) {\n const path = new URL(backendURL).pathname;\n const match = INSTANCE_ID_LOOKUP.exec(path);\n if (!match || !match[1]) {\n // this should be rare because\n // query to /config is ok but the URL\n // does not match our pattern\n return (\n <Fragment>\n <NotYetReadyAppMenu title=\"Error\" onLogout={clearTokenAndGoToRoot} />\n <NotificationCard\n notification={{\n message: i18n.str`Couldn't access the server.`,\n description: i18n.str`Could not infer instance id from url ${backendURL}`,\n type: \"ERROR\",\n }}\n />\n <LoginPage onConfirm={updateLoginStatus} />\n </Fragment>\n );\n }\n\n admin = false;\n instanceNameByBackendURL = match[1];\n }\n\n const history = createHashHistory();\n return (\n <Router history={history}>\n <Route\n default\n component={DefaultMainRoute}\n admin={admin}\n instanceNameByBackendURL={instanceNameByBackendURL}\n />\n </Router>\n );\n}\n\nfunction DefaultMainRoute({\n instance,\n admin,\n instanceNameByBackendURL,\n url, //from preact-router\n}: any): VNode {\n const [instanceName, setInstanceName] = useState(\n instanceNameByBackendURL || instance || \"default\",\n );\n\n return (\n <InstanceRoutes\n admin={admin}\n path={url}\n id={instanceName}\n setInstanceName={setInstanceName}\n />\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\n/**\n *\n * @author Sebastian Javier Marchano (sebasjm)\n */\n\nimport {\n TranslationProvider,\n useTranslationContext,\n} from \"@gnu-taler/web-util/lib/index.browser\";\nimport { Fragment, h, VNode } from \"preact\";\nimport { route } from \"preact-router\";\nimport { useMemo } from \"preact/hooks\";\nimport { ApplicationReadyRoutes } from \"./ApplicationReadyRoutes.js\";\nimport { Loading } from \"./components/exception/loading.js\";\nimport {\n NotificationCard,\n NotYetReadyAppMenu,\n} from \"./components/menu/index.js\";\nimport {\n BackendContextProvider,\n useBackendContext,\n} from \"./context/backend.js\";\nimport { ConfigContextProvider } from \"./context/config.js\";\nimport { useBackendConfig } from \"./hooks/backend.js\";\nimport { strings } from \"./i18n/strings.js\";\nimport LoginPage from \"./paths/login/index.js\";\n\nexport function Application(): VNode {\n return (\n // <FetchContextProvider>\n <BackendContextProvider>\n <TranslationProvider source={strings}>\n <ApplicationStatusRoutes />\n </TranslationProvider>\n </BackendContextProvider>\n // </FetchContextProvider>\n );\n}\n\nfunction ApplicationStatusRoutes(): VNode {\n const { updateLoginStatus, triedToLog } = useBackendContext();\n const result = useBackendConfig();\n const { i18n } = useTranslationContext();\n\n const updateLoginInfoAndGoToRoot = (url: string, token?: string) => {\n updateLoginStatus(url, token);\n route(\"/\");\n };\n\n const { currency, version } = result.ok\n ? result.data\n : { currency: \"unknown\", version: \"unknown\" };\n const ctx = useMemo(() => ({ currency, version }), [currency, version]);\n\n if (!triedToLog) {\n return (\n <Fragment>\n <NotYetReadyAppMenu title=\"Welcome!\" />\n <LoginPage onConfirm={updateLoginInfoAndGoToRoot} />\n </Fragment>\n );\n }\n\n if (result.clientError && result.isUnauthorized)\n return (\n <Fragment>\n <NotYetReadyAppMenu title=\"Login\" />\n <LoginPage onConfirm={updateLoginInfoAndGoToRoot} />\n </Fragment>\n );\n\n if (result.clientError && result.isNotfound)\n return (\n <Fragment>\n <NotYetReadyAppMenu title=\"Error\" />\n <NotificationCard\n notification={{\n message: i18n.str`Server not found`,\n type: \"ERROR\",\n description: `Check your url`,\n }}\n />\n <LoginPage onConfirm={updateLoginInfoAndGoToRoot} />\n </Fragment>\n );\n\n if (result.serverError)\n return (\n <Fragment>\n <NotYetReadyAppMenu title=\"Error\" />\n <NotificationCard\n notification={{\n message: i18n.str`Couldn't access the server`,\n type: \"ERROR\",\n description: i18n.str`Got message ${result.message} from ${result.info?.url}`,\n }}\n />\n <LoginPage onConfirm={updateLoginInfoAndGoToRoot} />\n </Fragment>\n );\n\n if (result.loading) return <Loading />;\n\n if (!result.ok)\n return (\n <Fragment>\n <NotYetReadyAppMenu title=\"Error\" />\n <NotificationCard\n notification={{\n message: i18n.str`Unexpected Error`,\n type: \"ERROR\",\n description: i18n.str`Got message ${result.message} from ${result.info?.url}`,\n }}\n />\n <LoginPage onConfirm={updateLoginInfoAndGoToRoot} />\n </Fragment>\n );\n\n return (\n <div class=\"has-navbar-fixed-top\">\n <ConfigContextProvider value={ctx}>\n <ApplicationReadyRoutes />\n </ConfigContextProvider>\n </div>\n );\n}\n", "/*\n This file is part of GNU Taler\n (C) 2021-2023 Taler Systems S.A.\n\n GNU Taler is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 3, or (at your option) any later version.\n\n GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>\n */\n\nimport { Application } from \"./Application.js\";\n\nimport { h, render } from \"preact\";\nimport \"./scss/main.scss\";\n\nconst app = document.getElementById(\"app\");\n\nrender(<Application />, app as any);\n"],
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,QAAI,SAAU,SAAUA,YAAW;AAC/B;AAEA,UAAI,OAAO,KACP,WAAW,GACX,UAAU,kBACV,cAAc,aAAa,OAAO,GAClC,mBAAmB;AAEvB,UAAI,uBAAuB,OAAO,WAAW;AAE7C,eAAS,QAAQC,IAAG,OAAO,UAAU,eAAe;AAChD,YAAI,OAAOA,OAAM;AAAa,iBAAO,QAAQ,CAAC;AAC9C,YAAI,OAAO,UAAU;AAAa,iBAAO,CAAC,UAAU,MAAM,CAAC,WAAW,WAAWA,EAAC,IAAI,UAAUA,IAAG,OAAO,UAAU,aAAa;AACjI,eAAO,WAAWA,EAAC;AAAA,MACvB;AAEA,eAAS,WAAW,OAAO,MAAM;AAC7B,aAAK,QAAQ;AACb,aAAK,OAAO;AACZ,aAAK,UAAU;AAAA,MACnB;AACA,iBAAW,YAAY,OAAO,OAAO,QAAQ,SAAS;AAEtD,eAAS,aAAa,OAAO;AACzB,aAAK,QAAQ;AACb,aAAK,OAAO,QAAQ;AACpB,aAAK,UAAU;AAAA,MACnB;AACA,mBAAa,YAAY,OAAO,OAAO,QAAQ,SAAS;AAExD,eAAS,aAAa,OAAO;AACzB,aAAK,QAAQ;AAAA,MACjB;AACA,mBAAa,YAAY,OAAO,OAAO,QAAQ,SAAS;AAExD,eAAS,UAAUC,IAAG;AAClB,eAAO,CAAC,UAAUA,MAAKA,KAAI;AAAA,MAC/B;AAEA,eAAS,aAAaA,IAAG;AACrB,YAAIA,KAAI;AACJ,iBAAO,CAACA,EAAC;AACb,YAAIA,KAAI;AACJ,iBAAO,CAACA,KAAI,KAAK,KAAK,MAAMA,KAAI,GAAG,CAAC;AACxC,eAAO,CAACA,KAAI,KAAK,KAAK,MAAMA,KAAI,GAAG,IAAI,KAAK,KAAK,MAAMA,KAAI,IAAI,CAAC;AAAA,MACpE;AAEA,eAAS,aAAa,KAAK;AACvB,QAAAC,MAAK,GAAG;AACR,YAAI,SAAS,IAAI;AACjB,YAAI,SAAS,KAAK,WAAW,KAAK,WAAW,IAAI,GAAG;AAChD,kBAAQ,QAAQ;AAAA,YACZ,KAAK;AAAG,qBAAO;AAAA,YACf,KAAK;AAAG,qBAAO,IAAI,CAAC;AAAA,YACpB,KAAK;AAAG,qBAAO,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;AAAA,YACjC;AAAS,qBAAO,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,QAAQ;AAAA,UACxD;AAAA,QACJ;AACA,eAAO;AAAA,MACX;AAEA,eAASA,MAAKF,IAAG;AACb,YAAIG,KAAIH,GAAE;AACV,eAAOA,GAAE,EAAEG,EAAC,MAAM;AAAE;AACpB,QAAAH,GAAE,SAASG,KAAI;AAAA,MACnB;AAEA,eAAS,YAAY,QAAQ;AACzB,YAAIC,KAAI,IAAI,MAAM,MAAM;AACxB,YAAID,KAAI;AACR,eAAO,EAAEA,KAAI,QAAQ;AACjB,UAAAC,GAAED,EAAC,IAAI;AAAA,QACX;AACA,eAAOC;AAAA,MACX;AAEA,eAAS,SAASH,IAAG;AACjB,YAAIA,KAAI;AAAG,iBAAO,KAAK,MAAMA,EAAC;AAC9B,eAAO,KAAK,KAAKA,EAAC;AAAA,MACtB;AAEA,eAASI,KAAIC,IAAGC,IAAG;AACf,YAAI,MAAMD,GAAE,QACR,MAAMC,GAAE,QACRC,KAAI,IAAI,MAAM,GAAG,GACjB,QAAQ,GACRC,QAAO,MACPC,MAAKP;AACT,aAAKA,KAAI,GAAGA,KAAI,KAAKA,MAAK;AACtB,UAAAO,OAAMJ,GAAEH,EAAC,IAAII,GAAEJ,EAAC,IAAI;AACpB,kBAAQO,QAAOD,QAAO,IAAI;AAC1B,UAAAD,GAAEL,EAAC,IAAIO,OAAM,QAAQD;AAAA,QACzB;AACA,eAAON,KAAI,KAAK;AACZ,UAAAO,OAAMJ,GAAEH,EAAC,IAAI;AACb,kBAAQO,SAAQD,QAAO,IAAI;AAC3B,UAAAD,GAAEL,IAAG,IAAIO,OAAM,QAAQD;AAAA,QAC3B;AACA,YAAI,QAAQ;AAAG,UAAAD,GAAE,KAAK,KAAK;AAC3B,eAAOA;AAAA,MACX;AAEA,eAAS,OAAOF,IAAGC,IAAG;AAClB,YAAID,GAAE,UAAUC,GAAE;AAAQ,iBAAOF,KAAIC,IAAGC,EAAC;AACzC,eAAOF,KAAIE,IAAGD,EAAC;AAAA,MACnB;AAEA,eAAS,SAASA,IAAG,OAAO;AACxB,YAAIK,KAAIL,GAAE,QACNE,KAAI,IAAI,MAAMG,EAAC,GACfF,QAAO,MACPC,MAAKP;AACT,aAAKA,KAAI,GAAGA,KAAIQ,IAAGR,MAAK;AACpB,UAAAO,OAAMJ,GAAEH,EAAC,IAAIM,QAAO;AACpB,kBAAQ,KAAK,MAAMC,OAAMD,KAAI;AAC7B,UAAAD,GAAEL,EAAC,IAAIO,OAAM,QAAQD;AACrB,mBAAS;AAAA,QACb;AACA,eAAO,QAAQ,GAAG;AACd,UAAAD,GAAEL,IAAG,IAAI,QAAQM;AACjB,kBAAQ,KAAK,MAAM,QAAQA,KAAI;AAAA,QACnC;AACA,eAAOD;AAAA,MACX;AAEA,iBAAW,UAAU,MAAM,SAAUR,IAAG;AACpC,YAAIC,KAAI,WAAWD,EAAC;AACpB,YAAI,KAAK,SAASC,GAAE,MAAM;AACtB,iBAAO,KAAK,SAASA,GAAE,OAAO,CAAC;AAAA,QACnC;AACA,YAAIK,KAAI,KAAK,OAAOC,KAAIN,GAAE;AAC1B,YAAIA,GAAE,SAAS;AACX,iBAAO,IAAI,WAAW,SAASK,IAAG,KAAK,IAAIC,EAAC,CAAC,GAAG,KAAK,IAAI;AAAA,QAC7D;AACA,eAAO,IAAI,WAAW,OAAOD,IAAGC,EAAC,GAAG,KAAK,IAAI;AAAA,MACjD;AACA,iBAAW,UAAU,OAAO,WAAW,UAAU;AAEjD,mBAAa,UAAU,MAAM,SAAUP,IAAG;AACtC,YAAIC,KAAI,WAAWD,EAAC;AACpB,YAAIM,KAAI,KAAK;AACb,YAAIA,KAAI,MAAML,GAAE,MAAM;AAClB,iBAAO,KAAK,SAASA,GAAE,OAAO,CAAC;AAAA,QACnC;AACA,YAAIM,KAAIN,GAAE;AACV,YAAIA,GAAE,SAAS;AACX,cAAI,UAAUK,KAAIC,EAAC;AAAG,mBAAO,IAAI,aAAaD,KAAIC,EAAC;AACnD,UAAAA,KAAI,aAAa,KAAK,IAAIA,EAAC,CAAC;AAAA,QAChC;AACA,eAAO,IAAI,WAAW,SAASA,IAAG,KAAK,IAAID,EAAC,CAAC,GAAGA,KAAI,CAAC;AAAA,MACzD;AACA,mBAAa,UAAU,OAAO,aAAa,UAAU;AAErD,mBAAa,UAAU,MAAM,SAAUN,IAAG;AACtC,eAAO,IAAI,aAAa,KAAK,QAAQ,WAAWA,EAAC,EAAE,KAAK;AAAA,MAC5D;AACA,mBAAa,UAAU,OAAO,aAAa,UAAU;AAErD,eAAS,SAASM,IAAGC,IAAG;AACpB,YAAI,MAAMD,GAAE,QACR,MAAMC,GAAE,QACRC,KAAI,IAAI,MAAM,GAAG,GACjB,SAAS,GACTC,QAAO,MACPN,IAAGS;AACP,aAAKT,KAAI,GAAGA,KAAI,KAAKA,MAAK;AACtB,UAAAS,cAAaN,GAAEH,EAAC,IAAI,SAASI,GAAEJ,EAAC;AAChC,cAAIS,cAAa,GAAG;AAChB,YAAAA,eAAcH;AACd,qBAAS;AAAA,UACb;AAAO,qBAAS;AAChB,UAAAD,GAAEL,EAAC,IAAIS;AAAA,QACX;AACA,aAAKT,KAAI,KAAKA,KAAI,KAAKA,MAAK;AACxB,UAAAS,cAAaN,GAAEH,EAAC,IAAI;AACpB,cAAIS,cAAa;AAAG,YAAAA,eAAcH;AAAA,eAC7B;AACD,YAAAD,GAAEL,IAAG,IAAIS;AACT;AAAA,UACJ;AACA,UAAAJ,GAAEL,EAAC,IAAIS;AAAA,QACX;AACA,eAAOT,KAAI,KAAKA,MAAK;AACjB,UAAAK,GAAEL,EAAC,IAAIG,GAAEH,EAAC;AAAA,QACd;AACA,QAAAD,MAAKM,EAAC;AACN,eAAOA;AAAA,MACX;AAEA,eAAS,YAAYF,IAAGC,IAAG,MAAM;AAC7B,YAAI;AACJ,YAAI,WAAWD,IAAGC,EAAC,KAAK,GAAG;AACvB,kBAAQ,SAASD,IAAGC,EAAC;AAAA,QACzB,OAAO;AACH,kBAAQ,SAASA,IAAGD,EAAC;AACrB,iBAAO,CAAC;AAAA,QACZ;AACA,gBAAQ,aAAa,KAAK;AAC1B,YAAI,OAAO,UAAU,UAAU;AAC3B,cAAI;AAAM,oBAAQ,CAAC;AACnB,iBAAO,IAAI,aAAa,KAAK;AAAA,QACjC;AACA,eAAO,IAAI,WAAW,OAAO,IAAI;AAAA,MACrC;AAEA,eAAS,cAAcA,IAAGC,IAAG,MAAM;AAC/B,YAAII,KAAIL,GAAE,QACNE,KAAI,IAAI,MAAMG,EAAC,GACf,QAAQ,CAACJ,IACTE,QAAO,MACPN,IAAGS;AACP,aAAKT,KAAI,GAAGA,KAAIQ,IAAGR,MAAK;AACpB,UAAAS,cAAaN,GAAEH,EAAC,IAAI;AACpB,kBAAQ,KAAK,MAAMS,cAAaH,KAAI;AACpC,UAAAG,eAAcH;AACd,UAAAD,GAAEL,EAAC,IAAIS,cAAa,IAAIA,cAAaH,QAAOG;AAAA,QAChD;AACA,QAAAJ,KAAI,aAAaA,EAAC;AAClB,YAAI,OAAOA,OAAM,UAAU;AACvB,cAAI;AAAM,YAAAA,KAAI,CAACA;AACf,iBAAO,IAAI,aAAaA,EAAC;AAAA,QAC7B;AAAE,eAAO,IAAI,WAAWA,IAAG,IAAI;AAAA,MACnC;AAEA,iBAAW,UAAU,WAAW,SAAUR,IAAG;AACzC,YAAIC,KAAI,WAAWD,EAAC;AACpB,YAAI,KAAK,SAASC,GAAE,MAAM;AACtB,iBAAO,KAAK,IAAIA,GAAE,OAAO,CAAC;AAAA,QAC9B;AACA,YAAIK,KAAI,KAAK,OAAOC,KAAIN,GAAE;AAC1B,YAAIA,GAAE;AACF,iBAAO,cAAcK,IAAG,KAAK,IAAIC,EAAC,GAAG,KAAK,IAAI;AAClD,eAAO,YAAYD,IAAGC,IAAG,KAAK,IAAI;AAAA,MACtC;AACA,iBAAW,UAAU,QAAQ,WAAW,UAAU;AAElD,mBAAa,UAAU,WAAW,SAAUP,IAAG;AAC3C,YAAIC,KAAI,WAAWD,EAAC;AACpB,YAAIM,KAAI,KAAK;AACb,YAAIA,KAAI,MAAML,GAAE,MAAM;AAClB,iBAAO,KAAK,IAAIA,GAAE,OAAO,CAAC;AAAA,QAC9B;AACA,YAAIM,KAAIN,GAAE;AACV,YAAIA,GAAE,SAAS;AACX,iBAAO,IAAI,aAAaK,KAAIC,EAAC;AAAA,QACjC;AACA,eAAO,cAAcA,IAAG,KAAK,IAAID,EAAC,GAAGA,MAAK,CAAC;AAAA,MAC/C;AACA,mBAAa,UAAU,QAAQ,aAAa,UAAU;AAEtD,mBAAa,UAAU,WAAW,SAAUN,IAAG;AAC3C,eAAO,IAAI,aAAa,KAAK,QAAQ,WAAWA,EAAC,EAAE,KAAK;AAAA,MAC5D;AACA,mBAAa,UAAU,QAAQ,aAAa,UAAU;AAEtD,iBAAW,UAAU,SAAS,WAAY;AACtC,eAAO,IAAI,WAAW,KAAK,OAAO,CAAC,KAAK,IAAI;AAAA,MAChD;AACA,mBAAa,UAAU,SAAS,WAAY;AACxC,YAAI,OAAO,KAAK;AAChB,YAAI,QAAQ,IAAI,aAAa,CAAC,KAAK,KAAK;AACxC,cAAM,OAAO,CAAC;AACd,eAAO;AAAA,MACX;AACA,mBAAa,UAAU,SAAS,WAAY;AACxC,eAAO,IAAI,aAAa,CAAC,KAAK,KAAK;AAAA,MACvC;AAEA,iBAAW,UAAU,MAAM,WAAY;AACnC,eAAO,IAAI,WAAW,KAAK,OAAO,KAAK;AAAA,MAC3C;AACA,mBAAa,UAAU,MAAM,WAAY;AACrC,eAAO,IAAI,aAAa,KAAK,IAAI,KAAK,KAAK,CAAC;AAAA,MAChD;AACA,mBAAa,UAAU,MAAM,WAAY;AACrC,eAAO,IAAI,aAAa,KAAK,SAAS,IAAI,KAAK,QAAQ,CAAC,KAAK,KAAK;AAAA,MACtE;AAGA,eAAS,aAAaM,IAAGC,IAAG;AACxB,YAAI,MAAMD,GAAE,QACR,MAAMC,GAAE,QACRI,KAAI,MAAM,KACVH,KAAI,YAAYG,EAAC,GACjBF,QAAO,MACP,SAAS,OAAON,IAAG,KAAK;AAC5B,aAAKA,KAAI,GAAGA,KAAI,KAAK,EAAEA,IAAG;AACtB,gBAAMG,GAAEH,EAAC;AACT,mBAASU,KAAI,GAAGA,KAAI,KAAK,EAAEA,IAAG;AAC1B,kBAAMN,GAAEM,EAAC;AACT,sBAAU,MAAM,MAAML,GAAEL,KAAIU,EAAC;AAC7B,oBAAQ,KAAK,MAAM,UAAUJ,KAAI;AACjC,YAAAD,GAAEL,KAAIU,EAAC,IAAI,UAAU,QAAQJ;AAC7B,YAAAD,GAAEL,KAAIU,KAAI,CAAC,KAAK;AAAA,UACpB;AAAA,QACJ;AACA,QAAAX,MAAKM,EAAC;AACN,eAAOA;AAAA,MACX;AAEA,eAAS,cAAcF,IAAGC,IAAG;AACzB,YAAII,KAAIL,GAAE,QACNE,KAAI,IAAI,MAAMG,EAAC,GACfF,QAAO,MACP,QAAQ,GACR,SAASN;AACb,aAAKA,KAAI,GAAGA,KAAIQ,IAAGR,MAAK;AACpB,oBAAUG,GAAEH,EAAC,IAAII,KAAI;AACrB,kBAAQ,KAAK,MAAM,UAAUE,KAAI;AACjC,UAAAD,GAAEL,EAAC,IAAI,UAAU,QAAQM;AAAA,QAC7B;AACA,eAAO,QAAQ,GAAG;AACd,UAAAD,GAAEL,IAAG,IAAI,QAAQM;AACjB,kBAAQ,KAAK,MAAM,QAAQA,KAAI;AAAA,QACnC;AACA,eAAOD;AAAA,MACX;AAEA,eAAS,UAAUJ,IAAGH,IAAG;AACrB,YAAIO,KAAI,CAAC;AACT,eAAOP,OAAM;AAAG,UAAAO,GAAE,KAAK,CAAC;AACxB,eAAOA,GAAE,OAAOJ,EAAC;AAAA,MACrB;AAEA,eAAS,kBAAkBA,IAAGU,IAAG;AAC7B,YAAIb,KAAI,KAAK,IAAIG,GAAE,QAAQU,GAAE,MAAM;AAEnC,YAAIb,MAAK;AAAI,iBAAO,aAAaG,IAAGU,EAAC;AACrC,QAAAb,KAAI,KAAK,KAAKA,KAAI,CAAC;AAEnB,YAAIM,KAAIH,GAAE,MAAMH,EAAC,GACbK,KAAIF,GAAE,MAAM,GAAGH,EAAC,GAChBc,KAAID,GAAE,MAAMb,EAAC,GACbe,KAAIF,GAAE,MAAM,GAAGb,EAAC;AAEpB,YAAI,KAAK,kBAAkBK,IAAGU,EAAC,GAC3B,KAAK,kBAAkBT,IAAGQ,EAAC,GAC3B,OAAO,kBAAkB,OAAOT,IAAGC,EAAC,GAAG,OAAOS,IAAGD,EAAC,CAAC;AAEvD,YAAI,UAAU,OAAO,OAAO,IAAI,UAAU,SAAS,SAAS,MAAM,EAAE,GAAG,EAAE,GAAGd,EAAC,CAAC,GAAG,UAAU,IAAI,IAAIA,EAAC,CAAC;AACrG,QAAAC,MAAK,OAAO;AACZ,eAAO;AAAA,MACX;AAIA,eAAS,aAAa,IAAIe,KAAI;AAC1B,eAAO,SAAS,KAAK,QAAQA,MAAK,QAAW,KAAKA,MAAK;AAAA,MAC3D;AAEA,iBAAW,UAAU,WAAW,SAAUjB,IAAG;AACzC,YAAIC,KAAI,WAAWD,EAAC,GAChBM,KAAI,KAAK,OAAOC,KAAIN,GAAE,OACtB,OAAO,KAAK,SAASA,GAAE,MACvB;AACJ,YAAIA,GAAE,SAAS;AACX,cAAIM,OAAM;AAAG,mBAAO,QAAQ,CAAC;AAC7B,cAAIA,OAAM;AAAG,mBAAO;AACpB,cAAIA,OAAM;AAAI,mBAAO,KAAK,OAAO;AACjC,gBAAM,KAAK,IAAIA,EAAC;AAChB,cAAI,MAAM,MAAM;AACZ,mBAAO,IAAI,WAAW,cAAcD,IAAG,GAAG,GAAG,IAAI;AAAA,UACrD;AACA,UAAAC,KAAI,aAAa,GAAG;AAAA,QACxB;AACA,YAAI,aAAaD,GAAE,QAAQC,GAAE,MAAM;AAC/B,iBAAO,IAAI,WAAW,kBAAkBD,IAAGC,EAAC,GAAG,IAAI;AACvD,eAAO,IAAI,WAAW,aAAaD,IAAGC,EAAC,GAAG,IAAI;AAAA,MAClD;AAEA,iBAAW,UAAU,QAAQ,WAAW,UAAU;AAElD,eAAS,sBAAsBD,IAAGC,IAAG,MAAM;AACvC,YAAID,KAAI,MAAM;AACV,iBAAO,IAAI,WAAW,cAAcC,IAAGD,EAAC,GAAG,IAAI;AAAA,QACnD;AACA,eAAO,IAAI,WAAW,aAAaC,IAAG,aAAaD,EAAC,CAAC,GAAG,IAAI;AAAA,MAChE;AACA,mBAAa,UAAU,mBAAmB,SAAUA,IAAG;AACnD,YAAI,UAAUA,GAAE,QAAQ,KAAK,KAAK,GAAG;AACjC,iBAAO,IAAI,aAAaA,GAAE,QAAQ,KAAK,KAAK;AAAA,QAChD;AACA,eAAO,sBAAsB,KAAK,IAAIA,GAAE,KAAK,GAAG,aAAa,KAAK,IAAI,KAAK,KAAK,CAAC,GAAG,KAAK,SAASA,GAAE,IAAI;AAAA,MAC5G;AACA,iBAAW,UAAU,mBAAmB,SAAUA,IAAG;AACjD,YAAIA,GAAE,UAAU;AAAG,iBAAO,QAAQ,CAAC;AACnC,YAAIA,GAAE,UAAU;AAAG,iBAAO;AAC1B,YAAIA,GAAE,UAAU;AAAI,iBAAO,KAAK,OAAO;AACvC,eAAO,sBAAsB,KAAK,IAAIA,GAAE,KAAK,GAAG,KAAK,OAAO,KAAK,SAASA,GAAE,IAAI;AAAA,MACpF;AACA,mBAAa,UAAU,WAAW,SAAUN,IAAG;AAC3C,eAAO,WAAWA,EAAC,EAAE,iBAAiB,IAAI;AAAA,MAC9C;AACA,mBAAa,UAAU,QAAQ,aAAa,UAAU;AAEtD,mBAAa,UAAU,WAAW,SAAUA,IAAG;AAC3C,eAAO,IAAI,aAAa,KAAK,QAAQ,WAAWA,EAAC,EAAE,KAAK;AAAA,MAC5D;AACA,mBAAa,UAAU,QAAQ,aAAa,UAAU;AAEtD,eAAS,OAAOM,IAAG;AAEf,YAAIK,KAAIL,GAAE,QACNE,KAAI,YAAYG,KAAIA,EAAC,GACrBF,QAAO,MACP,SAAS,OAAON,IAAG,KAAK;AAC5B,aAAKA,KAAI,GAAGA,KAAIQ,IAAGR,MAAK;AACpB,gBAAMG,GAAEH,EAAC;AACT,kBAAQ,IAAI,MAAM;AAClB,mBAASU,KAAIV,IAAGU,KAAIF,IAAGE,MAAK;AACxB,kBAAMP,GAAEO,EAAC;AACT,sBAAU,KAAK,MAAM,OAAOL,GAAEL,KAAIU,EAAC,IAAI;AACvC,oBAAQ,KAAK,MAAM,UAAUJ,KAAI;AACjC,YAAAD,GAAEL,KAAIU,EAAC,IAAI,UAAU,QAAQJ;AAAA,UACjC;AACA,UAAAD,GAAEL,KAAIQ,EAAC,IAAI;AAAA,QACf;AACA,QAAAT,MAAKM,EAAC;AACN,eAAOA;AAAA,MACX;AAEA,iBAAW,UAAU,SAAS,WAAY;AACtC,eAAO,IAAI,WAAW,OAAO,KAAK,KAAK,GAAG,KAAK;AAAA,MACnD;AAEA,mBAAa,UAAU,SAAS,WAAY;AACxC,YAAI,QAAQ,KAAK,QAAQ,KAAK;AAC9B,YAAI,UAAU,KAAK;AAAG,iBAAO,IAAI,aAAa,KAAK;AACnD,eAAO,IAAI,WAAW,OAAO,aAAa,KAAK,IAAI,KAAK,KAAK,CAAC,CAAC,GAAG,KAAK;AAAA,MAC3E;AAEA,mBAAa,UAAU,SAAS,SAAUR,IAAG;AACzC,eAAO,IAAI,aAAa,KAAK,QAAQ,KAAK,KAAK;AAAA,MACnD;AAEA,eAAS,QAAQM,IAAGC,IAAG;AACnB,YAAI,MAAMD,GAAE,QACR,MAAMC,GAAE,QACRE,QAAO,MACP,SAAS,YAAYF,GAAE,MAAM,GAC7B,8BAA8BA,GAAE,MAAM,CAAC,GAEvC,SAAS,KAAK,KAAKE,SAAQ,IAAI,4BAA4B,GAC3D,YAAY,cAAcH,IAAG,MAAM,GACnC,UAAU,cAAcC,IAAG,MAAM,GACjC,eAAe,OAAO,OAAO,QAAQJ,IAAGQ,IAAGO;AAC/C,YAAI,UAAU,UAAU;AAAK,oBAAU,KAAK,CAAC;AAC7C,gBAAQ,KAAK,CAAC;AACd,sCAA8B,QAAQ,MAAM,CAAC;AAC7C,aAAK,QAAQ,MAAM,KAAK,SAAS,GAAG,SAAS;AACzC,0BAAgBT,QAAO;AACvB,cAAI,UAAU,QAAQ,GAAG,MAAM,6BAA6B;AACxD,4BAAgB,KAAK,OAAO,UAAU,QAAQ,GAAG,IAAIA,QAAO,UAAU,QAAQ,MAAM,CAAC,KAAK,2BAA2B;AAAA,UACzH;AAEA,kBAAQ;AACR,mBAAS;AACT,UAAAE,KAAI,QAAQ;AACZ,eAAKR,KAAI,GAAGA,KAAIQ,IAAGR,MAAK;AACpB,qBAAS,gBAAgB,QAAQA,EAAC;AAClC,YAAAe,KAAI,KAAK,MAAM,QAAQT,KAAI;AAC3B,sBAAU,UAAU,QAAQN,EAAC,KAAK,QAAQe,KAAIT;AAC9C,oBAAQS;AACR,gBAAI,SAAS,GAAG;AACZ,wBAAU,QAAQf,EAAC,IAAI,SAASM;AAChC,uBAAS;AAAA,YACb,OAAO;AACH,wBAAU,QAAQN,EAAC,IAAI;AACvB,uBAAS;AAAA,YACb;AAAA,UACJ;AACA,iBAAO,WAAW,GAAG;AACjB,6BAAiB;AACjB,oBAAQ;AACR,iBAAKA,KAAI,GAAGA,KAAIQ,IAAGR,MAAK;AACpB,uBAAS,UAAU,QAAQA,EAAC,IAAIM,QAAO,QAAQN,EAAC;AAChD,kBAAI,QAAQ,GAAG;AACX,0BAAU,QAAQA,EAAC,IAAI,QAAQM;AAC/B,wBAAQ;AAAA,cACZ,OAAO;AACH,0BAAU,QAAQN,EAAC,IAAI;AACvB,wBAAQ;AAAA,cACZ;AAAA,YACJ;AACA,sBAAU;AAAA,UACd;AACA,iBAAO,KAAK,IAAI;AAAA,QACpB;AAEA,oBAAY,YAAY,WAAW,MAAM,EAAE,CAAC;AAC5C,eAAO,CAAC,aAAa,MAAM,GAAG,aAAa,SAAS,CAAC;AAAA,MACzD;AAEA,eAAS,QAAQG,IAAGC,IAAG;AAEnB,YAAI,MAAMD,GAAE,QACR,MAAMC,GAAE,QACR,SAAS,CAAC,GACV,OAAO,CAAC,GACRE,QAAO,MACP,OAAO,MAAM,OAAO,OAAO;AAC/B,eAAO,KAAK;AACR,eAAK,QAAQH,GAAE,EAAE,GAAG,CAAC;AACrB,UAAAJ,MAAK,IAAI;AACT,cAAI,WAAW,MAAMK,EAAC,IAAI,GAAG;AACzB,mBAAO,KAAK,CAAC;AACb;AAAA,UACJ;AACA,iBAAO,KAAK;AACZ,kBAAQ,KAAK,OAAO,CAAC,IAAIE,QAAO,KAAK,OAAO,CAAC;AAC7C,kBAAQF,GAAE,MAAM,CAAC,IAAIE,QAAOF,GAAE,MAAM,CAAC;AACrC,cAAI,OAAO,KAAK;AACZ,qBAAS,QAAQ,KAAKE;AAAA,UAC1B;AACA,kBAAQ,KAAK,KAAK,QAAQ,KAAK;AAC/B,aAAG;AACC,oBAAQ,cAAcF,IAAG,KAAK;AAC9B,gBAAI,WAAW,OAAO,IAAI,KAAK;AAAG;AAClC;AAAA,UACJ,SAAS;AACT,iBAAO,KAAK,KAAK;AACjB,iBAAO,SAAS,MAAM,KAAK;AAAA,QAC/B;AACA,eAAO,QAAQ;AACf,eAAO,CAAC,aAAa,MAAM,GAAG,aAAa,IAAI,CAAC;AAAA,MACpD;AAEA,eAAS,YAAY,OAAO,QAAQ;AAChC,YAAI,SAAS,MAAM,QACf,WAAW,YAAY,MAAM,GAC7BE,QAAO,MACPN,IAAGe,IAAG,WAAW;AACrB,oBAAY;AACZ,aAAKf,KAAI,SAAS,GAAGA,MAAK,GAAG,EAAEA,IAAG;AAC9B,oBAAU,YAAYM,QAAO,MAAMN,EAAC;AACpC,UAAAe,KAAI,SAAS,UAAU,MAAM;AAC7B,sBAAY,UAAUA,KAAI;AAC1B,mBAASf,EAAC,IAAIe,KAAI;AAAA,QACtB;AACA,eAAO,CAAC,UAAU,YAAY,CAAC;AAAA,MACnC;AAEA,eAAS,UAAUC,OAAMnB,IAAG;AACxB,YAAI,OAAOC,KAAI,WAAWD,EAAC;AAC3B,YAAI,sBAAsB;AACtB,iBAAO,CAAC,IAAI,aAAamB,MAAK,QAAQlB,GAAE,KAAK,GAAG,IAAI,aAAakB,MAAK,QAAQlB,GAAE,KAAK,CAAC;AAAA,QAC1F;AACA,YAAIK,KAAIa,MAAK,OAAOZ,KAAIN,GAAE;AAC1B,YAAI;AACJ,YAAIM,OAAM;AAAG,gBAAM,IAAI,MAAM,uBAAuB;AACpD,YAAIY,MAAK,SAAS;AACd,cAAIlB,GAAE,SAAS;AACX,mBAAO,CAAC,IAAI,aAAa,SAASK,KAAIC,EAAC,CAAC,GAAG,IAAI,aAAaD,KAAIC,EAAC,CAAC;AAAA,UACtE;AACA,iBAAO,CAAC,QAAQ,CAAC,GAAGY,KAAI;AAAA,QAC5B;AACA,YAAIlB,GAAE,SAAS;AACX,cAAIM,OAAM;AAAG,mBAAO,CAACY,OAAM,QAAQ,CAAC,CAAC;AACrC,cAAIZ,MAAK;AAAI,mBAAO,CAACY,MAAK,OAAO,GAAG,QAAQ,CAAC,CAAC;AAC9C,cAAI,MAAM,KAAK,IAAIZ,EAAC;AACpB,cAAI,MAAM,MAAM;AACZ,oBAAQ,YAAYD,IAAG,GAAG;AAC1B,uBAAW,aAAa,MAAM,CAAC,CAAC;AAChC,gBAAI,YAAY,MAAM,CAAC;AACvB,gBAAIa,MAAK;AAAM,0BAAY,CAAC;AAC5B,gBAAI,OAAO,aAAa,UAAU;AAC9B,kBAAIA,MAAK,SAASlB,GAAE;AAAM,2BAAW,CAAC;AACtC,qBAAO,CAAC,IAAI,aAAa,QAAQ,GAAG,IAAI,aAAa,SAAS,CAAC;AAAA,YACnE;AACA,mBAAO,CAAC,IAAI,WAAW,UAAUkB,MAAK,SAASlB,GAAE,IAAI,GAAG,IAAI,aAAa,SAAS,CAAC;AAAA,UACvF;AACA,UAAAM,KAAI,aAAa,GAAG;AAAA,QACxB;AACA,YAAI,aAAa,WAAWD,IAAGC,EAAC;AAChC,YAAI,eAAe;AAAI,iBAAO,CAAC,QAAQ,CAAC,GAAGY,KAAI;AAC/C,YAAI,eAAe;AAAG,iBAAO,CAAC,QAAQA,MAAK,SAASlB,GAAE,OAAO,IAAI,EAAE,GAAG,QAAQ,CAAC,CAAC;AAGhF,YAAIK,GAAE,SAASC,GAAE,UAAU;AACvB,kBAAQ,QAAQD,IAAGC,EAAC;AAAA;AACnB,kBAAQ,QAAQD,IAAGC,EAAC;AAEzB,mBAAW,MAAM,CAAC;AAClB,YAAI,QAAQY,MAAK,SAASlB,GAAE,MACxB,MAAM,MAAM,CAAC,GACb,QAAQkB,MAAK;AACjB,YAAI,OAAO,aAAa,UAAU;AAC9B,cAAI;AAAO,uBAAW,CAAC;AACvB,qBAAW,IAAI,aAAa,QAAQ;AAAA,QACxC;AAAO,qBAAW,IAAI,WAAW,UAAU,KAAK;AAChD,YAAI,OAAO,QAAQ,UAAU;AACzB,cAAI;AAAO,kBAAM,CAAC;AAClB,gBAAM,IAAI,aAAa,GAAG;AAAA,QAC9B;AAAO,gBAAM,IAAI,WAAW,KAAK,KAAK;AACtC,eAAO,CAAC,UAAU,GAAG;AAAA,MACzB;AAEA,iBAAW,UAAU,SAAS,SAAUnB,IAAG;AACvC,YAAI,SAAS,UAAU,MAAMA,EAAC;AAC9B,eAAO;AAAA,UACH,UAAU,OAAO,CAAC;AAAA,UAClB,WAAW,OAAO,CAAC;AAAA,QACvB;AAAA,MACJ;AACA,mBAAa,UAAU,SAAS,aAAa,UAAU,SAAS,WAAW,UAAU;AAGrF,iBAAW,UAAU,SAAS,SAAUA,IAAG;AACvC,eAAO,UAAU,MAAMA,EAAC,EAAE,CAAC;AAAA,MAC/B;AACA,mBAAa,UAAU,OAAO,aAAa,UAAU,SAAS,SAAUA,IAAG;AACvE,eAAO,IAAI,aAAa,KAAK,QAAQ,WAAWA,EAAC,EAAE,KAAK;AAAA,MAC5D;AACA,mBAAa,UAAU,OAAO,aAAa,UAAU,SAAS,WAAW,UAAU,OAAO,WAAW,UAAU;AAE/G,iBAAW,UAAU,MAAM,SAAUA,IAAG;AACpC,eAAO,UAAU,MAAMA,EAAC,EAAE,CAAC;AAAA,MAC/B;AACA,mBAAa,UAAU,MAAM,aAAa,UAAU,YAAY,SAAUA,IAAG;AACzE,eAAO,IAAI,aAAa,KAAK,QAAQ,WAAWA,EAAC,EAAE,KAAK;AAAA,MAC5D;AACA,mBAAa,UAAU,YAAY,aAAa,UAAU,MAAM,WAAW,UAAU,YAAY,WAAW,UAAU;AAEtH,iBAAW,UAAU,MAAM,SAAUA,IAAG;AACpC,YAAIC,KAAI,WAAWD,EAAC,GAChBM,KAAI,KAAK,OACTC,KAAIN,GAAE,OACN,OAAOG,IAAGU;AACd,YAAIP,OAAM;AAAG,iBAAO,QAAQ,CAAC;AAC7B,YAAID,OAAM;AAAG,iBAAO,QAAQ,CAAC;AAC7B,YAAIA,OAAM;AAAG,iBAAO,QAAQ,CAAC;AAC7B,YAAIA,OAAM;AAAI,iBAAOL,GAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,QAAQ,EAAE;AACzD,YAAIA,GAAE,MAAM;AACR,iBAAO,QAAQ,CAAC;AAAA,QACpB;AACA,YAAI,CAACA,GAAE;AAAS,gBAAM,IAAI,MAAM,kBAAkBA,GAAE,SAAS,IAAI,gBAAgB;AACjF,YAAI,KAAK,SAAS;AACd,cAAI,UAAU,QAAQ,KAAK,IAAIK,IAAGC,EAAC,CAAC;AAChC,mBAAO,IAAI,aAAa,SAAS,KAAK,CAAC;AAAA,QAC/C;AACA,QAAAH,KAAI;AACJ,QAAAU,KAAI,QAAQ,CAAC;AACb,eAAO,MAAM;AACT,cAAIP,KAAI,MAAS;AACb,YAAAO,KAAIA,GAAE,MAAMV,EAAC;AACb,cAAEG;AAAA,UACN;AACA,cAAIA,OAAM;AAAG;AACb,UAAAA,MAAK;AACL,UAAAH,KAAIA,GAAE,OAAO;AAAA,QACjB;AACA,eAAOU;AAAA,MACX;AACA,mBAAa,UAAU,MAAM,WAAW,UAAU;AAElD,mBAAa,UAAU,MAAM,SAAUd,IAAG;AACtC,YAAIC,KAAI,WAAWD,EAAC;AACpB,YAAIM,KAAI,KAAK,OAAOC,KAAIN,GAAE;AAC1B,YAAI,KAAK,OAAO,CAAC,GAAG,KAAK,OAAO,CAAC,GAAGmB,MAAK,OAAO,CAAC;AACjD,YAAIb,OAAM;AAAI,iBAAO,QAAQ,CAAC;AAC9B,YAAID,OAAM;AAAI,iBAAO,QAAQ,CAAC;AAC9B,YAAIA,OAAM;AAAI,iBAAO,QAAQ,CAAC;AAC9B,YAAIA,OAAM,OAAO,EAAE;AAAG,iBAAOL,GAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,QAAQ,EAAE;AACjE,YAAIA,GAAE,WAAW;AAAG,iBAAO,IAAI,aAAa,EAAE;AAC9C,YAAIG,KAAI;AACR,YAAIU,KAAI,QAAQ,CAAC;AACjB,eAAO,MAAM;AACT,eAAKP,KAAI,QAAQ,IAAI;AACjB,YAAAO,KAAIA,GAAE,MAAMV,EAAC;AACb,cAAEG;AAAA,UACN;AACA,cAAIA,OAAM;AAAI;AACd,UAAAA,MAAKa;AACL,UAAAhB,KAAIA,GAAE,OAAO;AAAA,QACjB;AACA,eAAOU;AAAA,MACX;AAEA,iBAAW,UAAU,SAAS,SAAU,KAAK,KAAK;AAC9C,cAAM,WAAW,GAAG;AACpB,cAAM,WAAW,GAAG;AACpB,YAAI,IAAI,OAAO;AAAG,gBAAM,IAAI,MAAM,mCAAmC;AACrE,YAAIN,KAAI,QAAQ,CAAC,GACbC,QAAO,KAAK,IAAI,GAAG;AACvB,YAAI,IAAI,WAAW,GAAG;AAClB,gBAAM,IAAI,SAAS,QAAQ,EAAE,CAAC;AAC9B,UAAAA,QAAOA,MAAK,OAAO,GAAG;AAAA,QAC1B;AACA,eAAO,IAAI,WAAW,GAAG;AACrB,cAAIA,MAAK,OAAO;AAAG,mBAAO,QAAQ,CAAC;AACnC,cAAI,IAAI,MAAM;AAAG,YAAAD,KAAIA,GAAE,SAASC,KAAI,EAAE,IAAI,GAAG;AAC7C,gBAAM,IAAI,OAAO,CAAC;AAClB,UAAAA,QAAOA,MAAK,OAAO,EAAE,IAAI,GAAG;AAAA,QAChC;AACA,eAAOD;AAAA,MACX;AACA,mBAAa,UAAU,SAAS,aAAa,UAAU,SAAS,WAAW,UAAU;AAErF,eAAS,WAAWF,IAAGC,IAAG;AACtB,YAAID,GAAE,WAAWC,GAAE,QAAQ;AACvB,iBAAOD,GAAE,SAASC,GAAE,SAAS,IAAI;AAAA,QACrC;AACA,iBAASJ,KAAIG,GAAE,SAAS,GAAGH,MAAK,GAAGA,MAAK;AACpC,cAAIG,GAAEH,EAAC,MAAMI,GAAEJ,EAAC;AAAG,mBAAOG,GAAEH,EAAC,IAAII,GAAEJ,EAAC,IAAI,IAAI;AAAA,QAChD;AACA,eAAO;AAAA,MACX;AAEA,iBAAW,UAAU,aAAa,SAAUH,IAAG;AAC3C,YAAIC,KAAI,WAAWD,EAAC,GAChBM,KAAI,KAAK,OACTC,KAAIN,GAAE;AACV,YAAIA,GAAE;AAAS,iBAAO;AACtB,eAAO,WAAWK,IAAGC,EAAC;AAAA,MAC1B;AACA,mBAAa,UAAU,aAAa,SAAUP,IAAG;AAC7C,YAAIC,KAAI,WAAWD,EAAC,GAChBM,KAAI,KAAK,IAAI,KAAK,KAAK,GACvBC,KAAIN,GAAE;AACV,YAAIA,GAAE,SAAS;AACX,UAAAM,KAAI,KAAK,IAAIA,EAAC;AACd,iBAAOD,OAAMC,KAAI,IAAID,KAAIC,KAAI,IAAI;AAAA,QACrC;AACA,eAAO;AAAA,MACX;AACA,mBAAa,UAAU,aAAa,SAAUP,IAAG;AAC7C,YAAIM,KAAI,KAAK;AACb,YAAIC,KAAI,WAAWP,EAAC,EAAE;AACtB,QAAAM,KAAIA,MAAK,IAAIA,KAAI,CAACA;AAClB,QAAAC,KAAIA,MAAK,IAAIA,KAAI,CAACA;AAClB,eAAOD,OAAMC,KAAI,IAAID,KAAIC,KAAI,IAAI;AAAA,MACrC;AAEA,iBAAW,UAAU,UAAU,SAAUP,IAAG;AAGxC,YAAIA,OAAM,UAAU;AAChB,iBAAO;AAAA,QACX;AACA,YAAIA,OAAM,WAAW;AACjB,iBAAO;AAAA,QACX;AAEA,YAAIC,KAAI,WAAWD,EAAC,GAChBM,KAAI,KAAK,OACTC,KAAIN,GAAE;AACV,YAAI,KAAK,SAASA,GAAE,MAAM;AACtB,iBAAOA,GAAE,OAAO,IAAI;AAAA,QACxB;AACA,YAAIA,GAAE,SAAS;AACX,iBAAO,KAAK,OAAO,KAAK;AAAA,QAC5B;AACA,eAAO,WAAWK,IAAGC,EAAC,KAAK,KAAK,OAAO,KAAK;AAAA,MAChD;AACA,iBAAW,UAAU,YAAY,WAAW,UAAU;AAEtD,mBAAa,UAAU,UAAU,SAAUP,IAAG;AAC1C,YAAIA,OAAM,UAAU;AAChB,iBAAO;AAAA,QACX;AACA,YAAIA,OAAM,WAAW;AACjB,iBAAO;AAAA,QACX;AAEA,YAAIC,KAAI,WAAWD,EAAC,GAChBM,KAAI,KAAK,OACTC,KAAIN,GAAE;AACV,YAAIA,GAAE,SAAS;AACX,iBAAOK,MAAKC,KAAI,IAAID,KAAIC,KAAI,IAAI;AAAA,QACpC;AACA,YAAID,KAAI,MAAML,GAAE,MAAM;AAClB,iBAAOK,KAAI,IAAI,KAAK;AAAA,QACxB;AACA,eAAOA,KAAI,IAAI,IAAI;AAAA,MACvB;AACA,mBAAa,UAAU,YAAY,aAAa,UAAU;AAE1D,mBAAa,UAAU,UAAU,SAAUN,IAAG;AAC1C,YAAIA,OAAM,UAAU;AAChB,iBAAO;AAAA,QACX;AACA,YAAIA,OAAM,WAAW;AACjB,iBAAO;AAAA,QACX;AACA,YAAIM,KAAI,KAAK;AACb,YAAIC,KAAI,WAAWP,EAAC,EAAE;AACtB,eAAOM,OAAMC,KAAI,IAAID,KAAIC,KAAI,IAAI;AAAA,MACrC;AACA,mBAAa,UAAU,YAAY,aAAa,UAAU;AAE1D,iBAAW,UAAU,SAAS,SAAUP,IAAG;AACvC,eAAO,KAAK,QAAQA,EAAC,MAAM;AAAA,MAC/B;AACA,mBAAa,UAAU,KAAK,aAAa,UAAU,SAAS,aAAa,UAAU,KAAK,aAAa,UAAU,SAAS,WAAW,UAAU,KAAK,WAAW,UAAU;AAEvK,iBAAW,UAAU,YAAY,SAAUA,IAAG;AAC1C,eAAO,KAAK,QAAQA,EAAC,MAAM;AAAA,MAC/B;AACA,mBAAa,UAAU,MAAM,aAAa,UAAU,YAAY,aAAa,UAAU,MAAM,aAAa,UAAU,YAAY,WAAW,UAAU,MAAM,WAAW,UAAU;AAEhL,iBAAW,UAAU,UAAU,SAAUA,IAAG;AACxC,eAAO,KAAK,QAAQA,EAAC,IAAI;AAAA,MAC7B;AACA,mBAAa,UAAU,KAAK,aAAa,UAAU,UAAU,aAAa,UAAU,KAAK,aAAa,UAAU,UAAU,WAAW,UAAU,KAAK,WAAW,UAAU;AAEzK,iBAAW,UAAU,SAAS,SAAUA,IAAG;AACvC,eAAO,KAAK,QAAQA,EAAC,IAAI;AAAA,MAC7B;AACA,mBAAa,UAAU,KAAK,aAAa,UAAU,SAAS,aAAa,UAAU,KAAK,aAAa,UAAU,SAAS,WAAW,UAAU,KAAK,WAAW,UAAU;AAEvK,iBAAW,UAAU,kBAAkB,SAAUA,IAAG;AAChD,eAAO,KAAK,QAAQA,EAAC,KAAK;AAAA,MAC9B;AACA,mBAAa,UAAU,MAAM,aAAa,UAAU,kBAAkB,aAAa,UAAU,MAAM,aAAa,UAAU,kBAAkB,WAAW,UAAU,MAAM,WAAW,UAAU;AAE5L,iBAAW,UAAU,iBAAiB,SAAUA,IAAG;AAC/C,eAAO,KAAK,QAAQA,EAAC,KAAK;AAAA,MAC9B;AACA,mBAAa,UAAU,MAAM,aAAa,UAAU,iBAAiB,aAAa,UAAU,MAAM,aAAa,UAAU,iBAAiB,WAAW,UAAU,MAAM,WAAW,UAAU;AAE1L,iBAAW,UAAU,SAAS,WAAY;AACtC,gBAAQ,KAAK,MAAM,CAAC,IAAI,OAAO;AAAA,MACnC;AACA,mBAAa,UAAU,SAAS,WAAY;AACxC,gBAAQ,KAAK,QAAQ,OAAO;AAAA,MAChC;AACA,mBAAa,UAAU,SAAS,WAAY;AACxC,gBAAQ,KAAK,QAAQ,OAAO,CAAC,OAAO,OAAO,CAAC;AAAA,MAChD;AAEA,iBAAW,UAAU,QAAQ,WAAY;AACrC,gBAAQ,KAAK,MAAM,CAAC,IAAI,OAAO;AAAA,MACnC;AACA,mBAAa,UAAU,QAAQ,WAAY;AACvC,gBAAQ,KAAK,QAAQ,OAAO;AAAA,MAChC;AACA,mBAAa,UAAU,QAAQ,WAAY;AACvC,gBAAQ,KAAK,QAAQ,OAAO,CAAC,OAAO,OAAO,CAAC;AAAA,MAChD;AAEA,iBAAW,UAAU,aAAa,WAAY;AAC1C,eAAO,CAAC,KAAK;AAAA,MACjB;AACA,mBAAa,UAAU,aAAa,WAAY;AAC5C,eAAO,KAAK,QAAQ;AAAA,MACxB;AACA,mBAAa,UAAU,aAAa,aAAa,UAAU;AAE3D,iBAAW,UAAU,aAAa,WAAY;AAC1C,eAAO,KAAK;AAAA,MAChB;AACA,mBAAa,UAAU,aAAa,WAAY;AAC5C,eAAO,KAAK,QAAQ;AAAA,MACxB;AACA,mBAAa,UAAU,aAAa,aAAa,UAAU;AAE3D,iBAAW,UAAU,SAAS,WAAY;AACtC,eAAO;AAAA,MACX;AACA,mBAAa,UAAU,SAAS,WAAY;AACxC,eAAO,KAAK,IAAI,KAAK,KAAK,MAAM;AAAA,MACpC;AACA,mBAAa,UAAU,SAAS,WAAY;AACxC,eAAO,KAAK,IAAI,EAAE,UAAU,OAAO,CAAC;AAAA,MACxC;AAEA,iBAAW,UAAU,SAAS,WAAY;AACtC,eAAO;AAAA,MACX;AACA,mBAAa,UAAU,SAAS,WAAY;AACxC,eAAO,KAAK,UAAU;AAAA,MAC1B;AACA,mBAAa,UAAU,SAAS,WAAY;AACxC,eAAO,KAAK,UAAU,OAAO,CAAC;AAAA,MAClC;AAEA,iBAAW,UAAU,gBAAgB,SAAUA,IAAG;AAC9C,YAAIC,KAAI,WAAWD,EAAC;AACpB,YAAIC,GAAE,OAAO;AAAG,iBAAO;AACvB,YAAIA,GAAE,OAAO;AAAG,iBAAO;AACvB,YAAIA,GAAE,WAAW,CAAC,MAAM;AAAG,iBAAO,KAAK,OAAO;AAC9C,eAAO,KAAK,IAAIA,EAAC,EAAE,OAAO;AAAA,MAC9B;AACA,mBAAa,UAAU,gBAAgB,aAAa,UAAU,gBAAgB,WAAW,UAAU;AAEnG,eAAS,aAAaD,IAAG;AACrB,YAAIC,KAAID,GAAE,IAAI;AACd,YAAIC,GAAE,OAAO;AAAG,iBAAO;AACvB,YAAIA,GAAE,OAAO,CAAC,KAAKA,GAAE,OAAO,CAAC,KAAKA,GAAE,OAAO,CAAC;AAAG,iBAAO;AACtD,YAAIA,GAAE,OAAO,KAAKA,GAAE,cAAc,CAAC,KAAKA,GAAE,cAAc,CAAC;AAAG,iBAAO;AACnE,YAAIA,GAAE,OAAO,EAAE;AAAG,iBAAO;AAAA,MAE7B;AAEA,eAAS,gBAAgBA,IAAGK,IAAG;AAC3B,YAAI,QAAQL,GAAE,KAAK,GACfM,KAAI,OACJC,KAAI,GACJO,IAAGM,IAAGlB,IAAGC;AACb,eAAOG,GAAE,OAAO;AAAG,UAAAA,KAAIA,GAAE,OAAO,CAAC,GAAGC;AACpC;AAAM,eAAKL,KAAI,GAAGA,KAAIG,GAAE,QAAQH,MAAK;AACjC,gBAAIF,GAAE,OAAOK,GAAEH,EAAC,CAAC;AAAG;AACpB,YAAAC,KAAI,OAAOE,GAAEH,EAAC,CAAC,EAAE,OAAOI,IAAGN,EAAC;AAC5B,gBAAIG,GAAE,OAAO,KAAKA,GAAE,OAAO,KAAK;AAAG;AACnC,iBAAKW,KAAIP,KAAI,GAAGO,MAAK,GAAGA,MAAK;AACzB,cAAAX,KAAIA,GAAE,OAAO,EAAE,IAAIH,EAAC;AACpB,kBAAIG,GAAE,OAAO;AAAG,uBAAO;AACvB,kBAAIA,GAAE,OAAO,KAAK;AAAG,yBAAS;AAAA,YAClC;AACA,mBAAO;AAAA,UACX;AACA,eAAO;AAAA,MACX;AAGA,iBAAW,UAAU,UAAU,SAAU,QAAQ;AAC7C,YAAI,UAAU,aAAa,IAAI;AAC/B,YAAI,YAAYL;AAAW,iBAAO;AAClC,YAAIE,KAAI,KAAK,IAAI;AACjB,YAAI,OAAOA,GAAE,UAAU;AACvB,YAAI,QAAQ;AACR,iBAAO,gBAAgBA,IAAG,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;AAC1E,YAAI,OAAO,KAAK,IAAI,CAAC,IAAI,KAAK,WAAW;AACzC,YAAIoB,KAAI,KAAK,KAAM,WAAW,OAAS,IAAI,KAAK,IAAI,MAAM,CAAC,IAAK,IAAI;AACpE,iBAASf,KAAI,CAAC,GAAGH,KAAI,GAAGA,KAAIkB,IAAGlB,MAAK;AAChC,UAAAG,GAAE,KAAK,OAAOH,KAAI,CAAC,CAAC;AAAA,QACxB;AACA,eAAO,gBAAgBF,IAAGK,EAAC;AAAA,MAC/B;AACA,mBAAa,UAAU,UAAU,aAAa,UAAU,UAAU,WAAW,UAAU;AAEvF,iBAAW,UAAU,kBAAkB,SAAU,YAAY,KAAK;AAC9D,YAAI,UAAU,aAAa,IAAI;AAC/B,YAAI,YAAYP;AAAW,iBAAO;AAClC,YAAIE,KAAI,KAAK,IAAI;AACjB,YAAIoB,KAAI,eAAetB,aAAY,IAAI;AACvC,iBAASO,KAAI,CAAC,GAAGH,KAAI,GAAGA,KAAIkB,IAAGlB,MAAK;AAChC,UAAAG,GAAE,KAAK,OAAO,YAAY,GAAGL,GAAE,MAAM,CAAC,GAAG,GAAG,CAAC;AAAA,QACjD;AACA,eAAO,gBAAgBA,IAAGK,EAAC;AAAA,MAC/B;AACA,mBAAa,UAAU,kBAAkB,aAAa,UAAU,kBAAkB,WAAW,UAAU;AAEvG,iBAAW,UAAU,SAAS,SAAUL,IAAG;AACvC,YAAIoB,KAAI,OAAO,MAAM,OAAO,OAAO,KAAKb,KAAI,WAAWP,EAAC,GAAG,OAAO,KAAK,IAAI,GAAGiB,IAAG,OAAO;AACxF,eAAO,CAAC,KAAK,OAAO,GAAG;AACnB,UAAAA,KAAIV,GAAE,OAAO,IAAI;AACjB,kBAAQa;AACR,kBAAQb;AACR,UAAAa,KAAI;AACJ,UAAAb,KAAI;AACJ,iBAAO,MAAM,SAASU,GAAE,SAAS,IAAI,CAAC;AACtC,iBAAO,MAAM,SAASA,GAAE,SAAS,IAAI,CAAC;AAAA,QAC1C;AACA,YAAI,CAACV,GAAE,OAAO;AAAG,gBAAM,IAAI,MAAM,KAAK,SAAS,IAAI,UAAUP,GAAE,SAAS,IAAI,mBAAmB;AAC/F,YAAIoB,GAAE,QAAQ,CAAC,MAAM,IAAI;AACrB,UAAAA,KAAIA,GAAE,IAAIpB,EAAC;AAAA,QACf;AACA,YAAI,KAAK,WAAW,GAAG;AACnB,iBAAOoB,GAAE,OAAO;AAAA,QACpB;AACA,eAAOA;AAAA,MACX;AAEA,mBAAa,UAAU,SAAS,aAAa,UAAU,SAAS,WAAW,UAAU;AAErF,iBAAW,UAAU,OAAO,WAAY;AACpC,YAAI,QAAQ,KAAK;AACjB,YAAI,KAAK,MAAM;AACX,iBAAO,cAAc,OAAO,GAAG,KAAK,IAAI;AAAA,QAC5C;AACA,eAAO,IAAI,WAAW,SAAS,OAAO,CAAC,GAAG,KAAK,IAAI;AAAA,MACvD;AACA,mBAAa,UAAU,OAAO,WAAY;AACtC,YAAI,QAAQ,KAAK;AACjB,YAAI,QAAQ,IAAI;AAAS,iBAAO,IAAI,aAAa,QAAQ,CAAC;AAC1D,eAAO,IAAI,WAAW,aAAa,KAAK;AAAA,MAC5C;AACA,mBAAa,UAAU,OAAO,WAAY;AACtC,eAAO,IAAI,aAAa,KAAK,QAAQ,OAAO,CAAC,CAAC;AAAA,MAClD;AAEA,iBAAW,UAAU,OAAO,WAAY;AACpC,YAAI,QAAQ,KAAK;AACjB,YAAI,KAAK,MAAM;AACX,iBAAO,IAAI,WAAW,SAAS,OAAO,CAAC,GAAG,IAAI;AAAA,QAClD;AACA,eAAO,cAAc,OAAO,GAAG,KAAK,IAAI;AAAA,MAC5C;AACA,mBAAa,UAAU,OAAO,WAAY;AACtC,YAAI,QAAQ,KAAK;AACjB,YAAI,QAAQ,IAAI,CAAC;AAAS,iBAAO,IAAI,aAAa,QAAQ,CAAC;AAC3D,eAAO,IAAI,WAAW,aAAa,IAAI;AAAA,MAC3C;AACA,mBAAa,UAAU,OAAO,WAAY;AACtC,eAAO,IAAI,aAAa,KAAK,QAAQ,OAAO,CAAC,CAAC;AAAA,MAClD;AAEA,UAAI,cAAc,CAAC,CAAC;AACpB,aAAO,IAAI,YAAY,YAAY,SAAS,CAAC,KAAK;AAAM,oBAAY,KAAK,IAAI,YAAY,YAAY,SAAS,CAAC,CAAC;AAChH,UAAI,gBAAgB,YAAY,QAAQ,gBAAgB,YAAY,gBAAgB,CAAC;AAErF,eAAS,cAAcpB,IAAG;AACtB,eAAO,KAAK,IAAIA,EAAC,KAAK;AAAA,MAC1B;AAEA,iBAAW,UAAU,YAAY,SAAUD,IAAG;AAC1C,YAAIC,KAAI,WAAWD,EAAC,EAAE,WAAW;AACjC,YAAI,CAAC,cAAcC,EAAC,GAAG;AACnB,gBAAM,IAAI,MAAM,OAAOA,EAAC,IAAI,6BAA6B;AAAA,QAC7D;AACA,YAAIA,KAAI;AAAG,iBAAO,KAAK,WAAW,CAACA,EAAC;AACpC,YAAI,SAAS;AACb,YAAI,OAAO,OAAO;AAAG,iBAAO;AAC5B,eAAOA,MAAK,eAAe;AACvB,mBAAS,OAAO,SAAS,aAAa;AACtC,UAAAA,MAAK,gBAAgB;AAAA,QACzB;AACA,eAAO,OAAO,SAAS,YAAYA,EAAC,CAAC;AAAA,MACzC;AACA,mBAAa,UAAU,YAAY,aAAa,UAAU,YAAY,WAAW,UAAU;AAE3F,iBAAW,UAAU,aAAa,SAAUD,IAAG;AAC3C,YAAI;AACJ,YAAIC,KAAI,WAAWD,EAAC,EAAE,WAAW;AACjC,YAAI,CAAC,cAAcC,EAAC,GAAG;AACnB,gBAAM,IAAI,MAAM,OAAOA,EAAC,IAAI,6BAA6B;AAAA,QAC7D;AACA,YAAIA,KAAI;AAAG,iBAAO,KAAK,UAAU,CAACA,EAAC;AACnC,YAAI,SAAS;AACb,eAAOA,MAAK,eAAe;AACvB,cAAI,OAAO,OAAO,KAAM,OAAO,WAAW,KAAK,OAAO,OAAO;AAAI,mBAAO;AACxE,mBAAS,UAAU,QAAQ,aAAa;AACxC,mBAAS,OAAO,CAAC,EAAE,WAAW,IAAI,OAAO,CAAC,EAAE,KAAK,IAAI,OAAO,CAAC;AAC7D,UAAAA,MAAK,gBAAgB;AAAA,QACzB;AACA,iBAAS,UAAU,QAAQ,YAAYA,EAAC,CAAC;AACzC,eAAO,OAAO,CAAC,EAAE,WAAW,IAAI,OAAO,CAAC,EAAE,KAAK,IAAI,OAAO,CAAC;AAAA,MAC/D;AACA,mBAAa,UAAU,aAAa,aAAa,UAAU,aAAa,WAAW,UAAU;AAE7F,eAAS,QAAQG,IAAGU,IAAG,IAAI;AACvB,QAAAA,KAAI,WAAWA,EAAC;AAChB,YAAI,QAAQV,GAAE,WAAW,GAAG,QAAQU,GAAE,WAAW;AACjD,YAAI,OAAO,QAAQV,GAAE,IAAI,IAAIA,IACzB,OAAO,QAAQU,GAAE,IAAI,IAAIA;AAC7B,YAAI,SAAS,GAAG,SAAS;AACzB,YAAI,UAAU,MAAM,UAAU;AAC9B,YAAI,SAAS,CAAC;AACd,eAAO,CAAC,KAAK,OAAO,KAAK,CAAC,KAAK,OAAO,GAAG;AACrC,oBAAU,UAAU,MAAM,aAAa;AACvC,mBAAS,QAAQ,CAAC,EAAE,WAAW;AAC/B,cAAI,OAAO;AACP,qBAAS,gBAAgB,IAAI;AAAA,UACjC;AAEA,oBAAU,UAAU,MAAM,aAAa;AACvC,mBAAS,QAAQ,CAAC,EAAE,WAAW;AAC/B,cAAI,OAAO;AACP,qBAAS,gBAAgB,IAAI;AAAA,UACjC;AAEA,iBAAO,QAAQ,CAAC;AAChB,iBAAO,QAAQ,CAAC;AAChB,iBAAO,KAAK,GAAG,QAAQ,MAAM,CAAC;AAAA,QAClC;AACA,YAAIJ,OAAM,GAAG,QAAQ,IAAI,GAAG,QAAQ,IAAI,CAAC,MAAM,IAAI,OAAO,EAAE,IAAI,OAAO,CAAC;AACxE,iBAASP,KAAI,OAAO,SAAS,GAAGA,MAAK,GAAGA,MAAK,GAAG;AAC5C,UAAAO,OAAMA,KAAI,SAAS,aAAa,EAAE,IAAI,OAAO,OAAOP,EAAC,CAAC,CAAC;AAAA,QAC3D;AACA,eAAOO;AAAA,MACX;AAEA,iBAAW,UAAU,MAAM,WAAY;AACnC,eAAO,KAAK,OAAO,EAAE,KAAK;AAAA,MAC9B;AACA,mBAAa,UAAU,MAAM,aAAa,UAAU,MAAM,WAAW,UAAU;AAE/E,iBAAW,UAAU,MAAM,SAAUT,IAAG;AACpC,eAAO,QAAQ,MAAMA,IAAG,SAAUK,IAAGC,IAAG;AAAE,iBAAOD,KAAIC;AAAA,QAAG,CAAC;AAAA,MAC7D;AACA,mBAAa,UAAU,MAAM,aAAa,UAAU,MAAM,WAAW,UAAU;AAE/E,iBAAW,UAAU,KAAK,SAAUN,IAAG;AACnC,eAAO,QAAQ,MAAMA,IAAG,SAAUK,IAAGC,IAAG;AAAE,iBAAOD,KAAIC;AAAA,QAAG,CAAC;AAAA,MAC7D;AACA,mBAAa,UAAU,KAAK,aAAa,UAAU,KAAK,WAAW,UAAU;AAE7E,iBAAW,UAAU,MAAM,SAAUN,IAAG;AACpC,eAAO,QAAQ,MAAMA,IAAG,SAAUK,IAAGC,IAAG;AAAE,iBAAOD,KAAIC;AAAA,QAAG,CAAC;AAAA,MAC7D;AACA,mBAAa,UAAU,MAAM,aAAa,UAAU,MAAM,WAAW,UAAU;AAE/E,UAAI,YAAY,KAAK,IAAI,cAAc,OAAO,CAAC,SAAS,OAAO,CAAC,QAAQ;AACxE,eAAS,SAASN,IAAG;AAGjB,YAAID,KAAIC,GAAE,OACNG,KAAI,OAAOJ,OAAM,WAAWA,KAAI,YAC5B,OAAOA,OAAM,WAAWA,KAAI,OAAO,SAAS,IACxCA,GAAE,CAAC,IAAIA,GAAE,CAAC,IAAI,OAAO;AACjC,eAAOI,KAAI,CAACA;AAAA,MAChB;AAEA,eAAS,iBAAiB,OAAOK,OAAM;AACnC,YAAIA,MAAK,UAAU,KAAK,KAAK,GAAG;AAC5B,cAAI,MAAM,iBAAiB,OAAOA,MAAK,OAAOA,KAAI,CAAC;AACnD,cAAIa,KAAI,IAAI;AACZ,cAAIC,KAAI,IAAI;AACZ,cAAIF,KAAIC,GAAE,SAASb,KAAI;AACvB,iBAAOY,GAAE,UAAU,KAAK,KAAK,IAAI,EAAE,GAAGA,IAAG,GAAGE,KAAI,IAAI,EAAE,IAAI,EAAE,GAAGD,IAAG,GAAGC,KAAI,EAAE;AAAA,QAC/E;AACA,eAAO,EAAE,GAAG,OAAO,CAAC,GAAG,GAAG,EAAE;AAAA,MAChC;AAEA,iBAAW,UAAU,YAAY,WAAY;AACzC,YAAItB,KAAI;AACR,YAAIA,GAAE,UAAU,OAAO,CAAC,CAAC,IAAI,GAAG;AAC5B,UAAAA,KAAIA,GAAE,OAAO,EAAE,SAAS,OAAO,CAAC,CAAC;AAAA,QACrC;AACA,YAAIA,GAAE,UAAU,OAAO,CAAC,CAAC,MAAM,GAAG;AAC9B,iBAAO,OAAO,CAAC;AAAA,QACnB;AACA,eAAO,OAAO,iBAAiBA,IAAG,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC;AAAA,MACjE;AACA,mBAAa,UAAU,YAAY,aAAa,UAAU,YAAY,WAAW,UAAU;AAE3F,eAAS,IAAIK,IAAGC,IAAG;AACf,QAAAD,KAAI,WAAWA,EAAC;AAChB,QAAAC,KAAI,WAAWA,EAAC;AAChB,eAAOD,GAAE,QAAQC,EAAC,IAAID,KAAIC;AAAA,MAC9B;AACA,eAAS,IAAID,IAAGC,IAAG;AACf,QAAAD,KAAI,WAAWA,EAAC;AAChB,QAAAC,KAAI,WAAWA,EAAC;AAChB,eAAOD,GAAE,OAAOC,EAAC,IAAID,KAAIC;AAAA,MAC7B;AACA,eAAS,IAAID,IAAGC,IAAG;AACf,QAAAD,KAAI,WAAWA,EAAC,EAAE,IAAI;AACtB,QAAAC,KAAI,WAAWA,EAAC,EAAE,IAAI;AACtB,YAAID,GAAE,OAAOC,EAAC;AAAG,iBAAOD;AACxB,YAAIA,GAAE,OAAO;AAAG,iBAAOC;AACvB,YAAIA,GAAE,OAAO;AAAG,iBAAOD;AACvB,YAAIU,KAAI,QAAQ,CAAC,GAAGD,IAAGM;AACvB,eAAOf,GAAE,OAAO,KAAKC,GAAE,OAAO,GAAG;AAC7B,UAAAQ,KAAI,IAAI,SAAST,EAAC,GAAG,SAASC,EAAC,CAAC;AAChC,UAAAD,KAAIA,GAAE,OAAOS,EAAC;AACd,UAAAR,KAAIA,GAAE,OAAOQ,EAAC;AACd,UAAAC,KAAIA,GAAE,SAASD,EAAC;AAAA,QACpB;AACA,eAAOT,GAAE,OAAO,GAAG;AACf,UAAAA,KAAIA,GAAE,OAAO,SAASA,EAAC,CAAC;AAAA,QAC5B;AACA,WAAG;AACC,iBAAOC,GAAE,OAAO,GAAG;AACf,YAAAA,KAAIA,GAAE,OAAO,SAASA,EAAC,CAAC;AAAA,UAC5B;AACA,cAAID,GAAE,QAAQC,EAAC,GAAG;AACd,YAAAc,KAAId;AAAG,YAAAA,KAAID;AAAG,YAAAA,KAAIe;AAAA,UACtB;AACA,UAAAd,KAAIA,GAAE,SAASD,EAAC;AAAA,QACpB,SAAS,CAACC,GAAE,OAAO;AACnB,eAAOS,GAAE,OAAO,IAAIV,KAAIA,GAAE,SAASU,EAAC;AAAA,MACxC;AACA,eAAS,IAAIV,IAAGC,IAAG;AACf,QAAAD,KAAI,WAAWA,EAAC,EAAE,IAAI;AACtB,QAAAC,KAAI,WAAWA,EAAC,EAAE,IAAI;AACtB,eAAOD,GAAE,OAAO,IAAIA,IAAGC,EAAC,CAAC,EAAE,SAASA,EAAC;AAAA,MACzC;AACA,eAAS,YAAYD,IAAGC,IAAG,KAAK;AAC5B,QAAAD,KAAI,WAAWA,EAAC;AAChB,QAAAC,KAAI,WAAWA,EAAC;AAChB,YAAI,UAAU,OAAO,KAAK;AAC1B,YAAI,MAAM,IAAID,IAAGC,EAAC,GAAG,OAAO,IAAID,IAAGC,EAAC;AACpC,YAAI,QAAQ,KAAK,SAAS,GAAG,EAAE,IAAI,CAAC;AACpC,YAAI,MAAM;AAAS,iBAAO,IAAI,IAAI,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC;AAC/D,YAAI,SAAS,OAAO,OAAO,IAAI,EAAE;AACjC,YAAI,SAAS,CAAC,GAAG,aAAa;AAC9B,iBAASJ,KAAI,GAAGA,KAAI,OAAO,QAAQA,MAAK;AACpC,cAAI,MAAM,aAAa,OAAOA,EAAC,KAAKA,KAAI,IAAI,OAAO,SAAS,OAAOA,KAAI,CAAC,IAAI,OAAO,KAAK;AACxF,cAAI,QAAQ,SAAS,QAAQ,IAAI,GAAG;AACpC,iBAAO,KAAK,KAAK;AACjB,cAAI,QAAQ,OAAOA,EAAC;AAAG,yBAAa;AAAA,QACxC;AACA,eAAO,IAAI,IAAI,QAAQ,UAAU,QAAQ,MAAM,KAAK,CAAC;AAAA,MACzD;AAEA,UAAI,YAAY,SAAU,MAAMM,OAAM,UAAU,eAAe;AAC3D,mBAAW,YAAY;AACvB,eAAO,OAAO,IAAI;AAClB,YAAI,CAAC,eAAe;AAChB,iBAAO,KAAK,YAAY;AACxB,qBAAW,SAAS,YAAY;AAAA,QACpC;AACA,YAAI,SAAS,KAAK;AAClB,YAAIN;AACJ,YAAI,UAAU,KAAK,IAAIM,KAAI;AAC3B,YAAI,iBAAiB,CAAC;AACtB,aAAKN,KAAI,GAAGA,KAAI,SAAS,QAAQA,MAAK;AAClC,yBAAe,SAASA,EAAC,CAAC,IAAIA;AAAA,QAClC;AACA,aAAKA,KAAI,GAAGA,KAAI,QAAQA,MAAK;AACzB,cAAIa,KAAI,KAAKb,EAAC;AACd,cAAIa,OAAM;AAAK;AACf,cAAIA,MAAK,gBAAgB;AACrB,gBAAI,eAAeA,EAAC,KAAK,SAAS;AAC9B,kBAAIA,OAAM,OAAO,YAAY;AAAG;AAChC,oBAAM,IAAI,MAAMA,KAAI,mCAAmCP,QAAO,GAAG;AAAA,YACrE;AAAA,UACJ;AAAA,QACJ;AACA,QAAAA,QAAO,WAAWA,KAAI;AACtB,YAAI,SAAS,CAAC;AACd,YAAI,aAAa,KAAK,CAAC,MAAM;AAC7B,aAAKN,KAAI,aAAa,IAAI,GAAGA,KAAI,KAAK,QAAQA,MAAK;AAC/C,cAAIa,KAAI,KAAKb,EAAC;AACd,cAAIa,MAAK;AAAgB,mBAAO,KAAK,WAAW,eAAeA,EAAC,CAAC,CAAC;AAAA,mBACzDA,OAAM,KAAK;AAChB,gBAAI,QAAQb;AACZ,eAAG;AAAE,cAAAA;AAAA,YAAK,SAAS,KAAKA,EAAC,MAAM,OAAOA,KAAI,KAAK;AAC/C,mBAAO,KAAK,WAAW,KAAK,MAAM,QAAQ,GAAGA,EAAC,CAAC,CAAC;AAAA,UACpD;AACK,kBAAM,IAAI,MAAMa,KAAI,2BAA2B;AAAA,QACxD;AACA,eAAO,mBAAmB,QAAQP,OAAM,UAAU;AAAA,MACtD;AAEA,eAAS,mBAAmB,QAAQA,OAAM,YAAY;AAClD,YAAI,MAAM,QAAQ,CAAC,GAAG,MAAM,QAAQ,CAAC,GAAGN;AACxC,aAAKA,KAAI,OAAO,SAAS,GAAGA,MAAK,GAAGA,MAAK;AACrC,gBAAM,IAAI,IAAI,OAAOA,EAAC,EAAE,MAAM,GAAG,CAAC;AAClC,gBAAM,IAAI,MAAMM,KAAI;AAAA,QACxB;AACA,eAAO,aAAa,IAAI,OAAO,IAAI;AAAA,MACvC;AAEA,eAAS,UAAU,OAAO,UAAU;AAChC,mBAAW,YAAY;AACvB,YAAI,QAAQ,SAAS,QAAQ;AACzB,iBAAO,SAAS,KAAK;AAAA,QACzB;AACA,eAAO,MAAM,QAAQ;AAAA,MACzB;AAEA,eAAS,OAAOR,IAAGQ,OAAM;AACrB,QAAAA,QAAO,OAAOA,KAAI;AAClB,YAAIA,MAAK,OAAO,GAAG;AACf,cAAIR,GAAE,OAAO;AAAG,mBAAO,EAAE,OAAO,CAAC,CAAC,GAAG,YAAY,MAAM;AACvD,gBAAM,IAAI,MAAM,2CAA2C;AAAA,QAC/D;AACA,YAAIQ,MAAK,OAAO,EAAE,GAAG;AACjB,cAAIR,GAAE,OAAO;AAAG,mBAAO,EAAE,OAAO,CAAC,CAAC,GAAG,YAAY,MAAM;AACvD,cAAIA,GAAE,WAAW;AACb,mBAAO;AAAA,cACH,OAAO,CAAC,EAAE,OAAO;AAAA,gBAAM,CAAC;AAAA,gBAAG,MAAM,MAAM,MAAM,MAAM,CAACA,GAAE,WAAW,CAAC,CAAC,EAC9D,IAAI,MAAM,UAAU,SAAS,CAAC,GAAG,CAAC,CAAC;AAAA,cACxC;AAAA,cACA,YAAY;AAAA,YAChB;AAEJ,cAAI,MAAM,MAAM,MAAM,MAAM,MAAMA,GAAE,WAAW,IAAI,CAAC,CAAC,EAChD,IAAI,MAAM,UAAU,SAAS,CAAC,GAAG,CAAC,CAAC;AACxC,cAAI,QAAQ,CAAC,CAAC,CAAC;AACf,iBAAO;AAAA,YACH,OAAO,CAAC,EAAE,OAAO,MAAM,CAAC,GAAG,GAAG;AAAA,YAC9B,YAAY;AAAA,UAChB;AAAA,QACJ;AAEA,YAAI,MAAM;AACV,YAAIA,GAAE,WAAW,KAAKQ,MAAK,WAAW,GAAG;AACrC,gBAAM;AACN,UAAAR,KAAIA,GAAE,IAAI;AAAA,QACd;AACA,YAAIQ,MAAK,OAAO,GAAG;AACf,cAAIR,GAAE,OAAO;AAAG,mBAAO,EAAE,OAAO,CAAC,CAAC,GAAG,YAAY,MAAM;AAEvD,iBAAO;AAAA,YACH,OAAO,MAAM,MAAM,MAAM,MAAMA,GAAE,WAAW,CAAC,CAAC,EACzC,IAAI,OAAO,UAAU,SAAS,CAAC;AAAA,YACpC,YAAY;AAAA,UAChB;AAAA,QACJ;AACA,YAAI,MAAM,CAAC;AACX,YAAI,OAAOA,IAAG;AACd,eAAO,KAAK,WAAW,KAAK,KAAK,WAAWQ,KAAI,KAAK,GAAG;AACpD,mBAAS,KAAK,OAAOA,KAAI;AACzB,iBAAO,OAAO;AACd,cAAI,QAAQ,OAAO;AACnB,cAAI,MAAM,WAAW,GAAG;AACpB,oBAAQA,MAAK,MAAM,KAAK,EAAE,IAAI;AAC9B,mBAAO,KAAK,KAAK;AAAA,UACrB;AACA,cAAI,KAAK,MAAM,WAAW,CAAC;AAAA,QAC/B;AACA,YAAI,KAAK,KAAK,WAAW,CAAC;AAC1B,eAAO,EAAE,OAAO,IAAI,QAAQ,GAAG,YAAY,IAAI;AAAA,MACnD;AAEA,eAAS,aAAaR,IAAGQ,OAAM,UAAU;AACrC,YAAI,MAAM,OAAOR,IAAGQ,KAAI;AACxB,gBAAQ,IAAI,aAAa,MAAM,MAAM,IAAI,MAAM,IAAI,SAAUL,IAAG;AAC5D,iBAAO,UAAUA,IAAG,QAAQ;AAAA,QAChC,CAAC,EAAE,KAAK,EAAE;AAAA,MACd;AAEA,iBAAW,UAAU,UAAU,SAAU,OAAO;AAC5C,eAAO,OAAO,MAAM,KAAK;AAAA,MAC7B;AAEA,mBAAa,UAAU,UAAU,SAAU,OAAO;AAC9C,eAAO,OAAO,MAAM,KAAK;AAAA,MAC7B;AAEA,mBAAa,UAAU,UAAU,SAAU,OAAO;AAC9C,eAAO,OAAO,MAAM,KAAK;AAAA,MAC7B;AAEA,iBAAW,UAAU,WAAW,SAAU,OAAO,UAAU;AACvD,YAAI,UAAUL;AAAW,kBAAQ;AACjC,YAAI,UAAU;AAAI,iBAAO,aAAa,MAAM,OAAO,QAAQ;AAC3D,YAAIC,KAAI,KAAK,OAAOW,KAAIX,GAAE,QAAQ,MAAM,OAAOA,GAAE,EAAEW,EAAC,CAAC,GAAG,QAAQ,WAAW;AAC3E,eAAO,EAAEA,MAAK,GAAG;AACb,kBAAQ,OAAOX,GAAEW,EAAC,CAAC;AACnB,iBAAO,MAAM,MAAM,MAAM,MAAM,IAAI;AAAA,QACvC;AACA,YAAI,OAAO,KAAK,OAAO,MAAM;AAC7B,eAAO,OAAO;AAAA,MAClB;AAEA,mBAAa,UAAU,WAAW,SAAU,OAAO,UAAU;AACzD,YAAI,UAAUZ;AAAW,kBAAQ;AACjC,YAAI,SAAS;AAAI,iBAAO,aAAa,MAAM,OAAO,QAAQ;AAC1D,eAAO,OAAO,KAAK,KAAK;AAAA,MAC5B;AAEA,mBAAa,UAAU,WAAW,aAAa,UAAU;AAEzD,mBAAa,UAAU,SAAS,WAAW,UAAU,SAAS,aAAa,UAAU,SAAS,WAAY;AAAE,eAAO,KAAK,SAAS;AAAA,MAAG;AAEpI,iBAAW,UAAU,UAAU,WAAY;AACvC,eAAO,SAAS,KAAK,SAAS,GAAG,EAAE;AAAA,MACvC;AACA,iBAAW,UAAU,aAAa,WAAW,UAAU;AAEvD,mBAAa,UAAU,UAAU,WAAY;AACzC,eAAO,KAAK;AAAA,MAChB;AACA,mBAAa,UAAU,aAAa,aAAa,UAAU;AAC3D,mBAAa,UAAU,UAAU,aAAa,UAAU,aAAa,WAAY;AAC7E,eAAO,SAAS,KAAK,SAAS,GAAG,EAAE;AAAA,MACvC;AAEA,eAAS,iBAAiBC,IAAG;AACzB,YAAI,UAAU,CAACA,EAAC,GAAG;AACf,cAAII,KAAI,CAACJ;AACT,cAAII,OAAM,SAASA,EAAC;AAChB,mBAAO,uBAAuB,IAAI,aAAa,OAAOA,EAAC,CAAC,IAAI,IAAI,aAAaA,EAAC;AAClF,gBAAM,IAAI,MAAM,sBAAsBJ,EAAC;AAAA,QAC3C;AACA,YAAI,OAAOA,GAAE,CAAC,MAAM;AACpB,YAAI;AAAM,UAAAA,KAAIA,GAAE,MAAM,CAAC;AACvB,YAAIwB,SAAQxB,GAAE,MAAM,IAAI;AACxB,YAAIwB,OAAM,SAAS;AAAG,gBAAM,IAAI,MAAM,sBAAsBA,OAAM,KAAK,GAAG,CAAC;AAC3E,YAAIA,OAAM,WAAW,GAAG;AACpB,cAAI,MAAMA,OAAM,CAAC;AACjB,cAAI,IAAI,CAAC,MAAM;AAAK,kBAAM,IAAI,MAAM,CAAC;AACrC,gBAAM,CAAC;AACP,cAAI,QAAQ,SAAS,GAAG,KAAK,CAAC,UAAU,GAAG;AAAG,kBAAM,IAAI,MAAM,sBAAsB,MAAM,2BAA2B;AACrH,cAAI,OAAOA,OAAM,CAAC;AAClB,cAAI,eAAe,KAAK,QAAQ,GAAG;AACnC,cAAI,gBAAgB,GAAG;AACnB,mBAAO,KAAK,SAAS,eAAe;AACpC,mBAAO,KAAK,MAAM,GAAG,YAAY,IAAI,KAAK,MAAM,eAAe,CAAC;AAAA,UACpE;AACA,cAAI,MAAM;AAAG,kBAAM,IAAI,MAAM,oDAAoD;AACjF,kBAAS,IAAI,MAAM,MAAM,CAAC,EAAG,KAAK,GAAG;AACrC,UAAAxB,KAAI;AAAA,QACR;AACA,YAAIyB,WAAU,kBAAkB,KAAKzB,EAAC;AACtC,YAAI,CAACyB;AAAS,gBAAM,IAAI,MAAM,sBAAsBzB,EAAC;AACrD,YAAI,sBAAsB;AACtB,iBAAO,IAAI,aAAa,OAAO,OAAO,MAAMA,KAAIA,EAAC,CAAC;AAAA,QACtD;AACA,YAAIQ,KAAI,CAAC,GAAGkB,OAAM1B,GAAE,QAAQW,KAAI,UAAUgB,OAAMD,OAAMf;AACtD,eAAOe,OAAM,GAAG;AACZ,UAAAlB,GAAE,KAAK,CAACR,GAAE,MAAM2B,MAAKD,IAAG,CAAC;AACzB,UAAAC,QAAOhB;AACP,cAAIgB,OAAM;AAAG,YAAAA,OAAM;AACnB,UAAAD,QAAOf;AAAA,QACX;AACA,QAAAT,MAAKM,EAAC;AACN,eAAO,IAAI,WAAWA,IAAG,IAAI;AAAA,MACjC;AAEA,eAAS,iBAAiBR,IAAG;AACzB,YAAI,sBAAsB;AACtB,iBAAO,IAAI,aAAa,OAAOA,EAAC,CAAC;AAAA,QACrC;AACA,YAAI,UAAUA,EAAC,GAAG;AACd,cAAIA,OAAM,SAASA,EAAC;AAAG,kBAAM,IAAI,MAAMA,KAAI,qBAAqB;AAChE,iBAAO,IAAI,aAAaA,EAAC;AAAA,QAC7B;AACA,eAAO,iBAAiBA,GAAE,SAAS,CAAC;AAAA,MACxC;AAEA,eAAS,WAAWA,IAAG;AACnB,YAAI,OAAOA,OAAM,UAAU;AACvB,iBAAO,iBAAiBA,EAAC;AAAA,QAC7B;AACA,YAAI,OAAOA,OAAM,UAAU;AACvB,iBAAO,iBAAiBA,EAAC;AAAA,QAC7B;AACA,YAAI,OAAOA,OAAM,UAAU;AACvB,iBAAO,IAAI,aAAaA,EAAC;AAAA,QAC7B;AACA,eAAOA;AAAA,MACX;AAEA,eAASG,KAAI,GAAGA,KAAI,KAAMA,MAAK;AAC3B,gBAAQA,EAAC,IAAI,WAAWA,EAAC;AACzB,YAAIA,KAAI;AAAG,kBAAQ,CAACA,EAAC,IAAI,WAAW,CAACA,EAAC;AAAA,MAC1C;AAEA,cAAQ,MAAM,QAAQ,CAAC;AACvB,cAAQ,OAAO,QAAQ,CAAC;AACxB,cAAQ,WAAW,QAAQ,EAAE;AAC7B,cAAQ,MAAM;AACd,cAAQ,MAAM;AACd,cAAQ,MAAM;AACd,cAAQ,MAAM;AACd,cAAQ,aAAa,SAAUC,IAAG;AAAE,eAAOA,cAAa,cAAcA,cAAa,gBAAgBA,cAAa;AAAA,MAAc;AAC9H,cAAQ,cAAc;AAEtB,cAAQ,YAAY,SAAU,QAAQK,OAAM,YAAY;AACpD,eAAO,mBAAmB,OAAO,IAAI,UAAU,GAAG,WAAWA,SAAQ,EAAE,GAAG,UAAU;AAAA,MACxF;AAEA,aAAO;AAAA,IACX,EAAG;AAGH,QAAI,OAAO,WAAW,eAAe,OAAO,eAAe,SAAS,GAAG;AACnE,aAAO,UAAU;AAAA,IACrB;AAGA,QAAI,OAAO,WAAW,cAAc,OAAO,KAAK;AAC5C,aAAQ,WAAY;AAChB,eAAO;AAAA,MACX,CAAC;AAAA,IACL;AAAA;AAAA;;;AC56CA;AAAA;AA0BA,KAAC,SAAU,MAAM,OAAO;AAQtB,UAAI,aAAgB,MAAM,WACtB,WAAgB,OAAO,WACvB,QAAgB,WAAW,OAC3B,aAAgB,SAAS,gBACzB,gBAAgB,WAAW,SAC3B,UAAgB,CAAC;AAKrB,UAAImB,KAAI;AAAA,QACN,SAAU,SAAU,KAAK,UAAU,SAAU;AAC3C,cAAIC,IAAGC,IAAG;AACV,cAAK,QAAQ,MAAO;AAClB;AAAA,UACF;AAEA,cAAK,iBAAiB,IAAI,YAAY,eAAgB;AACpD,gBAAI,QAAS,UAAU,OAAQ;AAAA,UACjC,WACU,IAAI,WAAW,CAAC,IAAI,QAAS;AACrC,iBAAMD,KAAI,GAAGC,KAAI,IAAI,QAAQD,KAAIC,IAAGD,MAAM;AACxC,kBAAKA,MAAK,OAAO,SAAS,KAAM,SAAS,IAAIA,EAAC,GAAGA,IAAG,GAAI,MAAM,SAAU;AACtE;AAAA,cACF;AAAA,YACF;AAAA,UACF,OACK;AACH,iBAAM,OAAO,KAAK;AAChB,kBAAK,WAAW,KAAM,KAAK,GAAI,GAAI;AACjC,oBAAK,SAAS,KAAM,SAAS,IAAI,GAAG,GAAG,KAAK,GAAI,MAAM,SAAU;AAC9D;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,QACA,QAAS,SAAU,KAAM;AACvB,eAAK,QAAS,MAAM,KAAM,WAAW,CAAE,GAAG,SAAW,QAAS;AAC5D,qBAAU,QAAQ,QAAS;AACzB,kBAAI,IAAI,IAAI,OAAO,IAAI;AAAA,YACzB;AAAA,UACF,CAAC;AACD,iBAAO;AAAA,QACT;AAAA,MACF;AAIA,UAAIE,OAAM,SAAW,SAAU;AAE7B,aAAK,WAAW;AAAA,UACd,eAAgB;AAAA,YACd,YAAa;AAAA,cACX,IAAK;AAAA,gBACH,UAAiB;AAAA,gBACjB,QAAiB;AAAA,gBACjB,gBAAiB;AAAA,cACnB;AAAA;AAAA,YAEF;AAAA,UACF;AAAA;AAAA,UAEA,UAAW;AAAA;AAAA,UAEX,SAAU;AAAA,QACZ;AAGA,aAAK,UAAUH,GAAE,OAAQ,CAAC,GAAG,KAAK,UAAU,OAAQ;AACpD,aAAK,WAAY,KAAK,QAAQ,MAAO;AAErC,YAAK,QAAQ,UAAU,CAAE,KAAK,QAAQ,YAAa,KAAK,QAAQ,MAAO,GAAI;AACzE,gBAAM,IAAI,MAAM,8CAA8C,QAAQ,SAAS,GAAG;AAAA,QACpF;AAAA,MACF;AAOA,MAAAG,KAAI,oBAAoB,OAAO,aAAc,CAAE;AAE/C,eAAS,kBAAoB,oBAAqB;AAChD,eAAOA,KAAI,GAAG,QAAS,sBAAsB,8BAA8B;AAAA,MAC7E;AAEA,eAAS,MAAO,KAAKC,OAAM;AACzB,aAAK,OAAO;AACZ,aAAK,QAAQA;AAAA,MACf;AAGA,MAAAJ,GAAE,OAAQ,MAAM,WAAW;AAAA,QACzB,UAAW,SAAW,QAAS;AAC7B,eAAK,UAAU;AACf,iBAAO;AAAA,QACT;AAAA,QACA,aAAc,SAAW,SAAU;AACjC,eAAK,WAAW;AAChB,iBAAO;AAAA,QACT;AAAA,QACA,UAAW,SAAW,KAAK,MAAO;AAChC,eAAK,OAAO;AACZ,eAAK,QAAQ;AACb,iBAAO;AAAA,QACT;AAAA,QACA,OAAQ,SAAW,MAAO;AACxB,cAAK,CAAC,EAAE,SAAS,KAAM,IAAK,KAAK,kBAAmB;AAClD,mBAAO,CAAC,EAAE,MAAM,KAAK,WAAW,CAAC;AAAA,UACnC;AACA,kBAAS,QAAQ,KAAK,SAASG,KAAI,UAAU,SAASE,IAAE;AAAE,mBAAOA;AAAA,UAAG;AAAA,YAClE,KAAK,MAAM,YAAY,KAAK,SAAS,KAAK,UAAU,KAAK,MAAM,KAAK,OAAO,KAAK,IAAI;AAAA,YACpF;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AAMD,MAAAL,GAAE,OAAQG,KAAI,WAAW;AAAA;AAAA,QAEvB,WAAY,SAAW,KAAM;AAC3B,iBAAO,IAAI,MAAO,KAAK,IAAK;AAAA,QAC9B;AAAA,QAEA,YAAa,SAAW,QAAS;AAC/B,cAAK,CAAE,QAAS;AACd,mBAAO,KAAK;AAAA,UACd;AACA,eAAK,cAAc;AAAA,QACrB;AAAA,QAEA,SAAU,SAAW,KAAM;AACzB,iBAAO,KAAK,YAAY,KAAM,MAAM,OAAO,OAAO,GAAI;AAAA,QACxD;AAAA,QAEA,UAAW,SAAW,QAAQ,KAAM;AACnC,iBAAO,KAAK,YAAY,KAAM,MAAM,QAAQ,OAAO,GAAI;AAAA,QACxD;AAAA,QAEA,WAAY,SAAW,QAAS,KAAsB;AAEpD,iBAAO,KAAK,YAAY,KAAM,MAAM,QAAQ,OAAO,GAAI;AAAA,QACzD;AAAA,QAEA,UAAW,SAAW,MAAM,MAAM,KAAM;AACtC,iBAAO,KAAK,YAAY,KAAM,MAAM,OAAO,OAAO,MAAM,MAAM,GAAI;AAAA,QACpE;AAAA,QAEA,WAAY,SAAW,QAAQ,MAAM,MAAM,KAAM;AAC/C,iBAAO,KAAK,YAAY,KAAM,MAAM,QAAQ,OAAO,MAAM,MAAM,GAAI;AAAA,QACrE;AAAA,QAEA,YAAa,SAAW,QAAQ,MAAM,MAAM,KAAoB;AAC9D,iBAAO,KAAK,YAAY,KAAM,MAAM,QAAQ,OAAO,MAAM,MAAM,GAAI;AAAA,QACrE;AAAA,QAEA,UAAW,SAAW,SAAS,KAAM;AACnC,iBAAO,KAAK,YAAY,KAAM,MAAM,OAAO,SAAS,GAAI;AAAA,QAC1D;AAAA,QAEA,WAAY,SAAW,QAAQ,SAAS,KAAM;AAC5C,iBAAO,KAAK,YAAY,KAAM,MAAM,QAAQ,SAAS,GAAI;AAAA,QAC3D;AAAA,QAEA,YAAa,SAAW,QAAQ,SAAS,KAAoB;AAC3D,iBAAO,KAAK,YAAY,KAAM,MAAM,QAAQ,SAAS,GAAI;AAAA,QAC3D;AAAA,QAEA,WAAY,SAAW,SAAS,MAAM,MAAM,KAAM;AAChD,iBAAO,KAAK,YAAY,KAAM,MAAM,OAAO,SAAS,MAAM,MAAM,GAAI;AAAA,QACtE;AAAA,QAEA,YAAa,SAAW,QAAQ,SAAS,MAAM,MAAM,KAAM;AACzD,iBAAO,KAAK,YAAY,KAAM,MAAM,QAAQ,SAAS,MAAM,MAAM,GAAI;AAAA,QACvE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOA,aAAc,SAAW,QAAQ,SAAS,cAAc,YAAY,KAAM;AAGxE,uBAAa,cAAc;AAI3B,mBAAS,UAAU,KAAK;AAExB,cAAI;AAKJ,cAAK,CAAE,KAAK,SAAU;AAIpB,uBAAW,IAAIA,KAAI;AACnB,mBAAO,SAAS,YAAY,KAAM,UAAU,QAAW,QAAW,cAAc,YAAY,GAAI;AAAA,UAClG;AAGA,cAAK,CAAE,KAAK,QAAQ,aAAc;AAChC,kBAAM,IAAI,MAAM,0BAA0B;AAAA,UAC5C;AAEA,cAAK,CAAE,KAAK,QAAQ,YAAa,MAAO,GAAI;AAC1C,kBAAM,IAAI,MAAM,aAAa,SAAS,kBAAkB;AAAA,UAC1D;AAEA,cAAK,CAAE,KAAK,QAAQ,YAAa,MAAO,EAAG,EAAG,GAAI;AAChD,kBAAM,IAAI,MAAM,sCAAsC;AAAA,UACxD;AAKA,cAAK,CAAE,cAAe;AACpB,kBAAM,IAAI,MAAM,2BAA2B;AAAA,UAC7C;AAEA,cAAI,MAAO,UAAU,UAAUA,KAAI,oBAAoB,eAAe,cAClE,cAAc,KAAK,QAAQ,aAC3B,OAAO,YAAa,MAAO,GAC3B,eAAe,YAAY,YAAY,KAAK,SAAS,YAAY,UAAU,EAAE,GAC7E,cAAc,KAAK,EAAE,EAAE,gBAAgB,KAAK,EAAE,EAAE,cAAc,KAAK,KAAK,EAAE,EAAE,cAAc,KAAK,YAAY,gBAAgB,YAAY,cAAc,KAAK,YAAY,cAAc,GACpL,UACA;AAEJ,cAAI;AACJ,cAAI,QAAQ,QAAW;AAErB,sBAAU;AAAA,UAEZ,OAAO;AAIL,gBAAK,OAAO,OAAO,UAAW;AAC5B,oBAAM,SAAU,KAAK,EAAG;AAExB,kBAAK,MAAO,GAAI,GAAI;AAClB,sBAAM,IAAI,MAAM,gDAAgD;AAAA,cAClE;AAAA,YACF;AAEA,sBAAU,kBAAkB,WAAW,EAAE,GAAG;AAAA,UAC9C;AAGA,cAAK,CAAE,MAAO;AACZ,kBAAM,IAAI,MAAM,sBAAsB,SAAS,mBAAmB;AAAA,UACpE;AAEA,qBAAW,KAAM,GAAI;AAIrB,cAAK,CAAE,YAAY,UAAU,SAAS,QAAS;AAC7C,gBAAI,KAAK,QAAQ,sBAAsB;AACrC,mBAAK,QAAQ,qBAAqB,KAAK,MAAM;AAAA,YAC/C;AACA,kBAAM,CAAE,cAAc,UAAW;AAGjC,gBAAI,KAAK,QAAQ,UAAQ,MAAM;AAC7B,sBAAQ,IAAI,IAAK,kBAAkB,WAAW,EAAG,GAAI,CAAE,CAAC;AAAA,YAC1D;AACA,mBAAO,IAAK,kBAAkB,EAAG,GAAI,CAAE;AAAA,UACzC;AAEA,gBAAM,SAAU,OAAQ;AAGxB,cAAK,CAAE,KAAO;AACZ,kBAAM,CAAE,cAAc,UAAW;AACjC,mBAAO,IAAK,kBAAkB,EAAG,GAAI,CAAE;AAAA,UACzC;AACA,iBAAO;AAAA,QACT;AAAA,MACF,CAAC;AAuCD,UAAI,UAAW,WAAW;AACxB,iBAAS,SAAS,UAAU;AAC1B,iBAAO,OAAO,UAAU,SAAS,KAAK,QAAQ,EAAE,MAAM,GAAG,EAAE,EAAE,YAAY;AAAA,QAC3E;AACA,iBAAS,WAAW,OAAO,YAAY;AACrC,mBAAS,SAAS,CAAC,GAAG,aAAa,GAAG,OAAO,EAAE,UAAU,IAAI,OAAO;AAAA,UAAiB;AACrF,iBAAO,OAAO,KAAK,EAAE;AAAA,QACvB;AAEA,YAAI,aAAa,WAAW;AAC1B,cAAI,CAAC,WAAW,MAAM,eAAe,UAAU,CAAC,CAAC,GAAG;AAClD,uBAAW,MAAM,UAAU,CAAC,CAAC,IAAI,WAAW,MAAM,UAAU,CAAC,CAAC;AAAA,UAChE;AACA,iBAAO,WAAW,OAAO,KAAK,MAAM,WAAW,MAAM,UAAU,CAAC,CAAC,GAAG,SAAS;AAAA,QAC/E;AAEA,mBAAW,SAAS,SAAS,YAAY,MAAM;AAC7C,cAAI,SAAS,GAAG,cAAc,WAAW,QAAQ,YAAY,IAAI,KAAK,SAAS,CAAC,GAAGF,IAAGK,IAAGC,QAAO,KAAK,eAAe;AACpH,eAAKN,KAAI,GAAGA,KAAI,aAAaA,MAAK;AAChC,wBAAY,SAAS,WAAWA,EAAC,CAAC;AAClC,gBAAI,cAAc,UAAU;AAC1B,qBAAO,KAAK,WAAWA,EAAC,CAAC;AAAA,YAC3B,WACS,cAAc,SAAS;AAC9B,cAAAM,SAAQ,WAAWN,EAAC;AACpB,kBAAIM,OAAM,CAAC,GAAG;AACZ,sBAAM,KAAK,MAAM;AACjB,qBAAKD,KAAI,GAAGA,KAAIC,OAAM,CAAC,EAAE,QAAQD,MAAK;AACpC,sBAAI,CAAC,IAAI,eAAeC,OAAM,CAAC,EAAED,EAAC,CAAC,GAAG;AACpC,0BAAM,QAAQ,0CAA0CC,OAAM,CAAC,EAAED,EAAC,CAAC;AAAA,kBACrE;AACA,wBAAM,IAAIC,OAAM,CAAC,EAAED,EAAC,CAAC;AAAA,gBACvB;AAAA,cACF,WACSC,OAAM,CAAC,GAAG;AACjB,sBAAM,KAAKA,OAAM,CAAC,CAAC;AAAA,cACrB,OACK;AACH,sBAAM,KAAK,QAAQ;AAAA,cACrB;AAEA,kBAAI,OAAO,KAAKA,OAAM,CAAC,CAAC,KAAM,SAAS,GAAG,KAAK,UAAW;AACxD,sBAAM,QAAQ,2CAA2C,SAAS,GAAG,CAAC;AAAA,cACxE;AAGA,kBAAK,OAAO,OAAO,eAAe,QAAQ,MAAO;AAC/C,sBAAM;AAAA,cACR;AAGA,sBAAQA,OAAM,CAAC,GAAG;AAAA,gBAChB,KAAK;AAAK,wBAAM,IAAI,SAAS,CAAC;AAAG;AAAA,gBACjC,KAAK;AAAK,wBAAM,OAAO,aAAa,GAAG;AAAG;AAAA,gBAC1C,KAAK;AAAK,wBAAM,SAAS,KAAK,EAAE;AAAG;AAAA,gBACnC,KAAK;AAAK,wBAAMA,OAAM,CAAC,IAAI,IAAI,cAAcA,OAAM,CAAC,CAAC,IAAI,IAAI,cAAc;AAAG;AAAA,gBAC9E,KAAK;AAAK,wBAAMA,OAAM,CAAC,IAAI,WAAW,GAAG,EAAE,QAAQA,OAAM,CAAC,CAAC,IAAI,WAAW,GAAG;AAAG;AAAA,gBAChF,KAAK;AAAK,wBAAM,IAAI,SAAS,CAAC;AAAG;AAAA,gBACjC,KAAK;AAAK,yBAAQ,MAAM,OAAO,GAAG,MAAMA,OAAM,CAAC,IAAI,IAAI,UAAU,GAAGA,OAAM,CAAC,CAAC,IAAI;AAAM;AAAA,gBACtF,KAAK;AAAK,wBAAM,KAAK,IAAI,GAAG;AAAG;AAAA,gBAC/B,KAAK;AAAK,wBAAM,IAAI,SAAS,EAAE;AAAG;AAAA,gBAClC,KAAK;AAAK,wBAAM,IAAI,SAAS,EAAE,EAAE,YAAY;AAAG;AAAA,cAClD;AACA,oBAAO,QAAQ,KAAKA,OAAM,CAAC,CAAC,KAAKA,OAAM,CAAC,KAAK,OAAO,IAAI,MAAK,MAAM;AACnE,8BAAgBA,OAAM,CAAC,IAAIA,OAAM,CAAC,KAAK,MAAM,MAAMA,OAAM,CAAC,EAAE,OAAO,CAAC,IAAI;AACxE,2BAAaA,OAAM,CAAC,IAAI,OAAO,GAAG,EAAE;AACpC,oBAAMA,OAAM,CAAC,IAAI,WAAW,eAAe,UAAU,IAAI;AACzD,qBAAO,KAAKA,OAAM,CAAC,IAAI,MAAM,MAAM,MAAM,GAAG;AAAA,YAC9C;AAAA,UACF;AACA,iBAAO,OAAO,KAAK,EAAE;AAAA,QACvB;AAEA,mBAAW,QAAQ,CAAC;AAEpB,mBAAW,QAAQ,SAAS,KAAK;AAC/B,cAAI,OAAO,KAAKA,SAAQ,CAAC,GAAG,aAAa,CAAC,GAAG,YAAY;AACzD,iBAAO,MAAM;AACX,iBAAKA,SAAQ,YAAY,KAAK,IAAI,OAAO,MAAM;AAC7C,yBAAW,KAAKA,OAAM,CAAC,CAAC;AAAA,YAC1B,YACUA,SAAQ,WAAW,KAAK,IAAI,OAAO,MAAM;AACjD,yBAAW,KAAK,GAAG;AAAA,YACrB,YACUA,SAAQ,uFAAuF,KAAK,IAAI,OAAO,MAAM;AAC7H,kBAAIA,OAAM,CAAC,GAAG;AACZ,6BAAa;AACb,oBAAI,aAAa,CAAC,GAAG,oBAAoBA,OAAM,CAAC,GAAG,cAAc,CAAC;AAClE,qBAAK,cAAc,sBAAsB,KAAK,iBAAiB,OAAO,MAAM;AAC1E,6BAAW,KAAK,YAAY,CAAC,CAAC;AAC9B,0BAAQ,oBAAoB,kBAAkB,UAAU,YAAY,CAAC,EAAE,MAAM,OAAO,IAAI;AACtF,yBAAK,cAAc,wBAAwB,KAAK,iBAAiB,OAAO,MAAM;AAC5E,iCAAW,KAAK,YAAY,CAAC,CAAC;AAAA,oBAChC,YACU,cAAc,aAAa,KAAK,iBAAiB,OAAO,MAAM;AACtE,iCAAW,KAAK,YAAY,CAAC,CAAC;AAAA,oBAChC,OACK;AACH,4BAAM;AAAA,oBACR;AAAA,kBACF;AAAA,gBACF,OACK;AACH,wBAAM;AAAA,gBACR;AACA,gBAAAA,OAAM,CAAC,IAAI;AAAA,cACb,OACK;AACH,6BAAa;AAAA,cACf;AACA,kBAAI,cAAc,GAAG;AACnB,sBAAM;AAAA,cACR;AACA,yBAAW,KAAKA,MAAK;AAAA,YACvB,OACK;AACH,oBAAM;AAAA,YACR;AACA,mBAAO,KAAK,UAAUA,OAAM,CAAC,EAAE,MAAM;AAAA,UACvC;AACA,iBAAO;AAAA,QACT;AAEA,eAAO;AAAA,MACT,EAAG;AAEH,UAAI,WAAW,SAAS,KAAK,MAAM;AACjC,aAAK,QAAQ,GAAG;AAChB,eAAO,QAAQ,MAAM,MAAM,IAAI;AAAA,MACjC;AAEA,MAAAJ,KAAI,eAAe,SAAW,cAAcK,IAAI;AAC9C,uBAAe,aAAa,QAAQ,MAAMA,EAAC;AAC3C,eAAOL,KAAI,iBAAiB,YAAY;AAAA,MAC1C;AAEA,MAAAA,KAAI,UAAU,SAAW,KAAK,MAAO;AACnC,YAAK,CAAC,EAAE,SAAS,KAAM,IAAK,KAAK,kBAAmB;AAClD,iBAAO,SAAU,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAE;AAAA,QAC5C;AACA,eAAO,QAAQ,MAAM,MAAM,CAAC,EAAE,MAAM,KAAK,SAAS,CAAE;AAAA,MACtD;AAEA,MAAAA,KAAI,UAAU,UAAU,WAAY;AAClC,eAAOA,KAAI,QAAQ,MAAM,MAAM,SAAS;AAAA,MAC1C;AAcA,MAAAA,KAAI,KAAK,CAAC;AAEV,MAAAA,KAAI,GAAG,QAAQ,SAAWM,IAAI;AAC5B,YAAI,aAAaN,KAAI,GAAG,kBAAmBM,EAAE;AAC7C,eAAON,KAAI,GAAG,OAAO,MAAM,KAAKA,KAAI,GAAG,QAAQ,UAAU;AAAA,MAC3D;AAEA,MAAAA,KAAI,GAAG,UAAU,SAAWM,IAAI;AAE9B,iBAAS,MAAO,KAAM;AACpB,iBAAQ,QAAQ,OAAO,IAAI,MAAM,MAAM;AAAA,QACzC;AAEA,YAAI,MAAMN,KAAI,GAAG,MAAOM,EAAE;AAC1B,eAAO,SAAWD,IAAI;AACpB,iBAAO,MAAOL,KAAI,GAAG,YAAa,GAAI,EAAGK,EAAE,CAAE;AAAA,QAC/C;AAAA,MACF;AAEA,MAAAL,KAAI,GAAG,cAAc,SAAW,KAAM;AACpC,eAAO,SAAWK,IAAI;AACpB,cAAI;AACJ,kBAAS,IAAI,MAAO;AAAA,YAClB,KAAK;AACH,qBAAOL,KAAI,GAAG,YAAa,IAAI,IAAK,EAAGK,EAAE;AAAA,YAC3C,KAAK;AACH,kBAAKL,KAAI,GAAG,YAAa,IAAI,IAAK,EAAGK,EAAE,GAAI;AACzC,uBAAOL,KAAI,GAAG,YAAa,IAAI,MAAO,EAAGK,EAAE;AAAA,cAC7C;AACA,qBAAOL,KAAI,GAAG,YAAa,IAAI,MAAO,EAAGK,EAAE;AAAA,YAC7C,KAAK;AACH,qBAAOL,KAAI,GAAG,YAAa,IAAI,IAAK,EAAGK,EAAE,KAAKL,KAAI,GAAG,YAAa,IAAI,KAAM,EAAGK,EAAE;AAAA,YACnF,KAAK;AACH,qBAAOL,KAAI,GAAG,YAAa,IAAI,IAAK,EAAGK,EAAE,KAAKL,KAAI,GAAG,YAAa,IAAI,KAAM,EAAGK,EAAE;AAAA,YACnF,KAAK;AACH,qBAAOL,KAAI,GAAG,YAAa,IAAI,IAAK,EAAGK,EAAE,IAAIL,KAAI,GAAG,YAAa,IAAI,KAAM,EAAGK,EAAE;AAAA,YAClF,KAAK;AACH,qBAAOL,KAAI,GAAG,YAAa,IAAI,IAAK,EAAGK,EAAE,IAAIL,KAAI,GAAG,YAAa,IAAI,KAAM,EAAGK,EAAE;AAAA,YAClF,KAAK;AACH,qBAAOL,KAAI,GAAG,YAAa,IAAI,IAAK,EAAGK,EAAE,KAAKL,KAAI,GAAG,YAAa,IAAI,KAAM,EAAGK,EAAE;AAAA,YACnF,KAAK;AACH,qBAAOL,KAAI,GAAG,YAAa,IAAI,IAAK,EAAGK,EAAE,KAAKL,KAAI,GAAG,YAAa,IAAI,KAAM,EAAGK,EAAE;AAAA,YACnF,KAAK;AACH,qBAAOL,KAAI,GAAG,YAAa,IAAI,IAAK,EAAGK,EAAE,KAAKL,KAAI,GAAG,YAAa,IAAI,KAAM,EAAGK,EAAE;AAAA,YACnF,KAAK;AACH,qBAAOL,KAAI,GAAG,YAAa,IAAI,IAAK,EAAGK,EAAE,KAAKL,KAAI,GAAG,YAAa,IAAI,KAAM,EAAGK,EAAE;AAAA,YACnF,KAAK;AACH,qBAAOL,KAAI,GAAG,YAAa,IAAI,IAAK,EAAGK,EAAE,IAAIL,KAAI,GAAG,YAAa,IAAI,KAAM,EAAGK,EAAE;AAAA,YAClF,KAAK;AACH,qBAAOA;AAAA,YACT,KAAK;AACH,qBAAO,IAAI;AAAA,YACb;AACE,oBAAM,IAAI,MAAM,sBAAsB;AAAA,UAC1C;AAAA,QACF;AAAA,MACF;AAEA,MAAAL,KAAI,GAAG,oBAAoB,SAAWM,IAAI;AAExC,QAAAA,KAAIA,GAAE,QAAQ,UAAU,EAAE,EAAE,QAAQ,UAAU,EAAE;AAEhD,YAAI,CAAE,QAAQ,KAAKA,EAAC,GAAG;AACrB,UAAAA,KAAIA,GAAE,OAAO,GAAG;AAAA,QAClB;AAEA,YAAI,cAAc,oBACd,YAAY,iBACZ,mBAAmBA,GAAE,MAAO,WAAY,GACxC,MAAM,CAAC,GACP;AAGJ,YAAK,iBAAiB,SAAS,GAAI;AACjC,cAAI,WAAW,iBAAiB,CAAC;AAAA,QACnC,OACK;AACH,gBAAM,IAAI,MAAM,gDAAgDA,EAAE;AAAA,QACpE;AAGA,QAAAA,KAAIA,GAAE,QAAS,aAAa,EAAG;AAC/B,yBAAiBA,GAAE,MAAO,SAAU;AAEpC,YAAI,EAAG,kBAAkB,eAAe,SAAS,IAAM;AACrD,gBAAM,IAAI,MAAM,oCAAoCA,EAAC;AAAA,QACvD;AACA,eAAO,eAAgB,CAAE;AAAA,MAC3B;AAGA,MAAAN,KAAI,GAAG,SAAU,WAAU;AAE7B,YAAI,SAAS;AAAA,UAAC,OAAO,SAAS,QAAQ;AAAA,UAAE;AAAA,UACxC,IAAI,CAAC;AAAA,UACL,UAAU,EAAC,SAAQ,GAAE,eAAc,GAAE,KAAI,GAAE,OAAM,GAAE,KAAI,GAAE,KAAI,GAAE,MAAK,GAAE,MAAK,GAAE,KAAI,IAAG,MAAK,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,UAAS,IAAG,WAAU,GAAE,QAAO,EAAC;AAAA,UACvL,YAAY,EAAC,GAAE,SAAQ,GAAE,OAAM,GAAE,KAAI,GAAE,KAAI,GAAE,MAAK,GAAE,MAAK,IAAG,KAAI,IAAG,MAAK,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,SAAQ;AAAA,UAC9I,cAAc,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,CAAC;AAAA,UACpG,eAAe,SAAS,UAAU,QAAO,QAAO,UAAS,IAAG,SAAQ,IAAG,IAAI;AAE3E,gBAAI,KAAK,GAAG,SAAS;AACrB,oBAAQ,SAAS;AAAA,cACjB,KAAK;AAAG,uBAAO,EAAE,MAAO,SAAS,MAAM,GAAG,KAAG,CAAC,EAAE;AAChD;AAAA,cACA,KAAK;AAAE,qBAAK,IAAI,EAAE,MAAM,WAAW,MAAM,GAAG,KAAG,CAAC,GAAG,QAAS,GAAG,KAAG,CAAC,GAAG,QAAQ,GAAG,EAAE,EAAE;AACrF;AAAA,cACA,KAAK;AAAE,qBAAK,IAAI,EAAE,MAAM,MAAM,MAAM,GAAG,KAAG,CAAC,GAAG,OAAO,GAAG,EAAE,EAAE;AAC5D;AAAA,cACA,KAAK;AAAE,qBAAK,IAAI,EAAE,MAAM,OAAO,MAAM,GAAG,KAAG,CAAC,GAAG,OAAO,GAAG,EAAE,EAAE;AAC7D;AAAA,cACA,KAAK;AAAE,qBAAK,IAAI,EAAE,MAAM,MAAM,MAAM,GAAG,KAAG,CAAC,GAAG,OAAO,GAAG,EAAE,EAAE;AAC5D;AAAA,cACA,KAAK;AAAE,qBAAK,IAAI,EAAE,MAAM,OAAO,MAAM,GAAG,KAAG,CAAC,GAAG,OAAO,GAAG,EAAE,EAAE;AAC7D;AAAA,cACA,KAAK;AAAE,qBAAK,IAAI,EAAE,MAAM,MAAM,MAAM,GAAG,KAAG,CAAC,GAAG,OAAO,GAAG,EAAE,EAAE;AAC5D;AAAA,cACA,KAAK;AAAE,qBAAK,IAAI,EAAE,MAAM,OAAO,MAAM,GAAG,KAAG,CAAC,GAAG,OAAO,GAAG,EAAE,EAAE;AAC7D;AAAA,cACA,KAAK;AAAE,qBAAK,IAAI,EAAE,MAAM,OAAO,MAAM,GAAG,KAAG,CAAC,GAAG,OAAO,GAAG,EAAE,EAAE;AAC7D;AAAA,cACA,KAAK;AAAG,qBAAK,IAAI,EAAE,MAAM,MAAM,MAAM,GAAG,KAAG,CAAC,GAAG,OAAO,GAAG,EAAE,EAAE;AAC7D;AAAA,cACA,KAAK;AAAG,qBAAK,IAAI,EAAE,MAAM,OAAO,MAAM,GAAG,KAAG,CAAC,GAAG,OAAO,GAAG,EAAE,EAAE;AAC9D;AAAA,cACA,KAAK;AAAG,qBAAK,IAAI,EAAE,MAAM,SAAS,MAAM,GAAG,KAAG,CAAC,EAAE;AACjD;AAAA,cACA,KAAK;AAAG,qBAAK,IAAI,EAAE,MAAM,MAAM;AAC/B;AAAA,cACA,KAAK;AAAG,qBAAK,IAAI,EAAE,MAAM,OAAO,KAAK,OAAO,MAAM,EAAE;AACpD;AAAA,YACA;AAAA,UACA;AAAA,UACA,OAAO,CAAC,EAAC,GAAE,GAAE,GAAE,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,CAAC,CAAC,EAAC,GAAE,EAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,GAAE,IAAG,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,CAAC,GAAE,EAAE,GAAE,GAAE,CAAC,GAAE,EAAE,GAAE,GAAE,CAAC,GAAE,EAAE,GAAE,GAAE,CAAC,GAAE,EAAE,GAAE,GAAE,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,GAAE,CAAC,GAAE,EAAE,GAAE,GAAE,CAAC,GAAE,EAAE,GAAE,GAAE,CAAC,GAAE,EAAE,GAAE,GAAE,CAAC,GAAE,EAAE,GAAE,GAAE,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,GAAE,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,IAAG,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,IAAG,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,IAAG,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,IAAG,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,IAAG,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,IAAG,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,IAAG,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,IAAG,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,IAAG,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,IAAG,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,EAAE,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,CAAC,GAAE,EAAE,GAAE,GAAE,CAAC,GAAE,EAAE,GAAE,GAAE,CAAC,GAAE,EAAE,GAAE,GAAE,CAAC,GAAE,EAAE,GAAE,GAAE,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,GAAE,CAAC,GAAE,EAAE,GAAE,GAAE,CAAC,GAAE,EAAE,GAAE,GAAE,CAAC,GAAE,EAAE,GAAE,GAAE,CAAC,GAAE,EAAE,GAAE,GAAE,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,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A,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EAC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",
"names": ["undefined", "v", "n", "trim", "i", "x", "add", "a", "b", "r", "base", "sum", "l", "difference", "j", "y", "d", "c", "l2", "q", "self", "_2", "t", "p", "e", "split", "isValid", "max", "min", "_", "i", "l", "Jed", "i18n", "x", "k", "match", "n", "p", "hash", "self", "table", "a", "r", "lexer", "c", "object", "Symbol", "Symbol", "e", "Symbol", "object", "isObject", "isObject", "isFunction", "e", "isFunction", "isObject", "getValue", "object", "getValue", "object", "array", "Map", "Map", "map", "cache", "cache", "string", "match", "number", "array", "Symbol", "symbolToString", "toString", "toString", "object", "object", "has", "object", "e", "object", "object", "n", "Buffer", "e", "object", "isFunction", "object", "object", "Map", "array", "cache", "array", "othValue", "Uint8Array", "map", "set", "Symbol", "Uint8Array", "object", "convert", "array", "object", "array", "object", "object", "object", "DataView", "Promise", "Set", "WeakMap", "DataView", "Map", "Promise", "Set", "WeakMap", "object", "object", "isObject", "object", "object", "object", "object", "object", "object", "object", "object", "object", "object", "mapValues", "object", "split", "getter", "forEach", "array", "object", "toString", "string", "string", "string", "string", "toString", "string", "string", "snakeCase", "array", "array", "string", "string", "string", "string", "toString", "string", "toString", "string", "camelCase", "mapKeys", "object", "toposort", "i", "e", "qrcode", "r", "c", "i", "j", "typeNumber", "errorCorrectionLevel", "x", "y", "s", "r2", "p", "b", "unicodeMap", "b2", "b3", "k", "v", "d", "a", "n", "_num", "e", "num", "_this", "data", "stringToBytes", "encode", "decode", "table", "slice", "options", "vnodeId", "isValidElement", "rerenderQueue", "prevDebounce", "i", "EMPTY_OBJ", "EMPTY_ARR", "IS_NON_DIMENSIONAL", "assign", "obj", "props", "removeNode", "node", "parentNode", "removeChild", "createElement", "type", "children", "key", "ref", "normalizedProps", "arguments", "length", "call", "defaultProps", "createVNode", "original", "vnode", "__k", "__", "__b", "__e", "__d", "__c", "__h", "constructor", "__v", "Fragment", "props", "children", "Component", "context", "this", "getDomSibling", "vnode", "childIndex", "__", "__k", "indexOf", "sibling", "length", "__e", "type", "updateParentDomPointers", "i", "child", "__c", "base", "enqueueRender", "c", "__d", "rerenderQueue", "push", "process", "prevDebounce", "options", "debounceRendering", "setTimeout", "queue", "__r", "sort", "a", "b", "__v", "__b", "some", "component", "commitQueue", "oldVNode", "oldDom", "parentDom", "__P", "assign", "diff", "ownerSVGElement", "__h", "commitRoot", "diffChildren", "renderResult", "newParentVNode", "oldParentVNode", "globalContext", "isSvg", "excessDomChildren", "isHydrating", "j", "childVNode", "newDom", "firstChildDom", "refs", "oldChildren", "EMPTY_ARR", "oldChildrenLength", "createVNode", "Array", "isArray", "key", "ref", "EMPTY_OBJ", "reorderChildren", "placeChild", "parentNode", "unmount", "applyRef", "tmp", "toChildArray", "out", "nextDom", "sibDom", "outer", "appendChild", "nextSibling", "insertBefore", "diffProps", "dom", "newProps", "oldProps", "hydrate", "setProperty", "setStyle", "style", "value", "IS_NON_DIMENSIONAL", "test", "name", "oldValue", "useCapture", "o", "cssText", "replace", "toLowerCase", "slice", "l", "addEventListener", "eventProxyCapture", "eventProxy", "removeEventListener", "e", "removeAttribute", "setAttribute", "event", "newVNode", "isNew", "oldState", "snapshot", "clearProcessingException", "provider", "componentContext", "renderHook", "count", "newType", "constructor", "contextType", "__E", "prototype", "render", "doRender", "sub", "state", "_sb", "__s", "getDerivedStateFromProps", "componentWillMount", "componentDidMount", "componentWillReceiveProps", "shouldComponentUpdate", "forEach", "componentWillUpdate", "componentDidUpdate", "getChildContext", "getSnapshotBeforeUpdate", "diffElementNodes", "diffed", "root", "cb", "call", "oldHtml", "newHtml", "nodeType", "localName", "document", "createTextNode", "createElementNS", "createElement", "is", "data", "childNodes", "dangerouslySetInnerHTML", "attributes", "__html", "innerHTML", "removeNode", "checked", "current", "parentVNode", "skipRemove", "r", "componentWillUnmount", "replaceNode", "firstChild", "cloneElement", "vnode", "props", "children", "key", "ref", "i", "normalizedProps", "assign", "arguments", "length", "slice", "call", "createVNode", "type", "createContext", "defaultValue", "contextId", "context", "__c", "__", "Consumer", "contextValue", "Provider", "subs", "ctx", "this", "getChildContext", "shouldComponentUpdate", "_props", "value", "some", "enqueueRender", "sub", "c", "push", "old", "componentWillUnmount", "splice", "indexOf", "contextType", "EMPTY_ARR", "options", "__e", "error", "oldVNode", "errorInfo", "component", "ctor", "handled", "constructor", "getDerivedStateFromError", "setState", "__d", "componentDidCatch", "__E", "e", "vnodeId", "isValidElement", "Component", "prototype", "update", "callback", "s", "__s", "state", "__v", "_sb", "forceUpdate", "render", "Fragment", "rerenderQueue", "process", "__r", "currentIndex", "currentComponent", "previousComponent", "prevRaf", "currentHook", "afterPaintEffects", "EMPTY", "oldBeforeDiff", "options", "oldBeforeRender", "oldAfterDiff", "diffed", "oldCommit", "__c", "oldBeforeUnmount", "unmount", "getHookState", "index", "type", "__h", "hooks", "__H", "__", "length", "push", "__V", "useState", "initialState", "useReducer", "invokeOrReturn", "reducer", "init", "hookState", "_reducer", "action", "currentValue", "__N", "nextValue", "setState", "_hasScuFromHooks", "prevScu", "shouldComponentUpdate", "p", "s", "c", "stateHooks", "filter", "x", "every", "call", "this", "shouldUpdate", "forEach", "hookItem", "props", "useEffect", "callback", "args", "state", "__s", "argsChanged", "_pendingArgs", "useLayoutEffect", "useRef", "initialValue", "useMemo", "current", "useMemo", "factory", "args", "state", "getHookState", "currentIndex", "argsChanged", "__V", "_pendingArgs", "__h", "useCallback", "callback", "currentHook", "useContext", "context", "provider", "currentComponent", "__c", "c", "__", "sub", "props", "value", "useDebugValue", "formatter", "options", "flushAfterPaintEffects", "component", "afterPaintEffects", "shift", "__H", "forEach", "invokeCleanup", "invokeEffect", "__h", "e", "options", "__e", "__b", "vnode", "currentComponent", "oldBeforeDiff", "oldBeforeRender", "currentIndex", "hooks", "__c", "previousComponent", "__", "hookItem", "__N", "EMPTY", "_pendingArgs", "diffed", "oldAfterDiff", "c", "length", "push", "prevRaf", "requestAnimationFrame", "afterNextFrame", "__V", "commitQueue", "some", "filter", "cb", "__v", "oldCommit", "unmount", "oldBeforeUnmount", "hasErrored", "s", "HAS_RAF", "callback", "raf", "done", "clearTimeout", "timeout", "cancelAnimationFrame", "setTimeout", "hook", "comp", "cleanup", "argsChanged", "oldArgs", "newArgs", "arg", "index", "invokeOrReturn", "f", "r", "i", "x", "n", "I", "h", "l", "y", "d", "x", "y", "r", "a", "i", "o", "v", "c", "p", "q", "b", "t", "n", "j", "m", "d", "A", "M", "t2", "t3", "t22", "b2", "b3", "b4", "m", "n", "i", "j", "h", "l", "a", "b", "c", "d", "x", "r", "p", "q", "e", "f", "g", "t", "M", "A", "s", "L", "r", "x", "i", "j", "k", "r", "p", "q", "t", "M", "A", "I", "s", "m", "n", "i", "t", "h", "p", "q", "i", "n", "b", "h", "x", "z", "i", "o", "y", "m", "n", "h", "r", "j", "p", "x", "n", "i", "v", "TalerErrorCode", "c", "p", "x", "c", "x", "c", "x", "c", "e", "x", "a", "b", "n", "r", "s", "r2", "e", "a2", "x2", "i", "BackupOperationStatus", "BackupWgType", "BackupCoinSourceType", "BackupRefreshReason", "BackupRefundState", "BackupProposalStatus", "array", "string", "counter", "k", "i", "n", "j", "w", "t", "m", "q", "string", "p", "i", "c", "a", "b", "R", "n", "counter", "number", "e", "base", "res", "v", "URLSearchParams", "e", "s", "i", "s2", "LibtoolVersion", "v", "NotificationType", "K", "w", "v", "p", "a", "b", "c", "d", "e", "f", "g", "h", "u", "i", "j", "t2", "h", "blockSize", "k", "i", "b2", "TalerProtocolTimestamp", "now", "s", "t2", "Duration", "now", "s", "i", "d2", "n", "d", "AbsoluteTime", "t2", "difference", "t", "at", "_a", "DenomKeyType", "t", "DenominationPubKey", "p2", "_a", "ExchangeProtocolVersion", "MerchantProtocolVersion", "LogLevel", "e", "_a", "location", "n", "a", "d", "v", "N", "i", "j", "s", "c", "p", "hash", "d", "n", "TalerSignaturePurpose", "c", "p", "x", "bigint", "Edx25519", "L", "a", "AgeRestriction", "m", "i", "c2", "k2", "d", "ContractFormatTag", "decode", "encode", "p", "i", "d", "encode", "decode", "p", "e", "prefix", "p", "s", "URLSearchParams", "v", "k", "ReserveTransactionType", "TalerUriType", "ExtendedStatus", "TransactionType", "WithdrawalType", "PaymentStatus", "ScopeType", "CoinStatus", "ConfirmPayResultType", "PreparePayResultType", "RefreshReason", "ExchangeTosStatus", "ExchangeEntryStatus", "RecoveryMergeStrategy", "AttentionPriority", "AttentionType", "logger", "strings", "s", "i", "c", "i", "x", "n", "c", "s", "fnutil", "f", "x", "HttpStatusCode", "logger", "_a", "CancellationToken", "logger", "ContractTermsUtil", "i", "x", "h", "k", "_a", "e", "hash", "logger", "p", "h", "initial", "ErrorType", "__async", "options", "_a", "error", "d", "q", "Context", "createContext", "initial", "useEffect", "h", "useContext", "p", "e", "isNode", "l", "r", "__async", "hasNext", "const", "EMPTY", "i", "route", "let", "c", "p", "r", "a", "b", "e", "t", "Router", "super", "canRoute", "routeTo", "location", "this", "i", "i", "k", "n", "x", "isProduction", "invariant", "prefix", "hash", "location", "e", "location", "invariant", "encodePath", "decodePath", "path", "history", "a", "b", "encodedPath", "location", "n", "useNotNullLocalStorage", "v", "p", "p", "useNotNullLocalStorage", "t", "T", "p", "c", "i", "k", "url", "token", "q", "assign", "obj", "props", "i", "shallowDiffers", "a", "b", "PureComponent", "p", "this", "props", "PureComponent", "prototype", "Component", "isPureReactComponent", "shouldComponentUpdate", "props", "state", "shallowDiffers", "this", "oldDiffHook", "options", "__b", "vnode", "type", "__f", "ref", "REACT_FORWARD_SYMBOL", "Symbol", "for", "oldCatchError", "options", "__e", "error", "newVNode", "oldVNode", "errorInfo", "then", "component", "vnode", "__c", "__k", "oldUnmount", "unmount", "detachedClone", "detachedParent", "parentDom", "forEach", "effect", "__H", "assign", "__P", "map", "child", "removeOriginal", "originalParent", "__v", "insertBefore", "__d", "Suspense", "this", "__u", "_suspenders", "suspended", "__", "__a", "SuspenseList", "this", "_next", "_map", "options", "unmount", "vnode", "component", "__c", "__R", "__h", "type", "oldUnmount", "Suspense", "prototype", "Component", "promise", "suspendingVNode", "suspendingComponent", "c", "_suspenders", "push", "resolve", "suspended", "__v", "resolved", "onResolved", "onSuspensionComplete", "__u", "state", "__a", "suspendedVNode", "__k", "removeOriginal", "setState", "__b", "pop", "forceUpdate", "wasHydrating", "then", "componentWillUnmount", "render", "props", "detachedParent", "document", "createElement", "detachedComponent", "detachedClone", "__O", "__P", "fallback", "Fragment", "children", "list", "child", "node", "delete", "revealOrder", "size", "length", "SuspenseList", "prototype", "Component", "__a", "child", "list", "this", "delegated", "suspended", "__v", "node", "_map", "get", "unsuspend", "wrappedUnsuspend", "props", "revealOrder", "push", "resolve", "render", "_next", "Map", "children", "toChildArray", "reverse", "i", "length", "set", "componentDidUpdate", "componentDidMount", "_this", "forEach", "REACT_ELEMENT_TYPE", "Symbol", "for", "CAMEL_PROPS", "IS_DOM", "document", "onChangeInputType", "type", "test", "Component", "prototype", "isReactComponent", "forEach", "key", "Object", "defineProperty", "configurable", "get", "this", "set", "v", "writable", "value", "oldEventHook", "options", "event", "empty", "isPropagationStopped", "cancelBubble", "isDefaultPrevented", "defaultPrevented", "e", "persist", "nativeEvent", "currentComponent", "classNameDescriptor", "class", "oldVNodeHook", "vnode", "type", "props", "normalizedProps", "nonCustomElement", "indexOf", "i", "IS_DOM", "test", "onChangeInputType", "toLowerCase", "CAMEL_PROPS", "replace", "multiple", "Array", "isArray", "toChildArray", "children", "child", "selected", "defaultValue", "className", "enumerable", "$$typeof", "REACT_ELEMENT_TYPE", "oldBeforeRender", "__r", "__c", "P", "e", "_", "t", "f", "y", "g", "n", "v", "a", "b", "isDate", "h", "s", "cache", "error", "_a", "i", "mutate", "u2", "f2", "q", "p", "T", "k", "info", "_b", "now", "x", "Context", "q", "cache", "mutate", "p", "h", "error", "T", "useSWR", "mutate", "error", "_a", "s", "object", "errors", "e", "q", "errors", "object", "value", "defaultToString", "f", "defaultFromString", "v", "initial", "names", "f", "v", "_a", "error", "e", "i18n", "p", "errors", "k", "p", "error", "_a", "i18n", "Context", "q", "defaultToString", "f", "defaultFromString", "v", "error", "e", "v", "number", "_typeof", "obj", "date", "date", "_typeof", "obj", "add", "date", "date", "date", "_typeof", "obj", "date", "difference", "date", "date", "date", "difference", "difference", "MILLISECONDS_IN_DAY", "date", "difference", "date", "date", "date", "date", "defaultOptions", "date", "date", "defaultOptions", "defaultOptions", "date", "MILLISECONDS_IN_WEEK", "date", "number", "y", "date", "M", "d", "a", "h", "H", "m", "s", "S", "formatters", "G", "date", "localize", "y", "Y", "u", "Q", "q", "M", "L", "w", "I", "d", "D", "e", "c", "i", "a", "b", "B", "h", "H", "K", "k", "m", "s", "S", "X", "x", "O", "z", "t", "T", "delimiter", "dateLongFormatter", "formatLong", "timeLongFormatter", "dateTimeLongFormatter", "format", "formatDistance", "format", "formatRelative", "ordinalNumber", "number", "string", "object", "array", "string", "valueCallback", "defaultOptions", "locale", "defaultOptions", "locale", "format", "delimiter", "m", "add", "date", "date", "i18n", "initial", "p", "e", "n", "p", "i18n", "error", "name", "value", "v", "f", "readField", "object", "p", "error", "_", "i18n", "p", "_a", "e", "f", "b", "i18n", "v", "v", "defaultToString", "f", "convert", "defaultToString", "error", "e", "v", "i", "i18n", "e", "code", "number", "_a", "p", "errors", "k", "T", "x", "v", "i", "f", "s", "i18n", "_a", "p", "i18n", "errors", "k", "p", "i18n", "d", "error", "p", "h", "i18n", "e", "i", "p", "i18n", "i", "p", "i18n", "error", "i18n", "EmptyTable", "e", "i", "useSWR", "error", "p", "h", "useSWR", "mutate", "r", "p", "d", "_a", "error", "f", "v", "error", "c", "e", "date", "i", "p", "i18n", "error", "d", "InputNumber", "v", "p", "errors", "i18n", "p", "errors", "i18n", "v", "InputNumber", "map", "_", "i", "value", "result", "has", "options", "base", "_extends", "i", "_", "errors", "i", "prefix", "_extends", "i", "mapValues", "error", "import_property_expr", "e", "_extends", "i", "base", "v", "schema", "value", "s", "n", "c", "create", "v", "create", "isNaN", "create", "date", "i", "k", "isDate", "create", "v", "import_has", "import_mapValues", "import_property_expr", "import_has", "import_property_expr", "a", "b", "has", "toposort", "findIndex", "a", "b", "_extends", "i", "v", "has", "errors", "_", "mapKeys", "camelCase", "snakeCase", "base", "mapValues", "create", "_extends", "i", "create", "v", "errors", "path", "_", "a", "base", "p", "v", "e", "create", "p", "d", "p", "errors", "k", "T", "i18n", "v", "i", "f", "p", "h", "i18n", "initial", "errors", "T", "k", "InputNumber", "ProductList", "i18n", "a", "i", "a", "b", "r", "with_defaults", "add", "stringIsValidJSON", "e", "CreatePage", "_a", "p", "i18n", "errors", "k", "v", "h", "ProductList", "InputNumber", "p", "CreatePage", "error", "error", "CardTable", "p", "i18n", "Table", "o", "EmptyTable", "i", "r", "c", "errors", "k", "d", "e", "a", "b", "p", "h", "i", "i18n", "_a", "p", "ProductList", "e", "w", "p", "i18n", "error", "ListPage", "i18n", "p", "e", "CardTable", "p", "date", "i18n", "e", "ListPage", "o", "error", "error", "errors", "p", "i18n", "s", "InputNumber", "ProductForm", "initial", "p", "errors", "k", "T", "h", "i18n", "InputNumber", "CreatePage", "i18n", "ProductForm", "p", "i18n", "CreatePage", "error", "CardTable", "p", "i18n", "Table", "EmptyTable", "i", "r", "errors", "k", "InputNumber", "c", "ProductList", "p", "i18n", "CardTable", "error", "i18n", "ProductForm", "p", "i18n", "error", "useSWR", "mutate", "error", "_", "h", "qrcode", "CreatedSuccessfully", "p", "i18n", "i18n", "p", "h", "errors", "k", "r", "wireMethods", "a", "match", "CreatePage", "p", "i18n", "CreatedSuccessfully", "CreatePage", "r", "error", "DetailPage", "i18n", "p", "Table", "EmptyTable", "t", "i", "DetailPage", "CreatedSuccessfully", "p", "i18n", "errors", "k", "CreatedSuccessfully", "CardTable", "i18n", "Table", "EmptyTable", "i", "p", "i18n", "error", "CardTable", "r", "o", "useSWR", "p", "h", "error", "d", "encTable", "d", "v", "CreatePage", "i18n", "p", "errors", "k", "InputNumber", "v", "e", "s", "p", "i18n", "CreatePage", "error", "i18n", "p", "errors", "k", "p", "i18n", "error", "_a", "i18n", "p", "errors", "k", "p", "CardTable", "p", "i18n", "Table", "EmptyTable", "Table", "i18n", "i", "EmptyTable", "ListPage", "i18n", "CardTable", "o", "p", "i18n", "ListPage", "e", "error", "algorithms", "algorithmsNames", "UpdatePage", "i18n", "p", "errors", "k", "InputNumber", "v", "e", "s", "p", "i18n", "UpdatePage", "error", "useSWR", "p", "h", "error", "CreatePage", "i18n", "p", "errors", "k", "p", "i18n", "CreatePage", "error", "CardTable", "p", "i18n", "Table", "d", "EmptyTable", "Table", "i18n", "i", "EmptyTable", "ListPage", "i18n", "CardTable", "o", "p", "i18n", "ListPage", "e", "error", "validMethod", "UpdatePage", "i18n", "p", "errors", "k", "p", "i18n", "UpdatePage", "error", "useSWR", "p", "h", "CreatePage", "i18n", "p", "errors", "k", "CreateTransfer", "p", "i18n", "a", "CreatePage", "error", "CardTable", "p", "i18n", "Table", "EmptyTable", "Table", "i18n", "i", "EmptyTable", "ListPage", "i18n", "CardTable", "o", "p", "s", "a", "ListPage", "v", "_a", "a", "t", "match", "UpdatePage", "token", "value", "p", "i18n", "errors", "k", "Update", "p", "i18n", "UpdatePage", "d", "error", "getTokenValuePart", "t", "match", "r", "s", "p", "i18n", "e", "noop", "_", "T", "i18n", "p", "h", "token", "error", "_a", "e", "id", "Update", "noop", "ProductList", "CreateTransfer", "_b", "s", "p", "l", "e", "i18n", "e", "h", "p", "e", "n", "i18n", "match", "history", "p", "_a", "i18n"]
}